??? 摘? 要: 研制了一種采用單片機與復雜可編程邏輯器件(CPLD)相結合的方法設計的任意波形發生器(AWG),并詳細介紹了利用MATLAB獲取波形數據的兩種方法。實驗證明,該系統能輸出頻率和幅度可調的多種標準函數波以及任意波形。在滿足所需頻帶寬度的同時,提高了頻率的分辨率和準確度。?
??? 關鍵詞: AWG; 超聲波信號源; DDS; 單片機; CPLD?
?
??? 在研究聲化學的頻率效應及超聲流體濃度檢測的過程中筆者發現,傳統的模擬超聲信號源只能直接產生適當頻率的電信號,用以驅動特定的超聲波換能器,且產生的波形種類十分有限,系統的智能化控制也不完善。這不僅使得超聲設備不能被合理利用,同時也在實驗過程中加大了操作人員的工作量。所以設計一個適用范圍廣、高質量、智能化的超聲信號源有著非常重要的意義。?
??? 本文所介紹的任意波形發生器應用于頻率100kHz以下的低頻超聲段。從系統性能、實現成本和復雜程度等方面綜合考慮,采用了單片機與CPLD相結合的方法實現。其后級可運用B類功放以獲得所需的功率輸出。?
1 系統原理及特點?
??? AWG的波形合成采用了基于Nyquist采樣定律的DDS技術。模擬信號經過采樣、量化后存入數據查找表,控制器通過對查找表的尋址獲得波形數據,再經D/A轉換、濾波即可恢復原波形。其實現過程如圖1所示。?
?
?
??? 在系統時鐘的作用下,將頻率控制字(也即累加器步長)送至相位累加器,并與原有的數據相加,這樣,累加器的輸出是一個關于時間的線性相位函數。相位函數的斜率決定了信號的頻率,而相位函數的斜率取決于每個時鐘周期相位的增量。控制每個周期相位的增量即可控制合成信號的頻率。改變累加步長,即可改變輸出每個周期的相位增量,從而改變輸出信號的頻率[1]。?
??? 設定AWG的性能參數如下:?
??? (1) 8種波形存儲能力,每種最大存儲字長為4KB。?
??? (2) 可輸出包括正弦波、方波、三角波的標準函數波形;可輸出任意波形,并設定其復現頻率。?
??? (3) 頻率帶寬100kHz,最小分辨率為2Hz。?
??? (4) 輸出電壓峰峰值分為2.5V、5V、7.5V和10V四檔,每檔可再進行256級量化。?
??? (5) 波形數據通過數字存儲示波器(DSO)采集或通過MATLAB合成。?
??? (6) 具備當前波形數據掉電存儲功能。?
??? (7) 具備時控和PC控制功能。?
??? (8) 背光液晶顯示,良好的操作界面。?
??? 本系統與傳統的模擬信號發生器相比具有頻帶寬、穩定性好、分辨率高、易于程控等特點;而相比于采用AD9851等DDS芯片設計的信號源又具有生成波形靈活多樣的優勢。因此它適合作為小信號源,被應用于功率超聲和檢測超聲中。?
2 系統的硬件實現?
??? AWG的硬件電路可以分為波形發生、整機控制和電源三個模塊,其原理框圖如圖2所示。電源的設計采用經典的線性伺服穩壓電路,這種電路的紋波系數很小,其速率、內阻以及穩定性都優于蓄電池,非常適合像信號源這樣對噪聲敏感的應用場合。?
?
?
2.1 波形發生電路的設計?
??? 波形發生模塊是本系統的核心。CPLD(EPM7128S)接收單片機發來的信息對波形的各項參數如波形種類、幅度、頻率、濾波通道進行控制,通過查找表的方式實現波形生成。?
??? 本系統采用了基于E2PROM的查找表。器件選用8位并行E2PROM芯片AT28C256,存儲容量為32KB。其讀寫時序十分簡單,改變尋址地址,即輸出對應數值,占用更少的CPLD內部宏單元。?
??? 對于幅度的控制和波形生成,則采用雙DAC的方法,如圖3所示。由于幅度控制對電流建立時間要求不高,可采用價格比較便宜的DAC0832。將其輸出電壓作為波形生成DAC的參考電壓,通過改變DAC0832的輸入來改變輸出信號的幅度。而DAC0832的參考電壓則由帶隙電壓基準源AD584提供,該芯片可提供四種參考電壓。?
?
?
??? 在DDS系統中,波形生成DAC的電流建立時間決定了系統合成信號的最高頻率。在本系統的設計中,合成信號的最高頻率為100kHz,為了保證輸出波形的質量,要求在輸出最高頻率時的周期點數不少于64點,則電流建立時間為:?
?????
??? 為了留有一定的裕度,選用電流建立時間為100ns的AD7524。設AD584輸出5V基準電壓,DAC0832的數字輸入為N1,則AD7524的參考電壓為:?
?????
??? 設AD7524的數字輸入為N2,則經電流—電壓轉換后的輸出UOUT2為:?
?????
??? 為了減輕雜散干擾,需要在DDS輸出端加一個濾波器。考慮到對帶內幅值平坦性、多通道控制及電路設計復雜性上的要求[2],本設計采用了巴特沃思二階低通濾波器如圖4所示。其中模擬開關CD4052將有源二階低通濾波電路組成多頻段濾波電路,濾波截止頻率分為100Hz、1kHz、10kHz和100kHz四檔,根據輸出波形頻率的不同而選擇一組電阻值進行分段濾波。通道選擇和濾波使能由單片機直接控制。濾波器中的運放OP37構成同相比例放大器。?
?
?
2.2 整機控制電路的設計?
??? 整機控制模塊以AT89S52單片機為核心,并由RS-232驅動器(MAX232)、串行E2PROM(AT24C02)、液晶顯示模塊(LCM1602)、矩陣鍵盤、ADC(ADC0831)及精密電壓參考源(AD586)等部分組成,其電路如圖5所示。該模塊在系統中起到以下兩點作用:一是將用戶設定輸出波形的參數按照特定的格式發送給CPLD產生相應波形;二是監測當前的工作狀態。?
?
?
??? 鍵盤為14鍵的矩陣鍵盤,采用線翻轉法對鍵碼進行識別[3]。LCM1602型液晶模塊是本機的顯示輸出設備,它具有功耗低、顯示質量高、體積小、重量輕等特點。
??? 掉電存儲功能由256B的I2C總線串行E2PROM(AT24C02)實現。?
??? 本系統內置了8位逐次逼近式A/D轉換器(ADC0831),用以采樣換能器兩端的輸出電流,進而估測功率源的輸出功率。因此通過軟件掃頻的方式就可以找到換能器的諧振頻率,實現頻率跟蹤。?
3 系統的軟件實現?
3.1 CPLD的邏輯設計?
??? 雖然CPLD的內部邏輯功能屬于硬件范疇,但是由于采用了軟件的方法設計硬件,也將其歸為系統的軟件實現。?
??? 從功能上劃分,CPLD的內部邏輯具有四個底層實體:控制字接收、相位累加、幅度DAC控制和波形DAC控制。它們分別采用MegaFunction單元庫構建并采用Verilog HDL行為描述的方法實現。圖6的虛線框描述了底層各實體間的關系。?
?
?
??? 底層各實體的設計參數由系統的性能指標決定。系統采用8MHz有源晶振,則每周期具有64個采樣點的波形最高復現頻率為:?
?????
??? 因系統要求的最小分辨率不大于2Hz,故相位累加器的位數至少為22位,此時最小頻率約為:?
?????
??? 因此頻率控制字(FSW)的位數為以上二者位數之差,即16位。?
??? 波形數據查找表28C256的地址總線為15位,其高3位由波形種類控制字(WSW)直接賦值,8種波形與地址的對應關系如表1所示。?
?
?
??? 低12位地址取相位累加器輸出累加和的高12位,相位累加器的行為描述如下:?
??? module PHASE_REG (EN,CLK,PIR,ADD_L12); ?
??? input [15:0] PIR; ?
??? input EN; ?
??? input CLK; ?
??? output [11:0] ADD_L12; ?
??? reg [21:0] sum; ?
??? reg [11:0] ADD_L12; ?
??? always@(posedge CLK) ?
? ? if(EN)?
??? ??? begin ?
??? ?????? sum = sum + PIR; ?
????? ADD_L12 = sum[21:10]; ?
??????? end ?
??? endmodule?
??? 幅度DAC控制器將8位幅度控制字(ASW)賦給DAC0832并控制其輸出使能。同樣,波形DAC控制器將28C256的8位輸出賦給AD7524并分別控制二者的讀使能和輸出使能。?
??? 在本系統中,CPLD單向接收單片機發送的4個字節(27位有效)的控制字,數據量少且對傳輸速度沒有過高要求,因此接口設計采用SPI0的工作模式,只需占用三根口線。SPI0的工作時序十分簡單,只需將片選(SS_n)拉低,然后在每個時鐘(SCK)的上升沿送出數據(MOSI)即可[4]。串行移位用串入并出的移位寄存器實現,并行數據鎖存則用D觸發器,二者分別可由Quartus II MegaWizard向導中的LPM_SHIFTREG和LPM_FF構建,如圖7所示。
?
?
3.2 單片機的軟件設計?
??? 單片機的程序利用C語言編寫,可分為驅動程序(包括液晶驅動、鍵盤驅動、SPI總線驅動、I2C總線驅動、串口驅動等)和菜單程序兩部分。圖8為本系統的操作流程圖。?
?
?
??? 在輸出模式中,直接進入“Last waveform”菜單后就能方便地讀取前一次保存的波形參數;而在“New waveform”菜單下則可以重新設置參數。?
??? 本系統還有兩種特別的控制方式:一是在“RS232 Mode”中,可由PC機通過串口發送控制字并監控其工作狀態,在上位機軟件的支持下可以使本機協同其他智能儀器高效地完成實驗過程;二是在“Anolog Mode”中,波形參數或運行狀態可由輸入電壓量來控制,例如當換能器或功放工作時間過長導致發熱量過大時,可關閉輸出。?
??? 在“DSP.Waveform”菜單中,完成所有控制字的轉換、存儲、發送和顯示。單片機向CPLD發控制字的接口程序如下:?
??? /**向CPLD的SPI端口寫一個字節的控制字**/?
??? void write_SPI(uchar SETWORD)?
??? {?
??? uchar i;?
??? for(i=0;i<8;i++)?
??? {?
??? ?? SCK=0;?
??? ?? DATA=(SETWORD<
??? ?? SCK=1;?
??? }?
??? }?
??? /**向CPLD的SPI端口寫四個字節的控制字**/?
??? void write_SETWORD()?
??? {?
??? SS=0;??????????? ??????? //SPI傳送開始?
??? write_SPI(WSW);? ??? //寫波形種類控制字?
??? write_SPI(FSW_H); ?? //寫波形頻率控制字高字節?
??? write_SPI(FSW_L); ?? //寫波形頻率控制字低字節?
?????? write_SPI(ASW);? ? //寫波形幅度控制字?
???? ? SS=1;?????????? ??????? //SPI傳送結束,波形發生模塊開始工作?
?? EN_4052=0;???????? //濾波器開始工作?
??? }?
3.3 波形數據的獲取?
??? 采用兩種方法獲取所需的波形數據,即公式法和采樣法。?
??? 在利用超聲波進行變壓器油中微水濃度檢測的實驗中[5],為了避免接收信號相互重疊,需要用單脈沖觸發的正弦波激勵發射端換能器,使聲波通過充滿油水混合物的管道,并于接收端觀測、分析波形,以便設計合適的放大和整形電路。下面分別用以上兩種方法說明發射端和接收端波形數據的獲取。?
??? (1) 用公式法獲取發射端波形?
??? 常用的波形通常都可以用公式進行描述,MATLAB的內部就提供了大量的波形產生函數[6],具體調用方法見軟件說明文檔。?
??? 本系統中,每種波形的存儲深度為4 096點,其數據表可看作是1*4 096的一維數組,且元素的取值范圍為0~255,直流偏置量為128。獲取占空比為1/16的單脈沖觸發正弦波數據可分三步完成:?
??? 首先產生256點的正弦數據表,程序如下: ?
??? x=0:2*pi/255:2*pi;?? % 采樣一個周期,采樣點數為256?
??? y0=(sin(x)+1)*128;? %直流偏置為128,幅值范圍0~255?
??? y1=uint8(y);??????? ??? ??%幅值取8位無符號整形?
??? 其次在y1后添加長度為3 840的幅值為128的數據點。可以利用y2=repmat(128,1,4 096)語句建立一個1*4 096的全128數組,將y1的值粘貼至y2的前256點即可。?
??? 最后,在Quartus II軟件[7]中新建字長為8bit,長度為4 096的HEX文件,從MATLAB的Array Editor中將y2的數據復制到該文件,并在E2PROM燒錄軟件中按指定起始地址將其導入即可。?
??? (2) 用采樣法獲取接收端波形?
??? 有些波形較為復雜,不易用公式描述,則可用數字存儲示波器采集并處理后將其復現。圖9即為TDS1012型示波器采集的發射端和接收端的波形。該示波器除了能將屏幕所示信息存為bmp位圖外,還可將CH1和CH2的波形數據以2 500點的存儲深度保存為CSV(逗號分隔值)文件。?
?
?
??? 以接收端的波形為例,在MATLAB中將CSV文件中的波形數據以一維數組的形式導入,并利用Array Editor中的二維繪圖功能查看并截取一個周期的波形數據。由于此時數據點數并不是4 096,而是小于2 500的值,因此需要進行插值處理,程序如下:?
??? x0=1:1739;???????????????? %截取后的波形點數為1739點?
??? x1=1:1 739/4 098:1 739; %插值后的波形點數為4096點?
??? y1=spline(x0,y0,x1);???? %三次樣條插值,y0為插值前數據?
??? y2=uint8(y1);??? ???????????%幅值取8位無符號整形?
??? 插值后的周期波形如圖10所示。?
?
?
4 試驗結果及分析?
??? 使用TDS1012型示波器測試本系統的性能。表2記錄的是一組正弦波的頻率測量結果,結果表明合成波形的頻率誤差在2Hz以內,與理論值相符,達到了設計指標。
?
?
??? 圖11所示為輸出頻率為10kHz的正弦波,它是降指數波、DSB調幅波和基波與3次諧波疊加的任意波形,濾波方式為Auto,即系統根據設定頻率自動選擇相應的濾波通道。?
?
?
??? 但是,對于像方波這樣含有許多高頻成分的波形,在選用Auto方式濾波時,大于復現頻率的成分會被大幅衰減,導致波形失真,圖12左上圖為10kHz方波通過10kHz低通濾波器前后的波形,右上圖為濾波后頻譜。通過手動設置濾波通道,增大通帶寬度,就可以減小波形失真,左下圖和右下圖分別為通過100kHz低通濾波器后的波形和頻譜。?
?
?
??? 本文針對低頻超聲波的應用,介紹了一種采用單片機和CPLD研制的任意波形發生器,它可以為實驗室提供一種高性價比的超聲信號源解決方案。隨著新一代大規模低成本CPLD的推出與應用(如MAX II系列),本系統還可擴展波形數據聯機下載或實時采集等功能。若采用更高速率的DAC和查找表存儲器還可進一步提高輸出帶寬,使之覆蓋整個超聲頻段。?
參考文獻?
[1] 吳秋蘭.現代數字系統設計方法研究及其在AWG中的應用[D].濟南:山東大學,2001.?
[2] 毛敏,鄭珍,周渭.基于DDS的低通濾波器的設計與實現[J].電子科技,2006(3):17-20.?
[3] 求是科技.單片機典型模塊設計實例導航[M]. 北京:人民郵電出版社,2004.?
[4]?黃任.AVR單片機與CPLD/FPGA綜合應用入門[M].北京:北京航空航天大學出版社,2006.?
[5] 朱昌平,單鳴雷,齊本勝,等.變壓器油中微水及混合氣體超聲在線檢測方法及裝置[P].中國:200710021320.5,2007. ?
[6] 郭仕劍,王寶順,賀志國,等.MATLAB7.X數字信號處理[M].北京:人民郵電出版社,2006. ?
[7] Altera Corporation.Quartus II 7.1 Handbook,2007.?
[8] 王文華.基于DDS技術的任意波形發生器研究[D].杭州:浙江大學,2002.?
[9] 馮若.超聲手冊[M].南京:南京大學出版社,2006.?
[10] 任緒科,趙俊渭,周明.基于CPLD和單片機的任意波形發生器設計[J].電子產品世界.2005(1):118-119.?