I'm operating a brushed DC motor via PWM at 5 kHz. It's a big motor rated at 125V/27A. I don't have an voltage acquisition circuit. Just a multimeter. But I want my microcontroller to know what the motor voltage is. If I have a DC link voltage of 130V for the motor, and I know my duty cycle, can I say that at 50% of duty cycle the motor voltage is about 130/2 = 65V without measuring with a meter? I'm also measuring RPM of the motor. Let's say I give a duty cycle of 50%. This will yield a certain RPM value at a certain voltage input. If I measure 1000 RPM at 50%, the average voltage should be 65V? This is what I think, correct me if I'm wrong. Thank you.

  • 2
    \$\begingroup\$ Why would you measure the motor voltage? Usually we measure the current, voltage has no importance. \$\endgroup\$ Oct 27, 2018 at 8:20
  • 1
    \$\begingroup\$ Yes, the motor is generating a very sizeable back-EMF, and as you don't know how big this is, there is generally no point in calculating or measuring the terminal voltage of the motor - measuring the current is generally much more useful. \$\endgroup\$
    – jayben
    Mar 3 at 8:54

3 Answers 3


PWM maintains a constant voltage but varies in pulse width. Narrow pulses average out to less continuous drive current. Wide pulses close to 100% have little OFF time so the motor 'sees' almost continuous current.

Try using a DVM like a Fluke 87-5 series which has filters to accurately measure both PWM and VFD motor controller outputs. An oscilloscope gives the best picture of what is going on but they have a very high cost and you need to do differential measurements to avoid common ground shorts.

This schematic using an AC type opto-coupler can feed an isolated version of your PWM signal to the motor phases to the MPU. Use a timer or clock input to measure pulse width and calculate motor average voltage by using the 50% pulse width as a 50% average voltage marker. Remember that the voltage peaks at the phases will still be 127 volts. Only the width will vary.

From there you can use the MPU to control the motor speed and/or torque and set speed and current limits to protect the controller and the motor.


simulate this circuit – Schematic created using CircuitLab


It depends on the motor's mechanical load characteristics. If the mechanical load doesn't change then you could do a voltage/speed calibration curve. The only hitch in this is if the mechanical load on the motor changes. If it decreases, then the motor will speed up to establish a new operating point.

If the mechanical load increases, then the speed will decrease. The two examples I can think of are a old-style washing machine during the spin cycle or a cement mixer as water is added. As the water drains/is pushed out, the speed increases, in the case of the mixer it slows down. Remember torque is a force, which implies an acceleration until is matched by an equal and opposite force.

For the math part (assumes steady state conditions):

Torque$$T$$ motor torque slope $$k_t$$ motor speed slope $$k_e$$ then $$V=\frac{T}{k_t}R +k_e\omega$$

we are looking for rotation speed $$\omega$$ so rearranging we get: $$\omega=\frac{V}{k_e} - \frac{T}{k_ek_t}R$$

inspect the two terms above that get you the angular velocity. The first term is the contribution of the voltage to the rotational speed. The second is the torque/load contribution (note the negative sign).

since $$\omega = 2\pi f$$

rotation speed in Hertz:

$$ f = \frac{\frac{V}{k_e} - \frac{T}{k_ek_t}R}{2 \pi}$$


It is possible to measure the back EMF (BEMF) of a brushed DC motor (BDC) by taking a sample during a brief interval where the motor is floating and acting as a generator. This can function as a fairly accurate method for speed measurement. For a H-bridge, you can use a differential amplifier to read the voltage, or measure the floating connection while the other end is held at ground potential by the lower element of the bridge.

Here is an article that discusses this.

Otherwise you can just use a low pass filter to obtain the average voltage of the PWM on the motor. This should correspond to the duty cycle of the PWM and the DC link voltage as you have noted, but there may be effects of BEMF and voltage drops in the bridge that affect the true value.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy