三相SPWM波形发生器实验
由微处理器来实现SPWM控制,根据软件化方法的不同,有表格法(又称ROM法)、随时计算法(又称RAM法)和实时计算法,但上两种无实时处理能力。实时计算要有数学模型,采样型SPWM法是其中一种模型,它分自然采样法,规则采样法。而规则采样法中又有对称规则采样法与不对称规则采样法。
分析表明,不对称规则采样所形成的阶梯波比对称规则采样时更接近于正弦波。分析表明,用不对称规则采样法在载波比N=3或3的倍数时,逆变器输出电压中不存在偶次谐波分量,其他高次谐波分量的幅值也较小。
图3-5 不对称规则采样法
不对称规则采样法是既在三角波的顶点位置又在底点位置对正弦波进行采样,由采样值形成阶梯波,如图3-5所示。由图可看出阶梯波与三角波的交点所确定的脉宽,在一个三角波的周期内的位置是不对称的。要注意的是,这里的采样周期TS是三角波周期的1/2,即TS=Tt/2。
SPWM波生成基本设计思想
图 3-6 对称PWM波生成机理
+ Compare matches
T1CNT
Dead time
PWMx(active low)
PWMx_(active high)
T1PR
利用TMS320F2407生成SPWM波的基本设计思想是利用DSP的事件管理器(EVA)中的三个全比较单元、通用定时器1、死区发生单元以及输出逻辑来生成三相六路SPWM波,经六个复用的I/O引脚输出。TMS320F2407的定时器有四种工作方式,当以如图3-6所示的持续向上/下计数方式工作时,将产生对称的PWM 波输出。在这种计数方式下,计数器的值由初值开始向上跳增,当到达T1PR值时,开始递减跳变,直至计数器的值为零时又重新向上跳增,如此循环往复。在计数器跳变的过程中,计数器的值都与比较寄存器CMPRx (x=1,2,3)的值作比较,当计数器的值与任一比较寄存器的值相等,则对应的该相方波输出发生电平翻转。如右图所示,在一个周期内,输出的方波将发生两次电平翻转。从图3-6还可以看出插入死区时间后波形的变化情况,只要在每个脉冲周期根据在线计算改写比较寄存器CMPR的值,就可实时地改变脉冲的占空比。
程序设定
首先要确定采样周期,即中断周期。设频率指令值为f,载波比为N,则中断周期为:Ts=1/2Nf。这里Ts的单位是秒,在程序中转化为相应的时钟周期数(单字节指令周期为50ns)。可以把某一频率指令值对应的中断周期预先计算好,制成表格,便于在线查找。本系统运行的频率指令值范围为20~50Hz,载波比N为90。
其次再根据N值,预先计算好采样点的单位正弦值,按顺序制成表格,正弦值表示成(1,15)格式,并扩展符号。同样地根据负载的V/f曲线,确定频率f与调幅比M之间的关系,也预先将M值按f递增的顺序制成表。由于0<M<1,所以M值也按(1,15)格式表示。
接下来考虑如何在线计算和改写比较寄存器CMPR值的问题。根据频率指令值f,查表得相应采样周期Ts以及调幅比M值,并把Ts值存入寄存器T1PR,作为中断定时周期。CMPR值的在线计算和改写都在中断服务程序里完成。进入中断服务子程序后,查表得到单位正弦表中下一个采样点各相对应的正弦值,可以计算出各相的开关时间。由于查表所得的Ts已经是经过量化的时钟周期数,所以上述计算所得的结果也是开关时间对应的时钟周期数,可以直接写入CMPRx (x=1,2,3 分别对应a,b,c三相)。
?
控制寄存器设置
控制寄存器是指为产生SPWM波而需要设置的事件管理器(EVA)中的特殊功能寄存器。为了得到期望中的理想波形输出,不但要求有正确的算法,正确地设置控制寄存器同样也是极其关键的。控制寄存器的设置顺序为:
① 设置定时周期寄存器T1PR。
② 设置动作控制寄存器ACTR。
③ 设置死区时间控制寄存器DBTCONA。
④ 初始化CMPRx (x=1,2,3)
⑤ 设置比较控制寄存器COMCONA。
⑥ 设置定时器1控制寄存器T1CON。
⑦ 在每个采样周期重写CMPRx (x=1,2,3)。
3.4 程序流程
图3-8 中断服务子程序流程
主程序流程如图3-7所示。主程序先进行变量的初始化。硬件的初始化工作包括设置看门狗电路;禁止中断(INTM=1);设置符号扩展模式(SXM=1);清零所有的CPU级中断标志寄存器(IFR);设置CPU级中断屏蔽寄存器(IMR);并设置等待状态控制寄存器(WSGR)来设定对片外的程序存储器、数据存储器以及I/O空间的地址进行读写操作所需的等待时钟周期数。软件初始化工作除了设置事件管理器中的一些控制寄存器外,还需给部分变量赋初值,使之在中断服务子程序中运算。并需将六个复用的I/O引脚设置为PWM波输出引脚。在完成所有的初始
化工作后,设置T1CON使定时器1开始工作,并重新打开中断(INTM=0)。中断服务子程序的流程如图3-8所示。
当程序进入中断服务子程序后,先通过读取外围设备中断向量寄存器PIVR的值来判别中断源。PIVR中的值对应的是触发当前中断的中断向量值,DSP中每一个来自外围设备的中断源都有一个与它唯一对应的中断向量值。因此在多中断源系统中,在进入中断服务子程序后,可以先通过判别PIVR的值来控制程序的流向,使之跳转到特定中断对应的服务子程序入口。这里,除了T1PR定时中断外,还有一个中断源,即PDPINT (Power Drive Protection Interrupt )中断。当系统电源受扰动超过一定范围时,由PDPINT引脚产生一个电平负跳变,触发中断。如果触发的是PDPINT中断,则DSP的硬件系统将自动地置六路PWM输出口为高阻状态,关闭PWM波的输出,并可通过执行一段程序代码来显示出错信息。在转入T1PR中断服务子程序的入口后,则通过执行一个算法计算出CMPRx(x=1,2,3)的值,来改变下一个中断周期里各相脉冲的占空比,从而产生三相六路SPWM波输出。
;*********************************************************************
; File Name: spwm.asm
; Description: This program helps you to generate three phase spwm
; outputs from F243's compare unit
; N =90
; PDPINT is avaliable.
;*********************************************************************
.title "spwm test"
.include "X2407.h"
.global START,num,n0
;---------------------------------------------------------------------
;M A C R O-Definitions
;---------------------------------------------------------------------
KICK_DOG .macro ;Watchdog reset macro
LDP #00E0h
SPLK #05555h, WDKEY
SPLK #0AAAAh, WDKEY
LDP #0h
.endm
;---------------------------------------------------------------------
; Variable Declarations for on chip RAM Blocks
;---------------------------------------------------------------------
.bss GPR0,1 ;General purpose register
.bss fout,1 ;F of out PWM wave
.bss mtab,1 ;Address of mtable
.bss ptab,1 ;Address of ptable
.bss stab,1 ;Address of stable
.bss na,1 ;pulses count register for A phase
.bss nb,1 ;pulses count register for B phase
.bss nc,1 ;pulses count register for C phase
.bss sinA,1 ;sin value
.bss sinB,1
.bss sinC,1
.bss period,1 ;Ts
.bss mag,1 ;Magnitude ratio
;---------------------------------------------------------------------
; Interrupt Vector declarations
;---------------------------------------------------------------------
.sect "vectors"
RSVECT B START ; Reset Vector
INT1 B GISR1 ; Interrupt Level 1
INT2 B GISR2 ; Interrupt Level 2, T1 INT
INT3 B PHANTOM ; Interrupt Level 3, T2 INT
INT4 B PHANTOM ; Interrupt Level 4
INT5 B PHANTOM ; Interrupt Level 5
INT6 B PHANTOM ; Interrupt Level 6
RESERVED B PHANTOM ; Reserved
SW_INT8 B PHANTOM ; User Software Interrupt
SW_INT9 B PHANTOM ; User Software Interrupt
SW_INT10 B PHANTOM ; User Software Interrupt
SW_INT11 B PHANTOM ; User Software Interrupt
SW_INT12 B PHANTOM ; User Software Interrupt
SW_INT13 B PHANTOM ; User Software Interrupt
SW_INT14 B PHANTOM ; User Software Interrupt
SW_INT15 B PHANTOM ; User Software Interrupt
SW_INT16 B PHANTOM ; User Software Interrupt
TRAP B PHANTOM ; Trap vector
NMI B PHANTOM ; Non-maskable Interrupt
EMU_TRAP B PHANTOM ; Emulator Trap
SW_INT20 B PHANTOM ; User Software Interrupt
SW_INT21 B PHANTOM ; User Software Interrupt
SW_INT22 B PHANTOM ; User Software Interrupt
;==============================================================
; M A I N C O D E - starts here
;==============================================================
.text
START: NOP
Num .set 60 ;num=2*N
n0 .set 30 ;n0=num/3
LDP #0
SETC INTM ;Disable interrupts
SPLK #0003h,IMR ;Unmask INT1,INT2
LACC IFR ;Read Interrupt flags
SACL IFR ;Clear all interrupt flags
SETC SXM ;Set Extension Mode
CLRC OVM ;Reset Overflow Mode
SETC CNF ;Config Block B0 to Prog mem
SPLK #0h, GPR0 ;Set wait state
OUT GPR0,WSGR
LDP #00E0h
SPLK #006Fh,WDCR ;Disable WD if VCCP=5V
SPLK #81FEH,SCSR
KICK_DOG ;Reset Watchdog
PWMINI: MAR *, 1 ;Set AR1 as current AR
LAR AR1,#(num-2) ;Initialize AR1
LDP #0
SPLK #25,fout ;set Fout start from 25Hz
SPLK #MTABLE,mtab
LACL fout
SUB #25
ADD mtab
TBLR mag ;Get MAG at 25Hz
SPLK #PTABLE,ptab
LACL fout
SUB #25
ADD ptab
TBLR period ;Get PERIOD at 25Hz
LACL period
LDP #00E8h
SACL T1PR ;GET THE SAMPLE TIME(Ts)
LDP #0
SFR
SACL period ;PERIOD/2
SPLK #0,na ;NA = 0
SPLK #STABLE, stab
LDP #00E8h
SPLK #0081h,EVIMRA ;TPINT1 and PDPINT
SPLK #0h,T1CNT ;CLEAR T1 COUNT REGISTER
SPLK #0666h,ACTRA ;Set pwm action bit
SPLK #0DECh,DBTCONA ;Set dead band time=10.4us
KICK_DOG
CALL DUTY ;CALCULATE FIRST CMPR VALUE
NOP
LDP #00E1h
SPLK #0FC0h,OCRA
LDP #00E8h
SPLK #0A600h,COMCONA ;enable copmare and pwm
SPLK #0C840h,T1CONA ;Continuous up/down x/1
CALL DUTY
NOP
CLRC INTM
HERE: NOP
B HERE
;=============================================================
; ISRS
;=============================================================
GISR1: LDP #PIVR>>7
LACL PIVR
XOR #0020h
BCND PDPINT, EQ
RET
GISR2: LDP #PIVR>>7
LACL PIVR
XOR #0027h
BCND TPINT1, EQ
RET
PDPINT: LDP #00E8h
SPLK #0h,COMCONA ;pwm out are in high-impedence state
SPLK #0h,ACTRA ;all pwm out forced low
RET
TPINT1: BANZ GO_ON ;Check if the last one
LAR AR1,#(num-1) ;Reload AR1
GO_ON: CALL DUTY
NOP
RETURN: LDP #00E8h
SPLK #0080h,EVIFRA ;clear EV individual flag
CLRC INTM
RET
;=============================================================
; SUBROUTINE DUTY
; Description:CALCULATE NEXT CMPR VALUE FOR THREE PHASES
;=============================================================
DUTY: LDP #0
LACL na
SUB #num
BCND NEXT_A,LT ;If Ncount>=NUM, then Ncount reset
RST_A: SPLK #0,na
NEXT_A: LACL na
ADD stab
TBLR sinA ;GET THE SIN VALUE
LACC na
ADD #n0
SACL nc
SUB #num
BCND NEXT_C,LT
RST_C: SACL nc
NEXT_C: LACL nc
ADD stab
TBLR sinC
LACC nc
ADD #n0
SACL nb
SUB #num
BCND NEXT_B,LT
RST_B: SACL nb
NEXT_B: LACL nb
ADD stab
TBLR sinB
***********************************************************************
* CALCULATE SWICHING ON TIME
***********************************************************************
SPM 1
LT sinA
MPY mag
PAC
SACH GPR0
LT period
MPY GPR0
PAC
SACH GPR0
LACL period
SUB GPR0
LDP #00E8h
SACL CMPR1
LDP #0
LT sinB
MPY mag
PAC
SACH GPR0
LT period
MPY GPR0
PAC
SACH GPR0
LACL period
SUB GPR0
LDP #00E8h
SACL CMPR2
LDP #0
LT sinC
MPY mag
PAC
SACH GPR0
LT period
MPY GPR0
PAC
SACH GPR0
LACL period
SUB GPR0
LDP #00E8h
SACL CMPR3
LDP #0
LACL na ;NA INCREASE BY 1 FOR NEXT TIME USE
ADD #1
SACL na
RET
;==============================================================
; STABLE, SIN TABLE USED TO PRODUCE PWM
;==============================================================
; Sine look-up table、No. Entries : 60、Angle Range : 360deg
.data
; SINVAL ; Index Angle(deg)
STABLE: .word 0h ; 0 0 0
.word 0d61h ; 1 6 0.10453
.word 1a9dh ; 2 12 0.20791
.word 278eh ; 3 18 0.30902
.word 3411h ; 4 24 0.40674
.word 4000h ; 5 30 0.5
.word 4b3dh ; 6 36 0.58779
.word 55a6h ; 7 42 0.66913
.word 5f1fh ; 8 48 0.74314
.word 678eh ; 9 54 0.80902
.word 6edah ; 10 60 0.86603
.word 74efh ; 11 66 0.91355
.word 79bch ; 12 72 0.95106
.word 7d34h ; 13 78 0.97815
.word 7f4ch ; 14 84 0.99452
.word 7fffh ; 15 90 1
.word 7f4ch ; 16 96 0.99452
.word 7d34h ; 17 102 0.97815
.word 79bch ; 18 108 0.95106
.word 74efh ; 19 114 0.91355
.word 6edah ; 20 120 0.86603
.word 678eh ; 21 126 0.80902
.word 5f1fh ; 22 132 0.74314
.word 55a6h ; 23 138 0.66913
.word 4b3dh ; 24 144 0.58779
.word 4000h ; 25 150 0.5
.word 3411h ; 26 156 0.40674
.word 278eh ; 27 162 0.30902
.word 1a9dh ; 28 168 0.20791
.word 0d61h ; 29 174 0.10453
.word 0h ; 30 180 0
.word 0f29fh ; 31 186 -0.10453
.word 0e563h ; 32 192 -0.20791
.word 0d872h ; 33 198 -0.30902
.word 0cbefh ; 34 204 -0.40674
.word 0c000h ; 35 210 -0.5
.word 0b4c3h ; 36 216 -0.58779
.word 0aa5ah ; 37 222 -0.66913
.word 0a0e1h ; 38 228 -0.74314
.word 9872h ; 39 234 -0.80902
.word 9126h ; 40 240 -0.86603
.word 8b11h ; 41 246 -0.91355
.word 8644h ; 42 252 -0.95106
.word 82cch ; 43 258 -0.97815
.word 80b4h ; 44 264 -0.99452
.word 8000h ; 45 270 -1
.word 80b4h ; 46 276 -0.99452
.word 82cch ; 47 282 -0.97815
.word 8644h ; 48 288 -0.95106
.word 8b11h ; 49 294 -0.91355
.word 9126h ; 50 300 -0.86603
.word 9872h ; 51 306 -0.80902
.word 0a0e1h ; 52 312 -0.74314
.word 0aa5ah ; 53 318 -0.66913
.word 0b4c3h ; 54 324 -0.58779
.word 0c000h ; 55 330 -0.5
.word 0cbefh ; 56 336 -0.40674
.word 0d872h ; 57 342 -0.30902
.word 0e563h ; 58 348 -0.20791
.word 0f29fh ; 59 354 -0.10453
;==============================================================
; MTABLE, MAG TABLE FOR EVERY F, FROM 25HZ TO 45HZ
;==============================================================
MTABLE: word 3b1eh ;
.word 3d5ch ;
.word 3f9ah ;
.word 41d9h ;
.word 4417h ;
.word 4655h ;
.word 4893h ;
.word 4ad2h ;
.word 4d10h ;
.word 4f4eh ;
.word 518dh ;
.word 53cbh ;
.word 5609h ;
.word 5847h ;
.word 5a86h ;
.word 5cc4h ;
.word 5f02h ;
.word 6141h ;
.word 637fh ;
.word 65bdh ;
.word 67fch ;
;==============================================================
; PTABLE, PERIOD TABLE FOR EVERY F, FROM 25HZ TO 45HZ
;==============================================================
PTABLE: .word 1A0Bh ;25Hz
.word 190Ah ;
.word 181Dh ;
.word 1740h ;
.word 1673h ;
.word 15B4h ;
.word 1500h ;
.word 1458h ;
.word 13BBh ;
.word 1326h ;
.word 129Ah ;
.word 1216h ;
.word 1199h ;
.word 1122h ;
.word 10B2h ;
.word 1047h ;
.word 0FE1h ;
.word 0F80h ;
.word 0F24h ;
.word 0ECCh ;
.word 0E78h ;45Hz
;==============================================================
; I S R - PHANTOM
;==============================================================
.text
PHANTOM KICK_DOG ;Resets WD counter
B PHANTOM
文章评论(0条评论)
登录后参与讨论