波形發(fā)生器實例篇,DDS任意波形發(fā)生器設(shè)計下篇
波形發(fā)生器在生活中不可或缺,在往期文章中,小編曾對各類型波形發(fā)生器予以介紹,如任意波形發(fā)生器、Arduino波形發(fā)生器、pwm波形發(fā)生器等。本文對波形發(fā)生器的講解,承接于《波形發(fā)生器實例篇,DDS波形發(fā)生器設(shè)計上篇》一文,將對DDS任意波形發(fā)生器設(shè)計的后續(xù)部分加以介紹。如果你對本文即將闡述的內(nèi)容存在一定興趣,不妨繼續(xù)往下閱讀哦。
一、固定波形輸出
在FPGA內(nèi)部實現(xiàn)高速的多位數(shù)相位累加器,輸出地址信號,控制讀出波形存儲器中存放的波形幅度數(shù)字信號。通過改變相位累加器的相位增量M,即地址間隔的改變,控制讀出波形存儲器一個周期正弦波幅值的數(shù)目,達到輸出頻率的控制。其輸出的頻率為 ,
其中fclk為系統(tǒng)時鐘頻率,N為相位累加器的位數(shù),M為相位增量--頻率控制字,由公式可知fout與肘成正比,控制M就可以控制輸出的頻率。如要頻率步進為l0Hz,則要求
保證在輸出最高頻率輸出時有32個點的波表數(shù)據(jù)輸出,則要求時鐘為3.2MHz。將50MHz的時鐘10分頻,得到5MHz的信號作為累加器的計數(shù)信號。則fclk=5MHz,2N=500000,因此,N可取20,2N=1048576。則fout=-4.77M,M=0.21fout。利用計算機輸入要輸出的頻率,發(fā)送到單片機,單片機將對接收到的數(shù)據(jù)進行預(yù)算處理后發(fā)送給FPGA。
頻率輸入電路如圖所示,接收8位的頻率字長,輸出為20位。
下面為STC89C52RC與EPlC3T144C8的接口程序,用控制字:
二、加法器
加法器為20位,自動累加,它以設(shè)定的頻率控制字k作為步長來進行加法運算,當(dāng)其和滿時清零,并進行重新運算。電路圖如下:
程序如下:
三、高十位寄存器
實現(xiàn)數(shù)據(jù)輸入為20位,輸出為10位,實現(xiàn)高位截斷。程序為:
四、波形ROM及選擇
本設(shè)計使用幾個8bit的ROM,存儲深度為1024點,用來存儲正弦波等波形數(shù)據(jù)。每個波形數(shù)據(jù)存儲在一個固定的ROM里,如下圖。其中SineROM為正弦波存儲模塊,SquareROM為方波存儲模塊,Triangle-ROM為三角波存儲模塊,SwtoothROM為鋸齒波存儲模塊。它們通過一個使能模塊控制,采取低電平有效的方式,選擇性讀取任意模塊的波形。一般每個模塊都為高電平狀態(tài),即為不工作狀態(tài)。每次輸出波形時,僅有單獨一個ROM_T_作(即工作模塊為低電平,其他模塊均為高電平),這樣不僅保證可以按照需要輸出固定波形,還可以避免波形輸出發(fā)生非控制性的混雜。使能模塊的輸入端為行列式鍵盤,鍵盤中每一鍵單獨使用,當(dāng)某一鍵按下,則對應(yīng)某一波形輸入。因為4×4的鍵盤輸出線為8位,僅為一根,因此輸入端設(shè)為一根8位輸入端口。通過設(shè)定,實現(xiàn)單鍵控制某~波形輸出。本設(shè)計僅設(shè)定了4個固定波形ROM輸出,即正弦波、方波、三角波和鋸齒波,因此使能模塊的選擇輸出線為4條,若增加新波形模塊,可以更改輸出端口的數(shù)量,進行擴展。
五、時鐘分頻
時鐘分頻電路如下,所以模塊在同步時鐘下協(xié)調(diào)工作,電路圖如下:
程序如下:
六、任意波形輸出
關(guān)于根據(jù)需要而產(chǎn)生的任意波形的設(shè)計如下:因為該任意波形是由上位機下傳的波形數(shù)據(jù),由單片機控制,所以必須設(shè)計一個能隨時接受數(shù)據(jù)更新的RAM。數(shù)據(jù)傳至任意波形的寄存器里,然后便可實現(xiàn)任意波形的輸出。
選用的DA轉(zhuǎn)換器為8位,所以RAM的字長也為8位,因此波形RAM的地址線的位數(shù)取lO位。為了實現(xiàn)任意波形數(shù)據(jù)的更新,波形RAM設(shè)計成為雙口RAM。
以上便是小編此次帶來的“波形發(fā)生器”所有相關(guān)內(nèi)容,通過本文,希望大家可結(jié)合小編前期帶來的《波形發(fā)生器實例篇,DDS波形發(fā)生器設(shè)計上篇》內(nèi)容,對DDS任意波形發(fā)生器設(shè)計的全流程有所了解。如果你對波形發(fā)生器存在濃厚興趣,可嘗試自己動手哦。最后,十分感謝大家的閱讀,have a nice day!