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