張新+吳鳳云+王帆



摘 要: 提出一種結合傅里葉級數展開和DDS原理產生任意波形信號發生器的實現方法。利用FPGA設計了15個DDS模塊,將一周期正弦波的樣值寫入DDS模塊的ROM表。對目標信號進行傅里葉變換得到信號各次諧波的頻率和幅值,取其1~15次諧波的頻率作為每個DDS模塊的頻率控制字,將各個DDS模塊輸出的樣值與輸入該模塊的頻率對應諧波幅值的乘積進行累加,經低通濾波器輸出最終所需波形。測試表明,利用該實現方法得到的信號發生器輸出波形穩定、頻率轉換速度快、精度在0.002 79 Hz以內。
關鍵詞: FPGA; DDS; 諧波合成; 信號發生器; ROM; 頻率轉換速度
中圖分類號: TN911.7?34; TN741 文獻標識碼: A 文章編號: 1004?373X(2018)02?0174?05
Abstract: An implementation method of the signal generator which can generate the arbitrary waveform by combining Fourier series expansion and DDS principles is proposed. The FPGA is used to design 15 DDS modules, and write the sample values of a periodic sine wave into the ROM list of DDS modules. The Fourier transform is performed for the target signal to get the frequency and amplitude of the signals each harmonic. The frequencies of 1?15 harmonics are taken as the frequency control words of each DDS module. The sample values output by each DDS module and the product of harmonic amplitudes corresponding to the frequency input into this module are accumulated. The analog signal is output through the low?pass filter to get the desired waveform. The test results show that the signal generator implemented with the method has stable output waveform and fast frequency conversion speed, and its accuracy is within 0.002 79 Hz.
Keywords: FPGA; DDS; harmonic synthesis; signal generator; ROM; frequency conversion speed
0 引 言
傳統的波形發生器只能產生一些常規的信號如正弦波、方波、脈沖波、三角波等。隨著科學實驗研究的需求不斷發展,傳統的波形發生器在一些特定的場合已經不能滿足要求,許多應用研究領域需要一些不規則的信號用于系統特性的研究,這就需要能產生現場所需波形的任意信號發生器。
任意信號發生器的實現方案主要有可變時鐘計數器尋址[1],DMA輸出和直接數字頻率合成(DDS)[2]等多種方式。目前任意信號發生器的研制主要是基于FPGA編程技術以及DDS原理,采用上位機軟件編輯任意波形時域數據,通過改寫FPGA中波形ROM的數據,從而生成所需的各種任意波形[2?4]。但是,對于只讀存儲器(ROM)數據的改寫必須每次通過程序初始化波形ROM,寫入的數據必須是一整周期的時域波形數據,不易操作。為了能夠更加簡潔的改寫波形存儲器的數據,把存放波形量化表的ROM換成了可以改寫的RAM,這樣通過與RAM的接口可以改變存放在波形RAM中的數據從而實現任意波形發生器[5?8]。然而,RAM作為一種隨機讀寫存儲器,在儀器掉電或重啟后,RAM中數據就會丟失,因此,這種方法在每次使用時都要重寫RAM數據。為了能夠穩定地產生波形數據,在信號波形輸出的算法中,采用一種在硬件設計中改進的DDS技術,通過使用多個參考頻率源和動態生成的波形數據方法以改進穩定性和減少輸出波形的失真[9]。另一種被廣泛采用的解決方案是使用DDS芯片產生正弦波,然后使用放大器、比較器、組合電阻器和電容器將正弦波轉換為矩形波和三角波等其他的波形[10]。但這種方案只能產生特定的波形,在任意波形實現方面具有局限性,芯片功耗較大,生產成本高。
考慮到實際應用中的信號的主要能量集中在1~15次諧波,故本文采用一種新的方法,通過對DDS進行理論分析。詳細介紹了利用FPGA芯片設計15個DDS模塊,每個模塊的波形ROM均存入一個周期正弦波樣值。正弦波形的樣值數據無需更改并且防止在掉電時丟失數據,因此,在波形數據的存儲設計上采用ROM存儲方式,定制ROM的文件(.mif)由Matlab生成[11]。將信號最多15次諧波的頻率及其對應幅值作為FPGA的輸入信號,FPGA中完成不同頻率正弦波的疊加輸出。測試表明,本文采用的實現方法在輸出波形參數寫入、刪除、修改等方面更加靈活,操作簡單,輸出波形的頻率精度能夠滿足設計要求。
1 理論分析
現將整個周期的相位分成M份,則最小的相位增量為,若每次的相位增量選擇為最小相位增量的K倍,完成一整周正弦波的輸出需要經過個參考時鐘周期,則輸出信號的頻率計算如下:endprint
式中:一般取,N為正整數,表示相位累加器輸出字長;K為頻率控制字;為時鐘頻率,相位累加器在時鐘的控制下以步長K為累加,輸出N位二進制碼為波形ROM的地址,對波形ROM尋址,波形ROM輸出的幅值經數/模轉換器轉換成模擬信號后再經低通濾波器輸出。
DDS原理圖如圖1所示。
在物理學中,最基本的波形是諧波(正弦波),它是形如,其中A是振幅,是角頻率,是初相位。對于矩形波、鋸齒波等任意波形都可以用一系列諧波的疊加表示。
設是周期為T的某一波形,在一定條件下可以把它寫成:
2 波形合成系統的總體設計
本系統在控制方面采用NXP公司推出的基于ARM Cortex?M3 內核的微控制器LPC1768,FPGA內實現信號發生器的數字電路部分。整個系統主要由LPC1768微處理器、FPGA模塊、DAC轉換單元、低通濾波器(LP),USB通信端口、LCD顯示模塊和按鍵控制等部分組成,其系統設計框圖如圖2所示。
2.1 微控制器設計
嵌入式軟件是在一個精簡的小型實時性操作系統的基礎上實現信號的可編程輸出。微控制器(MCU)內部FLASH存儲區為波形數據分配了32 kB的存儲空間(0x010000~0x017FFF),每種波形數據占4 kB的空間,因此在FLASH中可存儲8種波形。對波形數據的寫入和刪除操作是通過配置控制器USB虛擬的串口來接收PC端的寫入和刪除命令來完成,在寫入文件過程中,首先是將所需合成波形的15種諧波頻率(Freq0~Freq14)以及每個頻率對應的幅度參數(ACAmp0~ACAmp14)組合為一個文本文件,然后在PC端通過串口助手將該文件的波形數據寫入到對應的FLASH存儲區。程序運行過程中,通過按鍵選擇某一波形作為輸出波形,微控制器將最多15種諧波的頻率轉換為頻率控制字以及將幅度參數(4 V范圍內)轉化為16位二進制的表示方式,然后通過SPI的方式寫入到FPGA各個對應的寄存器中,FPGA啟動DDS模塊轉換,最終產生所需的合成波形。同時,微控制器運行的操作系統還需要處理各種中斷(包括USB的中斷,按鍵的中斷)以及LCD的顯示等操作。
2.2 FPGA部分設計
FPGA主要實現以下兩部分功能:第一,系統的按鍵掃描由FPGA來完成,FPGA實時監控是否有按鍵按下,當發現有按鍵輸入時,將去抖后的按鍵值保存,再以中斷的方式發送至MCU單元;第二,利用FPGA實現DDS原理,單個DDS模塊的RTL視圖如圖3所示,其中Freq[31:0]為頻率控制字K,該頻率控制字即為FPGA存儲的15種頻率控制字的一種,加法器ADDER與32位的相位寄存器構成相位累加器,相位寄存器的輸出Phase[31:0]又反饋到加法器的輸入端進行下個時鐘周期的累積,截取相位寄存器Phase[29:20]位作為正弦波ROM的地址RomAddr[9:0],因此,地址的可變范圍為1~1 023,調用IP 核形成波形存儲器時需要加載ROM 初始化數據文件(SinRom.mif 文件)即為對一個周期正弦波1 024點的量化存儲。
本系統FPGA部分設計了15個DDS模塊,能夠同時進行最多15種頻率的合成,對于一些幅值為零的諧波,通過程序控制失能(Enable=0)其DDS模塊轉換,只進行部分諧波的合成,各個模塊的輸出分別為DDS0_DataOut~DDS14_DataOut。
將DDS0_DataOut~DDS14_DataOut乘以其對應的幅值Reg30_OUT0~Reg3E_OUT0(保存ACAmp0~
ACAmp14的二進制值),再將所得結果輸入加法器進行累加,最后輸出所需波形幅值量化數據。其FPGA實現幅值疊加如圖4所示。
這里使用DDS0和DDS1作為示意原理圖,其余模塊的實現采用相同的原理進行疊加,因此,在FPGA能夠實現15個模塊同時疊加。FPGA采用32 bit寬度的頻率控制字,時鐘為12 MHz,其輸出信號頻率為:
頻率精度為:
2.3 DAC電路設計
由FPGA輸出的數字幅度值是一串數字序列,最終要經過D/A 轉換器才能轉換成相應的模擬波形。為了保證數據處理結果的準確性,DAC轉換器必須有足夠的轉換精度,同時為了能夠在較高頻率下工作,它必須有足夠快的轉換速度。此外還要考慮 DAC 的非線性和噪聲特性,綜合了各方面的因素之后,本設計采用16 bit并行DACDAC8820作為數/模轉換芯片。經FPGA單元計算之后的數字波形數據由DAC1_D0~DAC_D15輸入DAC單元進行轉換,轉換之后模擬信號經一階放大電路,最終由DAC1_OUT輸出,具體電路設計如圖5所示。
2.4 濾波電路設計
由于運算放大器具有近似理想的特性,且可以省去電感,得到接近理論預測的頻率響應特性,構成有源濾波電路后還具有一定的電壓放大和緩沖作用,并能減小體積。綜合考慮,系統采用運算放大器構成二階低通濾波器,電路原理圖設計如圖6所示。
通過選擇高精密度超低噪聲運放、精心設計包含低通濾波器在內的模擬加法電路以及合理PCB的設計,能夠有效地降低噪聲。
3 測試分析
3.1 輸出波形測試
首先,通過Matlab軟件仿真出所需合成的波形,得到合成波形的頻率及幅值參數;然后,將仿真所使用的參數寫入到該信號發生器;最后,使用示波器截取最終的合成波形與仿真波形進行對比分析。
矩形波、鋸齒波、任意波形Matlab仿真如圖7a)~圖9a)所示,從3幅可以得出所需合成的波形峰峰值為2,波形的周期T為1,對應的頻率。
上述3種波形的示波器觀測波形如圖7b)~圖9b)所示,示波器垂直方向的方格表示輸出波形幅值,每個方格代表500 mV,從圖中能夠直觀地看出上述3種波形在垂直方向上均占了4個方格,因此峰峰為2 V。水平方向的方格表示波形頻率值,每個方格代表200 ms,一個周期的該波形占了5個水平方格,因此,波形的輸出頻率為1 Hz。endprint
由此,可以得出實測輸出波形的幅值及頻率數據與Matlab仿真波形的數據完全吻合,并且,實測波形與仿真的波形的形狀也十分接近。
3.2 頻率穩定度測試
矩形波、鋸齒波、任意波形的頻率測試值如表1~表3所示,由表中數據可以看出,每種波形在不同頻率下3次測量值都比較穩定,無較大波動。頻率變化量的最大值為 0.002 1,在0.002 79以內,滿足設計要求,并且頻率穩定隨頻率變化無明顯變化規律,在可達范圍內相對頻率穩定。
4 結 論
本文系統實現了基于FPGA合成諧波的信號發生器設計,在任意波形的實現過程中,只需在PC端更改最多15種諧波頻率值及其對應幅值,即可實現任意所需波形輸出。操作更加靈活,而且更加高效。測試表明,通過儀器合成的最終波形無論是波形形狀,還是輸出波形的幅值及頻率值都與Matalb仿真波形十分接近。
輸出波形的頻率值比較穩定,頻率精度在0.002 79以內,滿足設計的要求。然而,對于矩形波和鋸齒波等這些比較特殊的波形,由于所有FPGA芯片內存以及設計工藝的限制,不能輸出幅值比較平滑的波形,但是足以滿足對于幅值要求不是很苛刻的實驗室以及工程應用的需求。
參考文獻
[1] 白居憲.直接數字頻率合成[M].西安:西安交通大學出版社,2007.
BAI Juxian. Direct digital frequency synthesis [M]. Xian: Xian Jiaotong University Press, 2007.
[2] 周登榮,周玉榮.一種任意波形信號發生器的實現方法[J].重慶師范大學學報,2014(1):84?88.
ZHOU Dengrong, ZHOU Yurong. An implementation method of arbitrary waveform signal generator [J]. Journal of Chongqing Normal University, 2014(1): 84?88.
[3] 韓旭,鄭磊.基于FPGA的任意波形發生器的設計與實現[J].電子測量技術,2013(7):62?66.
HAN Xu, ZHENG Lei. Design and implementation of arbitrary waveform generator based on FPGA [J]. Electronic measurement technology, 2013(7): 62?66.
[4] RAVITEJA REDDY B, RAJU V S G N. Development of FPGA for custom waveform generator based on direct digital synthesizer [J]. International journal of engineering research and applications, 2013, 3(4): 2597?2602.
[5] 張嚴,洪遠泉.基于FPGA的任意波形發生器設計與研究[J].現代電子技術,2011,34(10):157?159.
ZHANG Yan, HONG Yuanquan. Design and research of arbitrary waveform generator based on FPGA [J]. Modern electronics technique, 2011, 34(10): 157?159.
[6] FERNANDEZ?JARAMILLO A A, ROMERO?TRONCOSO R D J, DUARTE?GALVAN C, et al. FPGA?based chlorophy II fluorescence measurement system with arbitrary light stimulation waveform using direct digital synthesis [J]. Measurement, 2015, 75: 12?22.
[7] MAFFRAND C, ZARATE D, AON M A, et al. Arbitrary waveform generator using FPGA for applications in ultrafast scan voltammetry [C]// Proceedings of 2014 IEEE Conference on Programmable Logic. Buenos Aires: IEEE, 2014: 1?6.
[8] ZHANG Hongfei, LUO Chunli, TANG Pengyi, et al. High?speed arbitrary waveform generator based on FPGA [C]// Proceedings of 2013 IEEE Nuclear Science Symposium and Medical Imaging Conference. Seoul: IEEE, 2013: 1?5.
[9] WEI Peng, GAO Tingjin. Arbitrary waveform generator based on improved DDS technology [J]. Applied mechanics and materials, 2013, 338: 1587?1592.
[10] XU Min, HU Jingyu, GAO Yinyin. FPGA?based design and implementation of arbitrary waveform generator [C]// Proceedings of 2011 International Conference on Control, Automation and Systems Engineering. Singapore: IEEE, 2011: 1?4.
[11] 張博君.DDS任意波形發生器研究[J].現代電子技術,2012,35(14):100?102.
ZHANG Bojun. Research on arbitrary waveform generator of DDS [J]. Modern electronics technique, 2012, 35(14): 100?102.endprint