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