張弛 黃昊翀 李子萱 高華 董愛國
摘 要:波形發(fā)生器是電子電路中常用的實驗器材,目前市面上的波形發(fā)生器存在價格昂貴的問題,本文基于AT89C51單片機開發(fā)了一種低成本波形發(fā)生器,用簡便的算法通過定時器實現(xiàn)了對波頻率的控制。通過中斷實現(xiàn)頻率的任意調(diào)節(jié),使用DAC0832集成芯片進行數(shù)模轉(zhuǎn)換,最后可以實現(xiàn)三角波、正弦波、方波和鋸齒波的發(fā)生。能手動切換波形,任意調(diào)節(jié)頻率,幅度可連續(xù)調(diào)節(jié),輸出波形清晰穩(wěn)定,波形延遲低,方法精簡,成本低廉,具有很好的實際應用價值。
關鍵詞:單片機? 波形發(fā)生器? 定時器? 頻率調(diào)制
中圖分類號:TM935? ? ? ? ? ? ? ? ? ? ? ? ? ?文獻標識碼:A? ? ? ? ? ? ? ? ? ? 文章編號:1674-098X(2021)02(a)-0043-06
Waveform Generator Based on MCU
ZHANG Chi? HUANG Haochong? LI Zixuan? GAO Hua? DONG Aiguo
(China University of Geosciences, Beijing, 100083 China)
Abstract: Waveform generator is an electronic circuit which is commonly used in the experimental equipment. The current waveform generator on the market is expensive. In this paper, a low-cost waveform generator is developed based on the AT89C51 MCU. A simple algorithm works with the timer to achieve control of the wave frequency. By interrupting frequency adjusted and the use of analog-to-digital conversion DAC0832 integrated chips can finally realize the triangle wave, sine wave, square wave, and sawtooth wave. It can manually switch waveforms at the same time, adjusted the frequency, amplitude of continuous adjustment, the output waveform is stable, clear waveform low latency. The method has good practical application value with compact and low cost.
Key Words: MCU; Waveform generator; Timer; Frequency modulation
波形發(fā)生器在電子電路、自動控制系統(tǒng)中許多實驗中有著不可或缺的作用,可以為電子測量提供所需求的電信號,同時也普遍應用于電學類專業(yè)課教學、測控、通訊等領域[1]。采用專用硬件方法產(chǎn)生的信號雖然分辨率高, 穩(wěn)定性好, 調(diào)整方便, 但價格昂貴[2]。本實驗基于AT89C51單片機設計了一種簡易波形發(fā)生器,結構精簡,算法易懂,可滿足一般的信號發(fā)生且能夠調(diào)節(jié)所需頻率。相比于高精度的波形發(fā)生器更易實現(xiàn),能夠滿足普通實驗的測量需要??勺鳛殡娮与娐泛碗娮釉O備的激勵信號,提供電路所需的波形[3]。
1? 設計原理
本實驗中的低成本波形發(fā)生器主要由時鐘模塊、按鍵掃描模塊、定時器模塊、數(shù)模轉(zhuǎn)換模塊和顯示模塊組成。單片機的內(nèi)部振蕩電路產(chǎn)生時鐘信號,按鍵掃描模塊負責執(zhí)行來自鍵盤的選擇,讓波形發(fā)生器完成使用者的命令。定時器可以通過簡便的算法完成頻率的發(fā)生,再經(jīng)由DAC0832集成芯片經(jīng)過數(shù)模轉(zhuǎn)換完成波形的輸出。同時將液晶顯示模塊與單片機相連,顯示當前波形以及頻率。波形發(fā)生器原理功能圖如圖1所示。
2? 實驗過程
實驗過程分為上電復位、時鐘、按鍵掃描、定時器、數(shù)模轉(zhuǎn)換、顯示五個模塊,每個模塊對應一定的功能,保證波形的正常輸出。圖2為本實驗輸出波形的程序流程圖。
2.1 上電復位
本實驗中的單片機采用上電復位的方式。單片機通電,電容兩端等同短路,RST(復位信號輸入端)引腳變?yōu)楦唠娖?,接著電容通過電源來充電。RST端電壓慢慢下降為低電平,單片機開始工作。
2.2 時鐘模塊
AT89C51的時鐘信號可由內(nèi)部震蕩和外部震蕩兩種方式產(chǎn)生。本實驗采用的是內(nèi)部振蕩電路,將XTAL1(外部晶振)和XTAL2的兩端連接兩個電容和一個晶振,組成時鐘電路,單片機的內(nèi)部振蕩器可以和電容及晶振組成一個高性能的時鐘信號源[4]。同時在電路中接入了電阻防止晶振被過度驅(qū)動。本實驗采用的AT89C51單片機,晶振采用11.0592M,誤差更小,定時更精確。
2.3 按鍵掃描模塊
首先進行按鍵掃描。按鍵一端接I/O口,另一端和電壓信號連接。觸電的連通和斷開可引起引腳電壓的變化,通過判斷I/O口電平高低的變化即可確定按鍵是否按下[5]。本實驗采用行列式鍵盤,列線作為輸入行線作為輸出。同時設置了按鍵防抖功能,10ms后若電平狀態(tài)仍未改變則再執(zhí)行按鍵對應的操作。結合外圍模塊完成鍵盤操作的讀取,控制LCD顯示及其他功能[6]。
2.4 定時器部分
設計時采用定時器工作方式一,先給定時器設置初值,TH1為定時器的高八位,TL1為定時器的低八位,共同構成了十六位加一計數(shù)器。單片機在TR0(定時器0運行控制位)置1后開始計時,經(jīng)過一個機器周期便輸出一個計數(shù)脈沖使定時器加一,十六進制計數(shù)長度為FFFFFF,即十進制數(shù)65535,也就是說65536之后再加一便會溢出,溢出后寄存器便會從零重新開始計數(shù),溢出之后TF0(定時器0溢出標志位)會置1。算法較為簡便。
設時鐘周期為T1,時鐘頻率為f1,
(1)
機器周期為T2,晶振頻率為f2,則
T2=f2/12(2)
即每秒產(chǎn)生921600個機器周期。
設初值為Th,定時時間為T,
Th=65536-T/T2(3)
由此便可設定定時器的初值并開始計數(shù)。使用了中斷方式3,中斷源為T1,即定時器計數(shù)器1溢出中斷請求。溢出代表一個周期已結束,波形開始下一個周期。圖3為定時器工作流程圖。
引腳P3.2、P3.3為單片機的中斷控制,本實驗使用外部中斷INT1來控制輸出波形的頻率[7]。按下頻率增加或頻率減小之后,初始頻率將會隨之改變,預定的定時時間T也會隨之發(fā)生改變,即初值也會改變,所以波形的頻率也會隨著按鍵而立刻改變。通過外部中斷INT0設置每個波形對應的按鍵,從而實現(xiàn)波形的切換。圖4為單片機的引腳圖。
2.5 數(shù)模轉(zhuǎn)換模塊
數(shù)模轉(zhuǎn)換模塊使用的是DAC0832,該數(shù)模轉(zhuǎn)換器轉(zhuǎn)換速率為1μs,精度為8位。采用單片機和 DAC0832 數(shù)模轉(zhuǎn)換器生成波形,由于是軟件濾波,所以可以有效的濾除高次諧波分量,生成的波形不失真[8]。單片機向0832發(fā)送數(shù)字代碼,產(chǎn)生不同的輸出[9]。首先利用采樣定理對每個波形進行采樣,并對采樣值進行編碼,將每個波形的數(shù)字量存儲在波形表中。當程序執(zhí)行時,它由表查找方法依次取出。經(jīng)過D/A轉(zhuǎn)換后,即可輸出得到波形。
如果由n個點構成一個波形周期,DAC0832輸出n個采樣值點后,采樣值點會形成一個運動軌跡,這個運動軌跡就是周期。在第二及以后周期中重復N個點的輸出,形成連續(xù)的波形,正弦波正是由此產(chǎn)生。三角波通過累加產(chǎn)生上升沿,并判斷是否到達頂點,到達頂點后通過累減產(chǎn)生三角波的下降沿,由此可得一個完整的三角波周期。同理,只累加并判斷是否達到頂點,達到頂點后結束,得到一個周期的鋸齒波。方波在達到指定溢出次數(shù)后,將引腳的電平狀態(tài)取反即可。因為DAC0832的輸出為電流輸出,在其后用運算放大器可使其轉(zhuǎn)變?yōu)殡妷狠敵觥<瓷傻倪B續(xù)周期信號經(jīng)過數(shù)模轉(zhuǎn)換之后再經(jīng)由運放電路放大,放大倍數(shù)的變換可以通過DA轉(zhuǎn)換器的數(shù)字端口來實現(xiàn)[10],最后輸出。
2.6 顯示模塊
為了更直觀地表示波的狀態(tài),本實驗采用了LCD1602液晶顯示器來顯示如圖5所示。其中D0~D7引腳是8位雙向數(shù)據(jù)線[11]。RS引腳功能為寄存器選擇,低電平時選擇指令寄存器,高電平時選擇數(shù)據(jù)寄存器。RW為讀寫信號線,低電平時執(zhí)行寫操作,高電平時執(zhí)行讀操作。當RS和RW同時為低電平時可寫入指令或者顯示地址,當RS為低電平RW為高電平時可讀信號,當RS為高電平RW為低電平時可以寫入數(shù)據(jù)。E引腳為使能端,當E由高電平變?yōu)榈碗娖綍r,LCD執(zhí)行命令。通過對各引腳的控制實現(xiàn)顯示。如圖5所示,第一行為模式,第二行為當前頻率。
3? 實驗結果
通過在proteus軟件繪制原理圖并進行仿真,運用Keil軟件進行程序的編寫,并將生成的hex文件導入,電路圖能夠正常運行。接入示波器,正弦波、方波、三角波、鋸齒波均可正常發(fā)生,能夠在示波器上清晰地顯示波形。三角波、正弦波、鋸齒波的仿真結果分別如圖6、圖7、圖8所示。
通過按鍵控制,能夠敏捷地進行波形的切換,切換速度快,具有低延遲的特點。改變發(fā)生波形的頻率,也能夠迅速反應,顯示準確,精度為1Hz。可調(diào)范圍在10Hz~500Hz。信號經(jīng)過運放電路之后,幅度也可以進行連續(xù)的調(diào)節(jié)?;就瓿深A定功能。為了使結果更加明顯,本文選擇了正弦波200Hz、300Hz、400Hz時的仿真結果,分別如圖9、圖10、圖11所示。
4? 結語
本實驗完成了簡易波形發(fā)生器的制作,這款基于AT89C51單片機的波形發(fā)生器能夠發(fā)生三角波、正弦波、鋸齒波這些常用的信號,并能根據(jù)需求快速切換波形、改變頻率。經(jīng)過實驗調(diào)試,該波形發(fā)生器可以成功運行。AT89C51單片機具有操作方便、成本低廉、維護簡易等優(yōu)點,是良好的使用器材[12]。本實驗算法簡便、易于使用,具有很高的性價比??梢詰糜趯嶒炛?,但仍有改進之處。可設計能夠發(fā)生較高頻率的信號,功能可更為廣泛等?,F(xiàn)代科技的發(fā)展也對信號發(fā)生器提出了越來越高的要求,需要不斷地在現(xiàn)有基礎上加以改進和提高[13]。隨著物聯(lián)網(wǎng)時代的到來,單片機的前景也越來越廣闊,應充分挖掘單片機的功能并投入到實踐中去。
參考文獻
[1] 陳林林,孫群,高雅楠.基于單片機的波形信號發(fā)生器設計與仿真[J].中國測試,2014,40(z1):22-27.
[2] 崔赟,孫志毅,謝嘉麟.基于STC89C52單片機信號發(fā)生器的設計[J].工業(yè)控制計算機,2019,32(6):127-128,130.
[3] 郭占苗.基于STC15F2K60S2單片機波形發(fā)生器設計[J].國外電子測量技術,2017,36(7):98-102.
[4] 謝增忠.基于單片機的波形發(fā)生器的硬件設計[J].數(shù)字化用戶,2013(3):26-29.
[5] 鮑俊莉.基于單片機的波形發(fā)生器設計[J].科學技術創(chuàng)新,2018(24):10-12.
[6] Meimei Lv,Bin Zhang,Mengnan Li,Dapeng Shen. Journal of Physics: Conference Series,2020,1544,012107.
[7] 郭天祥.新概念51單片機C語言教程[M].北京:電子工業(yè)出版社,2009.
[8] 張新.基于單片機的信號發(fā)生器設計系統(tǒng)[D].吉林:東北師范大學,2011.
[9] 樊明龍,倪永宏.基于數(shù)/模變換技術的多種波形發(fā)生器[J].微電子技術,2003,31(1):60-61.
[10] 馬文英.三角波信號發(fā)生器的設計[J].科技與創(chuàng)新,2019(20):130-131.
[11] 洪惠宇.基于單片機的簡易波形發(fā)生器電路的設計[J].南京工程學院學報 ,2012,10(4):67-72.
[12] 梁一坤,孫妍.基于AT89C51單片機的波形發(fā)生器設計[J].湖北機農(nóng)化,2019(14):121-122.
[13] 陳冠元,陳澤宗.可變頻的任意波形發(fā)生器設計[J].科學技術與工程,2017,17(3):236-239.