- 1 Brushless Motor Commutation
- 2 Feedforward and PI control
- 3 Motor speed with FOC vs SINE
- 4 Voltage Source Inverters
Brushless Motor Commutation
There are essentially 3 types of three phase brushless control / commutation.
- Block commutation (sometimes also called trapezoidal)
- Sine wave drive
- Field oriented control
These will be discussed in detail below.
Block commutation is the electrical analog of the mechanical commutation that exist in a brushed motor. The three phase brushless has 3 coils : with block commutation, voltage is applied across two of them. The 3rd coil is 'floating'.
- The effective resistance is larger than necessary - as the motor current is run though the series resistance of two coils.
- The torque isn't constant. The magnetic field created by a pair of coils has a fixed direction, however the force felt by the rotor (torque) is provided by B cross I (where B is the motor magnet field) and thus is rotor angle dependent.
- The miss-aligned force vector requires more current than the correctly aligned force vector that results in the same torque. Thus there is less efficiency and greater motor heating.
- Sensing for control is simpler. The voltage on the 3rd phase can be used to estimate the rotor angle for commutation. (This is not recommended for robotics!)
- Three hall sensors and a short lookup table can be used to select which phases should be electrically driven. (An encoder is not required.)
- The computer computation requirements are low - even for torque control.
- The same motor control code can be used to drive a brushed motor. When driving a brushed motor, two of the six brushless hall sensor states are simulated.
- Block commutation requires that only two of the six H-bridge transistors are modulated. Thus switching losses are minimized.
Sinusoidal drive eliminates the above drawbacks of block commutation. With a sinusoidal drive, the line-to-line voltage and line current are sine waves with the phase difference between each signal being 120 degrees. As the motor current generally flows though all three motor coils, the coil resistance is on the average reduced as the current enters one coil, and exits splitting between two coils. The result is that the minimum resistance is 3/4 that of the resistance of block commutation and the average I^2R loss over a full cycle is 2/3 of block commutation.
An implementation of voltage mode sine drive is :
- V1 = Vo * sin(0 + encoder angle)
- V2 = Vo * sin(2pi/3 + encoder angle)
- V3 = Vo * sin(4pi/3 + encoder angle)
Using sine drive with current mode control requires either a motor model and feed forward estimation, PI control loop, or a hybrid of the two (recommended).
The required (desired) coil current equations follow voltage equations above:
- IDx = Io * sin((x-1) * 2pi/3 + encoder angle) [x=1:3]
where Io is the calculated current that results from the torque desired at the rotor.
If IAx is the actual current in each coil(x), the PI equations that calculate the coil voltages:
- Vx = Kp*(IDx - IAx) + Ki * intg(IDx-IAx)
where Kp and Ki are the proportional and integral gains.
Note: the integral needs to be limited to avoid "wind up". To avoid integral wind up, the integral sum is limited so as to contribute at most 100% (or less) to the pulse width modulation (PWM) voltage.
The primary problem with PI control of a sine drive is that the PI loop is bandwidth limited. The require motor coil current is a sinewave that has a frequency that is a multiple (# of pole pairs) of the rotor rotation rate. At high rotor speeds, the PI voltage outputs have significant phase lag WRT to desired currents. This has the effect of decreasing efficiency, as the motor the magnetic field deviates from the direction that creates maximum torque.
Field oriented control (FOC)
Field oriented control solves the phase shift problem at high RPMs by transforming the control loop into the rotating reference frame of the rotor. It also effectively transforms the control of a 3 phase brushless into that of a brushed motor. Transformations as described by Clark and Park are utilized.
An outline of the theory of FOC control (PDF) will be described below. This outline assumes that the currents in the 3 phases sum to zero, are sinusoidal with rotor angle, and the current on each phase is 120 degrees from its neighbor.
- Measure two motor coil currents: Iu and Iv. These currents are 120 degrees apart, are in the stator frame, and thus vary with rotor angle.
- Transform (Clarke) them into an orthogonal pair (Ialpha, Ibeta).
- Transform (Park) the orthogonal currents (Ialpha, Ibeta) into the rotating, rotor, reference frame. The new currents are called Id and Iq (actual) and are constants WRT to rotor angle. The Iq 'current' produces torque, and the Id 'current' applies a force that compresses the magnets. This Id term can be used to change the effective speed and torque constants of the motor, and to dump excess energy into the motor.
- Apply the PI control loop to the transformed 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)
- Generally Id_desired is zero, and Iq_desired is proportional to the torque applied to the rotor.
- The Vq and Iq terms are analogous to the voltage and currents that would be applied to a brushed motor.
- Transform (w/inverse Parke) Vq, Vd back to the stator frame. The result is Valpha, Vbeta which are orthogonal and vary with rotor angle.
- Transform (w/inverse Clarke) the orthogonal Valpha, Vbeta into the 3 phase 120 degree voltages: Vu, Vv, Vw. These voltages are then inputs to voltage source inverter.
Feedforward and PI control
The preceding discussions use a PI control loop to compute a command voltage that will adjust the actual currents (over time) toward the desired currents. The advantage of the PI approach is that is doesn't require knowledge of the motor parameters and continues to produce useful control outputs as those parameters drift. However, FF has the advantage of being full bandwidth.
With feed-forward control, the voltage required to produce a desired motor current (Io) is directly computed:
Vo = Ks * Omega + j L di/dt + IoR (where)
- Ks is the speed constant
- Omega is the rotational velocity of the rotor
- j = sqrt(-1), 90deg phase lead
- 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), or Io*omega after transformation into the rotor frame.
- Io is the desired motor current
- R is the motor / coil resistance.
Applying this voltage equation to the orthogonal rotor frame voltages:
Vq_ff = Ks * Omega + Io*R Vd_ff = L di/dt ~= L * Io* omega
A hybrid FF and PI control loop can be implemented:
Vq_cmd = Vq_ff + kp * (Iq_desired - Iq_actual) + ki * intg(Iq_desired - Iq_actual) Vd_cmd = Vd_ff + kp * (-Id_actual) + ki * intg(-Id_actual)
If the FF model is precise, then Idesired and Iactual will be equal. Thus the models accuracy of the motor parameters is related to the magnitude of the integral term.
Motor speed with FOC vs SINE
It is often claimed that FOC permits a larger voltage to be applied across the motor when compared with a pure sine wave drive. Eg with sine drive the full supply voltage isn't available to drive the motor. However, I believe this wisdom is incorrect - as the output of a FOC drive *should* be 3 sine waves spaced 120 deg apart. The likely source of this fable is the result of the typical naive implementation of the sine wave PWM inverter used in sine drives.
Voltage Source Inverters
A device that transforms a DC voltage into an AC voltage is called an electrical inverter, or voltage source inverter. Generally a PWM signal is used to drive a H-bridge that efficiently applies either the positive or negative bus voltage to an inductive load. There are several algorithms that can be used to calculate a PWM signal that will create a desired output voltage.
Simple inverter modulation
Given 3 voltages: Vu,v,w one could create the PWM duty cycle to be a linear transformation (gain and offset) of the desired voltage.
- For example:
- if Vu = 0.5 * Vsupply * sin(theta)
- then in a positive voltage only system we shift the output up by half the supply voltage:
- Vu_output = Vu + Vsupply / 2
- The necessary PWM duty cycle to produce this voltage is:
- PWMdc = Vu_output/Vsupply
However, if the voltages are 120 shifted sine waves, then when one of the voltage is maximum, the other two are 60 degrees away from their minima. Thus the maximum voltage across the motor is 0.75*Vsupply.
Better inverter modulation
At any point one of the 3 phase voltages can be considered to be the most negative of the three. One could apply an offset to all the voltages, so that the most negative is zero.
- Let Vn = min(Vu, Vv, Vw) (Vn is most negative voltage)
- Va = Vu - Vn
- Vb = Vv - Vn
- Vc = Vw - Vn
All the voltages are >= zero, and the maximum is 86.6% of the supply. The maximum amplitude of the voltages entering the modulator can be increased by 15.4% without over-modulation.
This better inverter modulation can be applied to both sine drive and FOC drive outputs.
The modulation method has the advantage over sinusoidal and space vector modulation (SVM) in that 2 fewer H-bridge devices are PWM modulated. Thus switching losses are reduced by 1/3.
Space Vector Modulation
In most discussions of FOC, space vector modulation is used to compute the PWM pulse periods needed to drive the inverter. One stated advantage of SVM is that the harmonic content of the modulation is lower than for other modulations methods. It is also said that it provides 15% greater drive voltage than traditional sine drives. However, SVM is relatively computationally expensive and somewhat complicated to implement or even understand.
Sources of addition discussion on SVM.