Electronic – Braking a small hall sensor BLDC motor on a ballscrew

brakingbrushless-dc-motormicrocontrollerpwm

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)

Options:

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?

Constraints:

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.

Thanks

Best Answer

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).

Related Topic