0
\$\begingroup\$

I am a software engineer by trade and an electronic hobbyist, so please be gentle :)

I am using a FQPF5N60C N-Channel MOSFET to switch on a 12v motor using a Raspberry Pi.

The spec shows VGSth at 2 - 4v and I am feeding 4.47v into the gate and the MOSFET indeed turns on, but .. it seems to be quite restricted by current resulting with the motor turning very softly (compared to when the motor is connected directly).

Any idea what I am doing wrong?

Thanks!

EDIT: added schematic

schematic

\$\endgroup\$
2
  • \$\begingroup\$ You are loading the GPIO4 with the BE junction of 2N3904! I don't know if the Pi has a built-in series resistor at that pin but do not ever do that. You might have even burnt the pin's buffer. Place a series resistor (1k or so) between the pin and the base of the transistor. Besides, 2N3906 is a PNP so you may need to update your schematic as it leads to misunderstandings. \$\endgroup\$ Commented May 20, 2020 at 11:59
  • \$\begingroup\$ Thanks @RohatKılıç, I have actually burnt that pin :( At least now I know why! I have seen people do that in other schematics but never really understood the purpose of that resistor, so now that makes sense. You are right the icon in the schematic is incorrect (I swapped the NPN and PNP) but I am using the right transistors and the pins are the same for both 904 and 906. \$\endgroup\$
    – Speedy
    Commented May 20, 2020 at 12:08

1 Answer 1

3
\$\begingroup\$

The Rds(on) is only guaranteed with 10V drive so the 3.3V the Raspberry Pi can output is nowhere near enough (and neither is the 4.47V), also that's a high-voltage (600V) MOSFET which isn't really well suited to switching a low voltage 12V motor. For the same die size/cost you get much much lower Rds(on) by using a MOSFET with a lower maximum Vds, so usually you do not want to over-rate the Vds by too large a margin.

Get a logic-level MOSFET rated for maximum Rds(on) with 3.3V or less drive (and be sure to put a diode across the motor). For example this one.

Edit: the Vgs(th) is better used as an indication of when the MOSFET is almost fully "off" rather than "on". In the case of your datasheet, it's only conducting 250uA with (as much as) 4V in.

Edit': Your drive circuit is okay, except you should have a series base resistor on the NPN (eg. 1K).

You can simply move R3/2N3906 emitter connection from +5 to +12 and you'll get sufficient drive voltage for that MOSFET or other more appropriate ones. There's no unusual danger to the Pi if nothing mechanically shorts.

That particular MOSFET is still not great (2.5 ohms when cold, so maybe 3-4 ohms hot), so you can work out the voltage drop from your motor current draw. With 12V drive you could use a much better through-hole part like a IRFB7437PBF with 1200 times lower voltage drop.

Don't forget the diode across the motor.

\$\endgroup\$
5
  • \$\begingroup\$ I'm using the 3.3V from the pi to feed into a 2N3904->2N3906 to switch the MOSFET with the pi input voltage of 5V (4.47V to be accurate). This might sound like a silly question but can I feed the 2N3906 12V rather than the Raspberry PI 5V? Or is there any risk for the 12V to back feed into the pi? \$\endgroup\$
    – Speedy
    Commented May 20, 2020 at 11:33
  • 1
    \$\begingroup\$ It would be better to supply a schematic of your drive circuit, in your question. \$\endgroup\$ Commented May 20, 2020 at 11:38
  • 1
    \$\begingroup\$ Thanks for your help, just added a schematic \$\endgroup\$
    – Speedy
    Commented May 20, 2020 at 11:50
  • \$\begingroup\$ The MOSFET you suggested (IRFB7437PBF) also has Rds(on) of 10V so that would put me in the same spot. The best next thing (at a nearby shop) is the MTP3055VL which is a logic level as you originally suggested. It has Rds(on) of 5V, although higher resistance (and it's relatively cheap!). What do you think? \$\endgroup\$
    – Speedy
    Commented May 20, 2020 at 15:17
  • \$\begingroup\$ Much better than the original. \$\endgroup\$ Commented May 20, 2020 at 15:20

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.