版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
課程名稱:電機的DSP控制課程設計院系:電子信息與電氣工程學院專業(yè):電氣工程與自動化班級:學號:姓名:上海交通大學目錄TOC\o"1-3"\h\u178211.電機控制的DSP芯片 346622.軟件設計要求 316602.1學會DSP開發(fā)環(huán)境的使用,能編寫C語言程序; 3267912.2編寫數(shù)碼管顯示程序、鍵盤掃描程序; 3239722.3編寫AD采樣程序; 3253162.4編寫6路PWM正弦波程序(變頻器逆變需6路); 3170093.軟件實現(xiàn) 3169133.1數(shù)碼管顯示程序、鍵盤掃描程序 3255453.1.1程序設計思路 3272753.1.2程序模塊 4270013.2AD采樣程序 6282243.2.1程序設計思路 6270493.2.2程序模塊 6283883.36路PWM正弦波程序 7314203.3.1程序設計思路 7160733.3.2程序模塊 8197943.3.3程序設計結果 1075134.課程總結 14電機控制的DSP芯片本課程設計用的芯片為TMS320F28027;本課程設計中主要用到的一些電路模塊:顯示和鍵盤電路、BC7281、A/D采樣電路、PWM輸出電路。2.軟件設計要求2.1學會DSP開發(fā)環(huán)境的使用,能編寫C語言程序;2.2編寫數(shù)碼管顯示程序、鍵盤掃描程序;程序運行后,初始值為0,通過1個鍵,按一下加1,通過另一個鍵,按1下減1;(按著不放,超過1秒,不斷加1或減1,時間超過5秒,不斷加10,或減10)。2.3編寫AD采樣程序;根據輸入的電壓值,把AD的結果顯示出來,當輸入電壓變化時,顯示值也變化。2.4編寫6路PWM正弦波程序(變頻器逆變需6路);PWM的開關頻率為10KHz,其輸出的正弦波頻率為0~100Hz,根據AD的值變化,50Hz時輸出100%電壓,0~50Hz按V/f等于常數(shù)輸出,死區(qū)時間取2us。頻率值顯示在數(shù)碼管上。軟件實現(xiàn)3.1數(shù)碼管顯示程序、鍵盤掃描程序3.1.1程序設計思路此程序關鍵是如何去計時,最初考慮是用計時器中斷去設計程序,但此方法需要在中斷中執(zhí)行判斷按鍵是否持續(xù),以及更改和現(xiàn)實數(shù)字,中斷中操作過多,經常出錯。故后來改為用延時環(huán)節(jié)計時,此方法的優(yōu)點是不需要用中斷,但計時不夠精確。3.1.2程序模塊 for(;;) {time=0;//計時變量time初始值為0;if(KEY==0){key_number=Read_7281(0x13); //讀取按鍵值switch(key_number){case0x00:{keynumber++; if(keynumber>9999)keynumber=0;write(); delay(2);}break; case0x01: {keynumber--; if(keynumber<0)keynumber=9999; write(); delay(2); }break;}//switch }//if while(KEY==0)//如果按鍵沒有松開,則開始計時; { if(time<=5)//延時環(huán)節(jié),延時為1秒; { for(cnt1=0;cnt1<270;cnt1++) { for(cnt2=0;cnt2<10000;cnt2++){if(KEY!=0)break;} if(KEY!=0)break;//如果按鍵松開,則跳出循環(huán),重新開始計時; }}if(KEY!=0)break;time++;//如果1秒內按鍵未松開,則計時變量time加1;cnt1=cnt2=0; if(time>=1&&time<=5)//按著不放超過1秒,則不斷加1或減1; { switch(key_number) {case0x00:{ keynumber++; if(keynumber>9999)keynumber=0; write();}break; case0x01: { keynumber--; If(keynumber<0)keynumber=9999; write(); }break;default:break; } } if(time>5)//按著不放超過5秒,則不斷加10或減10; { switch(key_number) {case0x00:{ keynumber+=10; if(keynumber>9999)keynumber=0; write(); delay(15);}break; case0x01: { keynumber-=10; if(keynumber<0)keynumber=9999; write(); delay(15); }break;default:break; } } } }//for3.2AD采樣程序3.2.1程序設計思路此程序相對簡單,只需要用ADC中斷獲取通道的采樣值,再將采樣值在數(shù)碼管上顯示即可。3.2.2程序模塊//ADC中斷,獲取通道采樣值;interruptvoidadc_isr(void){Voltage0[0]=AdcResult.ADCRESULT0; //模數(shù)轉換結果由ADCINA0通道采樣產生Voltage0[1]=AdcResult.ADCRESULT1; //模數(shù)轉換結果由ADCINA1通道采樣產生Voltage0[2]=AdcResult.ADCRESULT2; //模數(shù)轉換結果由ADCINA2通道采樣產生Voltage0[3]=AdcResult.ADCRESULT3; //模數(shù)轉換結果由ADCINA3通道采樣產生Voltage0[4]=AdcResult.ADCRESULT4; //模數(shù)轉換結果由ADCINA4通道采樣產生 //28027缺ADCINA5ADCRESULT5Voltage0[5]=AdcResult.ADCRESULT6; //模數(shù)轉換結果由ADCINA6通道采樣產生Voltage0[6]=AdcResult.ADCRESULT7; //模數(shù)轉換結果由ADCINA7通道采樣產生 //28027缺ADCINB0ADCRESULT8Voltage0[7]=AdcResult.ADCRESULT9; //模數(shù)轉換結果由ADCINB1通道采樣產生Voltage0[8]=AdcResult.ADCRESULT10; //模數(shù)轉換結果由ADCINB2通道采樣產生Voltage0[9]=AdcResult.ADCRESULT11; //模數(shù)轉換結果由ADCINB3通道采樣產生Voltage0[10]=AdcResult.ADCRESULT12; //模數(shù)轉換結果由ADCINB4通道采樣產生 //28027缺ADCINB5ADCRESULT13Voltage0[11]=AdcResult.ADCRESULT14; //模數(shù)轉換結果由ADCINB6通道采樣產生Voltage0[12]=AdcResult.ADCRESULT15; //模數(shù)轉換結果由ADCINB7通道采樣產生AdcRegs.ADCINTFLGCLR.bit.ADCINT1=1; //ClearADCINT1flagreinitializefornextSOCPieCtrlRegs.PIEACK.all=PIEACK_GROUP1;//AcknowledgeinterrupttoPIEreturn;} //for循環(huán)for(;;)//計算每一位的數(shù)值,并顯示;{ qw=Voltage0[0]/1000; bw=(Voltage0[0]-1000*qw)/100; sw=(Voltage0[0]-1000*qw-100*bw)/10; gw=Voltage0[0]-1000*qw-100*bw-10*sw; qw1=Voltage0[1]/1000; bw1=(Voltage0[1]-1000*qw1)/100; sw1=(Voltage0[1]-1000*qw1-100*bw1)/10; gw1=Voltage0[1]-1000*qw1-100*bw1-10*sw1;Write_7281(0x15,(0x70+qw)); //向最右邊算起第8位寫0Write_7281(0x15,(0x60+bw)); //向最右邊算起第7位寫0 Write_7281(0x15,(0x50+sw)); //向最右邊算起第6位寫0 Write_7281(0x15,(0x40+gw)); //向最右邊算起第5位寫0 Write_7281(0x15,(0x30+qw1)); //向最右邊算起第4位寫0Write_7281(0x15,(0x20+bw1)); //向最右邊算起第3位寫0 Write_7281(0x15,(0x10+sw1)); //向最右邊算起第2位寫0 Write_7281(0x15,(0x00+gw1)); //向最右邊算起第1位寫0 delay(3);}3.36路PWM正弦波程序3.3.1程序設計思路PWM開關頻率和死區(qū)的設置,可以在InitEPwm1Example(),這個函數(shù)中通過對周期寄存器賦值來控制開關頻率,死區(qū)則通過對RaisingEdgeDelay和FailingEdgeDelay賦值來設置。程序要求開關頻率為10KHZ,而28027主頻為60MHZ,由于60M/3000/2=10K,故周期寄存器賦值3000;程序要求死區(qū)為2us,故只需將上升沿延遲和下降沿延遲均設定為1us即可。輸出波形為正弦波,即要求占空比按正弦變化,本組通過查表(表中數(shù)據按正弦變化),來進行脈寬調制。對于頻率的控制,首先按50HZ為基準,要求每次步長為1查表,將表中數(shù)據查完一遍,輸出的波形即為50HZ。則由于開關頻率為10KHZ,10K/50=200,所以正弦表中應含有200個數(shù)值,且數(shù)值大小按正弦變化。當頻率小于50HZ時,按F/50這一比例系數(shù)為步長進行查表,由于F<50,故查表較慢,即輸出波形的頻率變小。當頻率大于50HZ時,也按F/50這一比例系數(shù)為步長進行查表,由于此時F>50,故查表較快,即輸出波形頻率變大。對與V/f為常數(shù),則可通過簡單的運算即可實現(xiàn)。3.3.2程序模塊//正弦表//Sintable,MaxValue4096,MinValue0unsignedshortsin_table[200]={2073,2138,2202,2266,2330,2393,2456,2519,2582,2643,2705,2765,2825,2884,2942,3000,3056,3112,3166,3220,3272,3323,3372,3421,3468,3513,3558,3600,3641,3681,3719,3755,3790,3823,3854,3883,3911,3937,3961,3983,4003,4021,4037,4051,4063,4074,4082,4088,4092,4095,4095,4093,4089,4083,4075,4066,4054,4040,4024,4006,3987,3965,3942,3916,3889,3860,3829,3797,3762,3726,3689,3649,3609,3566,3522,3477,3430,3382,3333,3282,3230,3177,3123,3068,3011,2954,2896,2837,2777,2717,2656,2594,2532,2469,2406,2342,2279,2215,2150,2086,2022,1957,1893,1829,1765,1702,1639,1576,1513,1452,1390,1330,1270,1211,1153,1095,1039,983,929,875,823,772,723,674,627,582,537,495,454,414,376,340,305,272,241,212,184,158,134,112,92,74,58,44,32,21,13,7,3,0,0,2,6,12,20,29,41,55,71,89,108,130,153,179,206,235,266,298,333,369,406,446,486,529,573,618,665,713,762,813,865,918,972,1027,1084,1141,1199,1258,1318,1378,1439,1501,1563,1626,1689,1753,1816,1880,1945,2009};//此即為正弦表,此表中數(shù)據按正弦規(guī)律變化,通過查表可以控制占空比,即控制電壓大小,通過改變查表的快慢即可控制輸出波形的頻率。//EPWM1配置//10KHz:60M/3000/2=10Kcenter-aligned#defineEPWM1_TIMER_TBPRD3000//Periodregister周期寄存器賦值3000#defineEPWM2_TIMER_TBPRD3000//Periodregister#defineEPWM3_TIMER_TBPRD3000//PeriodregistervoidInitEPwm1Example(){//SetupTBCLKEPwm1Regs.TBPRD=EPWM1_TIMER_TBPRD;//Settimerperiod801TBCLKs//周期寄存器值為3000,60M/3000/2=10K;即開關頻率設置為10KHZ;EPwm1Regs.TBPHS.half.TBPHS=0x0000;//Phaseis0EPwm1Regs.TBCTR=0x0000;//Clearcounter………………EPwm1Regs.DBCTL.bit.OUT_MODE=DB_FULL_ENABLE;EPwm1Regs.DBCTL.bit.POLSEL=DB_ACTV_HIC;//ToggleEPWM1BonlyEPwm1Regs.DBCTL.bit.IN_MODE=DBA_ALL;//DelayonRaisingandFalingEPwm1Regs.DBRED=120;//1usdeadbandEPwm1Regs.DBFED=120;//死區(qū)配置,RED和FED均設置為1us,即死區(qū)時間為2us;……}//for循環(huán)for(;;){ FreqFloat=ADCResults[0]/38;//頻率與通道采樣值乘正比,除以38是為了控制頻率調節(jié)范圍為0~100HZ; FreqInt=(unsignedint)FreqFloat; th=(FreqInt%100)/10;//將頻率輸出在數(shù)碼管上; Write_7281(0x15,(0x50+th)); th=FreqInt%10; Write_7281(0x15,(0x40+th)); Delay(2);asm("NOP");}//EPWM中斷函數(shù)interruptvoidepwm1_isr(void){//UpdatetheCMPAandCMPBvalues//update_compare(&epwm1_info);unsignedintPhaseAPosition;unsignedshorti,j,k;InterruptedTimes++;PWMStep=FreqFloat/50.0;//設置查表的步長,以50HZ為基準;PhaseAPositionHistory+=PWMStep;//按步長依次查表;if(PhaseAPositionHistory>200){PhaseAPositionHistory-=200;}//若超過200,則循環(huán)PhaseAPosition=(unsignedint)PhaseAPositionHistory;if(FreqInt>50){ i=(unsignedshort)((float)sin_table[PhaseAPosition%200]/1.37f); j=(unsignedshort)((float)sin_table[(PhaseAPosition+133)%200]/1.37f); k=(unsignedshort)((float)sin_table[(PhaseAPosition+67)%200]/1.37f);//頻率大于50HZ時的變換式,輸出電壓為100%幅值;}else{ i=(unsignedshort)((float)FreqInt*2*sin_table[PhaseAPosition%200]/137.0f); j=(unsignedshort)((float)FreqInt*2*s
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年金融資產托管居間服務合同3篇
- 二零二五年度勞動人事爭議仲裁院仲裁員職業(yè)道德規(guī)范合同3篇
- 二零二五年度互聯(lián)網廣告業(yè)務收益抵押擔保協(xié)議3篇
- 2025年度勞動合同延期及福利待遇補充協(xié)議3篇
- 2024年汽車租賃合同:含車輛違章處理服務3篇
- 2024年舞蹈教師聘請協(xié)議3篇
- 二零二五年度別墅裝修定制軟裝服務合同3篇
- 2024年網絡直播平臺技術服務合同
- 2025年度二零二五版汽車租賃與廣告推廣服務合同3篇
- 2024年金融機構循環(huán)貸款協(xié)議樣本版
- 2025年林權抵押合同范本
- 智能檢測與監(jiān)測技術-智能建造技術專02課件講解
- 2025蛇年一年級寒假作業(yè)創(chuàng)意與寓意齊【高清可打印】
- 多系統(tǒng)萎縮鑒別及治療
- 設備的使用和維護管理制度模版(3篇)
- 浙江省寧波市慈溪市2023-2024學年高三上學期語文期末測試試卷
- 麻風病防治知識課件
- 痛風護理疑難病例討論
- 木材材積表0.1-10米.xls
- 輕質隔墻板安裝合同協(xié)議書范本標準版
- 車輛管理各崗位績效考核量表
評論
0/150
提交評論