You are on page 1of 29

Using Transistor as a Switch

December 23, 2008 by rwb, under Electronics.

Most of microcontrollers work within 5 volt environment and the I/O port can only handle current up to 20mA; therefore if we want to attach the microcontrollers I/O port to different voltage level circuit or to drive devices with more than 20mA; we need to use the interface circuit. One of the popular method is to use the Bipolar Junction Transistor (BJT) or we just called it transistor in this tutorial. I have to make clear on this BJT type to differentiate among the other types of transistors family such as FET (Field Effect Transistor), MOSFET (Metal Oxide Semiconductor FET), VMOS (Vertical MOSFET) and UJT (Uni-Junction Transistor). A. The Switch The transistor actually works as a current gainer; any current applied to the base terminal will be multiplied by the current gain factor of the transistor which known as hFE. Therefore transistor can be used as amplifier; any small signal (very small current) applied to the base terminal will be amplified by the factor of hFE and reflected as a collector current on the collector terminal side.

All the transistors have three state of operation: 1. Off state: in this state there is no base current applied or IB = 0.

2. On active state: in this state any changes in IB will cause changes in IC as well or IC = IB x hFE. This type of state is suitable when we use transistor as a signal amplifier because transistor is said is in the linear state. For example if we have a transistor with gain of 100 and we increase the IB from 10uA to 100uA; this will cause the IC to swing from 1000uA to 10000uA (1 mA to 10 mA). 3. On saturate state: in this state any changes in IB will not cause changes in IC anymore (not linear) or we could say IC is nearly constant. We never use this state to run the transistor as a signal amplifier (class A amplifier) because the output signal will be clamped when the transistor is saturate. This is the type of state that we are looking for on this tutorial.

From the picture above we could see the voltage and current condition of transistor on each state; if you notice when transistor is in off state the voltage across collector and emitter terminal is equal to the supplied voltage, this is equivalent to the open circuit and when transistor is in saturate state the collector to emitter voltage is equal or less then 0.2 Volt which is equivalent to the close circuit. Therefore to use transistor as a switch we have to make transistor OFF which equivalent to the logical 0 and SATURATE which is equivalent to the logical 1. One of the famous diagrams that show the transistor operating state is called the transistor static characteristic curve as shown on this following picture:

When we operate transistor as the class A common emitter amplifier usually we choose to bias the transistor (apply voltage on VBE and VCE) in such a way (Q-Point) that IC and VCE (output) will swing to its maximum or minimum value without any distortion (swing into the saturation or cut-off region) when the IB (input) swing to its maximum or minimum value; but when we operate the transistor as switch we intentionally push the transistor into its saturation region to get the lowest possible VCE (i.e. near 0.2 volt) when we need to make the transistor ON (switch ON) and into its cut-off region when we need to make the transistor OFF (switch OFF).

The above diagram show a typical microcontroller interface circuit using NPN transistor; the RB resistor is used to control the current on base terminal that make transistor OFF and ON (saturate); while the RC resistor is the current limiter for the load. if the load operate with the same voltage as the supplied power (Vcc) you can by pass the RC (not use). Notice the diode (also known as the clamp diode) in the inductive load circuit is needed to protect the transistor again the EMF (Electromotive Force) voltage generated by the inductor component when the transistor is switched on and off rapidly, this voltage is oppose the source voltage. The diode will act as a short circuit to the high voltage generated by the inductor component, you can use any general purpose diode with capable on handling minimum 1 A of current such as 1N4001, 1N4002, etc. Ok lets calculate each of the RB and RC value on this following circuit:

On the circuit above we are going to use 2N3904 (the cheap general purpose transistor where you could easily found on your local market) to drive 5 LED from microcontroller port, from the 2N3904 datasheet we get this following information: IC max = 200mA (this is maximum value that will make your transistor smoked, in practical application always use just half of the maximum value mentioned on the datasheet), hFE = 100 to 300, VBE saturate = 0.65 Volt, VCE saturate = 0.2 Volt For most transistor in general we can use VBE = 0.7 Volt (should be saturate) and VCE = 0 Volt. Using the 5 volt power supply (VCC) and assuming VLED = 2 Volt, with each of them consuming 15 mA, we could calculate the RC value using the Ohms law as follow: IC = 5 x 15 mA = 75mA (0.075 A), this current is still far bellow the maximum IC allowed by 2N3904 transistor. RC = (VCC - VLED) / IC = (5 - 2) / 0.075 = 40 Ohm Power Dissipation on the RC resistor will be P = (VCC - VLED) x IC = (5 - 2) x 0.075 = 0.225 Watt Base on the above calculation we could use the nearest higher value available on the market; which is 47 Ohm, 0.5 watt resistor (for heat dissipation usually we use twice of the watt value calculated).

Assuming the hFE minimum is 100; the minimum current required in the transistors base terminal to drive the LED is: IC = hFE x IB IB = IC / hFE = 0.075 / 100 = 0.00075 A (0.75 mA) This current can easily be supplied by most microcontroller I/O port; which is capable to drive up to 20 mA output current. Again by applying the Ohms law we could calculate the RB value as follow: RB = (VPORT - VBE) / IB Assuming the minimum average voltage of microcontroller I/O port (VPORT) with logical 1 is about 4.2 volt (the microcontroller is powered by 5 volt supply): RB = (4.2 - 0.7) / 0.00075 = 4666.66 Ohm Power dissipation on the RC resistor will be P = (VPORT - VBE) x IB = (4.2 - 0.7) x 0.00075 = 0.002625 Watt Base on the result you could use 4K7 Ohm, 0.25 Watt resistor (this is the common resistor which you could easily found on the local market i.e. 0.25 watt and 0.5 watt). Use this RB calculation as your maximum reference value; in the real world most of the transistors hFE is vary and being measured (tested) with different VCE and IC value not to mention different specification even though you use the same transistor type. Therefore the real RB value could be lower than 4K7 if you really want to drive the transistor into its fully saturate mode where the VCE near 0.2 volt.

Now the question is how we determine the exact value? To answer to this question I build this following testing circuit base on the RC and RB calculated value above using the Atmel AVR ATTiny25 microcontroller to blink the five LED:

Note: the reason I used RC = 3150 Ohm because at that time I run out the required 47 Ohm resistor, therefore you could use just single 47 Ohm resistor or if you only have 150 Ohm as I did, you could use them as I did.

Bellow is the C Program that I used to test this circuit:


//*************************************************************************** // File Name : trswitch.c // Version : 1.0 // Description : Transistor as Switch: Simple LED Blinker // Author : RWB // Target : Atmel AVR ATTiny25 Microcontroller // Compiler : AVR-GCC 4.3.0; avr-libc 1.6.2 (WinAVR 20090313) // IDE : Atmel AVR Studio 4.17 // Programmer : Atmel AVRISPmkII // Last Updated : 1 November 2009 //*************************************************************************** #include <avr/io.h> #include <util/delay.h> int main(void) { // Initial I/O DDRB |= (1<<PB3); // Set PB3 as Output, Others as Input PORTB &= ~(1<<PB3); // Reset the PB3 for(;;) { PORTB |= (1<<PB3); _delay_ms(3000); PORTB &= ~(1<<PB3); _delay_ms(1000); } // // // // // Loop Forever Port PB3 High Delay 3 Second Port PB3 Low Delay 1 Second

return 0; } /* EOF: trswitch.c */

// Standard Return Code

The program simply blink all the LED by toggling the AVR ATTiny25 microcontroller PB3 output port high for about 3 second and low for about 1 second and here is the test result when the PB3 port swing to the logical high:

As youve seen from the result there is about 0.4 volt drop on the collector to emitter (VCE) terminal instead of 0 Volt as we assume on the above calculation and the DC current gain is about 58 instead of 100 again as we assume on the above calculation. Now you understand there are tremendous different result between the 2N3904 transistor datasheet and my test circuit, this is because the 2N3904 datasheet is measured using the PWM (Pulse Width Modulation) with period for about 300 us (micro second) and duty cycle for about 2%, the reason to use this very short pulse period method in the measurement is because they dont want to overheat the transistor junction; where this junction heating will vary the transistor hFE measurement significantly. On my test circuit above; I used 3 second to make the 2N3904 transistor ON (saturate, VBE = 0.81 Volt, VCE = 0.4 Volt) and 1second to make it OFF. The other factor that make the test result differ is the various manufacture specification even though we used the same transistor type. Therefore the answer to the above question is; there is no exact value for RC and RB; is depend on your application but it save to use the above method to calculate the RC and RB and then do the circuit prototyping to test your design, next adjust your RC and RB value accordingly. Some calculation suggestion is to use the collector to base current ratio of 10 (regardless of the transistor hFE value) to force the transistor into fully saturate (VCE = 0.2 Volt, as shown on the datasheet above) by using this following formula: IB = IC / hFE = IC / 10 This is what I called a maximum saturate calculation method (also known as worst-case design procedure), again as youve seen from the real test circuit result above even though we drive the VBE more than 0.7 volt, we still get the hFE for about 58 and IB for about 0.88 mA which is useful in the microcontroller application (for more information you could read

Powering Your Microcontrollers Base Project on this blog), therefore for practical application I would suggest; if you want to use this maximum saturate calculation method to determine the base resistor (RB) value, make sure at least you double the calculated value. For example to determine the RB on the test circuit above using this maximum saturate calculation method: IB = IC / hFE = 0.075 / 10 = 0.0075 A (7.5 mA) RB = (4.2 - 0.7) / 0.0075 = 466.66 Ohm By using twice the calculated value you will get 933.32 Ohm, or you could use the 1K Ohm standard resistor. In typical rapid switching transistor application actually we dont drive the transistor into its full saturate state (i.e. VCE = 0.2 Volt), because when the transistor is fully saturate, it tend to have a longer switching time (i.e. from ON to OFF to ON again). The VCE = 0.4 volt as shown on the real test circuit above is already adequate for most switching application, while we could still take advantage of the low transistor base current (i.e. IB = 0.88 mA). You could see this test circuit on the video at the end of this article. B. Driving the Relay Now using the same principal we could easily calculate the RC and RB value on this following circuit:

By using 5 Volt power supply and relay with 5 Volt and 60mA operating current: RC = 0 Ohm (not use, connect relay directly to VCC) IB = IC / hFE = 0.06 A / 100 = 0.0006 A RB = (VPORT - VBE) / IB = (4.2 - 0.7) / 0.0006 = 5833.33 Ohm, use 5K6 Ohm resistor P = (VPORT - VBE) x IB = (4.2 - 0.7) x 0.0006 = 0.0021 watt, use 0.25 Watt resistor C. Increasing the Collector Current What if the load current is more than 1 A, lets say you want to drive a DC motor? Perhaps you will think to use bigger transistor such as 2N3055 power transistor; unfortunately the big power transistor tends to have small hFE mostly less then 20, so its mean we have to supply bigger base current. We know that most microcontrollers I/O port can only supply a current up to 20mA, therefore by using this type of transistor the maximum current that we could achieve in the collector terminal is about 400mA; which is far bellow our expectation. The solution for this situation is to use what known as Darlington pair circuit:

By using the Darlington pair circuit we could combine two transistors; one with high hFE2 factor usually has a low collector current and the one with high collector current usually has a low hFE1factor. This will give you a total hFE of hFE1 x hFE2. In the Darlington pair circuits the VBE will be twice the normal transistor saturated voltage which is about 1.4 Volt. One of the popular ready made Darlington pair transistors on the market is TIP120 (NPN type) which can handle current up to 3 A, and has the hFE minimum of 1000.

Using the same principal weve learned before, we could easily calculate the RB value of the DC motor circuit interface bellow:

By using 5 Volt power supply and DC Motor with 12 Volt and 1 A maximum operating current: RC = 0 Ohm (not use, connect directly to the 12 Volt power) IB = IC / hFE = 1 A / 1000 = 0.001 A RB = (VPORT - VBE) / IB = (4.2 - 1.4) / 0.001 = 2800 Ohm, use 2K7 Ohm resistor P = (VPORT - VBE) x IB = (4.2 - 1.4) x 0.001 = 0.0028 watt, use 0.25 Watt resistor D. The Darlington Transistor Array For more compact version of the Darlington pair transistor you could use the Texas Instrument ULN2803A which is contain 8 Darlington pair transistors with has build in 2K7 base resistor and clamp diode for each Darlington pair transistors. This makes this Darlington transistor array suitable for driving the relay or motor up to 500mA (this is a maximum datasheet value) directly from the microcontroller output.

To increase the output current up to 1 A (2 x 500mA, remember this is a maximum datasheet value, for practical application use just half or 2 x 250 mA) you could simply use two Darlington transistor array connected in parallel, the following is the sample circuit for driving two DC motors using the ULN2803A Darlington transistor array:

Thanks to the build in internal 2K7 base resistor and the two clamp diode, you dont need any external component when using ULN2803A to drive the DC motor from your microcontroller port. The Darlington transistor array ULN2803A could be used to drive up to 50 volt voltage load. E. Isolating your Circuit

Sometimes we need to isolate our microcontroller circuit from the interface circuit especially in the environment that generating a lot of noise which could disturb our microcontroller operation. When we use a relay from the above example, the driver ground is still directly connected to the microcontroller circuit, so there is a change the noises will interfere the microcontroller circuit. To completely isolate the circuit we could use the optocouplers (also called optoissolator) circuit, this circuit will completely isolate your microcontroller from the interface circuit:

The popular optocouplers circuit available on the market is 4N35 which has the hFE of 500 (in the optocouplers terminology this is also known as the transistor static forward current transfer ratio, Texas Instrument SOES021C, measured with infrared LED current = 0) and maximum collector current of 100mA. Differ from the ordinary transistor in the optocouplers we dont use the transistor base terminal for driving the collector current; instead we use the internal infrared LED to transfer the infrared LED light intensity to the phototransitor; based on this infrared LED light intensity the phototransistor will be turned ON or OFF; giving more current to drive this infrared LED will effect more current to flow on the phototransistor collector; This effect is known as the current transfer ratio (CTR). The 100% CTR means that all the current flow on the infrared LED will be transferred 100% to the phototransistor collector. Therefore by driving the internal infrared LED with 15 mA (in the optocouplers terminology this is also known as the input diode static forward current), we could assure that the phototransistor will be in the saturate state (ON), because the minimum current to make the phototransitor on is about 10 mA. The following circuit is use optocoupler to interfacing the relay:

By using 5 Volt power supply and relay with 5 Volt and 60mA operating current: RC = 0 Ohm (not use, connect relay directly to 5 Volt) Idiode = 15 mA (0.015 A), VLED = 2 Volt RB = (VPORT - VLED) / IB = (4.2 - 2) / 0.015 = 146.66 Ohm, use 150 Ohm resistor P = (VPORT - VLED) x IB = (4.2 - 2) x 0.015 = 0.033 watt, use 0.25 Watt resistor If you need to drive more current you could use the Darlington pair circuit above or you could use the high gain Darlington optocopuler such as 4N45 (CTR minimum about 350 %). F. Controlling your DC motor direction Using just one transistor to control the DC motor as the above example; we only can turn the DC motor in one direction if we want to change the direction than we also have to change the DC motor voltage polarity. The other way to work around this condition is to use the relay to switch the DC motors voltage polarity, but using this method means the DC motor will always ON and we can not control the DC motor speed using digital signal or known as the PWM (Pulse Width Modulation). The best and popular way to solve this issue is to use the H-bridge circuit:

When we apply current (IB1) to the TR1 and TR2 transistors, IB2=0 to the TR3 and TR4 transistors, then TR1 and TR4 transistors will be turned ON, TR2 and TR3 will be turned OFF; this will cause the current to start flow through TR1 transistor, passing the DC motor and going into the TR4 transistor (blue color). When we apply current (IB2) to the TR3 and TR4 transistors, IB1=0 to the TR1 and TR2 transistors, then the TR3 and TR2 transistors will be ON while TR1 and TR4 transistors will be turned OFF; this will cause the current to flow through TR3, passing the DC motor in reverse polarity and going into the TR2 transistor (red color). By not applying current to both IB1 and IB2 all the transistors will be turned OFF. Again by applying the Ohms law we could easily calculate the RB1 and RB2 on this following circuit (Updated! Thanks for the nice discussion and correction from the All About Circuits Forum discussion here, in order for this circuit to work you have to put a resistor on each of the TIP 120 Darlington transistors base terminal):

The above H-Bridge circuit use 5 Volt supply and DC motor with 12 Volt and 1 A maximum operating current; assuming the TIP120 Darlington transistor hFE is 1000, the RB1 and RB2 resistors could be calculated as follow: IB = IC / hFE = 1 A / 1000 = 0.001 A, for each of the transistor base current RB1a,b = (VPORT - VBE) / (2 x IB) = (4.2 - 1.4) / 0.002 = 1400 Ohm, use 1K5 Ohm resistor RB2a,b = (VPORT - VBE) / (2 x IB) = (4.2 - 1.4) / 0.002 = 1400 Ohm, use 1K5 Ohm resistor P = (VPORT - VBE) x 2 x IB = (4.2 - 1.4) x 0.002 = 0.0056 watt, use 0.25 Watt resistor for RB1 and RB2 To test the TIP 120 H-Bridge circuit above I used this following circuit using Atmel AVR ATTiny13 microcontroller as shown on this following picture:

Bellow is the C Program that I used to test this circuit:


//*************************************************************************** // File Name : trhbridge.c // Version : 1.0 // Description. : Transistor as Switch: Simple All TIP120 H-Bridge // Author : RWB // Target : Atmel AVR ATTiny13 Microcontroller // Compiler : AVR-GCC 4.3.2; avr-libc 1.6.2 (WinAVR 20090313) // IDE : Atmel AVR Studio 4.17 // Programmer : Atmel AVRISPmkII // Last Updated : 18 June 2010 //*************************************************************************** #include <avr/io.h> #include <util/delay.h> int main(void) { // Initial I/O DDRB |= (1<<PB3)|(1<<PB4); // Set PB3,PB4 as Output, Others as Input PORTB &= ~(1<<PB3); // Reset PB3 (OFF) PORTB &= ~(1<<PB3); // Reset PB4 (OFF) for(;;) { PORTB |= (1<<PB3); _delay_ms(3000); // Loop Forever // Turn ON PB3 // Delay 3 Second

PORTB &= ~(1<<PB3); _delay_ms(2000); PORTB |= (1<<PB4); _delay_ms(3000); PORTB &= ~(1<<PB4); _delay_ms(2000); } return 0; } /* EOF: trhbridge.c */

// // // // // //

Turn OFF PB3 Delay 2 Second Turn ON PB4 Delay 3 Second Turn OFF PB4 Delay 2 Second

// Standard Return Code

One of the advantage using all NPN transistors in the H bridge circuit is the NPN transistor tends to have faster turn on time comparing to the PNP transistor, beside by using the same transistor type we could have similar transistor characteristic in the circuit. You could read more example of using all NPN transistor H-Bridge in H-Bridge Microchip PIC Microcontroller PWM Motor Controller on this blog. Driving the Stepper Motor One type of the brushless electric motor that is designed specifically for digital signal input is called the stepper motor. The stepper motor usually is used when we need to control the precise rotation movement and speed with the open loop control. These advantages make the stepper motor is widely found in many applications such as printers, scanners, disk drives, automotives, CNC machines, toys, and many more. Today the most common used stepper motor types are Unipolar Stepper Motor and Bipolar Stepper Motor. The unipolar stepper motor usually has two windings with a center tap on each of windings, therefore the current could move from the center tap either to the left winding or to the right winding. Usually the unipolar stepper motor comes with 5 or 6 terminal leads. On the other hands the bipolar stepper motor actually is similar to the unipolar type but without the center tap.

Therefore the unipolar stepper motor has advantage of more simple driving circuit over the bipolar stepper motor but has a torque less than the bipolar motor for the same size. The

following circuit uses four BC639 transistors to drive the unipollar stepper using the Atmel AVR ATTiny13 microcontroller to provide the required stepping signal to the unipolar stepper motor:

From the schematic above you could see that each transistor is connected to half windings of the unipolar stepper motor phase. You need to experiment with your own stepper motor to get the right windings connection. Assuming maximum 100 mA unipolar stepper motor current on 5 volt supply, and using minimum BC 639 transistor hFE of 40, we could calculate the RB (the base resistors) as follow: IB = IC / hFE = 100 mA / 40 = 0.0025 A RB = (VPORT - VBE) / IB = (4.2 - 0.7) / 0.0025 = 1400 Ohm, use 1K5 Ohm resistor P = (VPORT - VBE) x IB = (4.2 - 0.7) x 0.0025 = 0.0086 watt, use 0.25 watt resistor Two clamp diodes on each transistor are required because the winding has a center tap. Therefore when one end of winding is high (Vcc) the other end is low (GND) the lower diode will bypass the back EMF (Electromotive Force) voltage that appear on BC 639 transistor collector and emitter terminals. This following is the C code is used for testing the circuit above:
//*************************************************************************** // File Name : upstepper.c

// Version : 1.0 // Description. : Transistor as Switch: Simple Unipolar Stepper // Motor Driver - Full Step Method // Author : RWB // Target : ATTiny13 // Compiler : AVR-GCC 4.3.2; avr-libc 1.6.2 (WinAVR 20090313) // IDE : Atmel AVR Studio 4.17 // Programmer : Atmel AVRISPmkII // Last Updated : 03 Nov 2010 //*************************************************************************** #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> // Unipolar Stepper Motor CW/CCW Stepping Sequence #define MAX_STEP 4 unsigned char cwstep_seq[MAX_STEP]= {0b00000110, 0b00000011, 0b00001001, 0b00001100}; unsigned char ccwstep_seq[MAX_STEP]= {0b00001100, 0b00001001, 0b00000011, 0b00000110}; volatile unsigned char step_index; volatile unsigned int ovftimes; volatile unsigned char status; ISR(TIM0_OVF_vect) { static unsigned int count=1; count++; if (count >= ovftimes) { cli(); // Disable Interrupt // Stepping Output if (status) PORTB = ccwstep_seq[step_index++]; else PORTB = cwstep_seq[step_index++]; if (step_index >= MAX_STEP) step_index=0; count=0; // Reset Count TCNT0=0; // Start counter from 0 sei(); // Enable Interrupt } } int main(void) { // Initial I/O DDRB = 0b00001111; // Set PB0, PB1, PB2, and PB3 as Output, Others as Input PORTB = 0b00000000; // Reset PORTB Output // Set ADCSRA Register on ATTiny13 ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1); ADCSRB = 0b00000000; // Set ADMUX to PB4 (ADC2) ADMUX=0b00000010; // Disable Digital Input on PB4 (ADC2) DIDR0=0b00001000;

// Initial TIMER0 TCCR0A=0b00000000; TCCR0B=(1<<CS01); Clock TCNT0=0; TIMSK0=(1<<TOIE0); step_index=0; ovftimes=10; status=0; sei();

// Timer/Counter 0 Normal Operation // Use prescaller: Clk/8 with 9.6 MHz Internal // Start counter from 0 // Enable Counter Overflow Interrupt // 0 - CW, 1 - CCW // Enable Interrupt

for(;;) { // Loop Forever // Start conversion by setting ADSC on ADCSRA Register ADCSRA |= (1<<ADSC); // wait until convertion complete ADSC=0 -> Complete while (ADCSRA & (1<<ADSC)); // Get the ADC Result ovftimes = ADCW; if (ovftimes > 800) status^=0x01; // Toggle the Direction _delay_ms(50); } return 0; } /* EOF: upstepper.c */

// Standard Return Code

The method to rotate this unipolar stepper motor rotor is known as the full step mode method; in full step mode we always excite two windings at the same time, with the right current sequence we could rotate the stepper motor in 4 repeatable steps. Reversing the step sequences will make the stepper motor to turn into opposite direction. In this tutorial I used NMB-PM20S020 permanent magnet motor where the step required is shown on this following diagram:

You could easily adapt the step sequence to your own unipolar stepper motor by changing both the cwstep_seq (clockwise rotation) and ccwstep_seq (counter clockwise rotation) array variables data in the program. Using the AVR ATTiny13 microcontroller TIMER0 interrupt we could easily supply the required output steps to the stepper motor. I used the ADC (Analog to Digital Conversion) to control the stepper motor step sequence delay as well as to change the rotation direction by adjusting the 10K trimport. For more information about AVR ADC and TIMER0 you could read these blogs articles Analog to Digital Converter AVR C Programming and Working with AVR microcontroller Communication Port Project. You could also replace the BC639 transistor with the Darlington pair transistor array such as ULN2803A from Texas Instrument mention above. Using this Darlington pair transistor array make the unipolar stepper circuit become simpler (less components) because it has the required clamp diode on each Darlington transistor pair and you could take advantage of higher current gainer provided by the Darlington pair transistors. To drive the bipolar stepper motor; each of the two windings will require the H-Bridge circuit similar to the H-Bridge circuit for driving the DC motor mention above. Therefore we need at least 8 transistors to drive the bipolar stepper motor (4 transistors on each windings). By forwarding and reversing the current flow on each winding we could achieve the required steps sequence to drive the bipolar motor.

And by supplying the correct steps sequence logic to IN1, IN2, IN3, IN4, IN5, IN6, IN7, and IN8 input from the microcontroller output port we could make this bipolar stepper motor to rotate. The opposite direction (counter clockwise) rotation could be achieved by reversing the steps sequence (i.e. 4, 3, 2, and 1).

Transistor as a switch
This circuits can help begginers to understand a transistor and use it for their ciruits. i will explain the general working of the transistor as a swithch and finally will give you few ideas of how all i used it. Binary Output with a transistor: 1) Design a circut which allows a PIC processor to drive an LED array. This LED array has the following properties:

Vf @ 80mA = 10.2V ( six red LEDs are placed in series, giving 6 x 1.7V = 10.2V) Assume that the PIC is only capable of driving 10mA at 5V. Step 1. Find a transistor which can withstand 80mA. 110 < hFE < 450 >meaning you can count on a gain of atelast 300 max IC (Sat) = 200mA >meaning this can take 200mA. 80mA is quite small rite. VCE(Sat) = 0.25V >a rough estimate of VCE at saturation VCEO = 45V ->meaning this transistor can take +45V when turned off Step 2: Find a power supply bigger than 10.2V. Arbitrarilly assume a +24 supply. Step 3: Find Rc to limit the current to 80mA RC =( 24V-10.2V-0.25V)/ 80mA = 170 ohms Step 4: Find RB to saturate the transistor. At the lowest gain, to put you just at the point of saturation, Ib = ICE/hfe = 80mA /150 = 534uA ->150 is typical Hfe for BC107B in datasheet* RB = 5V-0.7V/534uA = 32kohm Pick R smaller than this to assure you saturate this stage. Let R = 10k.

In this pic that i got from a random site kindly overlook the ZTX1051A transistor with Hfe>300. i have shown you calculations for BC107. 000000000000000000000000000000000000000000000000000000000000000000000

2) Design a circuit whichuses a single output from the PIC processor, and allows a PIC processor to drive this motor in the clockwise direction at either 0% speed (0V) or 100% speed (+5V). Assume the motor draws 470mA at +5V. Step 1: Pick a transistor. I'll stick with a BC107 because I like this transistor. Step 2: Add the motor to the collector. You don't need a current limiting resistor since the motor's armature resistance and back EMF limit the current to 470mA @ 5V. Step 3: Add RB to saturate the transistor. Worst case, when the gain is minimum (300) and you're just at the point of saturation: IB = ICE/Hfe = 470mA/150 = 3.14mA RB = 5V-0.7V/3.14mA = 5.48kohm Step 4: Just to make sure that you saturate the transistor, make Rb smaller than this. Let RB = 2k.note: The inductance in the motor stores energy in a magnetic field. When the current is turned off (the transistor turns off) the energy in the field has to go somewhere. To save the

transistor, place a diode across the motor to allow the collapsing field to drive current through the diode saving the transistor

again the ZTX1051A is replaced by BC107 and the current at 2k at base resistance is 3.14mA. 000000000000000000000000000000000000000000000000000000000000000000000

3) Design a circuit which can drive the motor forward and in reverse using transistors:This is the transistor version of my ULN2003 H-Bridge You can use the same circuit as before, only add another NPN and two more PNP transistors. The equations work out the same for each transistor: NPN:BC107 OFF: put the input to 0V. This assures that 0A flow through the diode. ON: make RB = 2k to saturate this transistor when 470mA flow though it. IB > 470mA/Hfe = 3.14mA RB < 5V-0.7V/1.57mA = 5.48kohm

Let RB = 2k. PNP: BC177(since I picked a transistor with the same gain (Hfe or b) OFF: put the input to +5V. This assures there is no potential across the base diode and no current flows. ON: Make RB = 2k to saturate this transistor when 470mA flows through it. IB > 470mA/Hfe = 3.14mA RB < 5V-0.7V/3.14mA =5.48k Let RB = 2k

That will do..

You might also like