I'm working on a project where I need to vary the current supplied to a DC fan. I am currently trying to use a BJT as a current amplifier to amplify a low current analog output (0 to 100 mA) to vary the current received by the fan unit at 12 V.

Schematic below.

In short, the circuit below I can get working for a low current fan (nominal 12 V at ~80 mA) but not for the high current equivalent.

My BJT is overheating to the "too hot to touch level". If I wait for the BJT to cool, I can sometimes get this circuit working, but only if I spike the analog voltage up rapidly to the max output. If I slowly ramp it up I'll get a low current draw on the fan (~70 mA) and then nothing.

I have measured a voltage drop of 11.6 V across the BJT consistently.

Fan specifications:

  • 12 V, 640 mA nominal operating current
  • Max of a 900 mA startup current draw before settling to ~600 mA
  • Varying current between 200 and 640 mA

BJT: Is the 2N2222A NPN transistor.

My current schematic:


simulate this circuit – Schematic created using CircuitLab

Any thoughts on a better way to design this circuit or what is causing the problems I'm seeing?

  • \$\begingroup\$ The effective resistance of the fan is about 19 Ohms, no the 26K you show. \$\endgroup\$ Commented Apr 1, 2019 at 1:48
  • 1
    \$\begingroup\$ "I need to vary the current supplied to a DC fan" - Why? \$\endgroup\$ Commented Oct 30, 2020 at 4:27
  • 1
    \$\begingroup\$ "I need to vary the current supplied to a DC fan" - That is not the way to control the speed of a fan. \$\endgroup\$ Commented Jul 19, 2021 at 1:21

2 Answers 2


You're using the BJT to drop significant voltage while passing significant current. The power it dissipates is determined by Watt's Law: \$P=EI\$. A better option would be to use a switching converter. Motors are inductive and can function well with pulsed voltage, so they are often driven with PWM, where pulses of full voltage are used to simulate a lower voltage. When the switch is only driven in hard-ON and hard-OFF modes, it does not dissipate significant power so long as it is chosen to switch quickly enough.

For your circuit, since it has an analog input, a PWM conversion would be accomplished by using a comparator to compare the analog input(scaled with a voltage divider if necessary) to a triangle wave of suitable amplitude and frequency. The output of the comparator is used to control a switch, so that the switch is turned on whenever the reference voltage is higher than the triangle wave. The result in an ideal system looks like this:

Simple triangle wave PWM graph shows a triangle wave overlaid with an analog reference, and a bar graph in the background to show the switch turned on whenever reference is higher than the triangle wave.

The yellow bars represent the times your switch is ON, and the red is a variable analog input voltage and the blue a triangle wave. The graph shows the switch on 60% of the time when the reference voltage is 60% and that the start and end time of the cycle will vary as reference voltage does.

So you can build your own if you're interested (google PWM fan control circuit) or attempt to buy a PWM controller or variable power supply to drive the fan from your output signal.


The fan draws 8W max so at half speed the transistor must dissipate 4W and heatsink is needed, preferably near the fan airflow.

A low-speed PWM might be suitable but may cause audible noise in the fan windings. Start with 100% on and then quickly reduce to desired %PWM level.


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.