A famous method for transforming an analog signal into switching PWM signal is done using a class-D amplifier (switching amplifier). However such an amplifier design is complicated and requires lots of components. On the other hand, there are some commercially available power amplifiers such as the LM675, L165. Such ICs are a bit expensive and not widely available for the hobbyist to use.
In this post I will be reviewing DIY analog circuit designs to drive DC motors using BJT power transistors. This requires good knowledge of BJT transistors. If the terms base, collector, emitter, npn, pnp, cut-off, active and saturation regions do not mean anything to you, then maybe you should consider doing a BJT transistor research before continuing to read here.
I will be using a TIP31 npn transistor which has the following characteristics:
- Current gain: hfe=β= 50
- Collector-Emitter saturation voltage : Vce(sat)=1.2V
- Cut-off voltage Vbe(on) = 1.8V [according to the context-this will be called Vbe from now on]
I will be using also TIP32 which is the complimentary pnp transistor of the TIP31.
Common Emitter Configuration
In this configuration we can achieve current control for the motor. Since for a DC motor the torque is proportional to current (T=K*ic where K is a constant that depends on the motor's winding configuration), torque control can be achieve using this circuit. While in active mode, the equation relating ic to Vin can be found (note Vbe = Vbe(on))
Let us understand this model intuitively:
- For Vin<Vbe transistor is in cut-off region and motor is off.
- For Vin>Vbe and Vce>Vce(sat) transistor is in active region, motor torque T is proportional to Vin.
- As we increase Vin, ib increases which means ic increases and Vce decreases.
- For Vin>>Vbe and Vce=Vce(sat):saturation region, motor reaches its maximum torque/speed capacity.
According to the transfer function the steady state relationship between speed and voltage in the case of no load condition is
According to this result, decreasing Rb would cause the speed to go higher. Of course this method has its pros and cons:
- pro: Assuming β is constant we can achieve linear current (torque) control of DC motor
- con: The model is highly dependent on the current gain β (hfe) which varies alot specially for high power BJT (in the case of TIP31 it varies between 10 and 100). Hence the model is non linear!
In order to cancel the effect of β on the system we connect the motor in a common collector configuration. In this configuration, the motor is connected to the emitter of the BJT as shown in the following figure. This configuration is called emitter follower because the voltage on the emitter will always be following that of the input with a voltage drop of Vbe. So the gain of this configuration is a bit less than 1.
In this configuration when the transistor is turned on, Ve=Vb-Vbe. Knowing that ΔV=Vin-Vbe, the relation between the motor current, motor voltage and Vin can be found:
Since T=K*ie and performing the Laplace transform we obtain
Equating the two equations we get the following relation:
The electrical model of the motor gives
Where R and L are the internal resistance and inductance of the motor coils. We are assuming in here that the motor is ideal and the generated EMF constant (K) is equal to that of the torque/current proportionality constant. Combining the electrical model with the previous equations of Ve and ie we obtain the following transfer function
From this transfer function we notice that if we choose Rb = 0 the effect of β on the motor is canceled. The transfer function then becomes
This is exactly the transfer function of a DC motor. However we haven't considered yet the rotation of the motor in both directions (Clockwise CW and counterclockwise CCW)
Class B Push-Pull Amplifier
In order to be able to rotate the motor in both clockwise and counterclockwise directions we should be capable of providing a negative current to the motor. This can be achieved using a push-pull amplifier. A push pull amplifier is a Class B type of amplifier that either drives a positive or a negative current into a load. It consist of a pair of complimentary transistors, in our case NPN and PNP BJT transistors, connected in common collector configuration.
When +Vcc>Vin>Vbe the upper transistor (NPN) is in active region and the lower transistor (PNP) would be in cutoff region. When -Vcc<Vin<-Vbe the lower transisor (PNP) will be in active region and the upper one will be in cutoff. The same theory developed in the previous section can be applied in here.
In order to be able to drive the transistors from a high output impedance source (potentiometer - DAC etc.) we need an impedance matching device. This can be achieved using a UA741 op-amp. The feedback for the op-amp needs to be implemented depending on the gain needed. In our case unity gain is required.
In order to test the class B push-pull amplifier I devised a setup consisting of a DC motor of maximum speed 30RPM connected to a quadrature encoder to measure speed. The data acquisition is accomplished using a dspic30F4012 microcontroller. Running at 120Mhz and 30MIPS this dspic computes the instantaneous velocity and communicates serially with a Matlab code in order to display in real time this velocity. I connected a potentiometer to the input of the amplifier. I would set the pot at a certain voltage and then wait for steady state condition to measure the velocity of the motor.
The amplifier/DC motor/encoder/acquisition setup used for the experimentation |
We notice from this plot that there is a dead zone around 0V. This dead zone is called "crossover distortion" in the literature. This is obviously due to base-emitter voltage necessary for the NPN transistor to be in the active region (in the case of positive Vin) and for the PNP transistor to be in the active region (in the case of negative Vin). In the case of TIP31 and TIP32 this crossover distortion is of about 2Vbe=2*1.8=3.6volts. This is not desirable at all since it provides non-linearity that will cause the frequency response analysis or the closed loop control to fail.
In the following allaboutcircuits.com article a solution for this crossover distortion was suggested which consists of connecting the op-amp with the negative feedback in the following manner
Assuming Vin=ε is the voltage responsible for switching the transistor from the cut-off region to the active region. Considering the case when the transistor is about to switch to the active region, then Vbe=1.8V while Ve is still 0V, hence according to the previous formula
Since the opamp has a very large gain A (about 200000 for ua741), this shows that ε is infinitesimal and very close to zero.
The following plot shows the RPM vs voltage (Vin) curve for the improved Class B push pull amplifier design with opamp feedback as compared to the previous case
I do realize that this design might need improvements and maybe the implementation of a class AB amplifier would have provide a better response, however for my current analog control of a DC motor application the Class B push-pull amplifier turned out to be very useful as it provided an almost linear relation between RPM and voltage. If you have any suggestions or improvements please comment on this post.
References and suggested readings:
- DC Motor and matlab analysis http://www.library.cmu.edu/ctms/ctms/examples/motor/motor.htm
- DC motor's Hbridge and PWM drive http://modularcircuits.tantosonline.com/blog/
- Audio class B push pull amplifier: http://www.allaboutcircuits.com/worksheets/bjtamp_b.html
Excellent post. I want to thank you for this informative read. Keep up your great work.
ReplyDeleteGood explanations !
ReplyDeleteI suspect the still noticeable cross-over distortion is due to the motor. At very low voltages the motor can't be expected to rotate with a linearly proportional speed. It would "stick" until nudged out of that inertia. You can verify this by looking at the output *voltage* which I guess would be quite linear with very little crossover distortion.
Btw, in the last figure the blue line is labelled "No feedback", what you mean to say is "No overall feedback". There is unity feedback (-1) in the first stage and none in the final stage, that is about all. "No feedback" would mean running the whole thing in open loop, the transistors would be turning on and off wildly at random then, nobody would want that!
Thank you for the insight. You are right regarding "No feedback", what I really meant is no overall feedback as in the previous case we had unity feedback on the opamp.
DeleteIt wouldn't be better to use a couple of diode to eliminate the crossover distortion?
ReplyDeleteExcellent Post! I have a question, i want to control a dc motor with the push pull driver you described. My motor max current is 0.5 A @ 6V... What considerationes y must have in the design of the driver? Can I use TIP31-32? Should I use a buffer amplifier?
ReplyDeleteYes I believe TIP31-32 would do the job well! As mentioned in the post, the only reason for the buffer amplifier is to provide enough current to drive the TIPs. If you are driving the system from a POT then its necessary to have the amplifier, if not and you are driving them from a microcontroller or DAC then it's only preferable.
Delete