Building on the fundamentals of BLDC motor operation and
control
covered in Part 1, Part
2 and Part
3 in this series, let's now turn our
attention to putting this knowledge to work, shifting from the earlier
six-step 120-degree modulation to an examination of 180-degree
modulation.
We will also discuss sinusoidal modulation including an
example of code used to generate a sine wave as well. Later we will
discuss open-loop V/f control and closed-loop control, as well as a few
last words on vector control.
180-degree modulation
Recall that for six-step 120-degree modulation, power switches are
turned on and off so that the current passes through two coils, as
shown in Figure 28. Every 60 degrees we switch connections so that the
current flowing from coil U to V now flows from U to W. This switching
effectively keeps the V coil free of current for the next 60 degrees.
During this period when no current flows in the V coil, the back-EMF
signal generated by the rotor's magnetic field can be detected in the V
coil. The progression of six-step coil energization is shown in Figure 29, below.
 |
| Figure
29. Progression of six coil energization steps. |
Another way to understand 120-degree modulation is to look at the
timing of Up, Vp, and Wp during electrical rotation. Each phase is
energized for a time that corresponds to 120 degrees of electrical
rotation. Phase Up is on for 120 degrees; Vp is on for the next 120
degrees; and finally Wp is on for the rest of the cycle. Lower switches
are turned on and off to provide the path for current flow. In this
scheme, there is a period of 120 degrees of rotation in which, for
example, phase U does not create any torque on the rotor. Effectively
each coil is utilized at only 2/3 of its capacity.
However, if we could use each coil for the entire electrical period,
we would be able to generate more torque on the rotor. So, rather than
turning on Up for 120 degrees of rotation and then waiting another 60
degrees before turning on Un, what if we could keep Up on for an entire
180 degrees of rotation with no long wait period before turning Un on?
This modulation scheme is viable, but only if we provide enough
transition time between the act of turning Up off and turning Un on to
protect the switches from a short circuit. If we turn Un on before Up
has been properly turned off, we risk creating a short circuit that can
explode the power switches. The transition time required to safely
implement this 180-degree modulation scheme is known as dead time.
 |
| Figure
30. 180 degree modulation scheme using three coils at a time |
Effectively with 180-degree modulation we are passing the current
through all three coils at all times, inserting a small transition time
to protect the power switches each time the direction of the current is
switched.
For the first 60 degrees, current flows in from Up and from Wp and
exits the Vn coil as shown in Figure
30, above. The Wn coil is no longer free, as it now also passes
the
current. Next we switch Wp and Wn so that the current direction
changes, and for the next 60 degrees, current flows in from Up and
exits the Vn and Wn coils.
We continue in a similar fashion for the next four steps. In this
way, the coils are utilized fully at all times to create torque on the
rotor. Note that the ability to detect back-EMF is greatly diminished
because of the short dead time.
Generally we say that with 180-degree
modulation, there is no back-EMF detection. This statement is correct
for all practical purposes. The dead-time requirement also affects the
MCU timers, as a dead-time register must be used to insert the proper
delay before each phase can be turned on.
We can contrast 120-degree modulation with 180-degree modulation as
follows. The 120-degree technique uses only 2/3 of the electrical
period to create torque and rotate the motor, whereas the 180-degree
modulation scheme uses the entire electrical period.
Torque created using 120-degree modulation contains ripples, because
torque is applied to a coil for the first 120 degrees, is not applied
for the next 60 degrees, and then is applied again for 120 degrees.
However, because 180-degree modulation does away with the long
(60-degree) wait period, the current flow is smooth and torque ripples
are mostly eliminated. Moreover, 180-degree modulation makes possible
various other modulation strategies such as sine modulation, quasi-sine
modulation, and space vector modulation.
Let's consider the example of a timer with a dead-time register. The
Renesas M16C/Tiny
series microcontroller unit (MCU) has a special
3-phase timer, shown in Figure 31,
below,
which inserts the dead time required between turning the Up and Un
power switches on and off.
Timer channel B2 generates the carrier frequency and Timer channels
A1, A2, and A4 are used with buffers to set the pulse width modulation
(PWM) values for on and off counts. The first buffer holds the value
that turns on the output when a compare match occurs. The second buffer
holds the value to turn off the output on a compare match.
When the dead-time register is programmed with a value, two internal
signals—P for Up and N for Un—are modified by inserting the dead-time
count in the compare match. Then, negative signal N is turned off for
Un, dead time is inserted, and positive signal P is turned on for Up.
Thus our internal timer hardware makes sure that the upper and lower
switches are protected properly.
 |
| Figure
31. MI6C 3-phase time automatically inserts dead time |
The dead-time register is programmed once at the beginning of
operation, and the count value is dependent on the characteristics of
the power switches. Two internal buffer bits—Di0 and Di1—are programmed
to generate a specific high or low output on the compare match. The
compare-match output is high if the bits Di0 and Di1 are set to 0,1.
The output is low if these bits are set to 1,0. For the second buffer,
the bits are DiB0 and DiB1.
By changing the bits properly, a center-aligned or edge-aligned PWM
output can be generated easily. Since each channel has a set of buffer
bit settings, designers can change the behavior of any channel at will.
The MCU's 3-phase timer is quite versatile in its ability to
generate various modulation schemes. It can generate 180-degree, sine
wave, quasi-sine wave, space vector, or any custom modulation scheme.
It can also generate 120-degree modulation with 60-degree or 120-degree
modulation time. It can modulate the upper switches only, the lower
switches only, both switches together, or one at a time every 60
degrees. Because the phase timer has dual buffers—the first buffer for
the rising-edge compare match and the second buffer for the
falling-edge compare match—dual sampling of the angle is possible for
better sine-wave generation.
Sine-wave generation Using the MCU's 180-degree modulation
capability, we can generate a sine-wave output easily. In this case,
instead of a 360-degree electrical cycle period, we employ a period
called the carrier-wave-frequency period. During this period, we
calculate sine of the angle and set the PWM accordingly. The basic
steps to generate this sine-wave output, illustrated in Figure 32 below, are as follows:
1. Select a carrier wave
frequency fc such as 20kHz or 16kHz.
2. Select the voltage V0 and
frequency f of the output wave.
3. Compute the phase angle of
the voltage at every carrier-wave period.
4. Look up the corresponding
sine value from the table.
5. Multiply the sine value with
the modulation ratio to generate the PWM value.
6. Transfer the PWM values to
the registers.
 |
| Figure
32. Basic steps of sinewave generation. |
The basic formulas are listed below.

Let's examine in detail the steps for sine-wave generation. Three
values are required—the carrier frequency fc, the sine wave frequency
f, and the voltage level V0. We will use fc =10kHz, f =50 Hz, and
V0=100 % of the possible DC bus voltage. The maximum voltage level is
Vdc and the minimum voltage is zero, thus implying
Vmax
= Vdc and Vmin = 0.
The sine wave is generated from a center value to a maximum value V0
and then to a minimum value -V0. Therefore the center value is Vdc/2
computed as
(Vmax + Vmin)/2 = ½ Vdc.
Note that V0 (at maximum 100%) is also ½ Vdc. In our case,
Vdc = 160 volts; therefore, V0 = 80 volts and the center point is also
80 volts. The sine wave is now calculated as
½ Vdc + ½ Vdc * Sin
(theta).
We can write this as,
Vpwm = ½ Vdc + ½ Vdc
* Sin (theta).
We will get Vpwm = Vmax at 90 degrees and Vpwm = Vmin at 270 degrees
as expected.
The angle traversed every carrier frequency is now
theta = 2f / fc = 360 * 50 /
10000 =
360 / 200 = 1.8 degrees.
Also,
t = 1/fc = 1/10000 = 100 µs
period,
Max PWM count = t *
counting frequency, and
PWM max = t * 20MHz = 100 * 20 = 2000.
Because we are using a center-edged PWM generation timer, the
timer's B2 channel is ½ of this value. The timer B2 period is
1000 counts, and the first PWM for the rising edge is
PWM1 = 500 + 500 * Sin (theta).
We can compare this to
½ Vdc + ½ Vdc * Sin
(theta).
The second PWM for the falling edge is
PWM2 = 1000 - PWM1.
At 90 degrees, the sine of the angle is 1. We must therefore get the
maximum number of counts. At 270 degrees, the sine of the angle is -1
and we must get the minimum number of counts.
In summary, to generate a sine wave, we begin with theta=0 and then
set
the timer channel B2 to a value of 1000 counts for the count down. We
set the interrupt at every second underflow, which is the completion of
the triangular center-edge waveform.
In the interrupt routine, we compute the angle, look up the sine
table, and multiply by the voltage value to compute the PWM1 value. We
check this value for maximum and minimum bounds and then compute PWM2.
We will examine the code for this procedure in the next section.
You probably noticed that we performed a sine-table lookup in
generating PWM. How do we create this sine table? Since the MCU
performs all calculations in integer arithmetic, we must use a scaled
value for the sine table. We also must use a scaled value for the
voltage.
Using Microsoft Excel, we can create a sine table with one-degree
resolution similar to the one in Figure
33, below. We start at zero degrees and advance the table by one
degree
for each entry, using the sine of the average angle for the index. All
sine values are computed in floating values, as shown in the third
column.
 |
| Figure
33. Sine wave table and its graph with integer values |
We then convert these values to 2^13 format - that is, value 1 is
represented by 2^13 = 8192. Next we take the floor value of the
calculation to get the sine value in integer format. For the U value,
we continue with the angle computation, and for the V and W values, we
add a 240-degree and 120-degree offset, respectively, for the lookup
process. Then we plot the three values to see if correct sine waves
result.
Several important points should be noted. Applying a dynamically
changing PWM voltage to the stator results in sine-wave voltage and
current passing through the stator. This action requires a carrier
frequency. We select the value of the carrier frequency based on how
precise and accurate the applied sine wave must be and how large a
table our MCU's memory can handle. Typical carrier frequency values
falls in range of 2 to 20kHz.
However, many designers want to avoid the audible frequency range,
so they select values of or above 16kHz. Because a single PWM signal
cannot create negative current, a lower power switch is used to enable
the current to flow in the opposite direction. Positive and negative
PWM output switches are required. To protect these switches, dead time
must be inserted between positive and negative signals, as we have
discussed previously. Hardware-based dead time is more accurate than
software based dead time and reduces CPU bandwidth usage.
With sine-wave implementation, we can improve control performance
and efficiency. However, this process requires a true 3-phase timer
unit with dead time insertion for proper operation. Sine-wave
modulation is compared to trapezoidal modulation in Figure 34, below.
 |
| Figure
34. Comparison of 120 deg trapezoidal and 180 deg Sine wave modulation. |
Sine-wave generation example Now let's consider how to code a device
for sine-wave generation. We begin with a motor-control reference
platform, shown in Figure 35.
This platform consists of two boards—a
Starter Kit Plus (SKP) and a Power Board. A Renesas M16C/28 series MCU,
an LCD, and LEDs are mounted on the SKP. The power board has AC-to-DC
conversion and an integrated power module (IPM) with six power switches
plus drivers built in. The IPM uses a heat sink, as Figure 35 below shows.
 |
| Figure
35. Power and MCU board for controlling the motor. |
To measure the motor position and current in the U and V phases, the
power board provides a Hall-sensor input, an encoder input, and two
DCCT devices. Three back-EMF resistor ladders plus a fourth resistor
ladder for measuring the Vbus are also implemented on the board, too. A
precision shunt resistor on the low voltage side is also included to
measure the overall current or to perform a one-shunt current detection
technique for current measurements. Together these elements allow us to
run various BLDC algorithms.
 |
| Figure
36. Test set-up with Bodine motor. |
Our test set-up consists of a Bodine BLDC motor with two pole pairs,
as shown in Figure 36, above.
The MCU
is used to generate a sine-wave PWM series of various frequencies, and
the current waveforms are captured by the DCCT sensors. The basic
sine wave is generated as follows.
When the interrupt is entered, the MCU's firmware checks the
validity of the new frequency update. If the update is true, the new
frequency is commanded and the delta theta for angle computation is
updated. Delta theta is presented in 2^6 format, so delta theta = 64
means 1 degree, and delta theta = 96 means 1.5 degree.
The firmware then integrates the total angle, denoted as sinpt_sum,
by
adding the delta theta value. If the resulting sinpt_sum is greater
than 360 degrees ( 23040 using 2^6 format), then roll-over has occurred
and the sinpt_sum must be corrected to a new value by subtracting
23040. Then, sinpt_sum is scaled back by a 2^6 value to get an index in
the sine table. This index is called sin_pt in our code.
The constants C4_DAT and C2_DAT in our code are based on
carrier
frequency and represent ¼ and ½ counts for the
carrier-frequency time period. For example, assume that the carrier
frequency is 10kHz. Thus, the time period is 100 microoseconds.
Counting at 20MHz,
it represents 2000 counts. It follows that C4_DAT = 500 and C2_DAT =
1000 counts. Using the C4_DAT constant, three PWM values are computed,
as shown in Listing 1, below.
As you can see, sin_pt is
used as an index for the sine table.
Voltage is represented by the variable tqdat, and the entire
multiplication is scaled by 2^19 because sine values are given in 2^13
format and voltage values in 2^6 format. For V and W values, offset_v
and offset_w variables are
used. To rotate the motor forward, V and W
must have offsets of 240 and 120, respectively. To rotate the motor in
reverse, V and W must have offsets of 120 and 240. Notice that this
procedure is not unlike running the six-step state table in reverse
order.

Next, PWM values for U, V and W are checked for PWM_MIN and PWM_MAX
to protect the timer operations, and code is developed to reduce the
execution time. A PWM2 value is computed using the constant C2_DAT,
again to minimize the execution. Finally the six timer registers are
loaded, with ta4 and ta41 representing the PWM1 and PWM2 for U phase.
 |
| Figure
37. Current wave forms using DCCT sensors at 40 and 60 Hz sinewave. |
Since we have two buffers, we can integrate the angle for the
first-half period and use the first index for PWM1. Then we can
integrate the angle for the second-half period and use that index for
PWM2. Although this method doubles the number of sine lookups and thus
increases execution time, it also provides a higher-resolution sine
wave.
 |
| Figure
38. PWM output with 10kHz filtering. |
As Figure 37 above shows, we
capture the current waveforms at 40Hz and 60Hz using DCCT sensors with
10kHz filtering. As Figure 38
above shows, we capture the PWM
output from the MCU with 10kHz filtering to
view the PWM. We see that the DCCT current waveforms and PWM output are
sinusoidal and represent proper fidelity.
To read Part 1, go to The
basics of brushless motor control.
To read Part 2, go to Brushless motor control using Hall sensor
signal processing
To read Part 3, go to Pros and cons of sensor vs sensorless motor
control
Next in Part 5: V/f open-loop control
in DC brushless DC motors
Yashvant Jani
is
director of
application engineering for the system LSI business unit at Renesas
Technology America.
References
1. Power
Electronics and Variable Frequency Drives Technology and Applications,
Edited by Bimal K. Bose, IEEE Press, ISBN 0-7803-1084-5, 1997
2. Motor
Control Electronics Handbook, By Richard Valentine, McGraw-Hill,
ISBN 0-07-066810-8, 1998
3. FIRST
Course On Power Electronics and Drives, By Ned Mohan, MNPERE, ISBN
0-9715292-2-1, 2003
4.
Electric Drives, By Ned Mohan, MNPERE, ISBN 0-9715292-5-6, 2003
5. Advanced Electric Drives,
Analysis, Control and Modeling using Simulink, By Ned Mohan,
MNPERE, ISBN 0-9715292-0-5, 2001
6. DC Motors Speed Controls Servo Systems including Optical Encoders,
The Electro-craft Engineering Handbook by Reliance Motion Control, Inc.
7. Modern
Control System Theory and Application, By Stanley M. Shinners,
Addison-Wesley, ISBN 0-201-07494-X, 1978
8. The Industrial
Electronics Handbook, Editor-in-Chief J. David Irwin, CRC Press and
IEEE Press, ISBN 0-8493-8343-9, 1997
This article is excerpted from a
paper of the same name presented at the Embedded
Systems Conference Boston 2006.
|