Mosfet output does not match the pwm duty cycle

Hi guys I am trying to build an h-bridge for my robot
I want to be able to control the motor's speed through arduino pwm
the problem is I am using mosfets and because of the gate capacitance the output of the bridge does not match the duty cycle from the input
my first iteration was driving the mosfet with tip-127 bjt transistor connected to another tip-122 bjt transistor which is connected to arduino pwm through 10k ohm resistor but I had to reduce the frequency of the pwm to 30hz to get the right output
I tried using tc4424 gate driver but still had to reduce the frequency
the problem with reducing the frequency is the motor is vibrating a lot
what can I do to fix this issue
I am using IRFZ44N Mosfet for the pwm

Use an IRLZ... MOSFET instead.

For further assistance please show a circuit diagram of your motor driver.

If you could not drive an IRFZ44N with a TC4424 with PWM in the kHz range then you are doing something wrong
What gate voltage are you using?
If you show your schematic maybe someone can help

as I saw in the data sheet the irlz44n has higher gate capacitance than the irfz44n wouldn't that make things worse

12v for the gate voltage this is the schematic for the test I was doing

I am measuring the output between the drain and vcc

It's missing the motor and snubber.

with or without a load?

You need a load connected between the drain and Vcc.
Try a 22 ohm 10W resistor

it's just for the speed control part of the driver the h-bridge itself is working fine

without load

why though, shouldn't a DMM show me kind of what the motor should see?

The DMM is just going to average the voltage and is not fast enough to work in the kHz range, 30-60 Hz at most.
You need an oscilloscope to see the actual waveform, with a load.
Your circuit may actually be working correctly

I will test it tomorrow on the motor to see if it's changing speed or not.
unfortunately I don't have access to an oscilloscope so I can't check the waveform
I thought it should work with a DMM because when I am testing a bts7960 driver the output can be measured with a DMM and it matches the duty cycle of the input with the same frequency of the arduino

That is a half bridge driver , which is not the same as a single MOSFET. You may well see a voltage on the DMM that represints the duty cycle but it won't be accutate in the kHz range.
If you connect a load to your MOSFET circuit you may see a voltage closer to what you are expecting.
Try a 100 ohm 2W resistor.

Update :
I tried the circuit on the motor
My motor is 1000rpm
On 100% duty cycle it was running 1000rpm
50% duty cycle it was running 900rpm
25% duty cycle it was running 600rpm
So the circuit is definitely not working properly

You definitely should know that motor speed is not proportional to the PWM duty cycle. For controllable motor speed some motion feedback and a PID controller is required.

I am pretty sure it is proportional
The pwm duty cycle controls the average output voltage and motor speed is proportional to the voltage on its input

In which world are your living? :frowning:

Please learn some basics about DC motors before you search your problems in the wrong place and waste the time of the kind helpers in this forum.

I tested the motor with varying voltage and it was linear
Also we had a subject in college about dc motors and we studied that the speed was proportional to voltage

https://electronics.stackexchange.com/questions/283947/dc-motor-speed-vs-pwm-duty-cycle
xryG6

1 Like

That is approximately the case if there is no load on the motor and steady state DC voltage from a very low impedance power supply.

It is not true for PWM control, as the plot in post #19 above suggests.

Here is a more representative collection, from Characterizing a DC motor

1 Like