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