單片機(jī)產(chǎn)生正弦波_第1頁
單片機(jī)產(chǎn)生正弦波_第2頁
單片機(jī)產(chǎn)生正弦波_第3頁
單片機(jī)產(chǎn)生正弦波_第4頁
單片機(jī)產(chǎn)生正弦波_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡介

...wd......wd......wd...單片機(jī)產(chǎn)生正弦波一要求采用單片機(jī)map430g2553和運(yùn)算放大器lmv358產(chǎn)生正弦波,周期1秒。二思路可通過單片機(jī)產(chǎn)生PWM,調(diào)節(jié)參數(shù)存放器的值,產(chǎn)生不同占空比的PWM信號。假設(shè)占空比的變化規(guī)律是正弦的,則濾波后可得到所需正弦波形。其中,PWM〔PulseWidthModulation〕控制——脈沖寬度調(diào)制技術(shù)是通過對一系列脈沖的寬度進(jìn)展調(diào)制,來等效地獲得所需要波形〔含形狀和幅值〕。圖1為用PWM波代替正弦半波的例子?!矄纹瑱C(jī)輸出圖1b,濾波后得到圖1a〕圖1用PWM波代替正弦半波三實踐1PWM周期計算 正弦波周期1秒,需要采用多少個周期的PWM信號去表示數(shù)目過少,則波形不完整〔極端狀況只有1個周期的PWM〕;數(shù)目過多,則增加了單片機(jī)的計算量,并對速度有要求。這里取N=200個。 則PWM信號的周期為T=1/200秒=5毫秒。2PWM參數(shù)計算PWM由定時器TimerA產(chǎn)生,參數(shù)主要包括:定時器時鐘,周期計數(shù),高電平計數(shù)三個。定時器時鐘:定時器時鐘來源有4個,兩個內(nèi)部的〔輔助時鐘ACLK、子系統(tǒng)主時鐘SMCLK〕,兩個外部的。這里采用內(nèi)部時鐘。沒有外部晶體時,ACLK由內(nèi)部時鐘源VLOCLK〔低頻時鐘源,12K赫茲〕產(chǎn)生,SMCLK由內(nèi)部數(shù)字時鐘DCOCLK〔默認(rèn)1M赫茲〕產(chǎn)生。這里建議采用較高頻率的。局部代碼如下:BCSCTL1|=DIVA_0; //ACLK=VLOBCSCTL2|=SELM_0+DIVM_0+DIVS_0;//MCLK=DCO,SMCLK=DCO//ConfigureTimerATACTL=TASSEL1+MC_1;//Source:SMCLK,UPmode其中,ACLK可配置成VLOCLK的1,2,4,8分頻,這里設(shè)置為1分頻,即ACLK=VLO;第二行中,SELM_0的作用是選擇MCLK的時鐘源為DCOCLK,DIVM_0設(shè)置為MCLK=DCO,DIVS_0設(shè)置為SMCLK=DCO〔默認(rèn)時鐘源〕。TASSEL1將定時器時鐘設(shè)置為SMCLK〔假設(shè)為TASSEL0則選擇ACLK〕,且未分頻。模式選擇MC_1為上升模式。采用上述方法設(shè)置定時器時鐘=SMCLK=DCO=1M赫茲。周期計數(shù):上升模式說明定時器由0遞增到一個上限值CCR0。CCR0需設(shè)置。因為周期T=1/200秒,而定時器時鐘=SMCLK=DCO=1M赫茲,定時器周期t=1微秒,所以CCR0=T/t=5000,即5毫秒。高電平計數(shù):定時器由0遞增到一個上限值CCR0過程中,需設(shè)置脈寬CCR1。并且K=CCR1/CCR0的數(shù)值每個周期〔5毫秒〕都變化一次,變化趨勢滿足正弦變化,200個5毫秒構(gòu)成一個正弦變化周期。 為獲得CCR1值,在matlab中輸入:t=0:pi/100:2*pi;k=(sin(t)+1)/2;CCR1=round(4999*k);可獲得201個CCR1值。上式中,第一行設(shè)置了201個數(shù),均勻分布在0-2pi之間,第一個和最后一個分別對應(yīng)0弧度和2pi弧度;第二行計算201個正弦值,偏置為0.5,全幅度為1的正弦波幅度,如圖2所示:圖2偏置為0.5,全幅度為1的正弦波幅度 第三行計算CCR1值,為k與CCR0〔這里是5000〕的乘積,并取了四舍五入〔round函數(shù)〕。為將數(shù)據(jù)導(dǎo)出,便于單片機(jī)編程,在matlab中添加:fid=fopen('exp.txt','w');fprintf(fid,'%d,',CCR1);fclose(fid); 則在matlab工作目錄中生成了帶逗號的連續(xù)CCR1值。復(fù)制到程序中,定義一個數(shù)組temp[200],其數(shù)值為matlab生成的數(shù)值。3PWM實現(xiàn)流程程序包含兩個中斷,一個是定時器到達(dá)上限CCR0〔這里是4999〕時發(fā)出中斷,并在中斷服務(wù)程序中將輸出置1,另一個是到達(dá)中間值CCR1〔0至4999〕時發(fā)出中斷,并在中斷服務(wù)程序中將輸出置0??紤]到同時發(fā)出中斷時,會有中斷嵌套問題、以及優(yōu)先級問題,所以在當(dāng)CCR1需置為4999時,手動置為4998。軟件流程如圖3所示。圖3軟件流程圖 程序為://******************************************************************************//LaunchPadLab4-TimerToggleP1.6,////MSP430G2553//-----------------///|\|XIN|-//|||//--|RSTXOUT|-//||//|P1.6|-->LED////******************************************************************************#include<msp430g2553.h>shorttemp[200]={2500,2578,2656,2735,2813,2891,2968,3045,3121,3197,3272,3346,3420, 3492,3564,3634,3704,3772,3839,3904,3969,4031,4093,4152,4211,4267,4322,4374, 4425,4474,4522,4567,4610,4651,4690,4727,4761,4793,4823,4851,4877,4900,4920, 4939,4955,4968,4979,4988,4994,4998,4999,4998,4994,4988,4979,4968,4955,4939, 4920,4900,4877,4851,4823,4793,4761,4727,4690,4651,4610,4567,4522,4474,4425, 4374,4322,4267,4211,4152,4093,4031,3969,3904,3839,3772,3704,3634,3564,3492, 3420,3346,3272,3197,3121,3045,2968,2891,2813,2735,2656,2578,2500,2421,2343, 2264,2186,2108,2031,1954,1878,1802,1727,1653,1579,1507,1435,1365,1295,1227, 1160,1095,1030,968,906,847,788,732,677,625,574,525,477,432,389,348,309,272, 238,206,176,148,122,99,79,60,44,31,20,11,5,1,0,1,5,11,20,31,44,60,79,99,122, 148,176,206,238,272,309,348,389,432,477,525,574,625,677,732,788,847,906,968, 1030,1095,1160,1227,1295,1365,1435,1507,1579,1653,1727,1802,1878,1954,2031, 2108,2186,2264,2343,2421};inti=0;voidmain(void){ WDTCTL=WDTPW+WDTHOLD;//Stopwatchdogtimerif(CALBC1_1MHZ==0xFF||CALDCO_1MHZ==0xFF) {while(1); //Ifcalibrationconstantserased,trapCPU!! } BCSCTL1=CALBC1_1MHZ; //Setrange DCOCTL=CALDCO_1MHZ; //SetDCOstep+modulation BCSCTL3|=LFXT1S_2;//LFXT1=VLO P1DIR=0x40;//P1.6output(greenLED) P1OUT=0;//LEDoff IFG1&=~OFIFG;//ClearOSCFaultflag BCSCTL1|=DIVA_0; //ACLK=VLO BCSCTL2|=SELM_0+DIVM_0+DIVS_0;//MCLK=DCO,SMCLK=DCO//ConfigureTimerA TACTL=TASSEL1+MC_1;//Source:ACLK,UPmodeCCR0=5000; //Timercount5100 CCR1=2500; //Timercount100 CCTL0=CCIE; //CCR0interruptenabled CCTL1=CCIE; //CCR1interruptenabled _BIS_SR(GIE);for(;;);}//TimerA0interruptserviceroutine#pragmavector=TIMER0_A0_VECTOR__interruptvoidTimer_A0(void){ P1OUT|=BIT6;//P1.6outputHighif(i==199) { i=0; }else { i++; }if(temp[i]==4999) { CCR1=4998; }else { CCR1=temp[i]; }}//TimerA1InterruptVector(TA0IV)handler#pragmavector=TIMER0_A1_VECTOR__interruptvoidTimer_A1(void){switch(TA0IV) {case2:P1OUT&=~BIT6;//P1.6outputLowbreak;case10:break;}}4輸出濾波 輸出運(yùn)放采用lmv358。其管腳如以下列圖4所示:圖4358管腳示意圖采用壓控電壓源二階低通濾波電路。〔參考《模擬電子技術(shù)根基》,第三版,童詩白、華成英主編,7.4.2節(jié),352頁〕。其電路圖如圖

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論