Precise Position Control of Brushless DC Motor

S

Thread Starter

Saqib

I have to control the position of platform connected to a shaft of brushless dc motor. 1 degree of accuracy is required i.e. i should be able to move the platform from 60 degree position to 61 degree.
I have gone through many papers but all of them are on speed control or torque control.

Some questions:
Can i use vector control method for BLDC motors with trapezoidal back-emf? If yes, how do I get d-q axis parameters (Lq, Rq etc.)? If no, what is the other method which can be used?

In Mathematical model of BLDC motor what all parameters are necessary to be considered and what can be ignored?

Basically how to position the shaft so accurately?
 
S
A speed reduction is often used in a positioning application between the motor and load, as long as the resulting speed is sufficient and an unacceptable amount of backlash isn't introduced.

The speed reducer makes the final load position less sensitive to motor shaft position, and greatly reduces the load inertia as perceived by the motor (by the square of the reduction ratio).

There's a free inertia calculator at this link http://www.controleng.ca/IMCalc.htm you might find useful.

I can't entirely tell from your post what your objectives or project limitations are, but if it's a given that have to position the load solely from motor feedback with no additional hardware like a home switch or encoder, or if you're limited by budget, speed reduction may not be a feasible solution.
 
R

Robert Scott

It is generally very difficult to achieve position resolution better than one pole of the motor. So how many poles does the motor have per rev? A BLDC motor can be seen as a stepper motor, although stepper motors usually have a large number of poles per rev, and positioning to within one pole is equivalent to positioning to within one step, which is done all the time with stepper motors. You could look into micro stepping to improve the resolution a little, but micro stepping sacrifices holding torque for positional resolution, so there is a limit to how much improvement is possible with that technique.
 
Thanks for the links Steve. I am using planetary gears of ratio 50 to reduce the speed. Motor rated torque is 0.37 N-m and Speed is 1500 RPM. I am using 12 bit Magnetic Encoder for the feedback.
Moment of Inertia for the load is 0.18 kg/m2.

And number of poles are just two.
 
We routinely position servo motors to within 2 counts out of 2x10^6 counts/rev of the motor. I can assure you we don't have 1 million poles on our motors.

Three phase servos work by alternating a current between two phases. In basic terms your positioning resolution is dependent on your current loop resolution, your position feedback, how well your loop is tuned, nature of your disturbances, PID loop speeds, etc.

KEJR
 
R

Robert Scott

In order to have holding torque at all possible positions, you need to have an odd number of armature poles. Are you sure the armature has only 2 poles, or is it just the rotor that has 2 poles? It is common for the armature to have 3 or 5 poles to go with a 2-pole rotor. Anyway, it looks like with your 50:1 reduction gearing, it would be possible to have 1 degree resolution if the motor can be positioned to within 50 degrees. If there were 3 armature poles, then it would be easy to position to within 120 degrees just by energizing one of the 3 armature poles and leaving the other two off. Then if you entergize just two windings, you can cut the 120 degrees in half again to get 60 degrees. You are almost there. A little bit of amplitude variation (microstepping) should be able to easily get down to less than 50 degrees of resolution on the motor. And all that is without recourse to your magnetic encoder. If you add the information from the magnetic encoder into the mix, then you could fine-tune those amplitude variations on the two windings to get the needed ultimate resolution.
 
Did you have any joy in achieving Position Control of a BLDC?
I have got to a fork in the road in my project and though I have been successful in velocity control using Vector profiling I am not sure how to proceed to get accurate position control. I too am using a 12bit Hall effect encoder for position feedback and have got good position control over a brushed dc motor with my MCU but feel it's time to up the sakes (mainly due to low the sound levels that can be acheived) with a BLDC...
 
C
That depends on the motor. If you use a self contained BLDC Motor not intended for servo apps, that could be difficult. But if instead of using a DC controller, you use the same basic type of motor with an appropriate drive accurate positioning should be easy. The BLDC is actually a PM AC motor with general driving electronics. If you use a PM AC motor with a servo drive you should achieve low noise and accurate positioning. A general class BLDC really doesn't work like a brushed motor.

Regards
cww
 
Hi,
What you describe - on the surface - does not sound like a difficult application for brushless servo control. Unless you plan to design and build your own drive (controller/amplifier) there are many brands of off-the-shelf drives available which have robust position control capability. If you can look for an off the shelf solution you will most likely not need to deal with low level details like BLDC models, D-Q (Park) transformation, etc and focus on the high level physics of the motion profile (inertia, torque, speed, etc.) and the

With regards to accuracy, this is largely determined by the feedback device used for positioning: an encoder mounted on the motor and/or an encoder mounted at the load. Position controllers will position based on this feedback. I would recommend planning for about +/- 10 counts of error when picking the feedback resolution.

One other note... if you are new to motion control with servos, spend some time talking with a motion control manufacturer. They typically have application engineers available who can give you good advice and help your project succeed. You can probably get some good advice here, but it can come from many unqualified sources (for example the guy who said that BLDC accuracy is a function of pole count), so be careful!
 
C
Thanks for the help :)

I am working from grass roots as regards to BLDC control and enjoying learning the more sophisticated control theory along the way. Personally I would rather steer clear of the more monolithic drivers as I fear I would miss out learning some of the theory of BLDC motion control...

I am currently compromising by using a three phase mosfet driver IC (IRS2330) but am having problems at low RPMs, basically the motor stalls at a low duty cycle ( and abruptly starts when the duty cycle reaches a critical percentage) Is this because of the boot capacitor starts charging/discharging or is it that the motor can't overcome it's own friction as the Power Stage does not generate enough current-->torque?

Basically I would love to use a BLDC motor on my project without using a reducer - to directly drive a load..

Thanks again for the help...
 
How are you communicating the motor? Hall Effect, encoder, etc? A common good practice is to get your rough position with your hall effects (or absolute encoder if you have one) and then use the encoder to rotate your 3 phase torque vector around the motor with a fair amount of precision.

Are you doing closed loop control, or just open loop 3 phase BLDC? If you want to run at low speeds I'd recommend encoder or resolver feedback of some sort. Is there a reason you aren't using a servo drive?

At some low torque setting you won't be able to move the motor, this is just the physics of it. I've seen this on some motors to be between 3% and 7% peak torque when using sinusoidal commutation but I'm sure all motors are different depending on bearings and construction.

KEJR
 
C
> How are you communicating the motor? Hall Effect, encoder, etc?

I will be using a 12bit Magnetic Encoder (i.e. 4096 steps per revolution) for accurate position control but at the moment for Velocity Control I'm using the integrated Hall Effect Sensors

> A common good practice is to get your rough position
> with your hall effects (or absolute encoder if you have one) and then use
> the encoder to rotate your 3 phase torque vector around the motor with a
>fair amount of precision.
>

I believe this is what I'm doing at the moment

> Are you doing closed loop control, or just open loop 3 phase BLDC?

I'm using closed loop with Sinusoidal Vector Profiling and currently using the three hall effect sensors integrated into the motor

> If you want to run at low speeds I'd recommend
> encoder or resolver feedback of some sort. Is there a reason you aren't using
>a servo drive?

I suppose I'm trying to recreate a servo drive.
I'm using a Pittman N2311 4-pole rotor BLDC

> At some low torque setting you won't be able to move the motor, this is just the
> physics of it. I've seen this on some motors to be between 3% and 7% peak
> torque when using sinusoidal commutation but I'm sure all motors are different
> depending on bearings and construction.

Yes the more I observe what's happening, the more it appears that achieving the low angular velocities I need is going to prove impossible by just decreasing the PWM duty cycle; I will need a Reducer... However I got around the low torque at low RPMs with a Brushed Motor by kinda pulsing higher duty cycles around the set point. I wonder if this sort of approach will be possible with a BLDC?

Do you know of any examples using a BLDC in conjunction with a MCU/Mosfet Driver/Mosfets that successfully illustrate Position control?

Yours
Claydonkey
 
W

William Sturm

You typically need more resolution for velocity than for position. Try using the 12 bit data for the velocity loop.

Bill Sturm
 
R

Rolf Anderson

> We routinely position servo motors to within 2 counts out of 2x10^6 counts/rev
> of the motor. I can assure you we don't have 1 million poles on our motors.

> Three phase servos work by alternating a current between two phases. In basic
> terms your positioning resolution is dependent on your current loop
> resolution, your position feedback, how well your loop is tuned, nature of your
> disturbances, PID loop speeds, etc.

From Rolf Anderson, [email protected]
I have software that controls a 3-phase sine-drive BLDC motor with position/velocity, velocity/current, and current/PWM servos. My position servo works fine for starting up and moving along and slowing down, but it doesn't zero in on the final position very quickly at all, taking many seconds to get within the few resolver ticks that I want, rather than under say 50 msec. I have real good 12-bit resolver and 16-bit current readings. Can you point me to some algorithms/techniques that I can peruse? Thanks!
 
Top