I'm driving a dc-motor with a BJT turned on and off with a 555 generated PWM signal. Here's the circuit (V1, Rl and L1 simulate the motor):555 pwm, BJT and dc motor schematic

There actual circuit - same parts - is on a breadboard and is running a small 7W dc-motor. I'm using an oscilloscope to look at the voltage across the motor leads. Here's what I get when the motor is running fast (CH1 yellow is on 5V, CH2 cyan is on the BJT's collector and in red is the voltage across the motor leads CH1-CH2):

motor running fast

All seem fine:

  • CH1 is 5V fixed
  • CH2 shows a small VCE sat. when BJT is on and the EMF of the motor acting as generator when the BJT is off
  • the red trace is as expected

Here's what I get when the motor runs slowly:

motor running slow

That doesn't look as good:

  • CH2 shows a much higher VCE sat. when the BJT should be on with pronounced noise/ringin

Is that ok? According to the BD139 datasheet Vce shouldn't be more than 0.5V so something must be wrong here. Maybe the BJT is not fully on? I chose Rb considering the 180mA no-load current listed in the motor datasheet. Should I lower it? Any other hint?


I did some more calculation considering conservative values Imax= 180mA, Voh = 3.3V, hFE = 25, Vbe = 1 V) and got around 300 Ohms for Rb. I tried lowering its value and got much better results with 150 Ohms: I can slow the motor down much more before Vce rises to the point the BJT can't be considered in the saturation area anymore (1 Volt or more).

I gave a look at the current with a 1 Ohm series power resistor and found out that unexpectedly the current is higher when the motor turns slow. That could explain why I get such a bad behavior (BJT not fully on) at lower speeds. Apparently the motor in not running smoothly and current is pulsed with a higher value.

I also tried putting caps to smooth things out with no success. I tried with a 470uF + 100nF across the power supply but the voltage keeps falling when BJT is ON; furthermore putting a small cap across the motor has no effect on the ringing/ripple/noise caused by the motor.

Edit 2:

I tried raising the PWM frequency swapping the 390nF capacitor. With a 3.9nF cap I get a perfectly square signal but even if it seems better I'm not convinced it's a good thing current wise. Reading on textbooks I get something like that with the former cap value:

low frequency PWM

showing the voltage accross the motor and the current sensed with a shunt resistor. Raising the frequency (2kHz) I get something like that:

higher frequency PWM

where the voltage is apparently better but:

  • the diode is alway ON when the BJT is OFF (which I think is bad power wise)
  • the current never reaches its final value (bad for motor performance I guess)

So which one is better?

  • \$\begingroup\$ Is there a reason you are using a BJT instead of a MOSFET? What made you choose the BD139? In your schematic, does V1, RI, and L1 represent your motor? \$\endgroup\$ Commented Feb 22, 2019 at 23:02
  • \$\begingroup\$ I had some BD139 handy and no MOSFETS. V1, L1 and Rl are arbitrarily chosen not the actual values. \$\endgroup\$
    – dodod
    Commented Feb 22, 2019 at 23:07
  • \$\begingroup\$ Just curious, why do you use a voltage source to represent your motor? \$\endgroup\$ Commented Feb 22, 2019 at 23:09
  • 1
    \$\begingroup\$ A 560Ω base resistor is limiting your base current to about 9mA, this sounds far too low for a 7W motor at 5V. Your current gain can be as low as 25 with a BD139, and the 180mA current for your motor is going to be the lowest current it draws. You might try using two BD139s in a darlington configuration. \$\endgroup\$ Commented Feb 22, 2019 at 23:12
  • \$\begingroup\$ Is the motor running slowly because you are loading it more? Then it'll draw MUCH more current (putting it in the linear - not saturated - region with 560R limiting Ib). \$\endgroup\$
    – user16324
    Commented Feb 22, 2019 at 23:20

2 Answers 2


You can reduce Vce from 1.2V (on scope trace) to Vce=Vce(sat)=0.5V max

  • using the datasheet Vce(sat) =0.5V max with Ic/Ib=10 @ Ic=0.5A , do not use hFE.
  • thus change Rb from 560 Ohm to 50 Ohm or so for a load of 5 Ohm on 5V.
    • more accurate KVL measurements can optimize this value.

An hFE beta is used for a linear amplifier that you don't have. You have a saturated switch and the datasheet for most transistors shows a base current that is 1/10th the collector current. Reduce the base resistor value to 150 ohms. Use less than 150 ohms if the motor current is more than 180mA.

Edit. The output of the 555 goes as high as only 3.6V, not 5V and the base end of the base resistor is about 0.8v, not 0V so the 560 ohms base resistor current was only (3.6V - 0.8V)/560 ohms= 5mA, not 9mA and was far too low. 180mA/10= 18mA of base current in (3.6V - 0.8V)/18mA= 155 ohms is needed.

  • \$\begingroup\$ I used the lowest value hFE from the datasheet 25 but you're right I wrongly assumed 555's Voh was 5V. I'll try with a smaller Rb. \$\endgroup\$
    – dodod
    Commented Feb 23, 2019 at 6:38

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.