单片机实验
三相SPWM波形发生器实验
三相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 接下来考虑如何在线计算和改写比较寄存器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 中断服务子程序流程 化工作后,设置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
主程序流程如图3-7所示。主程序先进行变量的初始化。硬件的初始化工作包括设置看门狗电路;禁止中断(INTM=1);设置符号扩展模式(SXM=1);清零所有的CPU级中断标志寄存器(IFR);设置CPU级中断屏蔽寄存器(IMR);并设置等待状态控制寄存器(WSGR)来设定对片外的程序存储器、数据存储器以及I/O空间的地址进行读写操作所需的等待时钟周期数。软件初始化工作除了设置事件管理器中的一些控制寄存器外,还需给部分变量赋初值,使之在中断服务子程序中运算。并需将六个复用的I/O引脚设置为PWM波输出引脚。在完成所有的初始
全部0条评论
快来发表一下你的评论吧 !