PWM Base Line Frequency

Hi guys,

I have been using a PWM to control the speed of a simple DC brushed motor using anologWrite between 0 and 255. However, I need to use a more powerful motor and have found one that seems ideal. However it has an iron-less core and after having a conversation with their technical department, this apparently means that there are a few considerations that need to be made when using this motor with PWM. Specifically the chopper frequency (I think he also referred to this as the base-line frequency) must be above 20KHz in order to avoid deterioration of the brushes. Something about it being a low inductance, low inertia design. Could someone help me to understand what this means please?

Is it possible to set the base line frequency on Arduino to 20KHz and then have full range speed control?

Many thanks,


This make sense, if inductivity is low, freq. should be high to prevent current rising too high. Though link to the motor data sheet would be helpful.

PWM above 20kHz means you need a fast switching H-bridge or you’ll risk melting it. What H-bridge are you thinking of using? What current does the motor take? What’s the winding inductance?

Thanks for your replies.

I'm using the Pololu Dual VNH2SP30 Motor Driver Carrier MD03A which can handle 14A continuously per motor with 30A peak. One of the main features of these particular motors is it's low current rating, 0.696A continuous and 4.81A starting. It has a terminal inductance of 464.0 µH.

It might also be worth mentioning that I am under-running the motor and won't be going above 800rpm using a 24V motor so will be running a fraction of this. Does running a motor slowly increase wear on the brushes? I am avoiding a gearbox due to strict noise constraints.


That H-bridge can only PWM on the low side, note, and is borderline for 20kHz - switching times over 1us - it'll get hot if you run at start up currents for any length of time, but 0.7A should be fine.

I'm going to take a stab at this:

When driving a motor with PWM, you are essentially turning it on and off...while varying the percent-ON and percent-OFF. Doing this you can simulate a DC voltage (RMS voltage). However, during the OFF time the motor will de-accelerate, the heavier the rotor (core), the more resistant it is to this de-acceleration period. Thus lighter rotors will experience more stress (they do not). Using higher base-frequencies, the motor's natural response can act more as a filter to the higher frequencies, and is less effected.

I know someone who is a true motor expert (went to school for this stuff) and he would probably slap me for wording this the way I did. So, might want to get a second opinion :slight_smile:

Ok, can anyone confirm that the closest I can get to 20KHz is to use phase correct PWM on pins 3,9,10 or 11 and a prescaler of 1, which should give around 15KHz?

Or is there a way of getting closer to 20KHz?

Just to reiterate, I am using 4 low-inductance motors which will be running for 3 months solid and although they run on Arduino Uno's default base frequency of 490Hz, apparently the motor's will experience wear if run at this. The manufacturer of the motor recommends at least 20KHz but this is also the maximum that my H-bridge is stated to handle.

I will need 4 PWM outputs (All at 20KHz) on an Arduino Uno.

Many thanks

I would stick with 15kHz, or else you can fry your h-bridge electronics. The motor should be fine: What is the max power/torque of the motor?