Brushed motor: Model for PWM-ed DC motor


Post corrected on 01/15

When I got first data and found that curves go not as expected, I was pretty sure that I’ll find explanation and the model on the net easily. I could not! Moreover I realized that numerous publications contain wrong assumptions and conclusions. I am going to write a separate post with details, here is just brief description of the problem.

UPD: here is the theory

In my previous post I described the test stand for micro motors and did preliminary tests. I have started with 0716 brushed DC motor.

As usual, the devil is in the details.

I will use “throttle” word below for simplicity, actually it does mean MSP_SET_MOTOR command to FC.

A) The model

My graphing tool model is based on the assumption that throttle changes voltage linearly via PWM (as it was done in many other publications). I was expecting that I’ll use mean values (PWM) of voltages  and current in the model’s equations. From the very first measurements it become clear that simple PWM assumption does not work. I verified that the problem is not related to the hardware/firmware of my stand by easy experiment: a) got some curves with 100% throttle (when PWM is equal to DC voltage, in this case supply voltage was changed with lab power supply) b) got the same with fixed voltage supply and PWM-ed voltage via throttle position.

The results are drastically different:

Fig.1 RPM (blue), current (red), torque (green), and a mechanical power=torque*rot.speed (black) vs a) voltage at 100% throttle, and b) throttle (PWM) at fixed supply voltage

Fig. 1a (voltage change, no PWM) can be fitted with  Voltage Model, while “throttle” experiment shows absolutely different picture.

Snapshots show that PWM is working as expected:


Fig. 2 Traces of voltage and current taken with Hall-Sensor at a sampling period of 1.7 us.


This is a long story, but finally I developed the model, which is good for PWM -ed brushed motor.

From known data for brushless motors, the dependencies looks different than for brushed motor ( e.g. or ). UPD: 0603 tiny brushless motors are similar to big BLDC. In contrast to brushed motors, all them can be fitted well with common voltage model (upd: 02/2019 actually the same PWM model should be used, but plots should be plotted against rpm, because BLDC works in closed loop control to hold pwm).

So, theoretical models for brushed and brushless models are drastically different. (02/2019, actually the same, but BLDC should be plotted againts rpm, since BLDC are working in a closed loop control to hold rpm, which is set by the throttle position)

Here is a comparison of different approaches. In any case both models give correct values at the final value at throttle=100%, the difference is in how curves go.


Fig. 3. Values vs throttle position a) Voltage is proportional to PWM b) PWM model for brushed motors.


Another interesting feature of “the model that works” (bottom pic in Fig 3 ) is a flat efficiency (g/W) dependence (brown dashed curve), while voltage model gives “bumped” g/W dependence. This flat efficiency (g/W) dependence is really observed in the experiments. Good for tiny whoop modeling.

I did not combine online graphing tools suitable for both voltage and PWM calculations yet (may be will do it later when all models for both brushed and brushless will be experimentally verified).

Currently I have separate version for brushed dc PWM-ed motor


B) Firmware

To get better electrical power measurements at the motor I have changed the algorithm: current at hall sensor is collected at a 600 ksamples (then filtered), while voltage is being collected only when current is positive above some threshold (but still at a 600kHz rate)). In this case electrical power is Imean*V(I>threshold).

Fig.5 shows snapshot of voltage and current at hall-sensor (top). Bottom shows comparison of output from both I/V sensors (pink and light blue is V and I measured with  “slow” ina219 sensor at the battery); (red and blue are averaged  measurements of I and V at the motor’s high end, when measurements are done at high speed at the condition current>threshold). Voltage drops  are due to internal resistance of the battery, they have about the same amplitude in all PWM range. First “slow” sensor see them as a smooth change of voltage, where smooth voltage drop is an integration of PWM signal.