1999:使用 H/W 與 S/W 確定切換模式,具備 TMS320C24x 的空間向量 PWM

Application Report
SPRA524
Space-Vector PWM With
TMS320C24x/F24x Using Hardware and
Software Determined Switching Patterns
Zhenyu Yu
Digital Signal Processing Solutions
Abstract
Space-vector (SV) pulse width modulation (PWM) technique has become a popular PWM
technique for three-phase voltage-source inverters (VSI) in applications such as control of AC
induction and permanent-magnet synchronous motors. This document gives an in-depth
discussion of the theory and implementation of the SV PWM technique.
Two different SV PWM waveform patterns, one using the regular compare function on the Texas
Instruments (TIä) TMS320C24x/F24x digital signal processors (DSPs) and another implemented
with the SV PWM hardware module on the TI TMS320C24x/F24x DSPs are presented, with
complete code examples for the TMS320F243/1. At the end, a complete AC induction motor
control application is discussed to show the effectiveness of both approaches.
PWM waveforms of the presented implementations and experimental data in the form of motor
currents are shown and discussed. A full TMS320F243/1 program example is attached. The
observation of dead band imbalance for the hardware-implemented SVPWM pattern in this report
has not been seen in other publications.
Contents
Introduction ......................................................................................................................................................2
Background......................................................................................................................................................3
Theory of SV PWM Technique..................................................................................................................3
SV PWM Waveform Patterns....................................................................................................................9
Application in Three-Phase AC Induction Motor Control ................................................................................20
Experimental Results .....................................................................................................................................22
Conclusions ...................................................................................................................................................22
References.....................................................................................................................................................24
Appendix A. Program for Open-Loop Three-Phase AC Induction Motor Control With SV PWM Technique
and Constant V/Hz Principle ..........................................................................................................................25
Digital Signal Processing Solutions
March 1999
Application Report
SPRA524
Figures
Figure 1.
Figure 2.
Figure 3.
Figure 4.
Figure 5.
Figure 6.
Figure 7.
Figure 8.
Figure 9.
Figure 10.
Figure 11.
Figure 12.
Figure 13.
Figure 14.
Symmetric and Asymmetric PWM Signals .....................................................................................2
Three-Phase VSI Diagram .............................................................................................................3
The Basic Space Vectors (Normalized w.r.t. V dc) and Switching States ........................................5
Software Determined SV PWM Waveform Pattern ......................................................................10
Switching Direction for Software Determined SV PWM Pattern...................................................11
SV PWM Outputs With Carrier Filtered Out .................................................................................13
SV PWM Outputs With Carrier Filtered Out and Dead Band Enabled .........................................14
Hardware-Implemented SV PWM Waveform Pattern ..................................................................15
SV PWM Outputs With Carrier Filtered Out .................................................................................19
SV PWM Outputs With Carrier Filtered Out and Dead Band Enabled .........................................19
Program Flow Chart .....................................................................................................................20
Block Diagram of an Open-Loop AC Induction Motor Control System .........................................22
Motor Current and Spectrum Obtained With the Software Approach...........................................23
Motor Current and Spectrum Obtained With the Hardware Approach .........................................23
Tables
Table 1. Device On/Off States and Corresponding Outputs of a Three-Phase VSI ........................................4
Table 2. Determination of the Sector of Uout Based on N ................................................................................8
Table 3. Hardware and Software Determined SV PWM Switching Pattern Comparison.................................9
Introduction
Because of advances in solid state power devices and microprocessors, PWM inverters
are becoming more and more popular in today’s motor drives. PWM inverters make it
possible to control both the frequency and magnitude of the voltage and current applied
to a motor. As a result, PWM inverter-powered motor drives offer better efficiency and
higher performance compared to fixed frequency motor drives. The energy that a PWM
inverter delivers to a motor is controlled by PWM signals applied to the gates of the
power transistors, as shown in Figure 1.
Figure 1. Symmetric and Asymmetric PWM Signals
Symmetric PWM
PWM
period
PWM
period
PWM
period
PWM
period
Asymmetric PWM
Different PWM techniques (ways of determining the modulating signal and the switchon/switch-off instants from the modulating signal) exist. Popular examples are sinusoidal
PWM, hysteric PWM and the relatively new space-vector (SV) PWM. These techniques
are commonly used for the control of AC induction, BLDC and Switched Reluctance (SR)
motors. The SV PWM technique for three-phase voltage-source inverter (VSI) is
addressed in this application.
Space-Vector PWM With TMS320C24x/F24x Using Hardware and Software Determined
Switching Patterns
2
Application Report
SPRA524
Background
Theory of SV PWM Technique
The structure of a typical three-phase VSI is shown in Figure 2. As shown below, Va, Vb
and Vc are the output voltages of the inverter. Q1 through Q6 are the six power transistors
that shape the output, which are controlled by a, a’, b, b’, c and c’. When an upper
transistor is switched on (i.e., when a, b or c is 1), the corresponding lower transistor is
switched off (i.e., the corresponding a’, b’ or c’ is 0). The on and off states of the upper
transistors, Q1, Q3 and Q5, or equivalently, the state of a, b and c, are sufficient to
evaluate the output voltage for the purpose of this discussion.
Figure 2. Three-Phase VSI Diagram
Q1
Q3
a
V dc
Q5
b
c
+
Q2
Q4
a'
Q6
c'
b'
Va
Vb
Vc
motor phases
t
The relationship between the switching variable vector [a, b, c] and the line-to-line output
t
voltage vector [Vab Vbc Vca] and the phase (line-to-neutral) output voltage vector [Va Vb
t
Vc] is given by equation 1 and equation 2 below.
éVab ù
é 1 - 1 0 ù éa ù
ê ú
ê
úê ú
1 - 1ú êb ú
êVbc ú = Vdc ê 0
êëVca úû
êë- 1 0
1 úû êë c úû
(equation 1)
éVa ù
é 2 - 1 - 1ù éa ù
ê ú 1 ê
úê ú
êVb ú = 3 Vdc ê- 1 2 - 1ú êb ú
êëVc úû
êë- 1 - 1 2 úû êë c úû
(equation 2)
where Vdc is the DC supply voltage, or bus voltage.
As shown in Figure 2, there are eight possible combinations of on and off states for the
three upper power transistors. The eight combinations and the derived output line-to-line
and phase voltages in terms of DC supply voltage Vdc, according to equations 1 and 2,
are shown in Table 1.
SV PWM refers to a special way of determining the switching sequence of the upper
three power transistors of a three-phase VSI. It has been shown to generate less
harmonic distortion in the output voltages and or currents in the windings of the motor
load and provides more efficient use of DC supply voltage, in comparison to direct
sinusoidal modulation technique.
Space-Vector PWM With TMS320C24x/F24x Using Hardware and Software Determined
Switching Patterns
3
Application Report
SPRA524
Table 1. Device On/Off States and Corresponding Outputs of a Three-Phase VSI
a
b
c
va
vb
vc
vab
vbc
vca
0
0
0
0
0
0
0
0
0
1
0
0
2/3
–1/3
–1/3
1
0
–1
1
1
0
1/3
1/3
–2/3
0
1
–1
0
1
0
–1/3
2/3
–1/3
–1
1
0
0
1
1
–2/3
1/3
1/3
–1
0
1
0
0
1
–1/3
–1/3
2/3
0
–1
1
1
0
1
1/3
–2/3
1/3
1
–1
0
1
1
1
0
0
0
0
0
0
Assume d and q are the fixed horizontal and vertical axes in the plane of the three motor
phases. The vector representations of the phase voltages corresponding to the eight
combinations can be obtained by applying the following so-called d-q transformation to
the phase voltages:
Tabc-dq =
1
1 ù
é
1
2ê
2
2 ú
ê
ú
3
3ú
3ê
0
2
2 ûú
ëê
(equation 3)
t
This transformation is equivalent to an orthogonal projection of [ a, b, c] onto the two
t
dimensional plane perpendicular to the vector [1, 1, 1] in a three-dimensional coordinate
system, the results of which are six non-zero vectors and two zero vectors as shown in
Figure 3. The nonzero vectors form the axes of a hexagonal. The angle between any
adjacent two non-zero vectors is 60 degrees. The zero vectors are at the origin and apply
zero voltage to a three-phase load. The eight vectors are called the Basic Space Vectors
and are denoted here by U0, U60, U120, U180, U240, U300, O000 and O111.
The same d-q transformation can be applied to a desired three-phase voltage output to
obtain a desired reference voltage vector Uout in the d-q plane as shown in Figure 3. Note
that the magnitude of Uout is the rms value of the corresponding line-to-line voltage with
the defined d-q transform.
The objective of SV PWM technique is to approximate the reference voltage Uout
instantaneously by combination of the switching states corresponding the basic space
vectors. One way to achieve this is to require, for any small period of time T, the average
inverter output be the same as the average reference voltage Uout as shown in equation
4. Note, T1 and T2 in equation 4 are the respective durations for which switching states
corresponding to Ux and Ux+60 (or Ux-60) are applied. Ux and Ux+60 (or Ux-60) are the basic
space vectors that form the sector containing Uout. However, if we assume that the
change in reference voltage Uout is tiny within T, then equation 4 becomes equation 5,
where T1 + T2 £ T . Therefore, it is critical that T be small with respect to the speed of
change of Uout. In practice the approximation is done for every PWM period, Tpwm.
Therefore it is critical that the PWM period be small with respect to the speed of change
of Uout.
Space-Vector PWM With TMS320C24x/F24x Using Hardware and Software Determined
Switching Patterns
4
Application Report
SPRA524
Figure 3. The Basic Space Vectors (Normalized w.r.t. Vdc) and Switching States
(- 1
6, 1
2
)
U 12 0
(010)
2
3, 0
)
( n +1)T
òU
out
(t ) =
nT
U out (nT ) =
O 111
(111)
6, - 1
2
)
U 240
(001)
6, 1
U out
O 000
(000)
(- 1
1
T
(1
T1
U 180
(011)
(-
U 60
(110)
q
axis
(
1
(T1U x + T2 U x ± 60 )
T
(1
)
U0
(100)
T2
U 300
(101)
2
6, - 1
2
2
d
axis
3, 0
)
)
(equation 4)
1
(T1U x + T2 U x ± 60 )
T
(equation 5)
Equation 5 means that for every PWM period, Uout can be approximated by having the
inverter in switching states Ux and Ux+60 (or Ux-60) for T1 and T2 duration of time
respectively. Since the sum of T1 and T2 should be less than or equal to Tpwm, the inverter
needs to be in O000 or O111 state for the rest of the period. Therefore, equation 5 becomes
equation 6 in the following, where T1 + T2 + To = Tpwm =T.
Tpwm U out = T1 U x + T2 U x ± 60 + T0 (0 000 or 0111 )
(equation 6)
From equation 6, we get equation 7 for T1 and T2.
[T1
T2 ] = T pwm [U x
where
t
[U x
U x ± 60 ] U out
-1
(equation 7)
-1
U x ± 60 ] is the normalized decomposition matrix for the sector.
Assume the angle between Uout and Ux is
8 in the following for T1 and T2.
T1 = 2T pwm U out cos(a + 30°)
T2 = 2T pwm U out sin(a )
a . From Figure 3, we can also obtain equation
(equation 8)
Depending on specific application, calculation of T1 and T2 can be done either with
equation 7 or equation 8. Equation 7 is sector dependent. However, the matrix inverse
can be calculated off-line for each sector and obtained via a look-up table during on-line
t
calculation. This approach is useful when Uout is given in the form of vector [Ud, Uq] .
Equation 8 is independent of sector and is useful when Uout is given in the form of
magnitude and phase angle.
Space-Vector PWM With TMS320C24x/F24x Using Hardware and Software Determined
Switching Patterns
5
Application Report
SPRA524
Ux can be the closest basic space vector on either side of Uout. Ux+60 (or Ux-60) is then the
basic space vector on the opposite side. In either case, T1 represents the component on
Ux, T2 represents the component on the other basic space vector.
The following is a code example to calculate T1 and T2 (as compare values) using
equation 7.
Example 1. Code Example for Calculation of T1 and T2 Using Equation 7
.data
********************************************************************
** Decomposition matrices indexed by the sector, s, Uout is in
**
********************************************************************
decomp_
.WORD 20066
; D1–scaled by 2 to the 14th power
.WORD -11585
.WORD 0
.WORD 23170
;
;
.WORD
.WORD
.WORD
.WORD
-20066
11585
20066
11585
.WORD
.WORD
.WORD
.WORD
0
23170
-20066
-11585
.WORD
.WORD
.WORD
.WORD
0
-23170
-20066
11585
.WORD
.WORD
.WORD
.WORD
-20066
-11585
20066
-11585
.WORD 20066
.WORD 11585
.WORD 0
.WORD -23170
.
.
.bss decomp,24
.bss temp,1
; decomposition matrices
; temporary storage
.txt
********************************************************************
** Initialize the decomposition matrices
**
********************************************************************
LAR
AR0,#decomp
; Point to 1st destination
LAR
AR1,#(24-1)
; 24 entries
LACC #decomp_
; Point to 1st data item
MAR
*,AR0
; Point to AR0
init_table
Space-Vector PWM With TMS320C24x/F24x Using Hardware and Software Determined
Switching Patterns
6
Application Report
SPRA524
TBLR *+,1
; Move data&pnt to nextdesti.
ADD
#1
; Point to next data item
BANZ init_table,0
; Continue if there is more
;
.
;
.
;------------------------------------------------------------------; Calculate T1&T2 as compare values based on:
Tpwn Uout=V1*T1+V2*T2
;
; i.e.
[T1 T2]=Tpwn*inverse[V1 V2]*Uout
; i.e.
[0.5*T1 0.5*T2]=Tp*inverse[V1 V2]*Uout
; i.e.
[0.5*C1 0.5*C2]=inverse[V1 V2]*Uout=M(sector)*Uout
; where
C1=T1/Tp, C2=T2/Tp, are normalized T1&T2 wrt Tp
;
M(sector)=inverse of [V1 V2] = decomposition matrix
;
obtained through table lookup
;
Uout=Transpose of [Ud Uq]
;
Tp=Timer 1 period = 0.5*Tpwm
;
Tpwm=PWM period Tpwm
S: sector of Uout (0-5)
; Input
;
Ud: d compo. of Uout(0-1/sqrt(2)), D2(Scaled by 2**13)
;
Uq: q compo. of Uout(0-1/sqrt(2)), D2(Scaled by 2**13)
;
t1_period_: Timer period (for PWM freq)
;
t1_periods: Timer period in D10 (Scaled by 2**5)
; Output
cmp_0: 0.5(1-0.5C1-0.5C2)Tp cmp value for 1st-to-tog ch
;
cmp_1: cmp_0+0.5C1Tp cmp value for 2nd-to-tog ch
;
cmp_2: cmp_1+0.5C2Tp cmp value for 3rd-to-tog ch
;-------------------------------------------------------------------LACC #decomp ;
ADD
S,2
;
SACL temp
; get the pointer
LAR
AR0,temp ; point to parameter table
; Calculate 0.5C1 based on 0.5C1=Ud*M(1,1)+Uq*M(1,2)
LT
Ud
; D2
MPY
*+
; M(1,1) Ud: D2*D1=D(3+1)
PAC
; D4
LT
Uq
; D4
MPY
*+
; M(1,2) Uq: D2*D1=D(3+1)
APAC
; 0.5*C1: D4+D4=D4
BGEZ cmp1_big0 ; continue if bigger than zero
ZAC
; set to 0 if less than zero
cmp1_big0
SACH temp
; D4
LT
temp
; D4
MPY
t1_periods
; *Tp: D4*D10 = D(14+1)
PAC
;
Sach cmp_1
; 0.5C1Tp: D15 (integer)
; Calculate 0.5C2 based on 0.5C2=Ud*M(2,1)+Uq*M(2,2)
LT
Ud
; D2
MPY
*+
; M(2,1) Ud: D2*D1=D(3+1)
PAC
; D4
LT
Uq
; D4
MPY
*+
; M(2,2) Uq: D2*D1=D(3+1)
APAC
; 0.5*C2: D4+D4=D4
BGEZ cmp2_big0
; continue if bigger than zero
ZAC
; zero it if less than zero
cmp2_big0
SACH temp
; D4
LT
temp
; D4
MPY
t1_periods
; *Tp: D4*D10 = D(14+1)
Space-Vector PWM With TMS320C24x/F24x Using Hardware and Software Determined
Switching Patterns
7
Application Report
SPRA524
PAC
Sach
;
; 0.5C2Tp: D15 (integer)
cmp_2
; Calculate compare value 3 based on 0.5C0Tp=(1-0.5C1-0.5C2)Tp
LACC #t1_period_ ; Calculate 0.5*C0
SUB
cmp_1
;
SUB
cmp_2
; 0.5*C0Tp = (1-0.5*C1 -0.5*C2)Tp: D15
BGEZ cmp0_big0
; continue if bigger than zero
ZAC
; zero it if less than zero
cmp0_big0
sfr
; divide by 2
SACH cmp_0
; 0.25*C0Tp: D15 (integer)
Note that the D scaling notation is equivalent to the more popular Q notation. Their
relationship is Qx=D(15-x). Therefore, the notation Dx means that the decimal point is at
bit[15-x]. Whenever possible, the code examples in this report use maximum scaling to
increase resolution and accuracy. For example, since the range of phase angle, q, is 0 to
2*pi (or 0 to 6.283), it is designated as a D3 (or Q12) number for maximum resolution.
12
Therefore the digital representation, qd, for q is related to q by qd=q*2 , i.e., scaled up by
th
2 to the 12 power.
It is necessary to know which sector the reference output voltage is in to determine the
switching time instants and sequence. For applications where the reference output
voltage vector is given in the form of magnitude and phase angle, such as the program
example attached, sector determination is obvious. For applications where the reference
t
output voltage is in terms of vector [Ud, Uq] , such as where the output voltage vector is
derived from an inner current control loop in the d-q frame, the following algorithm can be
used to determine the sector of the reference voltage vector. First calculate vref1, vref2 and
vref3 based on equation 9, below.
v ref 1 = Uq
v ref 2 = sin 60 0 U d - sin 30 0 U q
(equation 9)
v ref 3 = - sin 60 0 U d - sin 30 0 U q
Secondly, calculate N=sign(vref1)+2*sign( vref2)+4*sign(vref3). Thirdly, refer to Table 2
below to map N to the sector of Uout.
Table 2. Determination of the Sector of Uout Based on N
N
1
2
3
4
5
6
Sector
1
5
0
3
2
4
The code examples in this document are based on knowing the phase angle of the
reference voltage Uout. Therefore, the look-up tables are all in term of sector number of
Uout. The same look-up tables can easily be rearranged in terms of N instead when the
t
reference voltage is given in terms of vector [Ud, Uq] .
Space-Vector PWM With TMS320C24x/F24x Using Hardware and Software Determined
Switching Patterns
8
Application Report
SPRA524
As mentioned above, the reference voltage vector Uout is actually the desired three-phase
output voltages mapped to the d-q frame through d-q transformation. When the desired
output voltages are three-phase sinusoidal voltages with 120-degree phase shift, Uout
becomes a revolving vector with the same frequency and a magnitude equal to the
corresponding line-to-line rms voltages. The envelope of the hexagonal formed by the
basic space vectors, as shown in Figure 3, is the locus of maximum Uout. Therefore, the
magnitude of Uout must be limited to the shortest radius of this envelope when Uout is a
revolving vector. This gives a maximum magnitude of Vdc 2 for Uout.
Correspondingly, the maximum rms values of the line-to-line and phase output voltages
are Vdc 2 and Vdc 6 , which is 2 3 times higher than that which an original sinusoidal
PWM technique can generate. For the same reason, the bus voltage ( Vdc ) needed for a
motor rated at Vrate is determined by Vdc = 2 Vrate for SV PWM technique.
SV PWM Waveform Patterns
The arrangement of the order of Ux, Ux±60, O000 and or O111 in each PWM period is
another problem that must be resolved. Different switching orders result in different
waveform patterns. Two symmetric switching orders, one that can be easily implemented
with TMS320C24x/F24x by software-determined toggling sequences and another
implemented by the SV PWM hardware module on the TMS320C24x/F24x, are
discussed in this section. Table 3 is a brief comparison between the two switching
patterns.
Table 3. Hardware and Software Determined SV PWM Switching Pattern Comparison
Switching
Pattern
CPU Overhead
(Instruction Cycle)
Memory Usage
(Word)
# Switching
Dead Band
Imbalance
H/W determined
27
31
4
Yes
S/W determined
33
41
6
No
Software-Determined Switching Pattern
Figure 4 below shows the waveform for each sector of a symmetric switching scheme.
This scheme can easily be implemented with the TMS320C24x/F24x using software
determined switching order for the three PWM channels. Figure 5 is another illustration of
the switching scheme, where the arrows indicate for each sector the order of the first and
second basic space vectors. This switching scheme can be represented by (O000, Ux,
Ux±60, O111, O111, Ux±60, Ux, O000), where x can be 0, 120 and 240. It has the following
properties:
r
r
r
r
Each PWM channel switches twice per every PWM period except when the duty
cycle is 0% or 100%.
There is a fixed switching order among the three PWM channels for each sector.
Every PWM period starts and ends with O000.
The amount of O000 inserted is the same as that of O111 in each PWM period.
Space-Vector PWM With TMS320C24x/F24x Using Hardware and Software Determined
Switching Patterns
9
Application Report
SPRA524
Figure 4. Software-Determined SV PWM Waveform Pattern
T0/4
T1/2 T2/2
T0/2
T2/2 T1/2
T0/4
T0/4
a
a
b
b
c
c
T1/2 T2/2
T0/2
T2/2 T1/2
T0/4
(000) (100)(110) (111) (110) (100) (000)
O000 U120 U60 O111 U60 U120 O000
(000) (010)(110) (111) (110) (010) (000)
Uout in sector of U0 – U60
Uout in sector of U60 – U120
O000
T0/4
U0
U60
T1/2 T2/2
O111
T0/2
U60
U0
T2/2 T1/2
O000
T0/4
a
a
b
b
c
c
O000
U120 U180
O111
U180 U120
O000
T0/4
T1/2 T2/2
T0/2
T2/2 T1/2
T0/4
O000
U240 U180 O111
U180 U240
O000
(000) (010)(011) (111) (011) (010) (000)
(000) (001)(011) (111) (011) (001) (000)
Uout in sector of U120 – U180
Uout in sector of U180 – U240
T0/4
T1/2 T2/2
T0/2
T2/2 T1/2
T0/4
a
a
b
b
c
c
O000
U240 U300
O111
U300 U240
O000
(000) (001)(101) (111) (101) (001) (000)
Uout in sector of U240 – U300
T0/4
T1/2 T2/2
T0/2
T2/2 T1/2
T0/4
O000
U0
O111
U300 U0
O000
U300
(000) (100)(101) (111) (101) (100) (000)
Uout in sector of U300 – U0
Implementation of this switching scheme with TMS320C24x/F24x involves two steps:
1)
Initialization of the compare units and selected GP Timer for symmetric PWM
2)
Determination of the channel-toggling sequence based on the look-up table and the
load of compare registers based on which sector (s) Uout is in.
Space-Vector PWM With TMS320C24x/F24x Using Hardware and Software Determined
Switching Patterns
10
Application Report
SPRA524
Figure 5. Switching Direction for Software Determined SV PWM Pattern
(- 1
6, 1
2
)
U 12 0
(010)
2
3, 0
(1
T1
U 1 80
(011)
(-
U 60
(110)
q
axis
U out
O 000
(000)
)
(- 1
O 111
(111)
6, - 1
2
)U
240
(001)
6, 1
(
(1
)
U0
(100)
T2
U 300
(101)
2
6, - 1
2
2
d
axis
3, 0
)
)
Example 2 shows a TMS320C24x/F24x code example that implements this SV PWM
scheme.
Example 2. TMS320F243/1 Code for Software Determined Switching Pattern
.data
********************************************************************
** Addresses of compare registers corresponding to the 1st-to toggle*
** channels in a given period indexed by the sector, s, Uout is in. *
********************************************************************
first_
.WORD CMPR1
;
.WORD CMPR2
;
.WORD CMPR2
;
.WORD CMPR3
;
.WORD CMPR3
;
.WORD CMPR1
;
********************************************************************
** Addresses of compare registers corresponding to the 2nd-to toggle*
** channels in a given period indexed by the sector, s, Uout is in. *
********************************************************************
second_
.WORD CMPR2
;
.WORD CMPR1
;
.WORD CMPR3
;
.WORD CMPR2
;
.WORD CMPR1
;
.WORD CMPR3
;
.bss
.bss
.bss
temp0,1
temp1,1
temp2,1
; temporary storage
; temporary storage
; temporary storage
.text
********************************************************************
** Initialize GP Timer 1 and full compare units for symmetric PWM **
********************************************************************
; Set GP Timer 1 period according to PWM period.
; GP Timer 1 period = PWM period/50nS/2: t1_period_
SPLK #t1_period_,T1PER
Space-Vector PWM With TMS320C24x/F24x Using Hardware and Software Determined
Switching Patterns
11
Application Report
SPRA524
; Set GP Timer 1 mode.
; Put GP Timer 1 in continuous-up/down mode for symmetric PWM
SPLK #1000100000000010b,T1CON
; Set PWM output polarities.
; PWM1,3&5 are active high. PWM2,4&6 are active low.
SPLK #0000011001100110b,ACTR
; Define and enable dead band.
; Set dead band to 1*32*50nS=1.6uS
SPLK #1f4h,DBTCON
; Enable PWM outputs and compare operation
SPLK #1000001000000111b,COMCON
;
.
;
.
********************************************************************
** Determine channel toggling sequence and load compare registers **
** Input: s(0-5)-sector number
**
**
cmp_0(0.25C0Tp), cmp_1(0.5C1Tp), cmp_2(0.5C2Tp)
**
** Output: compare values in compare registers CMPR1,2,3
**
********************************************************************
LACC #first_
;
ADD
s
; point at entry in
;
1st-to-toggle lookup table
TBLR temp0
; get compare register addr of
;
1st-to-toggle channel
LAR
AR0, temp0
; point at the compare register
LACC cmp_0
; get cmp_0
SACL *
; load compare register
LACC
ADD
#second_
s
TBLR
temp1
LAR
LACC
ADD
SACL
AR0,temp1
cmp_0
cmp_1
*
LACC
SUB
ADD
SUB
ADD
SACL
#CMPR3
temp0
#CMPR2
temp1
#CMPR1
temp2
LAR
LACC
ADD
ADD
SACL
AR0, temp2
cmp_0
cmp_1
cmp_2
*
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
point at entry in
2nd-to-toggle lookup table
get the compare register addr of
2nd-to-toggle channel
point at the compare register
cmp_0+cmp_1
load compare register
get the compare register
addr of 3rd-to-toggle channel
point at the compare register
cmp_0+cmp_1+cmp_2
load compare register
Space-Vector PWM With TMS320C24x/F24x Using Hardware and Software Determined
Switching Patterns
12
Application Report
SPRA524
Notice that the compare values must be integers; i.e., their scaling must be D15 (or Q0).
For this code example, a, b and c in Figure 4 represent, respectively, the state of the
PWM1, 3 and 5 outputs and the polarities of these PWM channels are ACTIVE HIGH.
Figure 6 shows the PWM outputs, i.e., the inverter outputs, of this PWM waveform
pattern after the carrier has been taken out with a low-pass filter. The first and third
waveforms in the figure are two of the three PWM outputs. The waveform in the middle is
the difference between the two, representing the line-to-line inverter output voltage
applied to a motor load. Figure 7 shows the same PWM outputs when dead band is
enabled. The waveforms are essentially the same.
Figure 6. SV PWM Outputs With Carrier Filtered Out
Space-Vector PWM With TMS320C24x/F24x Using Hardware and Software Determined
Switching Patterns
13
Application Report
SPRA524
Figure 7. SV PWM Outputs With Carrier Filtered Out and Dead Band Enabled
Hardware-Implemented Switching Pattern
Figure 8 below shows two symmetric switching patterns implemented by the SV PWM
hardware module on the TMS320C24x/F24x for each sector. The rule of these switching
patterns can be summarized as (Ux, Ux±60, Oyyy, Oyyy, Ux±60, Ux), where Oyyy can be O000 or
O111, whichever differs from Ux±60 by the state of only one channel, and x can be 0, 60,
120, 180, 240, or 300. The following are some remarks about this switching scheme:
r
r
r
There is always a channel staying constant for the entire PWM period. So the
number of switching times for this scheme is less than the software-determined
scheme. The obvious result of this is reduced switching losses.
For the type of application addressed, dead band is necessary between the
complimentary pairs of PWM channels, i.e., PWM1 and 2, PWM3 and 4, and PWM5
and 6 on the TMS320C24x/F24x to avoid shoot-through faults. Dead band is inserted
only when there is a transition to turn off one device and turn on the other device on
the same inverter leg.
Therefore dead band does not affect the channel that stays unchanged. Since the
same channel may stay unchanged for the entire sector, this may be true for a long
time duration depending on the commanding frequency. As a result, the dead band
will affect the three PWM outputs unevenly, resulting in small harmonics in the
inverter line-to-line outputs. Depending on the application, this drawback may or may
not be an important issue.
The two switching patterns for each sector are results of two switching directions.
Theoretically, different switching directions can be combined in different ways to
obtain a composite switching order. However, no advantage has been observed until
now to use a composite order other than maintaining a constant direction for all the
sectors.
Space-Vector PWM With TMS320C24x/F24x Using Hardware and Software Determined
Switching Patterns
14
Application Report
SPRA524
Figure 8. Hardware-implemented SV PWM Waveform Pattern
T 1 /2
T 2 /2
T0
T 2 /2
T 1 /2
T 1 /2
PWM1
PWM1
PWM3
PWM3
PWM5
PWM5
U0
U 60
(100) (110)
O 111
(111)
U 60
U0
(110) (100)
U 60
U0
(110) (100)
U out in sector of U 0 - U 60 ,
SVRDIR=0, (D 2 D 1 D 0 )=(001)
T 1 /2
T 2 /2
T0
T 2 /2
T 1 /2
T 1 /2
PWM1
PWM3
PWM3
PWM5
PWM5
O 000
(000)
U 120
U 60
(010) (110)
T 2 /2
T0
T 2 /2
T 1 /2
T 1 /2
PWM1
PWM3
PWM3
PWM5
PWM5
O 111
(111)
U 180 U 120
(011) (010)
U out in sector of U 120 - U 180 ,
SVRDIR=0, (D 2 D 1 D 0 )=(010)
O 000
(000)
T 2 /2
T 1 /2
U0
U 60
(100) (110)
T0
O 111
(111)
T 2 /2
T 1 /2
U 60
U 120
(110) (010)
U out in sector of U 60 - U 120 ,
SVRDIR=1, (D 2 D 1 D 0 )=(010)
PWM1
U 120 U 180
(010) (011)
T 2 /2
U 120
U 60
(010) (110)
U out in sector of U 60 - U 120 ,
SVRDIR=0, (D 2 D 1 D 0 )=(011)
T 1 /2
T0
U out in sector of U 0 - U 60 ,
SVRDIR=1, (D 2 D 1 D 0 )=(011)
PWM1
U 60
U 120
(110) (010)
T 2 /2
T 2 /2
U 180 U 120
(011) (010)
T0
O 000
(000)
T 2 /2
T 1 /2
U 120 U 180
(010) (011)
U out in sector of U 60 - U 120 ,
SVRDIR=1, (D 2 D 1 D 0 )=(110)
Space-Vector PWM With TMS320C24x/F24x Using Hardware and Software Determined
Switching Patterns
15
Application Report
SPRA524
Figure 8. Hardware-implemented SV PWM Waveform Pattern (continued)
T 1/2
T 2/2
T0
T 2/2
T 1/2
T 1/2
PWM1
PWM1
PWM3
PWM3
PWM5
PWM5
U 180 U 240
(011) (001)
O 000
(000)
U 240
(001)
U 180
(011)
U 240 U 120
(001) (011)
U out in sector of U 180 - U 240 ,
SVRDIR=0, (D 2 D 1 D 0 )=(110)
T 1/2
T 2/2
T0
T 2/2
T 1/2
T 1/2
PWM1
PWM3
PWM3
PWM5
PWM5
O 111
(111)
U 300
(101)
U 240
(001)
T 2/2
T0
T 2/2
T 1/2
T 1/2
PWM1
PWM3
PWM3
PWM5
PWM5
O 000
(000)
U0
(100)
U 300
(101)
U out in sector of U 300 - U 0 ,
SVRDIR=0, (D 2 D 1 D 0 )=(101)
T 2/2
T 1/2
O 111
(111)
U 120
(011)
U 240
(001)
T0
T 2/2
T 1/2
O 000
(000)
U 240
(001)
U 300
(101)
U out in sector of U 240 - U 300 ,
SVRDIR=1, (D 2 D 1 D 0 )=(101)
PWM1
U 300
U0
(101) (100)
T 2/2
U 300 U 240
(101) (001)
U out in sector of U 240 - U 300 ,
SVRDIR=0, (D 2 D 1 D 0 )=(100)
T 1/2
T0
U out in sector of U 180 - U 240 ,
SVRDIR=1, (D 2 D 1 D 0 )=(001)
PWM1
U 240 U 300
(001) (101)
T 2/2
T 2/2
U0
U 300
(100) (101)
T0
T 2/2
T 1/2
O 111
(111)
U 300
(101)
U0
(100)
U out in sector of U 300 - U 0 ,
SVRDIR=1, (D 2 D 1 D 0 )=(011)
The SV PWM hardware on the TMS320C24x/F24x requires the application software to
generate Uout, determine that the sector Uout is in, and perform the decomposition to get
T1 and T2 (in terms of timer counts) for each PWM period. Then, for each PWM period,
the software only needs to accomplish the following steps:
1)
Load the binary bit pattern corresponding to the starting basic space vector into
bits[12-14] of the Action Control Register (ACTR), and the switching direction into
bit[15] of ACTR, with 0 representing anti-clockwise and 1 representing clockwise.
Space-Vector PWM With TMS320C24x/F24x Using Hardware and Software Determined
Switching Patterns
16
Application Report
SPRA524
2)
Load 0.5*T1 into the Full Compare Register 1 (CMPR1) and 0.5*T1+0.5*T2 into the
Full Compare Register 2 (CMPR2).
The state machine in the hardware SV PWM logic monitors the register configurations
and respective compare matches for the whole PWM period and does what is necessary
to generate the waveform patterns in Figure 5 according to the configuration. Therefore,
implementation of SV PWM becomes even simpler with the help of the hardware SV
PWM module, as shown in the following TMS320C24x/F24x code example:
Example 3. TMS320F243/1 Code Example Using the Hardware SV PWM Module
.data
********************************************************************
** Lookup table for ACTR[15-12] for SV pulse-width
**
** modulation when the direction is clockwise, indexed by sector **
** number
**
********************************************************************
clkwise_
.WORD 1011000000000000b
.WORD 1010000000000000b
.WORD 1110000000000000b
.WORD 1100000000000000b
.WORD 1101000000000000b
.WORD 1001000000000000b
********************************************************************
** Lookup table for ACTR[15-12] for SV pulse-width
**
** modulation when the direction is clockwise indexed by sector
**
** number
**
********************************************************************
cckwise_
.WORD 0001000000000000b
.WORD 0011000000000000b
.WORD 0010000000000000b
.WORD 0110000000000000b
.WORD 0100000000000000b
.WORD 0101000000000000b
.bss
svpat,1
; temporary storage
.text
********************************************************************
** Initialize GP Timer 1 and full compare units for symmetric PWM **
********************************************************************
; Set GP Timer 1 period according to PWM period.
; GP Timer 1 period = PWM period/50nS/2: t1_period_
SPLK #t1_period_,T1PER
; Set GP Timer 1 mode.
; Put GP Timer 1 in continuous-up/down mode for symmetric PWM
SPLK #1000100000000010b,T1CON
; Set PWM output polarities.
; PWM1,3&5 are active high. PWM2,4&6 are active low.
SPLK #0000011001100110b,ACTR
; Define and enable dead band.
; Set dead band to 1*32*50nS=1.6uS
Space-Vector PWM With TMS320C24x/F24x Using Hardware and Software Determined
Switching Patterns
17
Application Report
SPRA524
SPLK
#1f4h,DBTCON
; Enable PWM outputs and compare operation
SPLK #1000001100000111b,COMCON
;
.
;
.
********************************************************************
** Determine ACTR pattern and reload ACTR and CMPR1&2
**
** based on sector, s, Uout is in.
**
** Input: s(0-5)-sector number
**
**
t1_period_: timer period (for PWM freq)
**
** Output: compare values in compare registers CMPR1,2
**
********************************************************************
LACC #cckwise_
ADD
s
; point to entry in lookup table
TBLR svpat
; get the pattern
LAR
AR0,#ACTR
; point to ACTR
LACC *
; read ACTR
AND
#0FFFh
; clear sv pattern bits
OR
svpat
; re-configure sv pattern bits
SACL *
; re-load ACTR
LAR
LACC
SACL
AR0,#CMPR1
; point to CMPR1
cmp_1
;
*+
; cmp_1=>CMPR1, point to CMPR2
ADD
SACL
cmp_2
*
SUB
BLEZ
SPLK
#t1_period_ ; limit CMPR2
in_lmt
;
# t1_period _,* ;
;
; cmp_2=>CMPR2
in_lmt
Figure 9 shows the PWM outputs of this waveform pattern after the carrier is taken out
with a low-pass filter. Again, the first and third waveforms are two of the three PWM
outputs. The waveform in the middle is the difference between the two PWM outputs,
representing the line-to-line inverter voltage output applied to a motor load. Figure 10
shows the same PWM outputs when dead band is enabled. The effects of dead band
imbalance are seen as distortion or harmonics in the line-to-line inverter voltage output in
Figure 10. This distortion can become significant when the dead band is big with respect
to the magnitude of inverter voltage output.
Space-Vector PWM With TMS320C24x/F24x Using Hardware and Software Determined
Switching Patterns
18
Application Report
SPRA524
Figure 9. SV PWM Outputs With Carrier Filtered Out
Figure 10. SV PWM Outputs With Carrier Filtered Out and Dead Band Enabled
Space-Vector PWM With TMS320C24x/F24x Using Hardware and Software Determined
Switching Patterns
19
Application Report
SPRA524
Application in Three-Phase AC Induction Motor Control
An example of the application of SV PWM techniques in open-loop three-phase AC
induction motor control is described in this section. Figure 11 shows the program flow
chart of the example.
Figure 11. Program Flow Chart
PWM ISR
Start
Integrate speed to get
phase THETA of Uout
System configuration
Initialize peripherals:
I/O pins
GP Timers
PWM
Int control
Initialize variables
Reset flags
Clear pending ints
Enable interrupt
Enable GP Timer
Background tasks:
Update set F
V/Hz profile
Update display
Reset watchdog
Determine quadrant
of U out and perform
quarter mapping
Obtain SIN(THETA)
and COS(THETA)
Calculate d-q
components of
U out
Determine sector of
U out
Calculate
T 1, T 2 & T 0
(as comp values)
Determine toggling
sequence
Load compare
registers
Enable interrupt
Return
Space-Vector PWM With TMS320C24x/F24x Using Hardware and Software Determined
Switching Patterns
20
Application Report
SPRA524
The following are steps in the main program:
1)
Configure the timers and compare units for symmetric PWM.
2)
Input desired speed.
3)
Obtain the magnitude of reference voltage vector Uout (based on constant V/Hz
profile).
4)
Update display, reset watchdog timer and loop back to 2.
The following are the steps in the interrupt driven SV PWM routine:
1)
Obtain the phase (q) of Uout by integrating the command speed.
2)
Obtain the sine and cosine of q with quarter mapping and table look-up, and calculate
the d-q component of Uout.
3)
Determine which sector Uout is in.
4)
Decompose Uout to obtain T1, T2 and T0 as compare values.
5)
Determine the switching pattern (for hardware approach) or sequence (for software
approach) and load the obtained compare values into corresponding compare
registers.
The major features of this implementation are:
r
r
r
r
r
32-bit integration to obtain the phase of the reference voltage vector
Quarter mapping to calculate SIN and COS functions
Sector-based table look-up for decomposition matrix
Sector-based table look-up for channel toggling order or Action Control Register
reload pattern
20-KHz PWM and sampling frequency
The block diagram of the implementation is shown in Figure 12. The on-line background
program takes about 4 ms of CPU time. The interrupt driven SV PWM routine takes about
9 ms for the software determined switching pattern and about 8.5 ms for the hardware
implemented switching pattern. The difference in code size is about 10 instruction words.
Space-Vector PWM With TMS320C24x/F24x Using Hardware and Software Determined
Switching Patterns
21
Application Report
SPRA524
Figure 12. Block Diagram of an Open-Loop AC Induction Motor Control System
Constant
V/Hz profile
DC Supply
Voltage
U out
Vcc
ADC
I/F
w
Obtain
U d & Uq
Obtain
SIN/COS
32-bit
integrator
Q
Obtain
Quadrant
Decompose
T1,T2&T0
Matrix
M
Table
look-up
Load cmp
registers
PWM
H/W
Inverter
Toggling
sequence
Obtain
Sector
Table
look-up
Experimental Results
Experimental results are presented below to demonstrate the effectiveness of the
discussed algorithms. Figure 13 is the motor current waveform and spectrum obtained
with the first scheme, which we call the software approach. Figure 14 is the motor current
waveform and spectrum obtained with the second scheme, which makes use of the
hardware SV PWM module. The inverter, LabDrive, used in the experiments is from
Spectrum Digital. The inverter is interfaced with a TMS320F243 EVM on which the motor
control program runs. A motor with a fan on the shaft was used as the load in the
experiments. The motor is a 4-pole, 3-phase AC induction motor rated at 60 Hz, 144 V
and 1/3 hp. It can be seen that little or no harmonics are present in the current
spectrums, demonstrating the effectiveness of the implemented SV PWM technique.
Conclusions
It has been shown that the SV PWM technique utilizes DC bus voltage more efficiently
and generates less harmonic distortion in a three-phase voltage-source inverter. This
document has presented an overview of SV PWM theory and two ways of SV PWM
implementation. Program examples for both approaches are given for Texas Instrument’s
TMS320C24x/F24x DSP controllers. The approach implemented with the hardware SV
PWM module on TMS320C24x/F24x reduces the number of switching times as
compared with the software-based approach. The direct result of this is switching
reduced losses, which may become significant if the power rating of the inverter is high.
Experimental results proved both implementations to be very effective.
Space-Vector PWM With TMS320C24x/F24x Using Hardware and Software Determined
Switching Patterns
22
Application Report
SPRA524
Figure 13. Motor Current and Spectrum Obtained With the Software Approach
Figure 14. Motor Current and Spectrum Obtained With the Hardware Approach
Space-Vector PWM With TMS320C24x/F24x Using Hardware and Software Determined
Switching Patterns
23
Application Report
SPRA524
References
1)
Trzynadlowski, A. M.; The Field Orientation Principle in Control of Induction Motors;
Kluwer Academic, 1994.
2)
Trzynadlowski, A. M., Kirlin, L, and Legowski, S. F.; “Space-Vector PWM Technique
With Minimum Switching Losses and a Variable Pulse Rate;” IEEE Transactions on
Industrial Electronics, Vol. 44, No. 2, April 1997.
3)
Trzynadlowski, A. M.; “An Overview of Modern PWM Techniques for Three-Phase,
Voltage-Controlled, Voltage-Source Inverter;” International Symposium on Industrial
Electronics 1996.
4)
Ogasawara, S., Akagi, H. et al; “A Novel PWM Scheme of Voltage Source Inverters
Based on Space Vector Theory;” EPE, Aachen, 1989.
5)
Zhenyu Yu, Figoli, David; AC Induction Motor Control Using Constant V/Hz Principle
and Space-Vector PWM Technique With TMS320C240; Texas Instruments Literature
Number SPRA284.
6)
Van der Broeck, F. G., Skudelny, H. C., Stanke, G.; “Analysis And Realization of a
Pulse Width Modulator Based on Voltage Space Vectors;” IEEE Transactions on
Industrial Applications, vol. IA-24, no.1, 1988, pp.142-150.
7)
Stefanovic, V. R.; Space-Vector PWM Voltage Control With Optimized Switching
Strategy; IEEE/IAS Annual Meeting, pp.1025-1033, 1992.
8)
Boglietti A., Griva G., Pastorelli M., Portumo F., Adam T.; Different PWM Modulation
Techniques Indexes Performance Evaluation; IEEE International Symposium on
Industrial Electronics, June1-3, 1993, Budapest, Hungary, pp.193-199.
9)
Mallinson, N.; “Plug & Play” Single Chip Controllers for Variable Speed Induction
Motor Drivers in White Goods and HVAC Systems; 1998 IEEE Applied Power
Electronics Conference.
10) Lai, Y-S, and Bowes, S. R.; “A Novel High Frequency Universal Space-Vector
Modulation Control Technique;” Proceedings of 1997 International Conference on
Power Electronics and Drive Systems, 1997, pp. 510-507.
11) Bowes, S. R., and Lai, Y-S; “The Relationship Between Space-vector Modulation and
Regular-Sampled PWM;” IEEE Transactions on Industrial Electronics, Vol. 44, No. 5,
October 1997.
12) Liu, Y-H, Chen, C-L, and Tu, R-J; “A Novel Space-Vector Current Regulation
Scheme for a Field-Oriented-Controlled Induction Motor Drive;” IEEE Transactions on
Industrial Electronics, Vol. 45, No. 5, October 1998.
13) Tzou, Y-Y, and Hsu, H-J; “FPGA Realization of Space-Vector PWM Control IC for
Three-Phase PWM Inverters;” IEEE Transactions On Power Electronics, Vol. 12, No.
6, November 1997.
Space-Vector PWM With TMS320C24x/F24x Using Hardware and Software Determined
Switching Patterns
24
Application Report
SPRA524
Appendix A. Program for Open-Loop Three-Phase AC
Induction Motor Control With SV PWM
Technique and Constant V/Hz Principle
********************************************************************
** File Name
: sv20b.asm
**
** Project
: ACI motor control
**
** Originator
: Zhenyu Yu
**
**
Texas Instruments
**
**
DSP Digital Control Systems Applications
**
** Target
: TMS320F243 EVM + SD i/f + SD inverter
**
********************************************************************
; Description
;------------------------------------------------------------------; This program implements an open-loop speed control algorithm for
; three-phase AC induction motors using constant v/f principle and
; SV PWM technique. The program allows the usage of either
; h/w or s/w determined switching patterns by changing the assembly
; directives.
;*******************************************************************
; Status
: Worked correctly
; Last update
: 2/1/99
;___________________________________________________________________
; Notes
;------------------------------------------------------------------; 1. This program implements an INT driven sampling and control loop
;
for three-phase AC induction motor control through a three-phase
;
voltage source inverter.
; 2. Constant v/f principle is used to generate the magnitude of
;
reference voltage from frequency input.
; 3. SV PWM technique is employed to generate a sinusoidal
;
type of three-phase voltage output from the inverter.
; 4. Both PWM and sampling frequencies are 20KHz.
; 5. Maximum scaling and 32 bit integration are used to maximize the
;
accuracy of integer math.
; 6. The motor is assumed to be rated at 60Hz, i.e., maximum voltage
;
output magnitude is achieved when freq (speed) input is 60Hz.
; 7. Frequency input is through push buttons connected to the IOPB6
;
(UP) and IOPB7 (DOWN). Frequency range is 0-120Hz.
; 8. The D scaling notation used here is related to the popular Q
;
scaling notation by Dx=Q15-x.
;===================================================================
; Switching pattern
;------------------------------------------------------------------SWPAT
.set
0
HWPAT
.set
1
; -- Comment in one at a time
SVPAT
.set
SWPAT
; Comment in to use s/w pattern
;SVPAT
.set
HWPAT
; Comment in to use h/w pattern
;------------------------------------------------------------------; Processor
;------------------------------------------------------------------F241
.set 1
Space-Vector PWM With TMS320C24x/F24x Using Hardware and Software Determined
Switching Patterns
25
Application Report
SPRA524
F243
.set 3
; -- Comment in one at a time
;DEVICE
.set
F241
DEVICE
.set
F243
; Comment in for F241
; Comment in for F243
;------------------------------------------------------------------; Peripheral Registers and constants of TMS320C24x/F24x
;------------------------------------------------------------------.include "X24x.h"
; X24x register addresses
ST0
.set
0
; status register ST0
ST1
.set
1
; status register ST1
wd_rst_1
.set
055h
; watchdog timer reset string
wd_rst_2
.set
0aah
; watchdog timer reset string
LED_ADDR
.set
0ch
; addr of LED display on EVM
;------------------------------------------------------------------; Variables
;------------------------------------------------------------------.bss error,1
; Number of errors
.bss temp,1
; temporary storage
.bss one,1
; +1
.bss upbutcntr,1
; UP count push button
.bss dnbutcntr,1
; Down count push button
.bss set_f,1
; set F: D0 (-1.0-1.0, 1.0-120Hz)
.bss f_omega,1 ; set F to angular speed ratio: D10
.bss omega,1
; set angular speed: D10
.bss omega_v,1 ; angular speed to voltage ratio:D-9
.bss set_v,1
; set voltage: D1
.bss t_sample,1
; sampling period: D-9
.bss theta_h,1
; phase of ref vector hi word: D3
.bss theta_l,1
; theta lo word
.bss theta_r,1
; rounded theta_h: D3
.bss theta_m,1
; theta mapped to 1st quadrant: D3
.bss theta_i,1 ; theta to index for sine table: D6
.bss SS,1
; sin sign modification: D15
.bss SC,1
; cos sign modification: D15
.bss sin_indx,1
; index to sine table: D15
.bss sin_entry,1
; beginning of sin table
.bss sin_end,1
; end of sin table
.bss sin_theta,1
; sin(theta): D1
.bss cos_theta,1
; cos(theta): D1
.bss Ud,1
; voltage Ud: D2
.bss Uq,1
; voltage Uq: D2
.bss theta_s,1
; theta to sector mapping: D0
.bss sector,1
; sector reference U is in: D15
.bss theta_90,1
; 90: D3
.bss theta_180,1
; 180: D3
.bss theta_270,1
; 270: D3
.bss theta_360,1
; 360: D3
.bss dec_ms,24
; Decomposition matrices: D1
.bss t1_periods,1
; scaled Timer 1 period: D10
.bss cmp_1,1 ; decomp on 1st basic sp vector: D15
.bss cmp_2,1 ; decomp on 2nd basic sp vector: D15
.bss cmp_0,1 ; decomp on 0 basic sp vector /2: D15
.bss first_tog,1 ; the 1st-to-toggle channel
.bss sec_tog,1
; the 2nd-to-toggle channel
.bss svpat,1
; S/V pattern for ACTR
.bss led_dir,1 ; LED direction (1: left, 0: right)
Space-Vector PWM With TMS320C24x/F24x Using Hardware and Software Determined
Switching Patterns
26
Application Report
SPRA524
led_freq_
.bss
.set
.bss
led_data,1
3000
led_subdvdr,1
; LED display
; LED update sub-divider
; sub-divider counter for led
;------------------------------------------------------------------; Context
;------------------------------------------------------------------ST0_save
.usect ".context",1
; saved status register ST0
ST1_save
.usect ".context",1
; saved status register ST1
ACCH
.usect ".extcont",1
; saved accumulator high
ACCL
.usect ".extcont",1
; saved accumulator low
AR0_save
.usect ".extcont",1
; saved AR0 content
AR1_save
.usect ".extcont",1
; saved AR1 content
P_hi
.usect ".extcont",1
; saved P high byte
P_lo
.usect ".extcont",1
; saved P low byte
T_save
.usect ".extcont",1
; saved T content
;------------------------------------------------------------------; Program parameters
;------------------------------------------------------------------debug_data
.set 3FFFh
; 60Hz-3FFF, 30Hz-1FFF, 25Hz-1AAB
; Scaled sampling period
; Ts*D-9=Ts*2**24, Ts=50uS
t_sample_
.set 0346h
; D-9
; Set frequency to radian frequency conversion ratio
; 120*2*pi/7FFFh/D0 = 754.0052472756
; 7FFFh corresponds to 120Hz=753.9822368616 rad/sec
f_omega_
.set 24128
; D10
; Minimum radian frequency
; min_F*2*pi*D10=12*2*pi*D10=75.39822368616*D10
; min_F=12Hz is the minimum frequency input, D10=2**5
min_omega_
.set 2413
; D10
; Radian frequency to ref voltage conversion ratio -> V/Hz constant
; 1.0/sqrt(2)/(60*2*pi)*D24 = 0.001875658991994*D24
omega_v_
.set 31468
; D-9
; Max magnitude of reference voltage
; 1.0/sqrt(2)*D1 = 0.7071067811865*D1
max_v_
.set 11585
; D1. 1b less res to reduce # shiftingsa
; Min magnitude of reference voltage given by
; 1.0/sqrt(2)*min_F/60Hz*D1 = 0.1414213562373*D1
min_v_
.set 2317
; D1
; Conversion from theta to index for sine table
; 360/(0.5pi)*D8, D8=2**(15-8)=2**7
; 360 entry sine table
; theta_i_
.set 29335
; D8
; 90/(0.5pi)*D6, D6=2**9
; 90 entry sine table
theta_i_
.set 29335
; D6
; Conversion from theta to sector
; 6/(2*pi)*D0, D0=2**(15-0)
theta_s_
.set 31291
; D0
Space-Vector PWM With TMS320C24x/F24x Using Hardware and Software Determined
Switching Patterns
27
Application Report
SPRA524
; No of cycles needed to qualify a button push
but_qual_
.set 100
; 20*t_sample
.sect ".vectors"
;===================================================================
; Reset and interrupt vector table
;------------------------------------------------------------------RESET
B _c_int0 ; PM 0 Reset Vector
INT1
B _c_int1 ; PM 2 Int level 1
INT2
B _c_int2 ; PM 4 Int level 2
INT3
B INT3
; PM 6 Int level 3
INT4
B INT4
; PM 8 Int level 4
INT5
B INT5
; PM A Int level 5
INT6
B INT6
; PM C Int level 6
.text
;===================================================================
; Start of main body of code
;------------------------------------------------------------------_c_int0
DINT
; Set global interrupt mask
cfg_wsgr
reset_wd0
;
;
;
;
;
;
;
.ifDEVICE=F243
LDP
#temp
SPLK #0,temp
OUT
temp,0ffffh
.endif
LDP
SPLK
SPLK
SPLK
; Configure WSGR
; temp<=0
; WSGR <= (temp)
#WDKEY>>7
; Reset WD timer
#wd_rst_1,WDKEY
#wd_rst_2,WDKEY
#01101111b,WDCR
Configure Shared Pins
Group A shared pins all used for primary functions except TDR/IOPB6
and TLKIN/IOPB7 used as UP and DN on SD platform
Group B shared pins all used as default.
SPISIMO/IOPC2, SPISOMI/IOPC3 used as digital output timing
marks XF/IOPC2 as dr fault clr, BIO/IOPC1 as dr enable in,
SPISTE/IOPC5 as dr reset IOPD4 as dr enable
cfg_pins
LDP
SPLK
SPLK
splk
#OCRA>>7
#03FFFh,OCRA
#0,OCRB
#02C00h,PCDATDIR
t1_period_
.set
t1_periods_ .set
t2_period_
.set
500
500*32
1000
init_ev
#T1CMPR>>7
; set DP
#10,T1CMPR
; Init GPT comp registers
#10,T2CMPR
;
#t1_period_,T1PR
; Init GPT1 period reg
#t2_period_,T2PR
; Init GPT2 period reg
#0000001010101b,GPTCON
; set timer comps to active low
#1000100000000010b,T1CON
ldp
splk
splk
SPLK
SPLK
splk
SPLK
; Tpwm/50nS/2=50uS/50nS/2=500
; D10, scaled Timer 1 period
;
Space-Vector PWM With TMS320C24x/F24x Using Hardware and Software Determined
Switching Patterns
28
Application Report
SPRA524
SPLK
SPLK
SPLK
SPLK
SPLK
SPLK
; Set GPT1 in Up/Dn mode for symm PWM
#1000100010000010b,T2CON
; Set GPT2 in Up/Dn mode
#t1_period_,CMPR1
; Init. PWM duty cycle to 0%
#t1_period_,CMPR2
#t1_period_,CMPR3
#0000011001100110b,ACTR ; Cfg PWM outputs
#01F4h,DBTCON
; Cfg deadband 1*32*50nS=1.6uS
.ifSVPAT=SWPAT
SPLK #1000001000000000b,COMCON
; Enbl PWM outputs&cmp opera
.endif
.if
SPLK
SVPAT=HWPAT
#1001001000000000b,COMCON
; Enbl PWM outputs&cmp op&svpwm
.endif
init_vars
LDP
SPLK
SPLK
SPLK
SPLK
splk
splk
splk
SPLK
SPLK
SPLK
SPLK
init_tbl
LAR
LAR
LACC
LARP
TBLR
ADD
BANZ
splk
splk
SPLK
SPLK
.if
splk
out
splk
splk
.endif
ldp
#error
; Point to B1 page 0
#0,error
; Reset error counter
#1,one
; +1 => one
#t_sample_,t_sample
; sampling period
#t1_periods_,t1_periods ; max compare value
#0,set_f
; zero set F.
#0,upbutcntr
; zero up count
#0,dnbutcntr
; zero down count
#f_omega_,f_omega
; set F to angular speed ratio
#omega_v_,omega_v
; angular speed to voltage ratio
#0,theta_l
; theta low byte
#0,theta_h
; theta high byte
AR0,#theta_90
; point to 1st destination
AR1,#(28-1)
; 32 entries
#angles_
; point to 1st data item
AR0
;
*+,1
; move and point to next destination
one
; point to next data item
init_tbl,0
#theta_i_,theta_i ; theta to sin_index ratio
#theta_s_,theta_s ; theta to sector ratio
#sin_entry_,sin_entry
; init 1st and last entries of sin tb
#(sin_entry_+90),sin_end
DEVICE=F243
#1,led_data
; Reset LED display on EVM
led_data,LED_ADDR ; Set LED display
#led_freq_,led_subdvdr
; reset sub-divider counter
#1,led_dir
; set LED display direction
#_OVERCURRENT_TRIP_FLAG
; set DP
Space-Vector PWM With TMS320C24x/F24x Using Hardware and Software Determined
Switching Patterns
29
Application Report
SPRA524
splk
#0,_OVERCURRENT_TRIP_FLAG
; reset overcurrent flag
ldp
splk
#phantom_int
#0,phantom_int
;
enbl_sd
LDP
lacc
or
sacl
lacc
or
and
sacl
#PCDATDIR>>7
PCDATDIR
#00020h
PCDATDIR
PDDATDIR
#01000h
#0FFEFh
PDDATDIR
; Enable SD inverter
;
;
; pull LabDrive reset high
;
;
;
; Enable LabDrive
enbl_pwmg
LDP
SPLK
#T1CON>>7
; Enable GPT1 and PWM'ing
#1000100001000010b,T1CON
cfg_ints
ldp
SPLK
#EVIFRA>>7
#0fffh,EVIFRA
SPLK
#0ffh,EVIFRB
SPLK
#0fh,EVIFRC
SPLK
#0201h,EVIMRA
SPLK
SPLK
LDP
SPLK
splk
#0,EVIMRB
;
#0,EVIMRC
;
#0
;
#0ffh,IFR
;
#00001111b,IMR
EINT
; Cfg interrupts
; Clear all Group A
;
interrupt flags
; Clear all Group B
;
interrupt flags
; Clear all Group C
;
interrupt flags
; Mask all but GPT1 UF&PDPINT
;
Group A ints
Mask all ints
Mask all Grp C ints
point to memory page 0
Clear all core interrupt flags
; Unmask all EV
;
interrupts+INT1 to CPU
; Enable global interrupt
;===================================================================
; Start of background loop
;------------------------------------------------------------------main_loop
ldp
#PCDATDIR>>7
; set DP
lacc PCDATDIR
;
and
#0FFFBh
; IOPC[2] to 0
sacl PCDATDIR
;
update_f
up_butn
ldp
BIT
Ldp
BCND
SPLK
#PBDATDIR>>7
PBDATDIR,BIT6
#upbutcntr
up_butn,TC
#0,upbutcntr
;
;
;
;
;
Has UP been pushed?
point at page 0 of B1
UP button if yes
Clear UP count if no
Ldp
BIT
ldp
BCND
SPLK
B
#PBDATDIR>>7
PBDATDIR,BIT7
#dnbutcntr
dn_butn,TC
#0,dnbutcntr
pbutnend
;
;
;
;
;
;
point at sys reg page 1
Has DN been pushed?
point at page 0 of B1
DN button if yes?
Cleat DN count if no
Return
LACC
ADD
upbutcntr
one
; Inc. UP count
Space-Vector PWM With TMS320C24x/F24x Using Hardware and Software Determined
Switching Patterns
30
Application Report
SPRA524
dn_butn
SACL
SUB
BCND
SPLK
LACC
ADD
SACL
SUB
BCND
SPLK
B
upbutcntr
#but_qual_
pbutnend,LT
#0,upbutcntr
set_f
one
set_f
#7fe0h
pbutnend,LEQ
#7fe0h,set_f
pbutnend
LACC
ADD
SACL
SUB
BCND
SPLK
LACC
SUB
SACL
BCND
SPLK
dnbutcntr
one
dnbutcntr
#but_qual_
pbutnend, LT
#0,dnbutcntr
set_f
one
set_f
pbutnend,GEQ
#0,set_f
; Qualified?
; Return if no
; Reset count if yes &
; Inc set frequency
;
;
;
;
Bigger than max?
Return if no
Saturate if yes &
return
; Inc. DN count
;
;
;
;
Qualified?
Return if not
Reset count if yes &
Dec set frequency
; Return if no
; Saturate if yes &
pbutnend
; Comment out following line to use push button to control speed
SPLK #debug_data,set_f ; Replace with debug data
f2omega
LT
MPY
PAC
SACH
lacc
sub
BGZ
splk
set_f
f_omega
; set f -> omega: D0
; D0*D10=D(10+1)
; product -> ACC: D11
omega,1
; -> set angular speed: D10
omega
;
#min_omega_ ; compare W with its lower limit
winlimit
; continue if within limit
#min_omega_,omega
; saturate if not
winlimit
; Note the following implies constant v/f
omega2v
LT
omega
; set angular speed -> T: D10
MPY
omega_v
; D10*D-9=D(1+1)
PAC
; product -> ACC: D2
SACH set_v,1
; -> mag of ref voltage and -> D1
lacc set_v
;
sub
#max_v_
; compare Uout w/ its upper limit
BLEZ uinuplim
; continue if within limit
splk #min_v_,set_v
; saturate if not
B
uinlolim
;
uinuplim
LACC set_v
;
SUB
#min_v_ ; compare Uout with its lower limit
BGEZ uinlolim
; continue if within limit
splk #min_v_,set_v
; saturate if not
uinlolim
update_led
.if
ldp
lacc
DEVICE=F243
#led_subdvdr
led_subdvdr
;
;
Space-Vector PWM With TMS320C24x/F24x Using Hardware and Software Determined
Switching Patterns
31
Application Report
SPRA524
sub
sacl
BNZ
splk
right_shift
updateled
noledupdate
one
; update sub_divide counter
led_subdvdr
; time to update LED display?
noledupdate
; no
#led_freq_,led_subdvdr
; yes, reset
; subdivide counter
bit
led_dir,BIT0
; left shift?
bcnd right_shift,NTC
; no
lacc led_data,1
; yes
sacl led_data
; left shift one bit
bitled_data,BIT7
; time to change direction?
bcnd updateled,NTC
; no
splk #0,led_dir
; yes
b
updateled
;
lacc led_data,15
;
sach led_data
; right shift one bit
bit
led_data,BIT0
; time to change direction?
bcnd updateled,NTC
; no
splk #1,led_dir
; yes
out
led_data,LED_ADDR ; update LED display
.endif
reset_wd
LDP
SPLK
SPLK
SPLK
#WDKEY>>7
; Reset WD timer
#wd_rst_1,WDKEY
;
#wd_rst_2,WDKEY
#0000000001101111b,WDCR
Ldp
lacc
or
sacl
B
#PCDATDIR>>7
PCDATDIR
#00004h
PCDATDIR
main_loop
; set DP
;
; IOPC[2] to 1
;
; End of background loop
;==================================================================
; Phantom interrupt
;-----------------------------------------------------------------.bss phantom_int,1
;
phantomisr
ldp
#phantom_int
splk #0badh,phantom_int ;
ret
;===================================================================
; PDPINT interrupt service
;------------------------------------------------------------------.bss _OVERCURRENT_TRIP_FLAG,1 ;
_c_int1
SST
SST
LDP
SACH
SACL
#ST0,ST0_save
#ST1,ST1_save
#ACCH
ACCH
ACCL
Ldp
LACC
#PIVR>>7
PIVR
SUB
#020h
;
;
;
;
;
;
INT1 dispatcher
save status register ST0
save status register ST1
set DP
save ACC
; set DP
; load peripheral INT
;
vector/ID/offset
; PDPINT?
Space-Vector PWM With TMS320C24x/F24x Using Hardware and Software Determined
Switching Patterns
32
Application Report
SPRA524
bcnd
call
b
not_pdp,NEQ
pdp_isr
rest_int1
not_pdp
call
phantomisr
; got a phantom int if not
rest_int1
ldp
ZALH
ADDS
LDP
LST
LST
EINT
RET
#ACCH
ACCH
ACCL
#0
#ST1,ST1_save
#ST0,ST0_save
;
;
;
;
;
;
;
;
ldp
splk
ret
#_OVERCURRENT_TRIP_FLAG
#1,_OVERCURRENT_TRIP_FLAG
pdp_isr
; not pdp
; pdp_isr
;
set DP
restore ACC high
restore ACC low
point to B2
restore status register ST1
restore status register ST0
return
; set DP
; set flag
;===================================================================
; Interrupt driven inner loop for PWM
;------------------------------------------------------------------_c_int2
SST
#ST0,ST0_save
; save status register ST0
SST
#ST1,ST1_save
; save status register ST1
LDP
#ACCH
; set DP
MAR
*,AR0
; set ARP
SACH ACCH
;
SACL ACCL
; save ACC
Sph
P_hi
;
spl
P_lo
; save P register
mpy
#1
; P<=T
spl
T_save
; save T register
sar
AR0,AR0_save
; save AR0
rest_cntxt
ldp
LACC
SUB
cc
b
#PIVR>>7
PIVR
#029h
t1uf_isr,EQ
rest_cntxt
;
;
;
;
set DP
read id of int
GPT1 UF INT?
T1UF isr if yes
call
phantomisr
; got a phantom int if not
LDP
lar
lt
mpy
lph
lt
ZALH
ADDS
LDP
LST
LST
EINT
RET
#ACCH
AR0, AR0_save
P_lo
#1
P_hi
T_save
ACCH
ACCL
#0
#ST1,ST1_save
#ST0,ST0_save
;
;
;
;
;
;
;
;
;
;
;
;
;
set DP
restore AR0
T<=P_lo
P (low byte) <=1*P_lo
P high byte <=P_hi
restore T
restore ACC
point to B2
restore status register ST1
restore status register ST0
return
;===================================================================
; SV PWM routine
Space-Vector PWM With TMS320C24x/F24x Using Hardware and Software Determined
Switching Patterns
33
Application Report
SPRA524
; The routine refers to the following variables:
; omega - set angular frequency with scale of D10 in unit of rad
; t_sample - sampling period with scale of D-9 in unit of second
; t1_period_ - T1 period, the maximum compare value
;------------------------------------------------------------------t1uf_isr
ldp
#EVIFRA>>7
;
splk #0200h,EVIFRA
; clear GPT1 UF INT flag
ldp
#PCDATDIR>>7
; set DP
lacc PCDATDIR
;
and
#0FFF7h
; IOPC[3] to 0
sacl PCDATDIR
;
;------------------------------------------------------------------; Generate revolving voltage vector Uout=trans(Ud Uq)
;------------------------------------------------------------------ldp
#omega
; Integrate speed to get phase
LT
omega
; set W -> T: D10
MPY
t_sample
; D10*D-9=D(1+1)
PAC
; product -> ACC: D2
SFR
; -> D3
ADDH theta_h
; D3+D3=D3 (32 bit)
ADDS theta_l
;
SACH theta_h
; save
SACL theta_l
;
chk_lolim
bcnd chk_uplim,GEQ
; check upper limit if positive
ADDH theta_360
; D3+D3=D3, rollover if not
SACH theta_h
; save
B
rnd_theta
;
chk_uplim
SUBH
bcnd
SACH
B
theta_360
; D3-D3=D3 compare with 2*pi
rest_theta,LEQ ; resume theta_h if within limit
theta_h
; rollover if not
rnd_theta
;
rest_theta
rnd_theta
ADDH
ADD
SACH
theta_360
#1,15
theta_r
; resume theta high
; round up to upper 16 bits
;
;------------------------------------------------------------------; Quadrant mapping
;------------------------------------------------------------------LACC one
; assume theta (theta_h) is in
;
quadrant 1
SACL SS
; 1=>SS, sign of SIN(theta)
SACL SC
; 1=>SC, sign of COS(theta)
LACC theta_r
;
SACL theta_m
; theta=>theta_m
SUB
theta_90
;
BLEZ E_Q
; jump to end if 90>=theta
splk
LACC
SUB
SACL
BGEZ
; assume theta (theta_h) is in quadrant 2
#-1,SC
; -1=>SC
theta_180
;
theta_r
; 180-theta
theta_m
; =>theta_m
E_Q
; jump to end if 180>=theta
; assume theta (theta_h) is in quadrant 3
Space-Vector PWM With TMS320C24x/F24x Using Hardware and Software Determined
Switching Patterns
34
Application Report
SPRA524
splk
LACC
SUB
SACL
LACC
SUB
BGEZ
#-1,SS
theta_r
theta_180
theta_m
theta_270
theta_r
E_Q
;
;
;
;
;
;
;
-1=>SS
splk
LACC
SUB
SACL
#1,SC
theta_360
theta_r
theta_m
; theta (theta_h) is in quadrant 4
; 1=>SC
;
;
; 360-theta_h=>theta_m
theta-180
=>theta_m
jump to end if 270>=theta
E_Q
;------------------------------------------------------------------; sin(theta), cos(theta)
;------------------------------------------------------------------lt
theta_m
; D3. Find index
mpy
theta_i
; D3*D6=D(9+1)
pac
; D10
sach sin_indx
; D10
lacc sin_indx,11 ; r/s 5 by l/s 11 -> integer (D15)
sach sin_indx
; right shift 5 bits => D15
lacc
add
tblr
lacc
sub
tblr
sin_entry
sin_indx
sin_theta
sin_end
sin_indx
cos_theta
; Look up sin
;
;
;
;
;
LT
MPY
PAC
SACL
LT
MPY
PAC
SACL
SS
sin_theta
;
;
;
;
;
;
;
;
sin_theta
SC
cos_theta
cos_theta
Look up cos
modify sign: D15*D1=D(16+1)
left shift 16 bits and save: D1
modify sin: D15*D1=D(16+1)
left shift 16 bits and save: D1
;------------------------------------------------------------------; The following 4 lines are for purpose of debugging
;------------------------------------------------------------------;
lacc sin_theta,10
;
;
add
#04000h,10
; Add 1
;
ldp
#T2CMPR>>7
;
;
sach T2CMPR
; save to T2CMPR for debug
;------------------------------------------------------------------; Calcualte Ud & Uq
;------------------------------------------------------------------LT
set_v
; set v -> T: D1
MPY
cos_theta
; set v*cos(theta): D1*D1=D(2+1)
PAC
; product -> ACC: D3
SACH Ud,1
; d component of ref Uout: D2
MPY
sin_theta
; set v*sin(theta): D1*D1=D(2+1)
PAC
; product -> ACC: D3
Space-Vector PWM With TMS320C24x/F24x Using Hardware and Software Determined
Switching Patterns
35
Application Report
SPRA524
SACH
Uq,1
; q component of ref Uout: D2
;------------------------------------------------------------------; Determine sector
;------------------------------------------------------------------lt
theta_r
; D3
mpy
theta_s
; D3*D0=D4
pac
sach sector
;
lacc sector,5
; r/s 11 by l/s 5 -> integer (D15)
sach sector
; right shift 11 bits
;------------------------------------------------------------------; Calculate T1&T2 based on:
Tpwn Uout=V1*T1+V2*T2
;
; i.e.
[T1 T2]=Tpwn*inverse[V1 V2]*Uout
; i.e.
[0.5*T1 0.5*T2]=Tp*inverse[V1 V2]*Uout
; i.e.
[0.5*C1 0.5*C2]=inverse[V1 V2]*Uout=M(sector)*Uout
;
; where
C1=T1/Tp, C2=T2/Tp, are normalized wrt Tp
;
M(sector)=inverse of [V1 V2] = decomposition matrix
;
obtained through table lookup
;
Uout=Transpose of [Ud Uq]
;
Tp=Timer 1 period = 0.5*Tpwm
;
Tpwm=PWM period Tpwm
;------------------------------------------------------------------LACC #dec_ms
ADD
sector,2
;
SACL temp
; get the pointer
LAR
AR0,temp
; point to parameter table
; Calculate 0.5*C1 based on 0.5*C1=Ud*M(1,1)+Uq*M(1,2)
LT
Ud
; D2
MPY
*+
; M(1,1) Ud: D2*D1=D(3+1)
PAC
; D4
LT
Uq
; D4
MPY
*+
; M(1,2) Uq: D2*D1=D(3+1)
APAC
; 0.5*C1: D4+D4=D4
BGEZ cmp1_big0
; continue if bigger than zero
ZAC
; set to 0 if less than 0
cmp1_big0
SACH temp
; 0.5*C1: D4
LT
temp
; D4
MPY
t1_periods
; D4*D10 = D(14+1)
PAC
; D15
.if
SVPAT=HWPAT
ADD
one,16
.endif
; Avoid C1=0
SACH
; 0.5*C1*Tp: D15
cmp_1
; Calculate 0.5*C2 based on 0.5*C2=Ud*M(2,1)+Uq*M(2,2)
LT
Ud
; D2
MPY
*+
; M(2,1) Ud: D2*D1=D(3+1)
PAC
; D4
LT
Uq
; D2
MPY
*+
; M(2,2) Uq: D2*D1=D(3+1)
APAC
; 0.5*C2: D4+D4=D4
Space-Vector PWM With TMS320C24x/F24x Using Hardware and Software Determined
Switching Patterns
36
Application Report
SPRA524
cmp2_big0
BGEZ
ZAC
SACH
LT
MPY
PAC
cmp2_big0
temp
temp
t1_periods
;
;
;
;
;
;
continue if bigger than zero
zero it if less than zero
0.5*C2: D4
D4
D4*D10 = D(14+1)
D15
.if
SVPAT=HWPAT
ADD
one,16
.endif
; Avoid 0 C2 = 0
SACH
; 0.5*C2*Tp: D15
cmp_2
; Calculate 0.5*C0 based on 0.5*C3*Tp=Tp*(1-0.5*C1-0.5*C2)
LACC #t1_period_
;
SUB
cmp_1
;
SUB
cmp_2
; D15
BGEZ cmp0_big0
; continue if bigger than zero
ZAC
; zero it if less than zero
cmp0_big0
SACL cmp_0
;
LACC cmp_0,15
; right shift 1b (by l/s 15b)
SACH cmp_0
; 0.25*C0*Tp
.if
SVPAT=HWPAT
;------------------------------------------------------------------; Determine the ACTR pattern and reload ACTR and CMPR1&2
;------------------------------------------------------------------LACC #cckwise_
ADD
sector
; point to entry in lookup table
TBLR svpat
; get the pattern
LAR
AR0,#ACTR
; point to ACTR
LACC *
; Read ACTR
AND
#0FFFh
; Clear sv pattern bits
OR
svpat
; Re-configure sv pattern bits
SACL *
; Re-load ACTR
LAR
LACC
SACL
AR0,#CMPR1
cmp_1
*+
; point to CMPR1
;
; cmp_1=>CMPR1, point to CMPR2
ADD
SACL
cmp_2
*
;
; cmp_2=>CMPR2
SUB
BLEZ
SPLK
#t1_period_ ; limit CMPR2
in_lmt
;
#t1_period_,*
in_lmt
.endif
.if
SVPAT=SWPAT
;------------------------------------------------------------------; Determine channel toggling sequence and load compare registers
;------------------------------------------------------------------LACC #first_
;
ADD
sector
; point to entry in look up table
TBLR first_tog
; get 1st-to-toggle channel
LAR
AR0,first_tog
; point to the channel
LACC cmp_0
;
Space-Vector PWM With TMS320C24x/F24x Using Hardware and Software Determined
Switching Patterns
37
Application Report
SPRA524
SACL
*
; cmp_0 => the channel
LACC
ADD
TBLR
LAR
LACC
ADD
SACL
#second_
sector
sec_tog
AR0,sec_tog
cmp_0
cmp_1
*
;
;
;
;
;
;
;
LACC #CMPR3
SUB
first_tog
ADD
#CMPR2
SUB
sec_tog
ADD
#CMPR1
SACL temp
LAR
AR0,temp
LACC cmp_0
ADD
cmp_1
ADD
cmp_2
SACL *
.endif
ldp
lacc
or
sacl
RET
#PCDATDIR>>7
PCDATDIR
#00008h
PCDATDIR
;
;
;
;
;
;
;
;
;
;
;
point to entry in look up table
get 2nd-to-toggle channel
point to the channel
cmp_0+cmp_1
=> the channel
get 3rd-to-toggle channel
point to the channel
cmp_0+cmp_1+cmp_2
=>the channel
; set DP
;
; IOPC[3] to 1
;
; return
.data
;------------------------------------------------------------------; Frequently used angles
;------------------------------------------------------------------********************************************************************
** The order between these angles and the decomposition
**
** matrices in the following must not be changed.
**
********************************************************************
angles_
.WORD
01922h
; pi/2: D3
.WORD
03244h
; pi: D3
.WORD
04b66h
; 3*pi/2: D3
.WORD
06488h
; 2*pi: D3
.if
SVPAT=SWPAT
;------------------------------------------------------------------; Decomposition matrices indexed by the sector Uout is in for s/w
; implemented SV PWM scheme
;------------------------------------------------------------------.WORD
20066
; D1
.WORD
-11585
.WORD
0
.WORD
23170
.WORD
.WORD
.WORD
.WORD
-20066
11585
20066
11585
.WORD
0
Space-Vector PWM With TMS320C24x/F24x Using Hardware and Software Determined
Switching Patterns
38
Application Report
SPRA524
.WORD
.WORD
.WORD
23170
-20066
-11585
.WORD
.WORD
.WORD
.WORD
0
-23170
-20066
11585
.WORD
.WORD
.WORD
.WORD
-20066
-11585
20066
-11585
.WORD
.WORD
.WORD
.WORD
.endif
20066
11585
0
-23170
.if
SVPAT=HWPAT
;------------------------------------------------------------------; Decomposition matrices indexed by the sector Uout is in for h/w
; implemented SV PWM scheme
;------------------------------------------------------------------.WORD
20066
; D1
.WORD
-11585
.WORD
0
.WORD
23170
.WORD
.WORD
.WORD
.WORD
20066
11585
-20066
11585
.WORD
.WORD
.WORD
.WORD
0
23170
-20066
-11585
.WORD
.WORD
.WORD
.WORD
-20066
11585
0
-23170
.WORD
.WORD
.WORD
.WORD
-20066
-11585
20066
-11585
.WORD
.WORD
.WORD
.WORD
.endif
0
-23170
20066
11585
.if
SVPAT=SWPAT
;-------------------------------------------------------------------
Space-Vector PWM With TMS320C24x/F24x Using Hardware and Software Determined
Switching Patterns
39
Application Report
SPRA524
; Addresses of compare registers of the 1st-to-toggle channels
; indexed by the sector, ref v is in
;------------------------------------------------------------------first_
.WORD
CMPR1
;
.WORD
CMPR2
;
.WORD
CMPR2
;
.WORD
CMPR3
;
.WORD
CMPR3
;
.WORD
CMPR1
;
;------------------------------------------------------------------; Addresses of compare registers of the 2nd-to-toggle channels
; indexed by the sector, ref v is in
;------------------------------------------------------------------second_
.WORD
CMPR2
;
.WORD
CMPR1
;
.WORD
CMPR3
;
.WORD
CMPR2
;
.WORD
CMPR1
;
.WORD
CMPR3
;
.endif
.if
SVPAT=HWPAT
;------------------------------------------------------------------; Lookup table for ACTR[15-12] indexed by sector number
;------------------------------------------------------------------cckwise_
.WORD
0001000000000000b
.WORD
0011000000000000b
.WORD
0010000000000000b
.WORD
0110000000000000b
.WORD
0100000000000000b
.WORD
0101000000000000b
.endif
;----------------------------------------------------------; sine table for theta from 0 to 90 per every 1 degree
;----------------------------------------------------------sin_entry_
; sin table
.WORD
0
; D1
.WORD
286
.WORD
572
.WORD
857
.WORD
1143
.WORD
1428
.WORD
1713
.WORD
1997
.WORD
2280
.WORD
2563
.WORD
2845
.WORD
3126
.WORD
3406
.WORD
3686
.WORD
3964
.WORD
4240
.WORD
4516
.WORD
4790
.WORD
5063
.WORD
5334
Space-Vector PWM With TMS320C24x/F24x Using Hardware and Software Determined
Switching Patterns
40
Application Report
SPRA524
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
5604
5872
6138
6402
6664
6924
7182
7438
7692
7943
8192
8438
8682
8923
9162
9397
9630
9860
10087
10311
10531
10749
10963
11174
11381
11585
11786
11982
12176
12365
12551
12733
12911
13085
13255
13421
13583
13741
13894
14044
14189
14330
14466
14598
14726
14849
14968
15082
15191
15296
15396
15491
15582
15668
15749
15826
15897
15964
Space-Vector PWM With TMS320C24x/F24x Using Hardware and Software Determined
Switching Patterns
41
Application Report
SPRA524
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
.WORD
16026
16083
16135
16182
16225
16262
16294
16322
16344
16362
16374
16382
16384
Space-Vector PWM With TMS320C24x/F24x Using Hardware and Software Determined
Switching Patterns
42
Application Report
SPRA524
TI Contact Numbers
INTERNET
TI Semiconductor Home Page
www.ti.com/sc
TI Distributors
www.ti.com/sc/docs/distmenu.htm
PRODUCT INFORMATION CENTERS
Americas
Phone
+1(972) 644-5580
Fax
+1(972) 480-7800
Email
[email protected]
Europe, Middle East, and Africa
Phone
Deutsch
+49-(0) 8161 80 3311
English
+44-(0) 1604 66 3399
Español
+34-(0) 90 23 54 0 28
Francais
+33-(0) 1-30 70 11 64
Italiano
+33-(0) 1-30 70 11 67
Fax
+44-(0) 1604 66 33 34
Email
[email protected]
Japan
Phone
International
+81-3-3457-0972
Domestic
0120-81-0026
Fax
International
+81-3-3457-1259
Domestic
0120-81-0036
Email
[email protected]
Asia
Phone
International
+886-2-23786800
Domestic
Australia
1-800-881-011
TI Number -800-800-1450
China
10810
TI Number -800-800-1450
Hong Kong 800-96-1111
TI Number -800-800-1450
India
000-117
TI Number -800-800-1450
Indonesia
001-801-10
TI Number -800-800-1450
Korea
080-551-2804
Malaysia
1-800-800-011
TI Number -800-800-1450
New Zealand 000-911
TI Number -800-800-1450
Philippines 105-11
TI Number -800-800-1450
Singapore
800-0111-111
TI Number -800-800-1450
Taiwan
080-006800
Thailand
0019-991-1111
TI Number -800-800-1450
Fax
886-2-2378-6808
Email
[email protected]
TI is a trademark of Texas Instruments Incorporated.
Other brands and names are the property of their respective owners.
Space-Vector PWM With TMS320C24x/F24x Using Hardware and Software Determined
Switching Patterns
43
Application Report
SPRA524
IMPORTANT NOTICE
Texas Instruments and its subsidiaries (TI) reserve the right to make changes to their
products or to discontinue any product or service without notice, and advise customers to
obtain the latest version of relevant information to verify, before placing orders, that
information being relied on is current and complete. All products are sold subject to the
terms and conditions of sale supplied at the time of order acknowledgement, including
those pertaining to warranty, patent infringement, and limitation of liability.
TI warrants performance of its semiconductor products to the specifications applicable at
the time of sale in accordance with TI's standard warranty. Testing and other quality
control techniques are utilized to the extent TI deems necessary to support this warranty.
Specific testing of all parameters of each device is not necessarily performed, except
those mandated by government requirements.
CERTAIN APPLICATIONS USING SEMICONDUCTOR PRODUCTS MAY INVOLVE
POTENTIAL RISKS OF DEATH, PERSONAL INJURY, OR SEVERE PROPERTY OR
ENVIRONMENTAL DAMAGE (“CRITICAL APPLICATIONS"). TI SEMICONDUCTOR
PRODUCTS ARE NOT DESIGNED, AUTHORIZED, OR WARRANTED TO BE
SUITABLE FOR USE IN LIFE-SUPPORT DEVICES OR SYSTEMS OR OTHER
CRITICAL APPLICATIONS. INCLUSION OF TI PRODUCTS IN SUCH APPLICATIONS
IS UNDERSTOOD TO BE FULLY AT THE CUSTOMER'S RISK.
In order to minimize risks associated with the customer's applications, adequate design
and operating safeguards must be provided by the customer to minimize inherent or
procedural hazards.
TI assumes no liability for applications assistance or customer product design. TI does
not warrant or represent that any license, either express or implied, is granted under any
patent right, copyright, mask work right, or other intellectual property right of TI covering
or relating to any combination, machine, or process in which such semiconductor
products or services might be or are used. TI's publication of information regarding any
third party's products or services does not constitute TI's approval, warranty, or
endorsement thereof.
Copyright Ó 1999 Texas Instruments Incorporated
Space-Vector PWM With TMS320C24x/F24x Using Hardware and Software Determined
Switching Patterns
44