基于單片機(jī)設(shè)計(jì)的簡(jiǎn)易信號(hào)源
1. 引言
本文引用地址:http://2s4d.com/article/171738.htm信號(hào)發(fā)生器在教學(xué)、試驗(yàn)、測(cè)控等各個(gè)領(lǐng)域有十分廣泛的應(yīng)用,其輸出信號(hào)的頻率范圍覆蓋了各個(gè)頻段,從甚低頻到甚高頻,操作方式也從手動(dòng)旋鈕到程控,產(chǎn)生的波形從傳統(tǒng)的正(余)弦波和脈沖波形,發(fā)展到現(xiàn)在能產(chǎn)生各種任意波形。以前的信號(hào)發(fā)生器往往獨(dú)占一個(gè)機(jī)箱,而現(xiàn)在的一些應(yīng)用中,它只是一塊插在計(jì)算機(jī)中的擴(kuò)展卡,還有一些信號(hào)發(fā)生器設(shè)計(jì)成一個(gè)獨(dú)立的小模塊,通過(guò)RS-232C或RS-422,RS-485等串行總線和計(jì)算機(jī)連接。
其實(shí),在許多固定的控制應(yīng)用中,只要求信號(hào)發(fā)生器產(chǎn)生單一波形,或可數(shù)的幾個(gè)波形。如果僅僅要求產(chǎn)生單一的正(余)弦波或者脈沖波形,可以利用傳統(tǒng)的振蕩器電路。當(dāng)信號(hào)頻率有所選擇時(shí),問(wèn)題仍然比較簡(jiǎn)單。但若產(chǎn)生的信號(hào)波形比較復(fù)雜時(shí),電路的設(shè)計(jì)也同樣變得很復(fù)雜。加之傳統(tǒng)振蕩器電路由于有較大的溫度漂移,需要較長(zhǎng)的預(yù)熱時(shí)間,為達(dá)到較高的頻率精度,需仔細(xì)調(diào)節(jié)電路各個(gè)參數(shù)。
數(shù)字頻率合成技術(shù)的采用,大大簡(jiǎn)化了信號(hào)發(fā)生器的設(shè)計(jì)。但在某些特定情況,需要的僅僅是幾個(gè)單獨(dú)的波形,這時(shí)我們可以使用單片機(jī)和DAC芯片,用十分簡(jiǎn)單的電路產(chǎn)生所需要的波形。
2. 電路設(shè)計(jì)及編程考慮
單片機(jī)簡(jiǎn)易信號(hào)發(fā)生器電路框圖如圖1,僅由一片AT89C2051單片機(jī),一片DAC0832和由運(yùn)放組成的低通濾波器組成。AT89C2051內(nèi)部有 2KB的FLASH存儲(chǔ)器,可以保存運(yùn)行程序和波形參數(shù),128字節(jié)的RAM可以用于存放波形參數(shù)。由于采用了數(shù)字合成技術(shù),可以產(chǎn)生各種簡(jiǎn)單或復(fù)雜的波形。
工作過(guò)程說(shuō)明如下;(1)決定產(chǎn)生的信號(hào)波形;通電穩(wěn)定工作以后,單片機(jī)首先讀取P3.0和P3.1引腳信號(hào),決定程序應(yīng)跳轉(zhuǎn)的地址。每個(gè)跳轉(zhuǎn)地址有一個(gè)輸出波形。(2)將保存在FLASH中的樣本數(shù)據(jù)送往DAC0832,供其轉(zhuǎn)換成模擬電壓。
首先應(yīng)將波形參數(shù)轉(zhuǎn)換成樣本數(shù)據(jù)。假若每周期有N個(gè)樣本數(shù)據(jù),則第K個(gè)樣本數(shù)據(jù)的計(jì)算方法為:
DK=127(1+SIN(2πK/N) K=0,1,2,……N-1
由于在實(shí)際產(chǎn)生波形的過(guò)程中,數(shù)據(jù)由運(yùn)行程序逐個(gè)取得送出,在產(chǎn)生周期波時(shí)是一個(gè)循環(huán)過(guò)程。因此必須考慮程序取數(shù)、送數(shù)、循環(huán)等操作的時(shí)間開(kāi)銷。對(duì)于 MCS51系列單片機(jī),在晶振頻率為12MHz時(shí),每條指令的執(zhí)行時(shí)間為1~2μs。為了使波形足夠光滑,每周期的點(diǎn)數(shù)應(yīng)盡可能多,這樣要求單片機(jī)發(fā)送樣本數(shù)據(jù)的速率盡量快。由于送數(shù)周期的限制,在增加樣本點(diǎn)數(shù)時(shí),輸出信號(hào)頻率會(huì)降低。同時(shí)從程序存儲(chǔ)器空間取數(shù)時(shí)需要較長(zhǎng)的時(shí)間,當(dāng)樣本數(shù)據(jù)的個(gè)數(shù)不多時(shí),可以把樣本數(shù)據(jù)先移到RAM中,程序執(zhí)行時(shí)直接從RAM中取數(shù)送往DAC,就能增加發(fā)送樣本數(shù)據(jù)的速率。
下面以產(chǎn)生單一4800Hz正弦波為例,說(shuō)明程序設(shè)計(jì)過(guò)程。參數(shù)N的計(jì)算見(jiàn)后面的說(shuō)明。
ORG 0000H
MOV R0,#0
MOV R1,#4
MOV R2,#124
MOV DPTR,#200H
MOV A,#0
MOVD: MOVC A,@A+DPTR ;將樣本數(shù)據(jù)從FLASH
MOV @R1,A ;移到內(nèi)部RAM中,
INC R0 ;可以減少送數(shù)時(shí)間
INC R1
MOV A,R0
DJNZ R2,MOVD
MOV R0,#04
DOUT: MOV A,@R0 ;輪流送數(shù)到DAC
MOV P1,A
INC R0
CJNE R0,#128,DOUT
MOV P1,#128 ;從起點(diǎn)開(kāi)始重新送樣本數(shù)據(jù)
MOV R0,#04 ;
SJMP DOUT ;送數(shù)循環(huán)結(jié)束
;
ORG 0200H ;樣本數(shù)據(jù)表
DB 0147
DB 165
……
以上程序中,DOUT標(biāo)號(hào)開(kāi)始的一段循環(huán)程序送樣本數(shù)據(jù)。該段循環(huán)程序指令經(jīng)過(guò)精心選擇,N個(gè)樣本數(shù)據(jù)共用4條指令,執(zhí)行時(shí)間為5μs。但對(duì)4800 Hz的信號(hào)頻率,信號(hào)周期為208.3333μs,計(jì)算得到樣本數(shù)據(jù)的個(gè)數(shù)N=208.3333/5=41.6667。由于樣本數(shù)據(jù)的個(gè)數(shù)不能為小數(shù),可以考慮采用4舍5入,以得到最接近的信號(hào)頻率。因此取樣本個(gè)數(shù)為42,但信號(hào)周期變?yōu)?10μs,信號(hào)頻率為4762Hz,頻率誤差很大,達(dá)不到使用要求。
為此,可采用多周期綜合技術(shù)。多周期綜合的方法就是在計(jì)算樣本數(shù)據(jù)時(shí),將M個(gè)周期一并考慮。即N個(gè)樣本數(shù)據(jù)代表了M個(gè)信號(hào)周期的波形,使每個(gè)周期的樣本數(shù)與要求值最接近。計(jì)算公式如下:
DK=127(1+SIN(2лMK/N) K=0,1,2,3……N-1
為此,需合理確定N和M的值。
M的值可如下確定;取單周期樣本數(shù)據(jù)個(gè)數(shù)的小數(shù)部分,除1的結(jié)果既為M。對(duì)f0=4800Hz,可知M恰好等于3。
下面計(jì)算N;已知每個(gè)樣本數(shù)據(jù)需要5μs,樣本周期數(shù)為3,信號(hào)頻率為4800 Hz,則
N=3/4800*1000000/5=125
由此可知樣本數(shù)據(jù)的計(jì)算公式:
DK=127(1+SIN(6л/125)) K=0,1,2……124
實(shí)用中,用該信號(hào)源產(chǎn)生了4800Hz正弦波,400Hz正弦波、480Hz正弦波和1000Hz方波四種波形。400Hz、480Hz正弦波和1000Hz方波的波形參數(shù)計(jì)算此處略。實(shí)測(cè)表明四種信號(hào)的頻率誤差都小于0.5Hz。
如果信號(hào)頻率比較低,樣本數(shù)據(jù)很多,就不需要把樣本數(shù)據(jù)先移到RAM中,而直接從FLASH中取得樣本數(shù)據(jù)送往DAC。對(duì)正弦波來(lái)說(shuō),當(dāng)每周期有20個(gè)以上的樣本數(shù)據(jù)時(shí),就有比較好的波形。對(duì)于矩形波來(lái)說(shuō),每周期只需要2個(gè)樣本數(shù)據(jù)。
3. 小結(jié)
以上電路雖然簡(jiǎn)單,但有比較精確的波形。由于波形參數(shù)完全由軟件預(yù)先設(shè)定,除了產(chǎn)生正弦波、方波以外,還能產(chǎn)生梯形波或sin(x)/x等形狀復(fù)雜的波形??梢詫㈦娐吩O(shè)計(jì)成嵌入式結(jié)構(gòu),從而在一些工業(yè)生產(chǎn)現(xiàn)場(chǎng)得到應(yīng)用。
參考文獻(xiàn)
1 余永權(quán).ATMEL89系列(MCS-51兼容)FLASH單片機(jī)原理及應(yīng)用.電子工業(yè)出版社.1997年
2 蔣煥文,孫續(xù).電子測(cè)量.中國(guó)計(jì)量出版社.1988年
評(píng)論