微控制器用作正弦波發(fā)生器
通過(guò)在微控制器存儲(chǔ)器中存儲(chǔ)預(yù)設(shè)值的方法,可以來(lái)將微控制器作為波形發(fā)生器使用。微控制器可以實(shí)現(xiàn)包括正弦波、三角波和鋸齒波在內(nèi)的所有類(lèi)型的波形。
本文引用地址:http://m.butianyuan.cn/article/3019.htm本文探討了如何通過(guò)在微控制器存儲(chǔ)器中預(yù)先加載一組固定數(shù)值,從而生成正弦波的方法。同時(shí)還探討了如何利用DAC將這些預(yù)設(shè)的數(shù)值轉(zhuǎn)換為模擬輸出。最后探討了用來(lái)改變正弦波頻率的機(jī)制。
用來(lái)實(shí)現(xiàn)這一設(shè)計(jì)的器件是Cypress的子公司MicrosystemsTM PSoCTM(可編程系統(tǒng)芯片)器件。PSoC采用的是一個(gè)8位哈佛結(jié)構(gòu)的微處理器,器件內(nèi)部有16KB的可編程存儲(chǔ)器(閃存),用以存儲(chǔ)波形數(shù)據(jù)點(diǎn)。
可以采用任何具有顯示/圖形功能的軟件包來(lái)采集通過(guò)串行口傳輸?shù)牟ㄐ螖?shù)據(jù)。設(shè)計(jì),采用的是NI公司的LabView編程軟件,以采集、格式化和顯示進(jìn)入和流出PSoC器件的數(shù)據(jù)。
任何可利用三角法計(jì)算的數(shù)學(xué)軟件或計(jì)算器都可以用來(lái)生成一組正弦波形數(shù)據(jù)。一旦確定了所需要的波形分辨率,就可以計(jì)算出產(chǎn)生所需波形的波形數(shù)據(jù)點(diǎn)數(shù)。
在器件中加載這些波形點(diǎn)的數(shù)據(jù)值之前,還需要確定幾個(gè)參數(shù)。其中一個(gè)參數(shù)是器件的輸出范圍,這可協(xié)助確定偏置數(shù)值。在PSoC器件中,有幾個(gè)輸出范圍可供選擇,包括(Vcc/2)±(Vcc/2)和(Vcc/2)±頻帶間隙。
我們選擇該器件最大可能的輸出范圍(Vcc/2)±(Vcc/2)。本參考設(shè)計(jì)的輸出采用了PSoC器件的全輸出擺幅(0~5V)。為使用最大的輸出范圍,輸出信號(hào)的偏置必須置于+2.5V,最大的振幅也必須設(shè)為+2.5V。這些數(shù)值保證了DAC的波形輸出具有最大電壓擺幅,同時(shí)又不會(huì)有削波現(xiàn)象。
正確設(shè)定這些參數(shù)以后,即可將正弦波數(shù)據(jù)加載到存儲(chǔ)器中。在向PSoC器件閃速存儲(chǔ)器中寫(xiě)入預(yù)先生成的數(shù)據(jù)時(shí),可以在源代碼中將這些數(shù)據(jù)列在一個(gè)變量名下。這可保證在器件每次被編程時(shí),存儲(chǔ)器加載過(guò)程都會(huì)自動(dòng)執(zhí)行。圖1示出了如何利用C語(yǔ)言來(lái)實(shí)現(xiàn)這一點(diǎn)。之后存儲(chǔ)在變量中的數(shù)據(jù)被發(fā)送到DAC,每次一個(gè)字節(jié)循環(huán)進(jìn)行,DAC時(shí)鐘用來(lái)決定DAC轉(zhuǎn)換和輸出數(shù)據(jù)的速度,從而決定了輸出波形的周期。
用來(lái)編程和調(diào)試PSoC設(shè)計(jì)的PSoC DesignerTM軟件包示于圖2。該圖顯示的是DAC和生成DAC時(shí)鐘的計(jì)數(shù)器布局。圖中還顯示出了用來(lái)生成中斷信號(hào)的第二個(gè)計(jì)數(shù)器。中斷程序用來(lái)將數(shù)據(jù)傳送到DAC,然后DAC將轉(zhuǎn)換后的信號(hào)輸出至I/O引腳。DAC的最大刷新速率為125KHz,驅(qū)動(dòng)DAC的時(shí)鐘必須設(shè)置為所需輸出頻率的4倍。
DAC需要進(jìn)行的設(shè)置包括時(shí)鐘相位參數(shù)。該參數(shù)將DAC輸出與另一個(gè)PSoC模塊的輸入同步。另一參數(shù)——模擬總線(xiàn)設(shè)置則用來(lái)將數(shù)據(jù)輸出至特定的I/O引腳。DAC需要的最后一個(gè)配置參數(shù)是二進(jìn)制偏置設(shè)置,該參數(shù)決定了DAC用來(lái)傳輸數(shù)據(jù)的格式。
其中一個(gè)計(jì)數(shù)器(counter_1)用來(lái)生成驅(qū)動(dòng)DAC的時(shí)鐘信號(hào)。進(jìn)行適當(dāng)?shù)挠?jì)數(shù)器參數(shù)設(shè)置,使計(jì)數(shù)器輸出信號(hào)是DAC轉(zhuǎn)換頻率的4倍。
第二個(gè)計(jì)數(shù)器(counter_2)用來(lái)生成周期性中斷信號(hào)。在中斷服務(wù)執(zhí)行過(guò)程中,閃速存儲(chǔ)器中的數(shù)據(jù)地址一增加,存儲(chǔ)在該地址單元中的數(shù)據(jù)則被發(fā)送到DAC。這一過(guò)程不斷重復(fù)直至達(dá)到最后一個(gè)數(shù)據(jù)點(diǎn),然后計(jì)數(shù)器復(fù)位,這一過(guò)程重新開(kāi)始。在本例中,數(shù)據(jù)點(diǎn)的發(fā)送用以確定時(shí)間間隔緊密相連,從而生成周期性波形。
為調(diào)整輸出波形的周期,需要調(diào)整coanter1(它生成DAC時(shí)鐘)的周期。這一調(diào)整過(guò)程可動(dòng)態(tài)完成,因?yàn)榭刂芇SoC模塊的參數(shù)是基于寄存器的??山⒁环N協(xié)議架構(gòu)來(lái)將這些參數(shù)傳送至相應(yīng)的寄存器。一旦確定了相應(yīng)的協(xié)議架構(gòu),參數(shù)即可被傳送至正確的寄存器,而模塊輸出則根據(jù)新的參數(shù)進(jìn)行調(diào)整。
設(shè)計(jì)檢查相對(duì)比較簡(jiǎn)單。因?yàn)楸驹O(shè)計(jì)中DAC的輸出通過(guò)I/O端口輸出,因此進(jìn)行設(shè)計(jì)的最方便的方法是檢查該引腳輸出的信號(hào)。通過(guò)檢查輸出信號(hào)的頻率、幅度、偏置和信號(hào)質(zhì)量,可以保證他們滿(mǎn)足設(shè)計(jì)的要求。為驗(yàn)證設(shè)計(jì)正常工作,開(kāi)發(fā)了LabView接口。
微控制器是非常靈活的,他們可完成的功能也幾乎是沒(méi)有限制的。本文給出的僅是如何實(shí)現(xiàn)這些眾多可能功能的一個(gè)例子?!?/font>
評(píng)論