張弛 黃昊翀 李子萱 高華 董愛(ài)國(guó)
摘 要:波形發(fā)生器是電子電路中常用的實(shí)驗(yàn)器材,目前市面上的波形發(fā)生器存在價(jià)格昂貴的問(wèn)題,本文基于AT89C51單片機(jī)開(kāi)發(fā)了一種低成本波形發(fā)生器,用簡(jiǎn)便的算法通過(guò)定時(shí)器實(shí)現(xiàn)了對(duì)波頻率的控制。通過(guò)中斷實(shí)現(xiàn)頻率的任意調(diào)節(jié),使用DAC0832集成芯片進(jìn)行數(shù)模轉(zhuǎn)換,最后可以實(shí)現(xiàn)三角波、正弦波、方波和鋸齒波的發(fā)生。能手動(dòng)切換波形,任意調(diào)節(jié)頻率,幅度可連續(xù)調(diào)節(jié),輸出波形清晰穩(wěn)定,波形延遲低,方法精簡(jiǎn),成本低廉,具有很好的實(shí)際應(yīng)用價(jià)值。
關(guān)鍵詞:?jiǎn)纹瑱C(jī)? 波形發(fā)生器? 定時(shí)器? 頻率調(diào)制
中圖分類號(hào):TM935? ? ? ? ? ? ? ? ? ? ? ? ? ?文獻(xiàn)標(biāo)識(shí)碼:A? ? ? ? ? ? ? ? ? ? 文章編號(hào):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ā)生器在電子電路、自動(dòng)控制系統(tǒng)中許多實(shí)驗(yàn)中有著不可或缺的作用,可以為電子測(cè)量提供所需求的電信號(hào),同時(shí)也普遍應(yīng)用于電學(xué)類專業(yè)課教學(xué)、測(cè)控、通訊等領(lǐng)域[1]。采用專用硬件方法產(chǎn)生的信號(hào)雖然分辨率高, 穩(wěn)定性好, 調(diào)整方便, 但價(jià)格昂貴[2]。本實(shí)驗(yàn)基于AT89C51單片機(jī)設(shè)計(jì)了一種簡(jiǎn)易波形發(fā)生器,結(jié)構(gòu)精簡(jiǎn),算法易懂,可滿足一般的信號(hào)發(fā)生且能夠調(diào)節(jié)所需頻率。相比于高精度的波形發(fā)生器更易實(shí)現(xiàn),能夠滿足普通實(shí)驗(yàn)的測(cè)量需要??勺鳛殡娮与娐泛碗娮釉O(shè)備的激勵(lì)信號(hào),提供電路所需的波形[3]。
1? 設(shè)計(jì)原理
本實(shí)驗(yàn)中的低成本波形發(fā)生器主要由時(shí)鐘模塊、按鍵掃描模塊、定時(shí)器模塊、數(shù)模轉(zhuǎn)換模塊和顯示模塊組成。單片機(jī)的內(nèi)部振蕩電路產(chǎn)生時(shí)鐘信號(hào),按鍵掃描模塊負(fù)責(zé)執(zhí)行來(lái)自鍵盤(pán)的選擇,讓波形發(fā)生器完成使用者的命令。定時(shí)器可以通過(guò)簡(jiǎn)便的算法完成頻率的發(fā)生,再經(jīng)由DAC0832集成芯片經(jīng)過(guò)數(shù)模轉(zhuǎn)換完成波形的輸出。同時(shí)將液晶顯示模塊與單片機(jī)相連,顯示當(dāng)前波形以及頻率。波形發(fā)生器原理功能圖如圖1所示。
2? 實(shí)驗(yàn)過(guò)程
實(shí)驗(yàn)過(guò)程分為上電復(fù)位、時(shí)鐘、按鍵掃描、定時(shí)器、數(shù)模轉(zhuǎn)換、顯示五個(gè)模塊,每個(gè)模塊對(duì)應(yīng)一定的功能,保證波形的正常輸出。圖2為本實(shí)驗(yàn)輸出波形的程序流程圖。
2.1 上電復(fù)位
本實(shí)驗(yàn)中的單片機(jī)采用上電復(fù)位的方式。單片機(jī)通電,電容兩端等同短路,RST(復(fù)位信號(hào)輸入端)引腳變?yōu)楦唠娖?,接著電容通過(guò)電源來(lái)充電。RST端電壓慢慢下降為低電平,單片機(jī)開(kāi)始工作。
2.2 時(shí)鐘模塊
AT89C51的時(shí)鐘信號(hào)可由內(nèi)部震蕩和外部震蕩兩種方式產(chǎn)生。本實(shí)驗(yàn)采用的是內(nèi)部振蕩電路,將XTAL1(外部晶振)和XTAL2的兩端連接兩個(gè)電容和一個(gè)晶振,組成時(shí)鐘電路,單片機(jī)的內(nèi)部振蕩器可以和電容及晶振組成一個(gè)高性能的時(shí)鐘信號(hào)源[4]。同時(shí)在電路中接入了電阻防止晶振被過(guò)度驅(qū)動(dòng)。本實(shí)驗(yàn)采用的AT89C51單片機(jī),晶振采用11.0592M,誤差更小,定時(shí)更精確。
2.3 按鍵掃描模塊
首先進(jìn)行按鍵掃描。按鍵一端接I/O口,另一端和電壓信號(hào)連接。觸電的連通和斷開(kāi)可引起引腳電壓的變化,通過(guò)判斷I/O口電平高低的變化即可確定按鍵是否按下[5]。本實(shí)驗(yàn)采用行列式鍵盤(pán),列線作為輸入行線作為輸出。同時(shí)設(shè)置了按鍵防抖功能,10ms后若電平狀態(tài)仍未改變則再執(zhí)行按鍵對(duì)應(yīng)的操作。結(jié)合外圍模塊完成鍵盤(pán)操作的讀取,控制LCD顯示及其他功能[6]。
2.4 定時(shí)器部分
設(shè)計(jì)時(shí)采用定時(shí)器工作方式一,先給定時(shí)器設(shè)置初值,TH1為定時(shí)器的高八位,TL1為定時(shí)器的低八位,共同構(gòu)成了十六位加一計(jì)數(shù)器。單片機(jī)在TR0(定時(shí)器0運(yùn)行控制位)置1后開(kāi)始計(jì)時(shí),經(jīng)過(guò)一個(gè)機(jī)器周期便輸出一個(gè)計(jì)數(shù)脈沖使定時(shí)器加一,十六進(jìn)制計(jì)數(shù)長(zhǎng)度為FFFFFF,即十進(jìn)制數(shù)65535,也就是說(shuō)65536之后再加一便會(huì)溢出,溢出后寄存器便會(huì)從零重新開(kāi)始計(jì)數(shù),溢出之后TF0(定時(shí)器0溢出標(biāo)志位)會(huì)置1。算法較為簡(jiǎn)便。
設(shè)時(shí)鐘周期為T(mén)1,時(shí)鐘頻率為f1,
(1)
機(jī)器周期為T(mén)2,晶振頻率為f2,則
T2=f2/12(2)
即每秒產(chǎn)生921600個(gè)機(jī)器周期。
設(shè)初值為T(mén)h,定時(shí)時(shí)間為T(mén),
Th=65536-T/T2(3)
由此便可設(shè)定定時(shí)器的初值并開(kāi)始計(jì)數(shù)。使用了中斷方式3,中斷源為T(mén)1,即定時(shí)器計(jì)數(shù)器1溢出中斷請(qǐng)求。溢出代表一個(gè)周期已結(jié)束,波形開(kāi)始下一個(gè)周期。圖3為定時(shí)器工作流程圖。
引腳P3.2、P3.3為單片機(jī)的中斷控制,本實(shí)驗(yàn)使用外部中斷INT1來(lái)控制輸出波形的頻率[7]。按下頻率增加或頻率減小之后,初始頻率將會(huì)隨之改變,預(yù)定的定時(shí)時(shí)間T也會(huì)隨之發(fā)生改變,即初值也會(huì)改變,所以波形的頻率也會(huì)隨著按鍵而立刻改變。通過(guò)外部中斷INT0設(shè)置每個(gè)波形對(duì)應(yīng)的按鍵,從而實(shí)現(xiàn)波形的切換。圖4為單片機(jī)的引腳圖。
2.5 數(shù)模轉(zhuǎn)換模塊
數(shù)模轉(zhuǎn)換模塊使用的是DAC0832,該數(shù)模轉(zhuǎn)換器轉(zhuǎn)換速率為1μs,精度為8位。采用單片機(jī)和 DAC0832 數(shù)模轉(zhuǎn)換器生成波形,由于是軟件濾波,所以可以有效的濾除高次諧波分量,生成的波形不失真[8]。單片機(jī)向0832發(fā)送數(shù)字代碼,產(chǎn)生不同的輸出[9]。首先利用采樣定理對(duì)每個(gè)波形進(jìn)行采樣,并對(duì)采樣值進(jìn)行編碼,將每個(gè)波形的數(shù)字量存儲(chǔ)在波形表中。當(dāng)程序執(zhí)行時(shí),它由表查找方法依次取出。經(jīng)過(guò)D/A轉(zhuǎn)換后,即可輸出得到波形。
如果由n個(gè)點(diǎn)構(gòu)成一個(gè)波形周期,DAC0832輸出n個(gè)采樣值點(diǎn)后,采樣值點(diǎn)會(huì)形成一個(gè)運(yùn)動(dòng)軌跡,這個(gè)運(yùn)動(dòng)軌跡就是周期。在第二及以后周期中重復(fù)N個(gè)點(diǎn)的輸出,形成連續(xù)的波形,正弦波正是由此產(chǎn)生。三角波通過(guò)累加產(chǎn)生上升沿,并判斷是否到達(dá)頂點(diǎn),到達(dá)頂點(diǎn)后通過(guò)累減產(chǎn)生三角波的下降沿,由此可得一個(gè)完整的三角波周期。同理,只累加并判斷是否達(dá)到頂點(diǎn),達(dá)到頂點(diǎn)后結(jié)束,得到一個(gè)周期的鋸齒波。方波在達(dá)到指定溢出次數(shù)后,將引腳的電平狀態(tài)取反即可。因?yàn)镈AC0832的輸出為電流輸出,在其后用運(yùn)算放大器可使其轉(zhuǎn)變?yōu)殡妷狠敵觥<瓷傻倪B續(xù)周期信號(hào)經(jīng)過(guò)數(shù)模轉(zhuǎn)換之后再經(jīng)由運(yùn)放電路放大,放大倍數(shù)的變換可以通過(guò)DA轉(zhuǎn)換器的數(shù)字端口來(lái)實(shí)現(xiàn)[10],最后輸出。
2.6 顯示模塊
為了更直觀地表示波的狀態(tài),本實(shí)驗(yàn)采用了LCD1602液晶顯示器來(lái)顯示如圖5所示。其中D0~D7引腳是8位雙向數(shù)據(jù)線[11]。RS引腳功能為寄存器選擇,低電平時(shí)選擇指令寄存器,高電平時(shí)選擇數(shù)據(jù)寄存器。RW為讀寫(xiě)信號(hào)線,低電平時(shí)執(zhí)行寫(xiě)操作,高電平時(shí)執(zhí)行讀操作。當(dāng)RS和RW同時(shí)為低電平時(shí)可寫(xiě)入指令或者顯示地址,當(dāng)RS為低電平RW為高電平時(shí)可讀信號(hào),當(dāng)RS為高電平RW為低電平時(shí)可以寫(xiě)入數(shù)據(jù)。E引腳為使能端,當(dāng)E由高電平變?yōu)榈碗娖綍r(shí),LCD執(zhí)行命令。通過(guò)對(duì)各引腳的控制實(shí)現(xiàn)顯示。如圖5所示,第一行為模式,第二行為當(dāng)前頻率。
3? 實(shí)驗(yàn)結(jié)果
通過(guò)在proteus軟件繪制原理圖并進(jìn)行仿真,運(yùn)用Keil軟件進(jìn)行程序的編寫(xiě),并將生成的hex文件導(dǎo)入,電路圖能夠正常運(yùn)行。接入示波器,正弦波、方波、三角波、鋸齒波均可正常發(fā)生,能夠在示波器上清晰地顯示波形。三角波、正弦波、鋸齒波的仿真結(jié)果分別如圖6、圖7、圖8所示。
通過(guò)按鍵控制,能夠敏捷地進(jìn)行波形的切換,切換速度快,具有低延遲的特點(diǎn)。改變發(fā)生波形的頻率,也能夠迅速反應(yīng),顯示準(zhǔn)確,精度為1Hz??烧{(diào)范圍在10Hz~500Hz。信號(hào)經(jīng)過(guò)運(yùn)放電路之后,幅度也可以進(jìn)行連續(xù)的調(diào)節(jié)?;就瓿深A(yù)定功能。為了使結(jié)果更加明顯,本文選擇了正弦波200Hz、300Hz、400Hz時(shí)的仿真結(jié)果,分別如圖9、圖10、圖11所示。
4? 結(jié)語(yǔ)
本實(shí)驗(yàn)完成了簡(jiǎn)易波形發(fā)生器的制作,這款基于AT89C51單片機(jī)的波形發(fā)生器能夠發(fā)生三角波、正弦波、鋸齒波這些常用的信號(hào),并能根據(jù)需求快速切換波形、改變頻率。經(jīng)過(guò)實(shí)驗(yàn)調(diào)試,該波形發(fā)生器可以成功運(yùn)行。AT89C51單片機(jī)具有操作方便、成本低廉、維護(hù)簡(jiǎn)易等優(yōu)點(diǎn),是良好的使用器材[12]。本實(shí)驗(yàn)算法簡(jiǎn)便、易于使用,具有很高的性價(jià)比。可以應(yīng)用于實(shí)驗(yàn)中,但仍有改進(jìn)之處??稍O(shè)計(jì)能夠發(fā)生較高頻率的信號(hào),功能可更為廣泛等?,F(xiàn)代科技的發(fā)展也對(duì)信號(hào)發(fā)生器提出了越來(lái)越高的要求,需要不斷地在現(xiàn)有基礎(chǔ)上加以改進(jìn)和提高[13]。隨著物聯(lián)網(wǎng)時(shí)代的到來(lái),單片機(jī)的前景也越來(lái)越廣闊,應(yīng)充分挖掘單片機(jī)的功能并投入到實(shí)踐中去。
參考文獻(xiàn)
[1] 陳林林,孫群,高雅楠.基于單片機(jī)的波形信號(hào)發(fā)生器設(shè)計(jì)與仿真[J].中國(guó)測(cè)試,2014,40(z1):22-27.
[2] 崔赟,孫志毅,謝嘉麟.基于STC89C52單片機(jī)信號(hào)發(fā)生器的設(shè)計(jì)[J].工業(yè)控制計(jì)算機(jī),2019,32(6):127-128,130.
[3] 郭占苗.基于STC15F2K60S2單片機(jī)波形發(fā)生器設(shè)計(jì)[J].國(guó)外電子測(cè)量技術(shù),2017,36(7):98-102.
[4] 謝增忠.基于單片機(jī)的波形發(fā)生器的硬件設(shè)計(jì)[J].數(shù)字化用戶,2013(3):26-29.
[5] 鮑俊莉.基于單片機(jī)的波形發(fā)生器設(shè)計(jì)[J].科學(xué)技術(shù)創(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單片機(jī)C語(yǔ)言教程[M].北京:電子工業(yè)出版社,2009.
[8] 張新.基于單片機(jī)的信號(hào)發(fā)生器設(shè)計(jì)系統(tǒng)[D].吉林:東北師范大學(xué),2011.
[9] 樊明龍,倪永宏.基于數(shù)/模變換技術(shù)的多種波形發(fā)生器[J].微電子技術(shù),2003,31(1):60-61.
[10] 馬文英.三角波信號(hào)發(fā)生器的設(shè)計(jì)[J].科技與創(chuàng)新,2019(20):130-131.
[11] 洪惠宇.基于單片機(jī)的簡(jiǎn)易波形發(fā)生器電路的設(shè)計(jì)[J].南京工程學(xué)院學(xué)報(bào) ,2012,10(4):67-72.
[12] 梁一坤,孫妍.基于AT89C51單片機(jī)的波形發(fā)生器設(shè)計(jì)[J].湖北機(jī)農(nóng)化,2019(14):121-122.
[13] 陳冠元,陳澤宗.可變頻的任意波形發(fā)生器設(shè)計(jì)[J].科學(xué)技術(shù)與工程,2017,17(3):236-239.
科技創(chuàng)新導(dǎo)報(bào)2021年4期