原创 三相SPWM波形发生器实验

2009-1-13 13:19 3107 3 3 分类: 处理器与DSP

三相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条评论)

登录后参与讨论
我要评论
0
3
关闭 站长推荐上一条 /2 下一条