张弛 黄昊翀 李子萱 高华 董爱国
摘 要:波形发生器是电子电路中常用的实验器材,目前市面上的波形发生器存在价格昂贵的问题,本文基于AT89C51单片机开发了一种低成本波形发生器,用简便的算法通过定时器实现了对波频率的控制。通过中断实现频率的任意调节,使用DAC0832集成芯片进行数模转换,最后可以实现三角波、正弦波、方波和锯齿波的发生。能手动切换波形,任意调节频率,幅度可连续调节,输出波形清晰稳定,波形延迟低,方法精简,成本低廉,具有很好的实际应用价值。
关键词:单片机 波形发生器 定时器 频率调制
中图分类号: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
波形發生器在电子电路、自动控制系统中许多实验中有着不可或缺的作用,可以为电子测量提供所需求的电信号,同时也普遍应用于电学类专业课教学、测控、通讯等领域[1]。采用专用硬件方法产生的信号虽然分辨率高, 稳定性好, 调整方便, 但价格昂贵[2]。本实验基于AT89C51单片机设计了一种简易波形发生器,结构精简,算法易懂,可满足一般的信号发生且能够调节所需频率。相比于高精度的波形发生器更易实现,能够满足普通实验的测量需要。可作为电子电路和电子设备的激励信号,提供电路所需的波形[3]。
1 设计原理
本实验中的低成本波形发生器主要由时钟模块、按键扫描模块、定时器模块、数模转换模块和显示模块组成。单片机的内部振荡电路产生时钟信号,按键扫描模块负责执行来自键盘的选择,让波形发生器完成使用者的命令。定时器可以通过简便的算法完成频率的发生,再经由DAC0832集成芯片经过数模转换完成波形的输出。同时将液晶显示模块与单片机相连,显示当前波形以及频率。波形发生器原理功能图如图1所示。
2 实验过程
实验过程分为上电复位、时钟、按键扫描、定时器、数模转换、显示五个模块,每个模块对应一定的功能,保证波形的正常输出。图2为本实验输出波形的程序流程图。
2.1 上电复位
本实验中的单片机采用上电复位的方式。单片机通电,电容两端等同短路,RST(复位信号输入端)引脚变为高电平,接着电容通过电源来充电。RST端电压慢慢下降为低电平,单片机开始工作。
2.2 时钟模块
AT89C51的时钟信号可由内部震荡和外部震荡两种方式产生。本实验采用的是内部振荡电路,将XTAL1(外部晶振)和XTAL2的两端连接两个电容和一个晶振,组成时钟电路,单片机的内部振荡器可以和电容及晶振组成一个高性能的时钟信号源[4]。同时在电路中接入了电阻防止晶振被过度驱动。本实验采用的AT89C51单片机,晶振采用11.0592M,误差更小,定时更精确。
2.3 按键扫描模块
首先进行按键扫描。按键一端接I/O口,另一端和电压信号连接。触电的连通和断开可引起引脚电压的变化,通过判断I/O口电平高低的变化即可确定按键是否按下[5]。本实验采用行列式键盘,列线作为输入行线作为输出。同时设置了按键防抖功能,10ms后若电平状态仍未改变则再执行按键对应的操作。结合外围模块完成键盘操作的读取,控制LCD显示及其他功能[6]。
2.4 定时器部分
设计时采用定时器工作方式一,先给定时器设置初值,TH1为定时器的高八位,TL1为定时器的低八位,共同构成了十六位加一计数器。单片机在TR0(定时器0运行控制位)置1后开始计时,经过一个机器周期便输出一个计数脉冲使定时器加一,十六进制计数长度为FFFFFF,即十进制数65535,也就是说65536之后再加一便会溢出,溢出后寄存器便会从零重新开始计数,溢出之后TF0(定时器0溢出标志位)会置1。算法较为简便。
设时钟周期为T1,时钟频率为f1,
(1)
机器周期为T2,晶振频率为f2,则
T2=f2/12(2)
即每秒产生921600个机器周期。
设初值为Th,定时时间为T,
Th=65536-T/T2(3)
由此便可设定定时器的初值并开始计数。使用了中断方式3,中断源为T1,即定时器计数器1溢出中断请求。溢出代表一个周期已结束,波形开始下一个周期。图3为定时器工作流程图。
引脚P3.2、P3.3为单片机的中断控制,本实验使用外部中断INT1来控制输出波形的频率[7]。按下频率增加或频率减小之后,初始频率将会随之改变,预定的定时时間T也会随之发生改变,即初值也会改变,所以波形的频率也会随着按键而立刻改变。通过外部中断INT0设置每个波形对应的按键,从而实现波形的切换。图4为单片机的引脚图。
2.5 数模转换模块
数模转换模块使用的是DAC0832,该数模转换器转换速率为1μs,精度为8位。采用单片机和 DAC0832 数模转换器生成波形,由于是软件滤波,所以可以有效的滤除高次谐波分量,生成的波形不失真[8]。单片机向0832发送数字代码,产生不同的输出[9]。首先利用采样定理对每个波形进行采样,并对采样值进行编码,将每个波形的数字量存储在波形表中。当程序执行时,它由表查找方法依次取出。经过D/A转换后,即可输出得到波形。
如果由n个点构成一个波形周期,DAC0832输出n个采样值点后,采样值点会形成一个运动轨迹,这个运动轨迹就是周期。在第二及以后周期中重复N个点的输出,形成连续的波形,正弦波正是由此产生。三角波通过累加产生上升沿,并判断是否到达顶点,到达顶点后通过累减产生三角波的下降沿,由此可得一个完整的三角波周期。同理,只累加并判断是否达到顶点,达到顶点后结束,得到一个周期的锯齿波。方波在达到指定溢出次数后,将引脚的电平状态取反即可。因为DAC0832的输出为电流输出,在其后用运算放大器可使其转变为电压输出。即生成的连续周期信号经过数模转换之后再经由运放电路放大,放大倍数的变换可以通过DA转换器的数字端口来实现[10],最后输出。
2.6 显示模块
为了更直观地表示波的状态,本实验采用了LCD1602液晶显示器来显示如图5所示。其中D0~D7引脚是8位双向数据线[11]。RS引脚功能为寄存器选择,低电平时选择指令寄存器,高电平时选择数据寄存器。RW为读写信号线,低电平时执行写操作,高电平时执行读操作。当RS和RW同时为低电平时可写入指令或者显示地址,当RS为低电平RW为高电平时可读信号,当RS为高电平RW为低电平时可以写入数据。E引脚为使能端,当E由高电平变为低电平时,LCD执行命令。通过对各引脚的控制实现显示。如图5所示,第一行为模式,第二行为当前频率。
3 实验结果
通过在proteus软件绘制原理图并进行仿真,运用Keil软件进行程序的编写,并将生成的hex文件导入,电路图能够正常运行。接入示波器,正弦波、方波、三角波、锯齿波均可正常发生,能够在示波器上清晰地显示波形。三角波、正弦波、锯齿波的仿真结果分别如图6、图7、图8所示。
通过按键控制,能够敏捷地进行波形的切换,切换速度快,具有低延迟的特点。改变发生波形的频率,也能够迅速反应,显示准确,精度为1Hz。可调范围在10Hz~500Hz。信号经过运放电路之后,幅度也可以进行连续的调节。基本完成预定功能。为了使结果更加明显,本文选择了正弦波200Hz、300Hz、400Hz时的仿真结果,分别如图9、图10、图11所示。
4 结语
本实验完成了简易波形发生器的制作,这款基于AT89C51单片机的波形发生器能够发生三角波、正弦波、锯齿波这些常用的信号,并能根据需求快速切换波形、改变频率。经过实验调试,该波形发生器可以成功运行。AT89C51单片机具有操作方便、成本低廉、维护简易等优点,是良好的使用器材[12]。本实验算法简便、易于使用,具有很高的性价比。可以应用于实验中,但仍有改进之处。可设计能够发生较高频率的信号,功能可更为广泛等。现代科技的发展也对信号发生器提出了越来越高的要求,需要不断地在现有基础上加以改进和提高[13]。随着物联网时代的到来,单片机的前景也越来越广阔,应充分挖掘单片机的功能并投入到实践中去。
参考文献
[1] 陈林林,孙群,高雅楠.基于单片机的波形信号发生器设计与仿真[J].中国测试,2014,40(z1):22-27.
[2] 崔赟,孙志毅,谢嘉麟.基于STC89C52单片机信号发生器的设计[J].工业控制计算机,2019,32(6):127-128,130.
[3] 郭占苗.基于STC15F2K60S2单片机波形发生器设计[J].国外电子测量技术,2017,36(7):98-102.
[4] 谢增忠.基于单片机的波形发生器的硬件设计[J].数字化用户,2013(3):26-29.
[5] 鲍俊莉.基于单片机的波形发生器设计[J].科学技术创新,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].北京:电子工业出版社,2009.
[8] 张新.基于单片机的信号发生器设计系统[D].吉林:东北师范大学,2011.
[9] 樊明龙,倪永宏.基于数/模变换技术的多种波形发生器[J].微电子技术,2003,31(1):60-61.
[10] 马文英.三角波信号发生器的设计[J].科技与创新,2019(20):130-131.
[11] 洪惠宇.基于单片机的简易波形发生器电路的设计[J].南京工程学院学报 ,2012,10(4):67-72.
[12] 梁一坤,孙妍.基于AT89C51单片机的波形发生器设计[J].湖北机农化,2019(14):121-122.
[13] 陈冠元,陈泽宗.可变频的任意波形发生器设计[J].科学技术与工程,2017,17(3):236-239.