Contact US

Log In

Come Join Us!

Are you an
Engineering professional?
Join Eng-Tips Forums!
  • Talk With Other Members
  • Be Notified Of Responses
    To Your Posts
  • Keyword Search
  • One-Click Access To Your
    Favorite Forums
  • Automated Signatures
    On Your Posts
  • Best Of All, It's Free!

*Eng-Tips's functionality depends on members receiving e-mail. By joining you are opting in to receive e-mail.

Posting Guidelines

Promoting, selling, recruiting, coursework and thesis posting is forbidden.

Students Click Here

How do you do accurate angular positional control of a Brushless DC motor?

How do you do accurate angular positional control of a Brushless DC motor?

How do you do accurate angular positional control of a Brushless DC motor?

Whilst there are many examples of velocity control of Brushless DC (BLDC) motors on the web, I have been having trouble identifying exactly how to implement very accurate angular positional control.

I have a hardware setup with a BLDC motor, whose output shaft position is monitored by a very accurate absolute rotary optical encoder.
The current in each of its three coil windings is controlled from a 16-bit analog-to-digital converter (ADC). [i.e. precision analogue, not PWM controlled]

I understand the principle of converting the three winding currents (U, V ,W) into a single applied field vector (With a Magnitude and Direction) by means of Park-Clarke transforms etc.
I also understand that maximum torque is achieved when the applied field vector is 90 degrees ahead of the physical angular position of the rotor and that the torque falls to zero when the field vector is aligned with the rotor angle.
NB: There are no hall sensors in the motor, the position of the output shaft is measured with an absolute optical encoder.

My confusion arises partly because there is no externally observable way to accurately measure the physical angular offset between the magnetic field vector created by the phase windings inside the motor, and the zero-datum angle of the optical encoder attached to the motor shaft. This angular offset (call it Theta) is an unknown value, but it is constant, as the windings and the optical encoder are both physically connected to the motor shaft.
This unknown physical angular offset seems to be the main stumbling block to creating a positional feedback loop.
This is because Theta gets inherently added to the error value when subtracting the angle between the desired and the measured positional angle, and this messes up using that calculated error signal in the forward path of a any (PID) controller used to generate the required control signals.
In velocity control, the value of Theta would be irrelevant, but for positional control it matters.

Rearranging the system diagram, the unknown but constant offset theta is being added to the error, a bit like in this image.
Here, r(t) is the desired angle, y(t) is the angle of the shaft as measured by the optical encoder, and theta is the unwanted constant offset to be rejected.

(Admittedly, the image does not represent how the 2 components of the field vector are generated, just the angular component)

Is there a way to auto-tune the system so as to evaluate what the angle Theta is?
Have I misunderstood the control problem entirely? Is there a better way to solve this?

Any help would be gratefully received.

RE: How do you do accurate angular positional control of a Brushless DC motor?

I believe it's in the software. By leading and lagging the commutation while comparing it to the optical encoder output you can arrive at an encoder position that you can subsequently tag as a fixed and known shaft position.

Lots of machine tools that have spindles, that need to know their positions accurately, will require that the encoder be mounted to the motor shaft and adjusted precisely to time the encoder. Yaskawa spindles are this way. If someone unknowingly pulls the encoder off to replace the bearings they're in for a rough ride. Yaskawa uses the optical encoder output to actually commutate their spindle motors. If you get the encoder back on 'close' the spindle will turn while vibrating and making a racket. Otherwise, you will see the spindle turn a revolution and then everything goes down as the controller doesn't see the expected rotor acceleration. The drives, however, DO use an index on the encoder so they know precisely where the shaft is on stat-up after the shaft has rotated far enough to see the index pulse. So even these fully encoded drives need some software magic to get enough motion to find the index on power-up initialization.

Just re-reading your question I see your motor has an absolute encoder, I hadn't remembered that from reading it yesterday. What I describe above works for a relative encoder.

So! You have exactly what I described above in the Yaskawa drives. Yaskawa puts the drives in a jig, hooks the encoder output index channel to a scope. Hooks two of the motor windings to the scope and then spins the motor. The magnets in the motor develop a voltage across the the motor leads that is, of course, sinusoidal. They then dial in the encoder mounting angle index pulse as compared to the motor lead sinewave to some relationship they settled on via empirical discovery eons ago. They lock it on and paint the setscrews and charge about $1k for this annoying service.

Keith Cress
kcress - http://www.flaminsystems.com

RE: How do you do accurate angular positional control of a Brushless DC motor?

We once did a phasing check on a set of custom motors because we were having trouble getting them to start. Turned out that the manufacturer managed to make each motor with a different color scheme, so no two motors had the same color wires for any of the windings.

There are sensorless motors that rely on back EMF to determine the correct commutation and phasing:


TTFN (ta ta for now)
I can do absolutely anything. I'm an expert! https://www.youtube.com/watch?v=BKorP55Aqvg
FAQ731-376: Eng-Tips.com Forum Policies forum1529: Translation Assistance for Engineers Entire Forum list http://www.eng-tips.com/forumlist.cfm

RE: How do you do accurate angular positional control of a Brushless DC motor?

What you want to do is to temporarily treat the motor like a stepper motor to force it to a known angle. For example, command a moderately large positive current for the U phase, the same negative current for the V phase, and zero current for the W phase. Wait for the rotor to settle at the resulting position, and read your encoder value. The encoder difference from this zero rotor angle is your offset (that you call Theta).

Of course, there are many possible rotor angles that you could call zero. It does not really matter as long as you are consistent. You must be careful and rigorous. Your zero position must match the exact implementation of the Park-Clarke transform you are using.

With your absolute rotor angle sensor, you only need to do this procedure once per motor, and store the offset value. If you get consistently assembled motor-encoder pairs, you only need to do this once per design. (With an incremental sensor, you would need to do this every time you power up.)

Once you have established your rotor reference, you will want to command current 90 degrees offset from this "stepper" current vector angle to obtain the maximum torque per unit current.

Curt Wilson
Omron Delta Tau

Red Flag This Post

Please let us know here why this post is inappropriate. Reasons such as off-topic, duplicates, flames, illegal, vulgar, or students posting their homework.

Red Flag Submitted

Thank you for helping keep Eng-Tips Forums free from inappropriate posts.
The Eng-Tips staff will check this out and take appropriate action.

Reply To This Thread

Posting in the Eng-Tips forums is a member-only feature.

Click Here to join Eng-Tips and talk with other members! Already a Member? Login


Low-Volume Rapid Injection Molding With 3D Printed Molds
Learn methods and guidelines for using stereolithography (SLA) 3D printed molds in the injection molding process to lower costs and lead time. Discover how this hybrid manufacturing process enables on-demand mold fabrication to quickly produce small batches of thermoplastic parts. Download Now
Design for Additive Manufacturing (DfAM)
Examine how the principles of DfAM upend many of the long-standing rules around manufacturability - allowing engineers and designers to place a part’s function at the center of their design considerations. Download Now
Taking Control of Engineering Documents
This ebook covers tips for creating and managing workflows, security best practices and protection of intellectual property, Cloud vs. on-premise software solutions, CAD file management, compliance, and more. Download Now

Close Box

Join Eng-Tips® Today!

Join your peers on the Internet's largest technical engineering professional community.
It's easy to join and it's free.

Here's Why Members Love Eng-Tips Forums:

Register now while it's still free!

Already a member? Close this window and log in.

Join Us             Close