DSP_TMS320F28027SPWM程序_第1頁
DSP_TMS320F28027SPWM程序_第2頁
DSP_TMS320F28027SPWM程序_第3頁
DSP_TMS320F28027SPWM程序_第4頁
DSP_TMS320F28027SPWM程序_第5頁
已閱讀5頁,還剩14頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、課程名稱:電機(jī)的DSP控制課程設(shè)計(jì)院 系: 電子信息與電氣工程學(xué)院專 業(yè): 電氣工程與自動化班 級: F0903006學(xué) 號: 姓 名: 上 海 交 通 大 學(xué)目錄摘要3第一章LED和按鍵41.1 程序功能41.2 程序?qū)崿F(xiàn)思想41.3 程序流程圖51.4 程序評價(jià)5第二章 AD轉(zhuǎn)換和LCD顯示62.1 程序功能62.2 程序?qū)崿F(xiàn)思想62.3 程序評價(jià)6第三章 SPWM的產(chǎn)生73.1 程序功能73.2 程序?qū)崿F(xiàn)思想73.3 程序流程圖83.4 程序評價(jià)9SPWM附錄程序(部分)10摘要本報(bào)告主要內(nèi)容是用TMS320C28027DSP芯片產(chǎn)生SPWM波,實(shí)現(xiàn)恒壓頻比控制。產(chǎn)生SPWM的方法有三角

2、波與正弦波比較法(單極性和雙極性)、數(shù)字方法,和具體的實(shí)現(xiàn)。此外,還有兩個(gè)小任務(wù)。一個(gè)是利用該芯片實(shí)現(xiàn)按鍵判斷和LED顯示,另一個(gè)是AD轉(zhuǎn)換和LCD顯示。小任務(wù)的目的是熟悉實(shí)驗(yàn)板的操作,為SPWM波程序編寫打下基礎(chǔ)。第一章 LED和按鍵1.1 程序功能該程序的功能是分辨按鍵的輸入,不同的按鍵實(shí)現(xiàn)不同的功能,然后再LED上顯示效果。程序運(yùn)行后,初始值為0,通過1個(gè)鍵,按一下加1,通過另一個(gè)鍵,按1下減1;(按著不放,超過1秒,不斷加1或減1,時(shí)間超過5秒,不斷加10,或減10)。通過四個(gè)按鍵設(shè)置兩個(gè)數(shù)值,再按第五個(gè)按鍵計(jì)算兩個(gè)數(shù)的乘積。1.2 程序?qū)崿F(xiàn)思想按鍵的識別利用的BC7281芯片的相關(guān)功

3、能,該模塊提供了一個(gè)接口,變量KEY變低時(shí)說明有按鍵按下,利用Read_7281(0x13)函數(shù)就可以讀取按鍵的地址(在BC7281中的存放地址為0x13),實(shí)現(xiàn)對按鍵的判斷。長按的功能通過定時(shí)器來實(shí)現(xiàn)。初始設(shè)定長按標(biāo)志變量flag=0;在按下某個(gè)值時(shí),如果flag=按鍵地址(1-4),重載定時(shí)器1預(yù)定標(biāo)值,開啟定時(shí)器1,中斷周期為5秒;重載定時(shí)器2,開啟定時(shí)器2,中斷時(shí)間為1秒。如果flag=5,那么加減10;如果flag為6,那么加減1;如果為其他,加減1,令flag=按鍵地址。在中斷函數(shù)內(nèi),flag=5或6,停止定時(shí)器。1.3 程序流程圖圖1-1 LED程序流程圖1.4 程序評價(jià)該程序完

4、成了要求的任務(wù),并且采用中斷而不是用delay來確定按鍵時(shí)間,提高了效率。第二章 AD轉(zhuǎn)換和LCD顯示2.1 程序功能根據(jù)輸入的電壓值,把AD的結(jié)果顯示出來,當(dāng)輸入電壓變化時(shí),顯示值也變化。2.2 程序?qū)崿F(xiàn)思想利用示例程序很容易調(diào)節(jié)ADC模塊的采樣頻率,觸發(fā)方式,采樣精度等參數(shù),LCD的顯示通過接口函數(shù)很容易使用。這里將采樣結(jié)果同樣用LED顯示。2.3 程序評價(jià)該程序很好的完成的既定的任務(wù),在LCD和LED顯示屏上都有穩(wěn)定的顯示,AD采樣靈敏。第三章 SPWM的產(chǎn)生3.1 程序功能生成6路PWM正弦波程序(變頻器逆變需6路),PWM的開關(guān)頻率為10KHz,其輸出的正弦波頻率為0100Hz,根據(jù)

5、AD的值變化,50Hz時(shí)輸出100%電壓,050Hz按V/f等于常數(shù)輸出,死區(qū)時(shí)間取2us。頻率值顯示在數(shù)碼管上。3.2 程序?qū)崿F(xiàn)思想1、采用epwm模塊的上下數(shù)模式,計(jì)數(shù)值為3000,計(jì)數(shù)周期為16.67ns;2、改變比較寄存器里的數(shù)值改變中斷時(shí)間,上數(shù)到比較值置高,下數(shù)到比較值置低,數(shù)到周期值置高,數(shù)到0置低;3、每個(gè)epwm模塊產(chǎn)生兩路死區(qū)時(shí)間為2us的相互反向的pwm波;4、計(jì)數(shù)到0出發(fā)中斷,中斷操作為更改比較值;5、比較值利用等面積法計(jì)算出來,最低點(diǎn)設(shè)置為0,最高點(diǎn)設(shè)置為3000。6、比較值存放在table200數(shù)組中,只存放半個(gè)周期的比較值,在50Hz以上的算法為tablei=si

6、n(2*i+1)*pi/(2*SamNum)*1500; 式 3-1其中SamNum為半周期比較的次數(shù)。1500為計(jì)數(shù)器的半周期值,更新比較值時(shí),正半周要加上1500,后半周不需要;對50Hz一下頻率(大于25Hz),算法為tablei= (workfre_div*sin(2*i+1)*pi/(2*SamNum)*1500)/50; 式3-2其中workfre_div為正弦波頻率,0100Hz。當(dāng)大于25Hz時(shí),SamNum為半周期比較次數(shù),當(dāng)小于25Hz時(shí),其為25Hz時(shí)的比較次數(shù)。7、更新比較值策略:正半周比較值為相應(yīng)表格中的數(shù)加上1500,后半周不加。當(dāng)正弦波頻率低于25Hz時(shí),利用20

7、0個(gè)點(diǎn)來產(chǎn)生比較值,在第i次更新時(shí)取table中第i*workfare_div/workfre個(gè)值,這樣可以產(chǎn)生很低頻率的正玄波。8、相角控制方法:用epwm2和epwm3模塊產(chǎn)生相差120和240度相角的正弦波,讓epwm2中斷一周期比較次數(shù)的2/3次后開始工作,同理讓epwm3中斷一周期比較次數(shù)的4/3次后開始工作。3.3 程序流程圖圖3-1 SPWM波產(chǎn)生流程圖3.4 程序評價(jià)該程序完成了既定的任務(wù),得到的波形在高于20Hz時(shí)諧波較少,波形與正弦波十分接近。相位關(guān)系正確。符合恒壓頻比控制策略。死區(qū)時(shí)間2us,載波10KHz。SPWM附錄程序(部分)void main(void)/ Ste

8、p 1. Initialize System Control:/ PLL, WatchDog, enable Peripheral Clocks/ This example function is found in the DSP2802x_SysCtrl.c file. InitSysCtrl();/ Step 2. Initalize GPIO:/ This example function is found in the DSP2802x_Gpio.c file and/ illustrates how to set the GPIO to it's default state.

9、/ InitGpio(); / Skipped for this example/ For this case just init GPIO pins for ePWM1, ePWM2, ePWM3/ These functions are in the DSP2802x_EPwm.c file InitEPwm1Gpio(); InitEPwm2Gpio(); InitEPwm3Gpio();/ Step 3. Clear all interrupts and initialize PIE vector table:/ Disable CPU interrupts DINT;/ Initia

10、lize the PIE control registers to their default state./ The default state is all PIE interrupts disabled and flags/ are cleared./ This function is found in the DSP2802x_PieCtrl.c file. InitPieCtrl();/ Disable CPU interrupts and clear all CPU interrupt flags: IER = 0x0000; IFR = 0x0000;/ Initialize t

11、he PIE vector table with pointers to the shell Interrupt/ Service Routines (ISR)./ This will populate the entire table, even if the interrupt/ is not used in this example. This is useful for debug purposes./ The shell ISR routines are found in DSP2802x_DefaultIsr.c./ This function is found in DSP280

12、2x_PieVect.c. InitPieVectTable();/ Interrupts that are used in this example are re-mapped to/ ISR functions found within this file. EALLOW; / This is needed to write to EALLOW protected registers PieVectTable.EPWM1_INT = &epwm1_isr; PieVectTable.EPWM2_INT = &epwm2_isr; PieVectTable.EPWM3_INT

13、 = &epwm3_isr; EDIS; / This is needed to disable write to EALLOW protected registers EALLOW; / This is needed to write to EALLOW protected register PieVectTable.ADCINT1 = &adc_isr; EDIS; / This is needed to disable write to EALLOW protected registers/ Step 4. Initialize all the Device Periph

14、erals:/ This function is found in DSP2802x_InitPeripherals.c/ InitPeripherals(); / Not required for this example sintable(table); EALLOW; SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0; EDIS; InitEPwm1Example(); InitEPwm2Example(); InitEPwm3Example(); EALLOW; SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1; EDIS; Init

15、Adc(); ConfigAdc(); / Step 5. User specific code, enable interrupts/ Initalize counters: EPwm1TimerIntCount = 0; EPwm2TimerIntCount = 0; EPwm3TimerIntCount = 0;/ Enable CPU INT3 which is connected to EPWM1-3 INT:PieCtrlRegs.PIEIER1.bit.INTx1 = 1; IER |= M_INT3;IER |= M_INT1;/ Enable EPWM INTn in the

16、 PIE: Group 3 interrupt 1-3 PieCtrlRegs.PIEIER3.bit.INTx1 = 1; PieCtrlRegs.PIEIER3.bit.INTx2 = 1; PieCtrlRegs.PIEIER3.bit.INTx3 = 1;/ Enable global Interrupts and higher priority real-time debug events: EINT; / Enable Global interrupt INTM ERTM; / Enable Global realtime interrupt DBGM /ledDlay(40000

17、); EALLOW;/ 允許訪問受保護(hù)的空間 Clk_Out; / 設(shè)定連接CLKK(7281.3)的 SCL 為輸出(時(shí)鐘脈沖輸出) Dat_In;/ 設(shè)定連接DATT(7281.1)的 SDA 為輸入(接收7281的反饋信號) EDIS;/ 禁止訪問受保護(hù)的空間 Setb_Clk; Write_7281(0x12,0x84);/ 初始化BC728xWrite_7281(0x15,(0x70+0); / 向最右邊算起第8位寫1 Write_7281(0x15,(0x60+0);/ 向最右邊算起第7位寫2Write_7281(0x15,(0x50+0);/ 向最右邊算起第6位寫3Write_7

18、281(0x15,(0x40+0); / 向最右邊算起第5位寫4Write_7281(0x15,(0x30+0); / 向最右邊算起第4位寫5 Write_7281(0x15,(0x20+0);/ 向最右邊算起第3位寫6Write_7281(0x15,(0x10+0);/ 向最右邊算起第2位寫7Write_7281(0x15,(0x00+0);/ 向最右邊算起第1位寫8/Write_7281(0x18,0x0bf);/ 消除第8位Led的小數(shù)點(diǎn),該小數(shù)點(diǎn)是/led/ Step 6. IDLE loop. Just sit and loop forever (optional): for(;)

19、workfre_temp=(Voltage0*100/3790+1);if(workfre_temp>workfre_div)|(workfre_temp<workfre_div)workfre_div=workfre_temp;if(workfre_div<25)workfre=25;elseworkfre=workfre_div;DINT;Write_7281(0x15,(0x20+workfre_div/100);/ 向最右邊算起第3位寫6Write_7281(0x15,(0x10+(workfre_div/10)%10);/ 向最右邊算起第2位寫7Write_7281

20、(0x15,(0x00+workfre_div%10);/ 向最右邊算起第1位寫8sintable(table);EPwm1TimerIntCount = 0; EPwm2TimerIntCount = 0; EPwm3TimerIntCount = 0;EINT; / Enable Global interrupt INTM ERTM; / Enable Global realtime interrupt DBGM void sintable(Uint16 *table)for(i=0;i<200;i+)tablei=0;SamNum=LOADFRE/(2*workfre);if(wo

21、rkfre<50)for(i=0;i<SamNum;i+)tablei= (workfre_div*sin(2*i+1)*pi/(2*SamNum)*1500)/50;elsefor(i=0;i<SamNum;i+)tablei=sin(2*i+1)*pi/(2*SamNum)*1500;SamNum=LOADFRE/(2*workfre_div);phaseB=2*SamNum/3;phaseC=4*SamNum/3;interrupt void epwm1_isr(void)if(EPwm1TimerIntCount>=(2*SamNum)EPwm1TimerInt

22、Count=0;EPwm1Regs.CMPA.half.CMPA= table0+1500;elseif(EPwm1TimerIntCount<SamNum)EPwm1Regs.CMPA.half.CMPA= tableEPwm1TimerIntCount*workfre_div/workfre+1500;elseEPwm1Regs.CMPA.half.CMPA=1500-table(EPwm1TimerIntCount-SamNum)*workfre_div/workfre;/EPwm1Regs.CMPA.half.CMPA=EPWM_TIMER_TBPRD/2; EPwm1Timer

23、IntCount+; / Clear INT flag for this timer EPwm1Regs.ETCLR.bit.INT = 1; / Acknowledge this interrupt to receive more interrupts from group 3 PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;interrupt void epwm2_isr(void)if(EPwm2TimerIntCount>(phaseB-1)if(EPwm2TimerIntCount>=(2*SamNum+phaseB)EPwm2TimerIntCount = phaseB;EPwm2Regs.CMPA.half.CMPA= table0+1500;elseif(EPwm2TimerIntCount<(SamNum+phaseB)EPwm2Regs.CMPA.half.CMPA= table(EPwm2TimerIntCount-phaseB)*workfre_div/workfre+1500;elseEPwm2Regs.CMPA.half.CMPA=1500-table(EPwm2TimerIntCount-phaseB-SamNum)*workfr

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論