Brushless control

From DIDEAS Wiki
Revision as of 17:06, 21 August 2009 by Ceb (talk | contribs)
Jump to: navigation, search

If IAx is the actual current in each coil(x), then the PI equations are:

Vx = kp*(Ix - IAx) + ki * intg(Ix-IAx)

Note, that the integral needs to be limited to avoid "wind up". I genrally limit the wind up so as to contribue at most 100% to the PWM voltage.

The primary problem with this time of control loop is that it is bandwidth limited. The freuqnecy of the voltage is at least that of the rotor rotation rate (or with a 4 pole motor, twice the freuqnecy). At high rotor speeds, the PI output has a phase shift WRT desired output. This has the effect decreasing efficiency, as in the motor the magnetic field now longer is in the direction that creates maximum torque.


Field oriented control solves this phase shift problem by transforming the control loop into the stationary reference frame of the rotor. It is also sometimes said that the 3 phase brushless is transformed into a brushed motor. Clark and Park transforms are involved here.

I won't try to explain the full theory but it can be easly outlined:

  • Measure two coil currents: Iu and Iv. These currents are 120 degrees apart and are in the stator frame.
  • Transform (Clarke) them into in a pair currents (Ialpha, Ibeta) that are orthogonal. These currents are still time varying and in the stator frame.
  • Transform (Park) the orthogonal currents (I alpha, beta) into the rotoating, rotor, refrence frame. The new currents are called Id and Iq and are actually now constants when the 3 phase currents are the correct sine waves! The Iq 'current' produces torque, and the Id 'current' applys a force that compresses the magnets. This is useful as it can me used to change the effective speed an torque constants of the motor, and also be used to dump (regen) energy into the motor.
  • Apply a the PI control loop to the Iq and Id (actual) currents.

Vq = kp * (Iq_desired - Iq_actual) + ki * intg(Iq_desired - Iq_actual) Vd = kp * (Id_desired - Id_actual) + ki * intg(Id_desired - Id_actual)

Normally Id_desired is zero.

  • This Iq and Vq terms are analogous to the voltage and current that would be applied to a brushed motor.
  • Transform (w/inverse parke) Vq,Vd back into the stator frame. The result is Valpha, Vbeta.
  • Transform (w/inverse clarke) the orthogonal Valpha, Vbeta into the 3 phase frame 120 degree frame: Vu,v,w. The 3 phase voltages are then inputs to the PWM modulator.

Feedforward and PI control

The preceeding discussions use a PI control loop to compute a command voltage that will move the actual current towards the desired current. The advange of this approach is that is doesn't require knowledge of the motor parameters and continues to produce useful outputs as those paramters change.

With feedforward the voltage require to produce a desired motor current (Io) is directly computed:

Vx = Ks * Omega + L di/dt + IoR

  • Ks is the speed constant
  • Omega is the rotation rate of the rotor
  • L is the motor inductance
  • di/dt is the time rate of change of the current though the coil. If I = Io sin(omega * t), then di/dt = Io*omega*cos(omega * t)
  • Io is the desired motor current
  • R is the motor / coil resistance.

Note, that with a brushed motor (or in the rotor frame of brushless), the di/dt term is nearly zero.

Vq = Ks * Omega + Io*R



= In