陳林林,孫 群,高雅楠
(聊城大學機械與汽車工程學院,山東 聊城 252059)
波形信號發(fā)生器是一種數(shù)據(jù)信號發(fā)生器,廣泛應用于通信、測控、導航、雷達、醫(yī)療等領域,在高校實驗室中應用也十分普遍?;趩纹瑱C的簡易波形信號發(fā)生器是一種常用的信號源,它廣泛用在電子技術實驗、自動控制系統(tǒng)和其他科研領域。目前,簡易波形發(fā)生器的構成方法有很多,例如采用DDS型的任意波發(fā)生器[1-4]、采用專用的信號發(fā)生芯片MAX038以及傳統(tǒng)的AWG[5-7]。
本文在分析現(xiàn)有信號發(fā)生器工作原理的基礎上,通過分析比較后,基于單片機AT89C52和DAC0832設計了一種信號發(fā)生器,應用于高校實驗室學生實驗,具有硬件簡單,價格低廉容易對頻率和幅值進行控制等優(yōu)點。
設計的波形發(fā)生器的測控需求如下:
1)利用單片機程序,產(chǎn)生數(shù)字式的正弦波、三角波、方波頻率可調的信號。
波形要求:
正弦波:輸出電壓值為-5V~5V,初始頻率為10Hz,頻率最大值為1 000 Hz,頻率調節(jié)步進值為10Hz。
三角波:輸出電壓為-5V~5V,初始頻率為50Hz,頻率最大值為500Hz,頻率調節(jié)步進值為50Hz。
方波:輸出電壓為-5V~5V,初始頻率為200Hz,頻率最大值為2kHz,頻率調節(jié)步進值為200Hz。
2)可通過鍵盤進行波形和頻率的切換。
3)通過LCD顯示波形類型及頻率大小。
4)設計硬件電路,選擇合適的器件,調節(jié)好器件的工作狀態(tài),保證能輸出明顯的波形信號,且不失真。
在系統(tǒng)總體設計時分塊完成,按照波形設定、D/A轉換、51單片機連接、鍵盤控制和顯示5個模塊來設計。最后通過聯(lián)調仿真,得出仿真結果??傮w設計框圖如圖1所示。
圖1 系統(tǒng)總體設計框圖
2.2.1 控制模塊
用單片AT89C52作為系統(tǒng)的主控核心。具有體積小,使用靈活,易于人機對話,數(shù)據(jù)處理良好,單指令周期和35M高速運算等優(yōu)點,且單片機功耗低,價格低廉。
在此系統(tǒng)中,采用單片機作為控制比采用FPGA實現(xiàn)更簡便。基于綜合性價比,確定選擇此方案。
2.2.2 按鍵及其顯示模塊
為了提高單片機的資源利用率和運行效率,按鍵顯示部分直接使用zlg7289擴展鍵盤,鍵盤與單片機連接。zlg7289芯片與單片機之間通信方便,而且由zlg7289對鍵盤進行自動掃描,可以去抖動,充分地提高了單片機的工作效率。
2.2.3 波形產(chǎn)生模塊
使用單片機的定時器設置定時時間,每半個周期對I/O口取反一次,從而實現(xiàn)頻率輸出。這種方案雖然在高頻頻段誤差比較大,但是編程簡單易控制,因此,確定選擇此方案。
2.2.4 D/A轉換
單片輸出的是數(shù)字信號,必須通過D/A轉換后才能模擬信號,采用DAC0832,這是8位的并行D/A轉換器,轉換速度快。
AT89C52單片機的內部結構與MCS-51系列單片機的構成基本相同。正常情況下DAC0832與單片機的接口應為4條數(shù)據(jù)線。當DAC0832未工作時其CS輸入端應為高電平,此時芯片禁用,CLK和DO/DI的電平可任意。當要進行A/D轉換時,須先將CS使能端置于低電平并且保持低電平直到轉換完全結束。此時芯片開始轉換工作,同時由處理器向芯片時鐘輸入端CLK輸入時鐘脈沖,DO/DI端則使用DI端輸入通道功能選擇的數(shù)據(jù)信號。在第1個時鐘脈沖的下沉之前DI端必須是高電平,表示啟始信號。在第2、3個脈沖下沉之前DI端應輸入2位數(shù)據(jù)用于選擇通道功能。
按鍵原理圖如2所示,對于中斷方式對波形的切換,因為INT0優(yōu)先于INT1,當按鍵按下時,首先判斷是否有幅值輸出然后判斷出現(xiàn)相應波形,當無中斷0時,即默認第二個DA轉換器的參考電壓為5V,在執(zhí)行中斷1判斷出相應的波形。第1個按鍵進行波形選擇,選擇各波形的初始頻率;第2個按鍵對頻率進行升高;第3個按鍵對頻率進行降低;第4個按鍵輸出波形。
圖2 按鍵電路圖
由于單片機輸出的是數(shù)字信號,要得到模擬信號的波形就必須對其進行數(shù)模轉換,采用DAC0832數(shù)模轉換器。由于其輸出為電流輸出,因為外加運算放大器使之裝換為電壓輸出。通過DI7~DI0與單片機P0端口相連接;CS與單片機P2.0端口相連接;WR2與單片機P2.1端口相連接。
圖3 D/A轉換電路
圖4 顯示電路
通過液晶1602顯示輸出的波形、頻率,其電路圖如圖3~圖6所示。其中D0~D7與單片機P1端口相連接;RS與單片機P2.2端口相連接;RW與單片機P2.3端口相連接;E與單片機P2.4端口相連接。
4.1.1 正弦波設計
假設 Y=128SIN(360X/255/360×2×3.14)+128 的正弦波,DAC0832數(shù)據(jù)端口給的數(shù)據(jù)的范圍是0~255一共256個。前0~127表示X軸上方的電壓值,那么128~255是X軸下方的電壓值。那么可以得到value=128×SIN(360X/255/360×2×3.14)+128;抽樣256 個點,則 value=128SIN(360X/255/360×2×3.14)+128,X為0~255。本文采用查表的方法,把一個周期的圓分成 255份,求出每一份的正弦值 i,然后把所求得的正弦值 i×128+128,最后換算成16進制數(shù)。
4.1.2 三角波程序設計
當電壓隨時間線性增加,到一定時間又線性降低時,就形成了三角波。單片機可以輸出的數(shù)最小為0,最大為255。當輸出的值從00000000B線性增加到11111111B,然后從11111111B減小到00000000B時,就可以產(chǎn)生三角波。本文共采集了65個三角波坐標。
4.1.3 方波程序設計
當單片機輸出從00000000B直接增加到11111111B時,輸出的電壓就從低電平變到高電平了,用延時程序是高低電平保持一段時間在切換。由此,產(chǎn)生方波只需要取2個值,0x00和0XFF。
頻率改變與波形輸出程序框圖如圖5和圖6所示。
圖5 頻率改變程序流程圖
圖6 波形輸出程序流程圖
采用定時器來控制波形頻率,通過輸出的兩點間的延時來實現(xiàn)調頻功能。當晶振頻率為24M時,單片機的機器周期為0.5μs。假設需要10Hz的正弦波,由于正弦波的取點個數(shù)為256個,所以每個點所要的時間為1/10/256s,選用定時/計數(shù)器T0的方式1實現(xiàn),設計數(shù)器初值為X:
表1 正弦波頻率初值
表2 三角波頻率初值
表3 方波頻率初值
圖7 三角波仿真實驗圖
表1為正弦波頻率初值,表2為三角波頻率初值,表3為方波頻率初值。
本文鍵盤部分由4個鍵組成,分別控制波形的選擇、頻率的升、降以及波形輸出。P3.2為中斷入口地址,當P3.2=0時,說明有鍵按下。取P3口的值和0Xf0相遇,取出P3口的高4位,最后使用swatch(),當P3&0xf0=0xe0時,波形選擇鍵按下;當P3&0xf0=0xd0時,頻率升鍵按下;當P3&0xf0=0xb0時,頻率衰減鍵按下。
1602字符型LCD通常有14條引腳線或16條引腳線,LCD顯示流程為初始化LCD,設置顯示位置,最后顯示字符。
圖8 方波仿真實驗圖
將各部分的程序及各子程序編好,使用Keil進行編譯,加載到Proteus軟件電路中進行仿真[8]。
圖7為頻率在50,200,400Hz條件下的三角波仿真圖。
圖8為頻率在200,600,1 200 Hz條件下的方波仿真圖。
圖9為頻率在10,40,80Hz條件下的正弦波波仿真圖。
圖9 正弦波仿真實驗圖
表4 測量實驗結果
圖10 示波器測量的波形圖
調試好軟硬件后,利用北京普源精工生產(chǎn)的DS1102示波器測量波形質量,方波、三角波和正弦波波形如圖10所示。
在周期T-8T下對頻率的測試結果如表4所示。
誤差指標選用最小均方差(mean squared error,MSE),定義如下:
式中:(i)——理論值;
x(i)——實測值,n=8。
計算得到波形頻率測量誤差的MSE為0.04Hz,符合一般測量的精度要求。
1)針對測控需求,確定了函數(shù)發(fā)生器的硬件和軟件設計方案。
2)采用單片機作為控制器,直接由軟件產(chǎn)生波形信號的輸出,可通過修改軟件,還可以輸出其他任意波形。
3)基于Proteus實現(xiàn)了波形發(fā)生器的仿真測試,并做了典型波形測量實驗,波形頻率測量精度MSE為0.04Hz。
后續(xù)工作中,擬采用集成可編程DDS器件實現(xiàn)直接頻率合成,在單片機的控制與協(xié)調下輸出頻率和相位可調的信號波形,提高頻率范圍。
[1] Tierney J.A digital frequency synthesizer[J].IEEE Transactions on Audio and Electroacoustics,1971(19):48-57.
[2] 王丹,李平,文玉梅,等.采用DDS頻率合成的虛擬信號發(fā)生器研究[J].傳感技術學報,2007,20(3):586-591.
[3] Marcello S, Arianna M, Stefano B, et al.High spectral purity digital direct synthesizer implementation by means of a fuzzy approximator[J].Applied Soft Computing,2004(4):241-257.
[4] 孫群,宋卿.基于DSS技術的波形發(fā)生器設計[J].儀表技術與傳感器,2009,45(4):67-70.
[5] 董亞男,馬俊,周泉,等.基于單片機的智能信號發(fā)生器設計與仿真[J].電子測量技術,2014,37(1):62-65.
[6] 孫勤江,沈彬.基于單片機的信號發(fā)生器設計[J].石油和化工設備,2014,17(1):19-22.
[7] 周登榮,周玉榮.一種任意波形信號發(fā)生器的實現(xiàn)方法[J].重慶師范大學學報:自然科學版,2014,31(1):84-88.
[8] 范海紹.零起點學Proteus單片機仿真技術[M].北京:機械工業(yè)出版社,2012:51-54.