吳艷玲
摘 要:本系統(tǒng)以單片機(jī)89C51與FPGA為控制核心,采用DDS(直接頻率數(shù)字頻率合成)技術(shù),D/A轉(zhuǎn)換電路及濾波電路,設(shè)計(jì)了一個(gè)高頻率穩(wěn)定度、高精度的信號(hào)發(fā)生器。單片機(jī)向存儲(chǔ)器寫波形表,控制頻率、幅度步進(jìn)以及人機(jī)交換。FPGA集成了DDS、鍵盤掃描等功能模塊。D/A轉(zhuǎn)換模塊采用DAC0832,可將波形表內(nèi)數(shù)據(jù)輸出為所需要的波形。輸出波形可以在正弦波與方波及三角波間切換,并能由鍵盤設(shè)置頻率值,還能完成步進(jìn)和掃頻的功能。
關(guān)鍵詞:DDS;單片機(jī);FPGA
中圖分類號(hào):G640 文獻(xiàn)標(biāo)識(shí)碼:A
1 信號(hào)發(fā)生器設(shè)計(jì)原理
本設(shè)計(jì)在分析直接數(shù)字頻率合成器(DDS)工作原理的基礎(chǔ)上,以89C51單片機(jī)和FPGA芯片為主要硬件進(jìn)行設(shè)計(jì)。該系統(tǒng)主要包括:波形生成、頻率控制、數(shù)模轉(zhuǎn)換、程控濾波模塊。信號(hào)頻率為20Hz~20kHz步進(jìn)可調(diào),步長(zhǎng)為1Hz。 頻率穩(wěn)定度達(dá)到10-4。 正弦波信號(hào)非線性失真系數(shù)不大于3%。脈沖波上升時(shí)間和下降時(shí)間不大于1μs。平頂斜降不大于5%。脈沖占空比為2%~98%步進(jìn)可調(diào),步長(zhǎng)為2%。負(fù)載為600Ω時(shí),輸出幅度大于3V。 另外,系統(tǒng)提供的矩陣鍵盤和點(diǎn)陣式液晶顯示器還實(shí)現(xiàn)了良好的人機(jī)交互,能夠設(shè)置功能并將相關(guān)信息顯示出來。
2 方案論證
2.1 頻率合成器模塊
方案一:采用模擬分立元件或單片壓控函數(shù)發(fā)生器MAX038,可產(chǎn)生正弦波、方波、三角波,通過調(diào)整外部元件可改變輸出頻率。但采用模擬器件由于元件分散性太大,即使使用單片函數(shù)發(fā)生器,參數(shù)也與外部元件有關(guān),外接的電阻電容對(duì)參數(shù)影響很大,因而產(chǎn)生的頻率穩(wěn)定度較差、精度低、抗干擾能力低、成本也高,且靈活性較差,不能實(shí)現(xiàn)任意波形以及波形運(yùn)算輸出等智能化的功能。
方案二:采用直接數(shù)字頻率合成技術(shù)產(chǎn)生波形,信號(hào)頻率范圍覆蓋超低頻和高頻,便于單片機(jī)控制。通過計(jì)數(shù)器的高位輸出作為讀取波形存儲(chǔ)器RAM的地址,將讀出的數(shù)據(jù)送至D/A轉(zhuǎn)換器輸出波形。而對(duì)計(jì)數(shù)器的控制也有兩種實(shí)現(xiàn)方案:通過一定的頻率作用于計(jì)數(shù)器,使其能循環(huán)計(jì)數(shù)。采用FPGA與單片機(jī)相結(jié)合的方式實(shí)現(xiàn)對(duì)頻率的控制,利用FPGA產(chǎn)生一個(gè)相位累加器,通過相位累加器和固定時(shí)鐘脈沖取樣的相位寄存器組成。
經(jīng)過論證比較,DDS與鎖相環(huán)方案相比,無需相位反饋控制,頻率建立及頻率切換快,覆蓋頻率范圍大,精度高,控制性好且容易實(shí)現(xiàn),具有功能擴(kuò)展的能力,故采用這種方案。
2.2 存儲(chǔ)器模塊
方案一:可以使用DSP中的存儲(chǔ)器,不僅存儲(chǔ)量大而且運(yùn)算速度快。
方案二:使用FPGA作為數(shù)據(jù)的橋梁,將波形先存儲(chǔ)在ROM中,通過單片機(jī)控制,將數(shù)據(jù)傳輸給FPGA,再由FPGA將數(shù)據(jù)高速傳送給DAC0832。
綜合考慮器件的使用性和實(shí)際情況,我們決定采用FPGA中的ROM作為系統(tǒng)的存儲(chǔ)器件。
2.3 幅度控制模塊
方案一:采用VCA810通過一個(gè)單片機(jī)控制DAC0832通過數(shù)模轉(zhuǎn)換得到一個(gè)控制電壓,從而控制VCA810的放大倍數(shù),最后達(dá)到控制輸出電壓的目的。
方案二:數(shù)模轉(zhuǎn)換和幅度控制部分采用雙D/A技術(shù),第一級(jí)D/A的輸出波形作為第二級(jí)D/A的基準(zhǔn)電壓源,第一級(jí)D/A以由單片機(jī)P1口控制,由此來控制信號(hào)發(fā)生器的輸出電壓幅度。
方案一中VCA810的放大倍數(shù)并不是完全線性,而且它的放大倍數(shù)是以dB的形式來表現(xiàn)的,所以不是很容易控制。第二種方法電路簡(jiǎn)單,通過軟件控制,可控性強(qiáng),故采用這種方案。
2.4 后級(jí)濾波模塊
方案一:采用二階切比雪夫低通濾波器。切比雪夫低通濾波器的幅度響應(yīng)在通帶內(nèi)是在兩個(gè)值之間波動(dòng),在通帶內(nèi)的波動(dòng)次數(shù)取決于濾波器的階數(shù)。理想的切比雪夫低通濾波器近似在靠近截止頻率的部分有比巴特沃茲濾波器更接近矩形的頻率響應(yīng)。
方案二:采用二巴特沃茲濾階波器。巴特沃茲濾波器的幅度函數(shù)是單調(diào)下降的,但巴特沃茲濾波器能實(shí)現(xiàn)最大平坦幅度濾波。
由于信號(hào)發(fā)生器的輸出波形中的主要噪聲為D/A轉(zhuǎn)換產(chǎn)生的高頻分量,與設(shè)計(jì)的頻率范圍相差很遠(yuǎn),所以相對(duì)來說,濾波器在頻帶內(nèi)的平坦程度比其衰減陡度更為重要,而且巴特沃茲濾波器的元件值也較合乎實(shí)際情況,不像其他類型濾波器對(duì)元件值要求那么苛刻?;谏鲜隹紤],決定采用二階巴特沃茲濾波器。
3 系統(tǒng)設(shè)計(jì)
3.1 系統(tǒng)總體設(shè)計(jì)
單片機(jī)構(gòu)成系統(tǒng)的控制中心,控制功能選擇和結(jié)果顯示,F(xiàn)PGA在單片機(jī)的控制下實(shí)現(xiàn)直接頻率合成,系統(tǒng)初始化后對(duì)按鍵進(jìn)行判斷從而根據(jù)設(shè)定選擇相應(yīng)的功能執(zhí)行。在更改輸出波形頻率時(shí),根據(jù)輸入產(chǎn)生相應(yīng)的頻率控制字送到FPGA中,控制輸出頻率值。FPGA的輸出作為ROM的讀取地址,選取波形數(shù)據(jù)經(jīng)DAC0832輸出模擬波形。同時(shí),單片機(jī)控制第一片DAC0832輸出直流電壓作為輸出波形的DAC0832的基準(zhǔn)源,控制輸出波形的幅值。
系統(tǒng)總體框圖如圖1所示。
3.2 D/A模塊設(shè)計(jì)
幅度控制和D/A轉(zhuǎn)換用雙D/A實(shí)現(xiàn),第一個(gè)DAC0832由單片機(jī)P1口控制,其輸出做為第二級(jí)DAC0832的參考電壓,通過單片機(jī)就可以實(shí)現(xiàn)設(shè)置輸出幅度的峰值。第二個(gè)DAC0832讀取波形存儲(chǔ)器雙口RAM的波形值,轉(zhuǎn)換輸出波形。由于0832為電流型輸出,所以需要兩級(jí)運(yùn)算放大器電路將電流轉(zhuǎn)化為電壓,其中第一級(jí)將電流轉(zhuǎn)換為-5V~0V,第二級(jí)將-5V~0V反向,轉(zhuǎn)換為0V~5V,為下一級(jí)DAC0832提供基準(zhǔn)電壓。具體電路設(shè)計(jì)如圖2所示:
3.3 相位累加器設(shè)計(jì)
累加寬度設(shè)計(jì):若相位累加器的寬度為N位, 當(dāng)于2 rad,則信號(hào)輸出的頻率 = , ,由公式可得,累加器的位數(shù)越大,頻率分辨率越小,精度也就越高。在本實(shí)驗(yàn)中,我們?cè)O(shè)計(jì)累加器的位數(shù)為 N=23位,則 =312.5k/8388608=0.037HZ。如果為1HZ的話,則對(duì)應(yīng)頻率控制字為1/0.037=27。
頻率控制字(k)寬度設(shè)計(jì):頻率步進(jìn)為1HZ,
則頻率控制字為27為單位步進(jìn)。在這里我們采用一個(gè)乘法器(*27),當(dāng)鍵盤置數(shù)位1時(shí),通過乘法器后,變?yōu)?7,對(duì)應(yīng)輸出的頻率為1HZ。 =20000HZ,K=20000,當(dāng)頻率控制字的位數(shù)為19,遠(yuǎn)能滿足設(shè)計(jì)要求。
經(jīng)過實(shí)驗(yàn)驗(yàn)證可得,ROM表最好只裝8192個(gè)數(shù),否則會(huì)出現(xiàn)意外情況。8192個(gè)點(diǎn)為正弦波總點(diǎn)數(shù)1/4??傸c(diǎn)數(shù)為8192*4=32767(2的15次方)。所以累加器的輸出為2的15次方,取累加器的第22位至8位作為輸出如圖3所示。
3.4 ROM的設(shè)計(jì)
該模塊是存放DDS正弦波各個(gè)相位所對(duì)應(yīng)的幅值大小的存儲(chǔ)單元,模塊功能是供相位累加器模塊找到對(duì)應(yīng)相位的波形幅值。
為了盡限利用ROM的大小,我們?cè)O(shè)計(jì)13位的ROM表如圖4所示,即Rom表中存放了8192個(gè)波形數(shù)據(jù),且在表中只放置正弦波形0—T/2的波形值,利用軟件處理,得到整個(gè)周期內(nèi)的波形值。對(duì)于ROM存放的正弦表值的設(shè)計(jì),可以借助Matlab軟件編寫0---T/2內(nèi)正弦的波形值,需要注意的是波形值數(shù)據(jù)點(diǎn)共8192個(gè)全部為正整數(shù),且所有點(diǎn)對(duì)應(yīng)的幅值范圍應(yīng)是0—5,這樣才能給DAC0832處理。
3.5 鍵盤鍵值轉(zhuǎn)化為頻率控制字模塊
我們是通過對(duì)應(yīng)數(shù)據(jù)的為止調(diào)節(jié)來調(diào)節(jié)頻率和幅度變化的。0對(duì)應(yīng)加10KHZ,6對(duì)應(yīng)減10KHZ,1對(duì)應(yīng)加1KHZ,7對(duì)應(yīng)減1KHZ,2對(duì)應(yīng)加100HZ,8對(duì)應(yīng)減100HZ,3對(duì)應(yīng)加10HZ,9對(duì)應(yīng)減10HZ,4對(duì)應(yīng)加1HZ,A對(duì)應(yīng)減1HZ,5對(duì)應(yīng)加2%步進(jìn)的占空比,B對(duì)應(yīng)減2%步進(jìn)的占空比,C對(duì)應(yīng)復(fù)位,頻率為10KHZ,D對(duì)應(yīng)轉(zhuǎn)換波形,E對(duì)應(yīng)幅度加1V,F(xiàn)對(duì)應(yīng)幅度減1V,ESC鍵對(duì)應(yīng)幅度加100 mV,ENTER對(duì)應(yīng)幅度減100mV
3.6 方波的設(shè)計(jì)
方波的調(diào)節(jié)也是通過改變頻率控制字從而改變高電平占中分頻中的系數(shù)來調(diào)節(jié)方波占空比的,當(dāng)頻率控制字小于某一值時(shí)取高電平,低于這個(gè)值時(shí)取低電平,這樣就形成了方波。
4 程序流程圖
5 總結(jié)
對(duì)于信號(hào)發(fā)生器的設(shè)計(jì),原始的方案中,決定了采用直接數(shù)字頻率合成,不過采用直接數(shù)字頻率合成原始的信號(hào)也分成兩種,一種是采用AD9851直接數(shù)字頻率合成模塊,另一種是采用FPGA編程實(shí)現(xiàn)直接數(shù)字頻率合成,前者可以簡(jiǎn)化程序而且可以達(dá)到更高的信號(hào)發(fā)生頻率,但硬件電路復(fù)雜,成本高。后者程序復(fù)雜但節(jié)約硬件成本。信號(hào)發(fā)生后,如果波形不好,需要濾波,由于輸出幅度在不同的頻率內(nèi)可能有一些差別,所以需要將不同的頻率幅度穩(wěn)定,由于要求幅度可調(diào),因而需要有對(duì)信號(hào)進(jìn)行幅度控制的模塊。
參考文獻(xiàn):
[1] 李朝青.單片機(jī)原理及接口技術(shù)(第三版)[M].北京:北京航空航天大學(xué)出版社,2009(7).
[2] 謝自美.電子線路設(shè)計(jì)[M].武漢:華中科技大學(xué)出版社,2000(7).
[3] 康華光.電子技術(shù)基礎(chǔ)(模擬部分)[M].北京:高等教育出版社,2010(6).
[4] 黃根春.電子設(shè)計(jì)教程[M].北京:電子工業(yè)出版社,2009(5).
(本文審稿 李正發(fā))