楊 敏,王 利,張金時,裴水源,羅 浩
(中北大學機電工程學院,山西 太原 030051)
由于直接頻率合成(direct digital frequency synthesizer,DDFS)技術具有頻率轉換速度快、相對帶寬寬、頻率分辨率高以及波形穩(wěn)定等優(yōu)點,已經(jīng)廣泛用于雷達、通信、導航、遙控遙測、電子對抗以及現(xiàn)代化的儀器儀表工業(yè)、生物醫(yī)學檢測等領域[1-2]。隨著現(xiàn)場可編程門陣列(field programmable gate array,FPGA)技術的發(fā)展,其資源容量、工作頻率以及集成度都得到了極大的提高。由于FPGA靈活的接口和控制方式,使得其廣泛應用于實現(xiàn)某些專用數(shù)字集成電路[3]。本文基于DDFS基本原理,采用Inter公司的FPGA芯片Cyclone IV E系列器件,完成DDFS信號發(fā)生器設計。該信號發(fā)生器可產(chǎn)生不同頻率、相位的正弦波、矩形波、三角波信號。
基于FPGA的DDFS原理框如圖1所示。

圖1 基于FPGA的DDFS原理框圖
DDFS主要由相位累加器、波形存儲器、D/A轉換器、低通濾波器組成[4]。相位累加器由N位加法器和N位寄存器構成。在系統(tǒng)時鐘作用下,相位累加器中的加法器將頻率控制字與累加寄存器輸出的相位數(shù)據(jù)進行累加,并將得到的相位數(shù)據(jù)輸入累加器的輸入端,以便在每一個時鐘到來時與頻率控制字線性累加。相位累加器根據(jù)得到的相位碼對波形存儲器進行尋址,經(jīng)查找表找出波形存儲器里的波形采樣值。輸出的數(shù)字信號經(jīng)過D/A轉換器轉換為模擬信號。DAC輸出信號實際上是階梯模擬信號,需在D/A轉換后利用低通濾波器對波形進行平滑處理,濾除高頻分量,得到連續(xù)變化的波形[5-6]。
DDFS輸出信號的頻率為[7]:
(1)
式中:fo為輸出信號頻率;K為頻率控制字;N為相位累加器的字長;fc為系統(tǒng)時鐘頻率。

信號發(fā)生器系統(tǒng)框圖如圖2所示。

圖2 信號發(fā)生器系統(tǒng)框圖
首先,通過按鍵控制頻率字、相位字以及波形地址的選擇,并將其顯示在LCD上。其目的是與在示波器上的觀察到的波形、頻率、相位進行比較。然后,通過12位的DAC將數(shù)字信號轉換為模擬信號,并經(jīng)低通濾波濾除高頻分量,得到光滑的、連續(xù)的信號波形。最后,將其輸入到示波器進行觀察。
本系統(tǒng)主要包括硬件設計和軟件設計兩部分。軟件設計主要基于FPGA平臺的程序部分,包括相位累加器、波形存儲器、按鍵設計和LCD設計,使用Verilog HDL匯編語言進行編程設計。硬件設計主要有D/A轉換和低通濾波器設計。
本文所用的系統(tǒng)時鐘為50 MHz,相位累加器為32位。由于采用12位的DAC,所以存儲波形的ROM具有12 bit的輸出。將FPGA 輸出的數(shù)字信號轉換為模擬信號,輸出信號頻率范圍為1 Hz~100 kHz,幅值范圍為0~5 V,波形可設為正弦波、三角波、方波。
當DDFS應用于某些領域如引信領域時,要求脫離上位機。這就要求存儲于SDRAM中的程序可以掉電不丟失。但是SDRAM不具有記憶功能,所以先將程序存入所用開發(fā)板的EPCS flash存儲器中。該存儲器原本存放FPGA的配置文件,其內(nèi)存為16 Mbit,足夠存放編寫的程序,且其掉電后不會丟失程序。FPGA上電后,再從EPCS flash中讀取程序并保存到SDRAM中,從而保證掉電不丟失程序。
相位累加器由32位的加法器和32位的寄存器組成。在系統(tǒng)時鐘的作用下,對頻率控制字K進行線性累加。當累加32次后就會產(chǎn)生一次溢出,每溢出一次即為DDFS的一個周期[8]。相位累加器的實質(zhì)是一個計數(shù)器,它累計的是每個時鐘脈沖下的頻率控制字K[9]。
波形存儲器,又叫ROM查找表。由式(1)可知,當增大相位累加器的位數(shù)N時,就可以提高DDFS最小分辨率[10]。同時,為了解決ROM空間資源占用過大的問題,可以采用相位截斷的方法取相位累加器輸出的高M位作為波形存儲器的地址位[11]。本文采用這種方法,將相位累加器輸出的高12位作為波形ROM的取樣地址。
在本文中,使用Matlab編寫波形信號,然后將其寫入生成的.mif文件中。通過按鍵循環(huán)切換正弦波、方波、三角波,ROM查找表的地址線為14位、數(shù)據(jù)線為12位;存有正弦波、方波和三角波的數(shù)字波形信號,每種波形有4 096個字節(jié),波形在ROM中存儲的基地址為0000H。其中:RAM地址的0000H~0FFFH為正弦波的數(shù)據(jù);1000H~1FFFH為三角波的數(shù)據(jù);2000H~2FFFH為方波的數(shù)據(jù)。各個波形的數(shù)據(jù)存儲地址偏移量為1000H。通過功能按鍵,獲取需要輸出的波形類型。如果輸入為0,則偏移地址0000H,選擇正弦波。同理,如輸入為1和2的偏移地址分別為1000H和2000H,則分別選擇三角波和方波。波形選擇的Verilog HDL語言如下。
case(F_Change)
0:Offset_add=12′h0000
1:Offset_add=12′h1000
2:Offset_add=12′h2000
default:Offset_add=0
endcase
信號發(fā)生器使用4×4鍵盤。鍵盤主要按鍵功能如下。
①“0~9”:數(shù)字鍵,設定頻率字和相位字。
②“確定”:用于確認設置的波形信號,只有按下此鍵,波形信號才有效。
③“刪除”:刪除最近一位輸入的信號數(shù)字。
④“F”:控制輸出波形的切換。
⑤“←”:步進增大控制。
⑥“→”:步進減小控制。
⑦“+” :控制輸入頻率字和相位字遞增。
人機交互界面使用的是LCD1602A液晶顯示器。
FPGA控制LCD顯示數(shù)據(jù)主要過程為:初始化顯示屏→配置顯示屏→寫顯示數(shù)據(jù)或指令。初始化過程為:延時15 ms→寫指令38H→延時5 ms。其中,指令38H為不檢測忙信號。配置顯示屏過程為:寫指令38H→寫指令08H→寫指令01H→寫指令06H→寫指令0CH。
指令38H:顯示模式設置。
指令08H:顯示關閉。
指令01H:顯示清屏。
指令06H:顯示光標移動設置。
指令0CH:顯示開及光標設置。
寫顯示數(shù)據(jù)或指令:通過按鍵讀取并判斷本次輸入為指令還是數(shù)據(jù)。如果是指令,則控制LCD的RS引腳為低,反之為高。
在Quartus II 13.0平臺下,將程序編譯成功后,調(diào)用Modelsim進行仿真,輸入的頻率控制字分別為542 488和1 717 987,波形類型為0,選擇為正弦波。
由式(1)可以計算得:當頻率控制字K=542 488時,fo=6.06 kHz;當頻率控制字K=1 717 987時,fo=20 kHz。
通過仿真測得的頻率分別為6.06 kHz和20 kHz,與由公式計算得到的結果相吻合。由此可知:①信號源輸出信號波形光滑,頻率穩(wěn)定度高,且仿真測試所得頻率與理論計算值的誤差較小;②正弦波在兩個不同頻率間波形切換自然,頻率轉換速度較快,滿足設計要求。
信號發(fā)生器仿真驗證后,將項目編譯生成的編程文件下載到CYCLONE器件中,對其進行試驗驗證。示波器輸出波形如圖3所示。

圖3 示波器輸出波形圖
由圖3可知,按鍵輸入的頻率控制字依然為524 288和1 717 987,波形類型為0,選擇正弦波,便于對比仿真結果。示波器輸出的波形形狀光滑、連續(xù)、無明顯失真,且輸出波形的頻率與理論計算值及仿真測試值較為接近,輸出波形質(zhì)量好,誤差小,準確率高。
隨著電子通信技術的迅速發(fā)展,對信號發(fā)生器的要求(如信號頻率范圍、帶寬和頻率分辨率)也越來越高。除此之外,對信號波型的選擇及調(diào)制特性要求也在提高[12]。本文基于FPGA設計的DDFS信號發(fā)生器,可以輸出正弦波、方波、三角波,并可靈活改變波形、
頻率、相位,具有轉換時間短、精度高、相位變化連續(xù)等優(yōu)點。只要改變頻率控制字K的值,就可以改變輸出頻率的大小。該系統(tǒng)可脫離計算機獨立工作,具有相當大的靈活性;加入按鍵與LCD顯示,使得信號發(fā)生器工作更加簡單方便。該信號發(fā)生器幅值范圍為0~5 V,頻率范圍為1 Hz~100 kHz。由于硬件資源有限,頻率范圍較小,但是只要更換輸出頻率較高的DAC(即高速DAC),即可輸出頻率更大的波形。