I want to control a 12V heater coil with 5KHz 5V PWM using the below circuit, but the load voltage does not goes higher than 5V. I made a similar circuit with a MOSFET and the result does not changed. What's wrong with my circuit? How can I fix it?
Drive 12V load with 5V PWM
pwm
Related Solutions
Ditch R1. Yes, 0.001\$\Omega\$ resistors exist, but what would you do with it? At 2A it will drop 2mV. The collector current is defined by the base current, there's no need to limit it this way (if that would have been the purpose).
You don't necessarily need a MOSFET to switch 2A, but if you use a BJT it will probably have to be a Darlington. OTOH a MOSFET is much faster than a BJT, so better suited for PWM work.
Then the flyback diode. It's wrong polarized, but you mention that in the question, so I won't say anything about that.
If the solenoid is a 24V/2A type its resistance will be 12\$\Omega\$, not 5.6.
I missed the line that says you'll be driving it from a microcontroller. The following assumes you drive it from 24V, like in the schematic. Later I'll make a note about the microcontroller.
Then R2. Assuming a solenoid of 12\$\Omega\$, and an \$H_{FE}\$ for your Darlington of 100, then from the base this will look as a 1200\$\Omega\$ resistance. You'll need 20mA of base current. With a voltage of 22V (24V minus a couple BE junctions) that would mean you should have maximum 1100\$\Omega\$ for R2 + \$H_{FE}\$ \$\times\$R3. So even without R2 you won't get the 2A. You'll need a transistor with a higher \$H_{FE}\$.
But even then R2 won't be necessary. With an \$H_{FE}\$ of 1000, if the base current would be higher than 2mA the transistor will saturate and the solenoid will limit the collector current to 2A.
Important notice on the common collector configuration you're using. Even if you would drive it from 24V the emitter voltage won't be 24V, but 22V. The base voltage will be 24V maximum, and if it would drive the emitter higher than 24V minus 2 BE junctions there wouldn't be no current anymore.
If you drive it from a 5V microcontroller the emitter voltage won't go higher than 3V! Again, if it would be higher there wouldn't flow any base current. You might use a common collector with a 24V input, but not with 5V.
Usually you'll use a common emitter configuration, where the solenoid comes at the place of R1. In that case you'll need R2. If your microcontroller runs at 5V and you're using the KSD1222 (see below), you'll have a voltage drop of 5V - 2V = 3V across R2. You'll need at least 2mA, but let's play safe and give it 10mA. Then R2 should be maximum 3V/10mA = 300\$\Omega\$.
If you want to use a MOSFET the Si2318DS is suitable. It's a 40V FET which can drive 3A at less than 4V \$V_{GS}\$. \$R_{DS(ON)}\$ is 45m\$\Omega\$, so at 2A it will only dissipate 180mW. That sounds safe, but when you're going to PWM this will rise due to switching losses. At 300Hz this will not really be a problem, however.
If you would want to use the Darlington, the KSD1222 is also a 40V type, with \$H_{FE}\$ of minimum 1000. Can drive 3A. But here saturation voltage can be as high as 1.5V. At 2A this means the transistor will dissipate 3W, so you'll need a heatsink. The MOSFET is the better solution.
It's probably not mostly from the inductance.
More likely, pulling close to 8 Amps from the battery has a significant effect on the battery voltage, and this changes the switching thresholds around the comparator generating the PWM signal.
You probably need to feed the LM393 and R3 from a lower noise supply, either R-C filtered (say 50 ohms and 1000 uf) from the battery, or perhaps better, from a 5V LDO regulator (with decoupling).
You can keep the pullup resistor R1 connected to the full battery voltage to turn on the FET as hard as possible, even with the LM393 supplied from 5V.
And as the voltage peaks exceed the battery voltage, inductance must be having some effect so the flyback diode is definitely recommended.
Best Answer
Your BJT is an emitter follower - it can't have voltage gain greater than than 1 hence your 5V input produces an output that cannot be greater than 5V.
Think about how an NPN BJT works - the base has to have a voltage slightly greater than the emitter to cause collector current to flow. This means that the emitter voltage MUST be slightly less voltage than the base hence you'd probably get about 4 to 4.5 volts p-p at the emitter for 5Vp-p at the base.
If you want to switch a load connected to 12 volts, put the load in the collector and connect emitter to 0V/GND. This will also work for a MOSFET powering a heater coil. I take it the heater coil is purely resistive - if not then a slight modification may be needed.
If you definitely need a ground-tied load then consider this as an option: -
It should be OK for 5kHz PWM - if it were >50kHz I'd want to analyse it in more detail to see what the switching losses would be like.