胡善偉
(中航工業(yè)西安航空計算技術(shù)研究所第13研究室,陜西西安 710119)
該函數(shù)信號發(fā)生器能提供正弦波、鋸齒波、PWM信號等輸出,顯示方面同時具有電壓、頻率、相位差、波形種類、矩形波占空比等數(shù)據(jù)的參數(shù)顯示。可步進調(diào)整相位差、占空比、頻率等參數(shù)[1]。
技術(shù)指標(biāo):(1)正弦波、三角波、鋸齒波三相輸出,頻率可調(diào)范圍1 Hz~30 kHz,頻率步進1 Hz,并具有頻率設(shè)置功能。(2)任兩相間的相位差在0°~359°范圍內(nèi)可任意預(yù)置,相位差步進1°。(3)輸出電壓幅度:電壓峰-峰值Vopp≥10 V。(4)數(shù)字顯示電壓、頻率、相位差、波形種類和矩形波占空比等,電壓有效值精度5%,頻率精度0.1%。(5)在1 Hz~30 kHz頻率范圍內(nèi),增加矩形波輸出信號,頻率可任意預(yù)置,頻率步進1 Hz,頻率精度0.1%;矩形波信號的占空比可以預(yù)置,占空比步進 1/100,當(dāng)占空比為 1/4時,誤差≤±2/100。
鍵盤輸入信息給單片機,控制LCD屏幕顯示相關(guān)參數(shù),并通過串行口發(fā)送數(shù)據(jù)給FPGA,通過FPGA處理數(shù)據(jù),將數(shù)字信號傳送給高速D/A,最后通過放大濾波輸出波形[2]。圖1為信號發(fā)生總體框圖。
圖1 信號發(fā)生器總體框圖
圖2為DDS的總體結(jié)構(gòu)[3]。
圖2 DDS結(jié)構(gòu)框圖
在CLK的作用下,如果依次按順序讀取ROM中的數(shù)據(jù),即從第一個數(shù)不遺漏的讀到最后一個數(shù)據(jù),設(shè)其輸出的正弦信號為f01;如果每隔一個地址讀一次數(shù)據(jù),其輸出信號的頻率為f02,這樣f02將比f01提高1倍,即 f02=2f01;依此類推[4]。
相位累加器可由N位加法器與N位寄存器級聯(lián)構(gòu)成。然后在輸入時鐘fc的控制下,對輸入數(shù)據(jù)K進行累加。式(1)中,當(dāng)K為1時,DDS輸出最低頻率fc/2n。DDS的最高頻率受限于時鐘頻率fc和采樣定理,即 fomax<fc/2。設(shè)計中,N=23,fc=8.388 MHz,則頻率最大值為
頻率最小值為
頻率步進值為
輸出信號的頻率范圍可調(diào)。
固定相位偏置加法器,由于波形存儲器的輸入為相位累加器的輸出與P之和,所以,通過改變相位控制字P即可控制輸出信號的相位偏移。其相位偏移量為2n。設(shè)計中,相位加法器的字長N為10,若取3個固定偏置相位分別為 P1=0,P2=120°/360°×1024=341,P3=240°/360°×1024=683,則可生成相位差為 120°的3條正弦信號的相位編碼。這樣,便可通過同一時鐘fc控制3個通道的地址,從而使編碼的輸出同步。
波形存儲器主要完成信號相位序列到幅度序列的轉(zhuǎn)換[5]。N位的尋址ROM相當(dāng)于把波形數(shù)據(jù)離散成具有2N個樣值的序列。若波形ROM有D位數(shù)據(jù)位,則2N個取樣值的幅值將以D位二進制數(shù)值固化在ROM中。按照設(shè)計算法,波形儲存器ROM的位數(shù)應(yīng)與相位累加器的位數(shù)相同,即同為23位,但是23位的數(shù)據(jù)量過大,并且沒有對應(yīng)的D/A。所以這里使用10位的ROM,共1024個數(shù)據(jù),截取累加器的高10位對ROM進行尋址,輸出對應(yīng)的數(shù)值。
10位的高速DAC將FPGA輸出的數(shù)字信號變?yōu)椴顒幽M信號,提供給輸出端的高增益差動放大器,使信號的峰峰值達到設(shè)計要求,最終輸出波形信號。
本設(shè)計宏觀上分為5個模塊,即前端模塊:串口收發(fā)模塊;中間模塊:DDS模塊;后端模塊:分時發(fā)送模塊。另外還有兩個鎖相環(huán)PLL48M,PLL8.388M,來提供系統(tǒng)時鐘[6]。
通過自定協(xié)議,實現(xiàn)了FPGA和單片機的串口通訊[7-8]。如圖 3 所示。
圖3 單片機與FPGA通訊協(xié)議
中間模塊即DDS模塊包含了兩個子模塊,分別是累加器(ACC)模塊,波形選擇模塊(Select)。
累加器模塊(ACC)中設(shè)置有3個23位的累加寄存器,復(fù)位后,先將3個通道的相位控制字P分別賦值給對應(yīng)的累加寄存器的高10位。使用8.388 MHz的系統(tǒng)時鐘,在時鐘每出現(xiàn)一個上升沿時,累加寄存器從賦值過后的值開始對頻率控制字K開始累加,并輸出其高10位的數(shù)據(jù)對各個波形ROM進行尋址。
波形選擇模塊(Select)中實例化了4種波形,即正弦波、矩形波、三角波、鋸齒波的ROM表,根據(jù)波形選擇控制字,選出用戶所要求的波形。00為正弦波,01為矩形波,10為三角波,11為鋸齒波。在累加器高10位的尋址下,找到當(dāng)前時刻點的波形幅值,進行輸出。其中,矩形波需要有占空比的調(diào)整,根據(jù)前端模塊中的占空比控制字,將累加器模塊輸出的尋址數(shù)據(jù)與其比較,若累加器輸出的尋址數(shù)據(jù)小于占空比控制字,則輸出1,如大于則輸出0,這樣就可以根據(jù)用戶的設(shè)定輸出占空比了。
后端模塊即分時發(fā)送模塊,由于FPGA的管腳有限,如果三通道都并行輸出,那將至少占用30個FPGA的I/O口,為避免此類情況發(fā)生,在FPGA內(nèi)部編輯了此模塊,其可分時將三通道輸出的信號幅值賦值給FPGA的I/O口,在每個通道的幅值輸出時,使能相應(yīng)的鎖存器,當(dāng)三通道的鎖存器更新好數(shù)據(jù)時,一起使能D/A,這樣就同時輸出了三通道的數(shù)據(jù)。流程如圖4所示。
圖4 FPGA算法流程圖
該模塊輸入信號由時鐘(clk)和復(fù)位信號(reset)構(gòu)成,當(dāng)信號發(fā)生器選擇信號(sel[2..0])為4時,該模塊輸出端(q[7..0])對外輸出。模塊振幅隨時鐘的變化階梯性遞增,輸出波形參數(shù)可以通過程序進行設(shè)定。仿真波形如圖5所示。
圖5 正弦波仿真測試
該模塊輸入信號由時鐘(clk)和復(fù)位信號(r eset)構(gòu)成,當(dāng)信號發(fā)生器選擇信號(sel[2..0])為5時,該模塊輸出端(q[7..0])對外輸出。模塊振幅隨時鐘的變化持續(xù)變?yōu)楦唠娖交虻碗娖?,輸出波形參?shù)可以通過程序進行設(shè)定,仿真波形如圖6所示。
圖6 PWM仿真測試
模塊輸入信號由時鐘(clk)和復(fù)位信號(reset)構(gòu)成,當(dāng)信號發(fā)生器選擇信號(el[2..0])為2時,該模塊輸出端(q[7..0])對外輸出。模塊內(nèi)計數(shù)器隨時鐘先遞增后遞減,波形隨之先遞增后遞減,輸出波形參數(shù)可以通過程序進行設(shè)定,仿真波形如圖7所示。
圖7 三角波仿真測試
該模塊輸入信號由時鐘(clk)和復(fù)位信號(r eset)構(gòu)成,當(dāng)信號發(fā)生器選擇信號(sel[2..0])為5時,該模塊輸出端(q[7..0])對外輸出。模塊振幅隨時鐘的變化持續(xù)變?yōu)楦唠娖交虻碗娖?,輸出波形參?shù)可以通過程序進行設(shè)定,仿真波形如圖8所示。
圖8 鋸齒波仿真測試
本設(shè)計能夠滿足3通道的設(shè)計要求,并且留有較寬的頻率上限以及通道數(shù)余地,稍加改動便可大幅增加頻率上線和通道數(shù),完成更多功能。實驗證明,此設(shè)計方案波形失真度小,頻率、相位步進準(zhǔn)確,可以滿足工業(yè)需要。
[1] 曹遠(yuǎn)宏.Verilog HDL高級數(shù)字設(shè)計[D].武漢:武漢理工大學(xué),2005.
[2] 王飛.基于 FPDA的三相正弦信號發(fā)生器設(shè)計[D].西安:西北工業(yè)大學(xué),2008.
[3] 高吉祥,唐朝京.數(shù)字系統(tǒng)與自動控制系統(tǒng)設(shè)計[M].北京:電子工業(yè)出版社,2007.
[4] 毛謙敏.單片機原理及應(yīng)用系統(tǒng)設(shè)計[M].北京:國防工業(yè)出版社,2008.
[5] 裴少俊,胥嘉佳,黃克平.一種基于AD9854的BPSK信號產(chǎn)生設(shè)計[J].電子科技,2013,26(1):74 -76.
[6] 王偉.Verilog HDL程序設(shè)計與應(yīng)用[M].北京:人民郵電出版社,2005.
[7] 袁俊泉,孫敏琪,曹瑞.Verilog HDL數(shù)字系統(tǒng)設(shè)計及其應(yīng)用[M].西安:西安電子科技大學(xué)出版社2002.
[8] 宋仲康,孔利東.基于VHDL語言的信號發(fā)生器的設(shè)計與實現(xiàn)[J].工業(yè)控制技術(shù),2006(8):80-83.