三相SPWM波形發(fā)生器實驗
三相SPWM波形發(fā)生器實驗由微處理器來實現(xiàn)SPWM控制,根據(jù)軟件化方法的不同,有表格法(又稱ROM法)、隨時計算法(又稱RAM法)和實時計算法,但上兩種無實時處理能力。實時計算要有數(shù)學(xué)模型,采樣型SPWM法是其中一種模型,它分自然采樣法,規(guī)則采樣法。而規(guī)則采樣法中又有對稱規(guī)則采樣法與不對稱規(guī)則采樣法。
分析表明,不對稱規(guī)則采樣所形成的階梯波比對稱規(guī)則采樣時更接近于正弦波。分析表明,用不對稱規(guī)則采樣法在載波比N=3或3的倍數(shù)時,逆變器輸出電壓中不存在偶次諧波分量,其他高次諧波分量的幅值也較小。
圖3-5 不對稱規(guī)則采樣法
不對稱規(guī)則采樣法是既在三角波的頂點位置又在底點位置對正弦波進行采樣,由采樣值形成階梯波,如圖3-5所示。由圖可看出階梯波與三角波的交點所確定的脈寬,在一個三角波的周期內(nèi)的位置是不對稱的。要注意的是,這里的采樣周期TS是三角波周期的1/2,即TS=Tt/2。
SPWM波生成基本設(shè)計思想
圖 3-6 對稱PWM波生成機理
+ Compare matches
T1CNT
Dead time
PWMx(active low)
PWMx_(active high)
T1PR
利用TMS320F2407生成SPWM波的基本設(shè)計思想是利用DSP的事件管理器(EVA)中的三個全比較單元、通用定時器1、死區(qū)發(fā)生單元以及輸出邏輯來生成三相六路SPWM波,經(jīng)六個復(fù)用的I/O引腳輸出。TMS320F2407的定時器有四種工作方式,當以如圖3-6所示的持續(xù)向上/下計數(shù)方式工作時,將產(chǎn)生對稱的PWM 波輸出。在這種計數(shù)方式下,計數(shù)器的值由初值開始向上跳增,當?shù)竭_T1PR值時,開始遞減跳變,直至計數(shù)器的值為零時又重新向上跳增,如此循環(huán)往復(fù)。在計數(shù)器跳變的過程中,計數(shù)器的值都與比較寄存器CMPRx (x=1,2,3)的值作比較,當計數(shù)器的值與任一比較寄存器的值相等,則對應(yīng)的該相方波輸出發(fā)生電平翻轉(zhuǎn)。如右圖所示,在一個周期內(nèi),輸出的方波將發(fā)生兩次電平翻轉(zhuǎn)。從圖3-6還可以看出插入死區(qū)時間后波形的變化情況,只要在每個脈沖周期根據(jù)在線計算改寫比較寄存器CMPR的值,就可實時地改變脈沖的占空比。
程序設(shè)定
首先要確定采樣周期,即中斷周期。設(shè)頻率指令值為f,載波比為N,則中斷周期為:Ts=1/2Nf。這里Ts的單位是秒,在程序中轉(zhuǎn)化為相應(yīng)的時鐘周期數(shù)(單字節(jié)指令周期為50ns)。可以把某一頻率指令值對應(yīng)的中斷周期預(yù)先計算好,制成表格,便于在線查找。本系統(tǒng)運行的頻率指令值范圍為20~50Hz,載波比N為90。
其次再根據(jù)N值,預(yù)先計算好采樣點的單位正弦值,按順序制成表格,正弦值表示成(1,15)格式,并擴展符號。同樣地根據(jù)負載的V/f曲線,確定頻率f與調(diào)幅比M之間的關(guān)系,也預(yù)先將M值按f遞增的順序制成表。由于0 接下來考慮如何在線計算和改寫比較寄存器CMPR值的問題。根據(jù)頻率指令值f,查表得相應(yīng)采樣周期Ts以及調(diào)幅比M值,并把Ts值存入寄存器T1PR,作為中斷定時周期。CMPR值的在線計算和改寫都在中斷服務(wù)程序里完成。進入中斷服務(wù)子程序后,查表得到單位正弦表中下一個采樣點各相對應(yīng)的正弦值,可以計算出各相的開關(guān)時間。由于查表所得的Ts已經(jīng)是經(jīng)過量化的時鐘周期數(shù),所以上述計算所得的結(jié)果也是開關(guān)時間對應(yīng)的時鐘周期數(shù),可以直接寫入CMPRx (x=1,2,3 分別對應(yīng)a,b,c三相)。 控制寄存器設(shè)置 控制寄存器是指為產(chǎn)生SPWM波而需要設(shè)置的事件管理器(EVA)中的特殊功能寄存器。為了得到期望中的理想波形輸出,不但要求有正確的算法,正確地設(shè)置控制寄存器同樣也是極其關(guān)鍵的。控制寄存器的設(shè)置順序為: ① 設(shè)置定時周期寄存器T1PR。 ② 設(shè)置動作控制寄存器ACTR。 ③ 設(shè)置死區(qū)時間控制寄存器DBTCONA。 ④ 初始化CMPRx (x=1,2,3) ⑤ 設(shè)置比較控制寄存器COMCONA。 ⑥ 設(shè)置定時器1控制寄存器T1CON。 ⑦ 在每個采樣周期重寫CMPRx (x=1,2,3)。 3.4 程序流程 圖3-8 中斷服務(wù)子程序流程 化工作后,設(shè)置T1CON使定時器1開始工作,并重新打開中斷(INTM=0)。中斷服務(wù)子程序的流程如圖3-8所示。 當程序進入中斷服務(wù)子程序后,先通過讀取外圍設(shè)備中斷向量寄存器PIVR的值來判別中斷源。PIVR中的值對應(yīng)的是觸發(fā)當前中斷的中斷向量值,DSP中每一個來自外圍設(shè)備的中斷源都有一個與它唯一對應(yīng)的中斷向量值。因此在多中斷源系統(tǒng)中,在進入中斷服務(wù)子程序后,可以先通過判別PIVR的值來控制程序的流向,使之跳轉(zhuǎn)到特定中斷對應(yīng)的服務(wù)子程序入口。這里,除了T1PR定時中斷外,還有一個中斷源,即PDPINT (Power Drive Protection Interrupt )中斷。當系統(tǒng)電源受擾動超過一定范圍時,由PDPINT引腳產(chǎn)生一個電平負跳變,觸發(fā)中斷。如果觸發(fā)的是PDPINT中斷,則DSP的硬件系統(tǒng)將自動地置六路PWM輸出口為高阻狀態(tài),關(guān)閉PWM波的輸出,并可通過執(zhí)行一段程序代碼來顯示出錯信息。在轉(zhuǎn)入T1PR中斷服務(wù)子程序的入口后,則通過執(zhí)行一個算法計算出CMPRx(x=1,2,3)的值,來改變下一個中斷周期里各相脈沖的占空比,從而產(chǎn)生三相六路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所示。主程序先進行變量的初始化。硬件的初始化工作包括設(shè)置看門狗電路;禁止中斷(INTM=1);設(shè)置符號擴展模式(SXM=1);清零所有的CPU級中斷標志寄存器(IFR);設(shè)置CPU級中斷屏蔽寄存器(IMR);并設(shè)置等待狀態(tài)控制寄存器(WSGR)來設(shè)定對片外的程序存儲器、數(shù)據(jù)存儲器以及I/O空間的地址進行讀寫操作所需的等待時鐘周期數(shù)。軟件初始化工作除了設(shè)置事件管理器中的一些控制寄存器外,還需給部分變量賦初值,使之在中斷服務(wù)子程序中運算。并需將六個復(fù)用的I/O引腳設(shè)置為PWM波輸出引腳。在完成所有的初始
評論
查看更多