I am attempting sensor-less speed control of a brushed DC motor using PWM and measuring the BEMF (motor-induced voltage proportional to speed). The motor is powered through a H-bridge IC (TI DRV8801).

I've noticed the BEMF is only observable in fast decay mode, where the motor is basically reversed until the current is zero and then the switches turn off.
This leaves the motor connected to power rails through the free-wheeling diodes. Plus the resistor-divider. Plus EMI filter caps on the motor.

So the circuit might look like this:


simulate this circuit – Schematic created using CircuitLab

I assume the oscillation shown in the following image is a result of the residual energy of the motor inductance and the connected capacitance (filter, wire)?

Figure 1: Oscilloscope screenshot

  • yellow: motor -
  • cyan: motor +
  • blue: center point of voltage divider: 10 kΩ to GND and each motor contact
  • pink: current (large offset with DRV8801; might also be due to bad layout)

The long settling time limits the PWM duty-cycle and the frequency. Is there a way to shorten it? Maybe with a load resistor?

  • 4
    \$\begingroup\$ You probably don't need to sample the back EMF on every PWM cycle. Couldn't you just run at a "normal" duty cycle and frequency for say 100 cycles, set the driver outputs to a high impedance state, wait a hundred microseconds or so for the ringing to die out, sample the back EMF voltage and repeat? \$\endgroup\$
    – jms
    Oct 4, 2016 at 12:09
  • \$\begingroup\$ That would be a disaster firmware-wise \$\endgroup\$
    – user76844
    Jul 27, 2017 at 13:19
  • \$\begingroup\$ "To measure the back EMF voltage, turn the modulated FET “off.” This will cause the current to flow in the opposite direction. After initially shutting off the FET, dI/dt must stabilize before taking the measurement." AN893: Low-Cost Bidirectional Brushed DC Motor Control \$\endgroup\$ Mar 29, 2018 at 18:48
  • \$\begingroup\$ Where are you measuring the current? Right across the motor? It's hard to determine from the scope screenshot where your high impedance zone is. I would make a chart that includes the motor drive signals. You need to 1. Shut off the mosfets, 2. discharge the coil inductance, and 3. Measure the BEMF. Just as an experiment, try turning off the mosfets then wait a whole 100ms then sample the voltage. If that doesn't work then there is something wrong with your setup. \$\endgroup\$
    – Drew
    May 3, 2019 at 20:04

2 Answers 2


Unfortunately the reverse diodes inside the chip cause the stored inductive energy to take quite a long time to deplete. If "somehow" these diodes could be removed and replaced with a medium value resistor, the decay would be faster because energy would be burnt more quickly.

Adding a load resistor will lower the rate at which energy can be burnt - remember you are talking about the motor current wanting to remain constant when power is removed and a higher value resistor burns that energy off more quickly BUT the diodes cannot be removed and so this looks an impossibility.

  • \$\begingroup\$ How would the reverse diodes affect the ringing, exactly? As I see it, the diodes are only going to conduct when the sum of the voltage produced by the discharging motor inductance and back-EMF is greater than the DC link voltage (24 V), but the ringing OP is asking about happens at a much lower potential (with the motor voltage decaying from 10 V pk-pk to zero in classic LCR oscillation) \$\endgroup\$
    – jms
    Oct 4, 2016 at 12:23
  • \$\begingroup\$ @jms I can see the reverse diodes rectifying the ringing - is this what you meant? \$\endgroup\$
    – Andy aka
    Oct 4, 2016 at 12:24
  • \$\begingroup\$ Not exactly. The H-bridge output in fast decay mode follows the following waveform (where A = left, B = right motor terminal): A high, B low (current ramp up) -> A low, B high (current ramp down, fast decay) -> A High-Z, B High-Z (current at zero, waiting period) -> repeat. OP's ringing which interferes with back-EMF sensing occurs after the current has already decayed to zero, and the pk-pk amplitude of the ringing is relatively low (less than what is required to forward bias the freewheeling diodes) \$\endgroup\$
    – jms
    Oct 4, 2016 at 12:30
  • \$\begingroup\$ @jms - I'm struggling to go down the seemingly tangential path you are creating - what has this got to do with the question and what has it got to do with my answer. Genuinely I am puzzled. \$\endgroup\$
    – Andy aka
    Oct 4, 2016 at 12:35
  • \$\begingroup\$ I'm puzzled how you are puzzled, perhaps I'm just horrible at explaining things? I hope that this illustration helps to better convey what I meant: I don't think that the diodes get even forward biased during a PWM cycle, let alone that they cause the problem. \$\endgroup\$
    – jms
    Oct 4, 2016 at 13:04

I think you don't need closed loop on bemf. If you know what is your current and ohmic resistance if the motor, you know all you need. Because BEMF = Vbus * D(PWM) - IR. So for speed control you only need to know the kv constant.

Also i think your PWM frequency is too low.

Edit: i hope you have a descent current loop. If you don't, given you somehow solve stall current, just work with open loop

Edit 2: measure not related to gnd. Measure between two wires of the motor.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.