Controlling the speed of a DC motor.... but using PMOS

So.. here's my problem.

I need to make a board to control the speed of a DC motor, but i must use PMOS because one wire of the motor is connected to the body of the motor itself and must stay at GND level, otherwise if something touches the body of the motor it will get zapped, so NMOS is out of the question.

Now... in this link i found a partial solution:

and I say partial because this system is at 12V and VGS max is bigger than the supply... mine isn't... so linking the gate to GND will blow the FET in my case.

my approach on this issue was to replace the diode with a zener of 30V to keep VGS at 48-30 = 18V under the source voltage... and the board kinda works, it's just that at minimum pwm duty cycle i get 28V output already and at about 60% i am at 47.5V...
even after all this the FET doesn't overheat not even a tiny bit.

here's the schematics


On the left is where the pwm comes from, and on the right is the output for the gate of the FET.

I'm using an ATMega48PA at 8MHz, Timer0, PWM prescaler 1 (pwm frequency about 31.25KHz).
The Mega is on a breadboard and the wires to the board with the FET + circuit above is 10cm long.
the PMOS is a F5210S, instead of the 2x BC337 i used BC817.

another take on this issue i saw is the TMOS high side driver from NXP, the MC33198... but as i can see it is out of stock and out of production... if this is the right IC... is there a similar alternative?

But, if you want to change the rotation of the motor, you must reverse the + and - power. Do you have that figured out so the motor rotates in the direction you want?

i dont need to change the direction... only the speed, so a single PMOS will suffice

Use a circuit similar to E4 or G4

Ok. Is the motor frame insulated from the commercial power ground, etc?

just a little question about both setups... but doesn't the 10k resistances slow down the switching time of the FET with the risk of overheating it?

I'm looking at a maximum current of about 20A to the motor, and the gate capacitance of my FET is about 2800pF

the motor minus cable and body must stay connected at GND, and i mean the yellow/green wire :grimacing:

If you detect a problem like this, use 1k resistors.

yeah but 1kohm, if we keep VGS at 18V, will dissipate 0.9W because it will see 48V - zener 18V, so 30V (30/1000 = 30mA, 1000 * 30 * 30 = 0.9W) :sweat_smile:
isn't this a problem on it's own?

also i dont think it is healthy fo the zener to reverse 30mA (18V * 0.03 = 0.54W)

What is your motor supply voltage ?

How fast will you be turning the motor on ?

i dont think i understood that correctly, but the motor max voltage would be 48V, and i need to modulate that from around 20 to 48V using pwm

if possible up to 62.5KHz pwm

There can be no analog control of the motor, it will either be ON or OFF, that's what PWM does.

Some thoughts:

The BE diode, at least of older transistors, acts as a Z-diode of about 7V. I'd insert a diode in front of the base or emitter of the top transistor to prevent reverse current flowing through the BE diode.

Is the Z-diode fast enough? A scope were nice to check the circuit behavior.

EDIT: This one obviously is wrong with a P channel MOSFET:
The FET is ON by default, i.e. during boot or code upload or Arduino disconnected!
I'd add an inverter (another transistor) in the input line to keep the FET OFF by default.

Your kickback diode rating might be a problem.

well. yeah... i meant figuratively 20V by keeping the duty cycle at 40%

believe it or not, the FET is OFF if no signal is present on the pwm input (or even if i disconnect the wire)

i did have doubts about the zener... is there a particular one that is fast acting?
or better... is there another way to limit VGS to -10/-15/-18V without zener?

1 Like

also tried to lower the pwm frequency by adding a prescaler of 256 (122Hz), but it seems that it changes almost nothing... which is strange...

despicably... i dont have a scope to check things in depth

I do not see any current limiting resistor between 48 volt input and ground.