I want to create a simple circuit (or better, add software change for the existing circuit) for deceleration of a small BLDC motor connected to a ball screw. Exact stopping at zero is not a requirement.

Motor is 48V, max 3000rpm, rated 220W. Ball screw is 1605 type, 400mm long, no gearbox so max linear speed 0.25m/s, mass attached approx 3kg - so not a huge amount of momentum. Power is from a 300W SMPS PSU.

The current motor design is by 3 phase commutation with PWM on the high side and continuous on the low side with the PWM approximating a sine wave based on the last rotation period adjusted by a lookup table to be based on empirical measurement of acceleration and current speed. It is a fairly trivial setup on a homemade controller.

What I want to achieve is braking at an inverse to the motor's acceleration (so that the motor's velocity approximates a sine wave)


1) Freewheeling: If I cut the power I expect that while it will slow, it would be at a lower rate then desired.

2) Regenerative braking: Not an option. I do not need or want this complexity in the circuit as it would require adding a large store.

3) Dynamic braking: A possibility, but it would require adding a large resistor and the associated circuitry, I would like to avoid if possible.

4) Reverse the engines Mr Scott!!!: If I understand the term correctly this is known as "plugging". In practical terms that is to set the MOSFET states based on the hall sensor lookup as if the motor were rotating in the opposite direction. As is probably obvious this is the solution I would like to go for - but I have a collection of known unknowns and expect there are unknown (to me) unknowns.

So known unknowns:

a) This causes stress on the electrical components - how much and how to limit it?... Specifically is the PSU or anything else on the board going to be exposed to over voltage or excess current?

b) This causes stress on the mechanical components. I assume this is in therms of rapid declaration on all parts and waste heat in the motor and probably the ball nut.

Is it possible by using a lower duty cycle on the high side PWM while in this state to moderate the excess voltage/current/heat effects? If so at what maximum levels compared to normal? 10%? 50%? or inversely proportional to the speed?

5) Lastly am I missing something else obvious that would achieve the desired result but in a simpler way?


i) Extra hardware is possible but "expensive"

ii) Changes to software control of the PWM states for any of the 6 MOSFETs is trivial.

iii) Changing to an off the shelf control is not an option I wish to consider.

iv) Please describe answers in terms of MOSFET states A, B, C high and low. (Ah, Al, Bh, Bl, Ch, Cl) or by providing circuit diagram where suggesting relevant changes.


  • \$\begingroup\$ @DKNguyen The driver is three half bridges provided by pairs of low resistance MOSFETs with high/low side driver with integrated freewheeling diode and associated passive components. The is controlled by an Atmel microprocessor taking input from the hall sensors (currently running on arduinos for ease but to be replaced later) \$\endgroup\$
    – Simm
    Commented Apr 7, 2020 at 21:11
  • \$\begingroup\$ I missed the part where you said it was a homemade controller since it's buried in there and deleted my previous question. \$\endgroup\$
    – DKNguyen
    Commented Apr 7, 2020 at 21:12
  • \$\begingroup\$ @DKNguyen I possibly could "add current sensing to each phase and use active breaking" but I don't know what that means. I''m a software bod that knows a bit about hardware and my struggle is filtering the simple solutions amongst the very detailed research online. \$\endgroup\$
    – Simm
    Commented Apr 7, 2020 at 21:16
  • \$\begingroup\$ Oh, active braking is the term for "reverse the engines." \$\endgroup\$
    – DKNguyen
    Commented Apr 7, 2020 at 21:20

1 Answer 1


Someone correct me if I'm wrong, but I believe for active braking you don't actually have to drive the motor as if it's turning in the opposite direction, though this would have the greatest effect and stress. I believe you can also slow it down by commutating the motor in the same, normal, direction but reducing the phase advance towards zero (motor lock). This is gentler but braking takes longer. It doesn't have to be a smooth reduction in phase advance either. You can decrease it in steps and just wait a period of time between each step and the rotor inertia smooths everything out.

Personally, I'm not sure why you need to drive the motor in reverse to brake it when you could outright set it to zero phase advance and just cause it to lock up. Outright locking it up like that is pretty hard on everything already but maybe there are applications where you really do need to brake it that quickly.

Maybe driving things in reverse to brake comes from the day of brushed motors where you don't have control over the commutation? Because if you have control over the commutation you can just gradually (or outright) reduce the phase advance to zero where the motor locks up.

One thing to note though: You are basically stalling the motor when you applying current at low or zero RPM. So you want to shut off all the switches as soon as the RPM reaches zero (or even before then when the RPM is just low). Alternatively, and with more safety, you could add a single current sensor to monitor the collective current going through the motor driver in the motor controller to monitor things so that as you commutate with a phase advance approaching zero, you can reduce the PWM duty cycle to keep current under control. This would be somewhat of a constant current mode.

This would be most accurately done with current sensing on each of the three phase windings, but I think you could get away with just a single current sensor monitoring the collective current.

I have a motor at work I have to do this with when I shut it down...not really a BLDC but similar enough I think. When I do this the motor sounds like it suddenly encounters a high mechanical resistance or viscous fluid and very quickly, but smoothly, comes to a halt. The other two ways I shut it down are letting it freewheel which sometimes takes too long or outright setting the phase advance to zero and causing it to instantly lock up (really hard on the motor and electronics and produces a huge flyback spike that shuts down the power supply).

Was part of my original answer but no longer relevant after I talked things over with myself and realized that if you were not driving the motor backwards then it is not nearly as risky so you don't need phase current sensors to monitor things But I'm leaving this in because it may be informative to the OP since he is apparently not familiar with hardware:

I would add current sensing to each phase and use active-braking (reverse the engines). This seems like the lowest amount of extra redundant hardware. The current sensing can be used to monitor things during braking (as well as during operation). But mainly it would allow you to monitor the active braking to not overstress things.

When I say add current sensors to each phase, I mean make it so you can individually sense the current on all three motor wires (as opposed to the collective current flowing into the through the motor driver and into the motor).

Easiest (but perhaps not the cheapest way) is to use hall-effect current sensors. The other way is to use shunt resistances which are accurate milliOhm level resistors that sit in series with each wire and you measure the voltage drop across it to determine the current flowing through it. You will need differential amplifier (or better, a purpose built shunt resistor diff amp IC) to convert the differential voltage to a ground-referenced voltage that you can easily measure with your ADC).

  • \$\begingroup\$ So if the normal phase advance of the commutation is 60 degrees (on the sine wave, not the actual rotation of the motor), reserve drive would be at -60 degrees and motor lock would be at 0 degrees, so by shifting the commutation pattern to either 0 or some intermediate interval (can be approximated in the software) you could achieve a more gentle active braking than by the full reverse. Thanks on the current sensor, I see what you mean as an option - something like docs.rs-online.com/8508/0900766b8151a429.pdf - but I agree that phase shift sounds the best way. \$\endgroup\$
    – Simm
    Commented Apr 7, 2020 at 21:45
  • \$\begingroup\$ @Simm Yes. Please re-read my post since I was editing and added a safety issue (stall current). Reducing phase advance to zero is not as risky as driving the motor in reverse where you need to monitor all three phase currents, but still riskier than free-wheeling since you have stall current (which can be monitored with just one current sensor). \$\endgroup\$
    – DKNguyen
    Commented Apr 7, 2020 at 21:47
  • \$\begingroup\$ @Simm Edited my post again. Only difference is that you don't have to "kill and re-apply the current during braking to keep the stall current under control". You could just reduce the PWM duty cycle based on current (or RPM). \$\endgroup\$
    – DKNguyen
    Commented Apr 7, 2020 at 21:57
  • \$\begingroup\$ I could easily cope with just freewheeling to stop below 60rpm, possibly below as that is 5mm/s and the friction load is likely to be enough to stop it at that point - but I appreciate the point regards the straight through current!! so if the hall sensors don't change for 20ms the power is off - that gives a worst case of 20ms of uncontrolled power though the motor with not inductance limiting the current... seems reasonable to me as in most cases I will be running in reverse at that point anyway to start moving the opposite way. \$\endgroup\$
    – Simm
    Commented Apr 7, 2020 at 21:57
  • \$\begingroup\$ @Simm You can experiment. Try reducing your phase advance by 25% (to 75% of normal) the first time you do it. The slowdown should be very obvious (at least it was for me). From there you should have a feel of how large a jump you can go without being too hard on the motor. But mind the resulting flyback. That's the main electrical stress from stopping the motor too quickly. \$\endgroup\$
    – DKNguyen
    Commented Apr 7, 2020 at 22:00

Your Answer

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

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