基于单片机的波形信号发生器设计与仿真
2014-12-17陈林林高雅楠
陈林林,孙 群,高雅楠
(聊城大学机械与汽车工程学院,山东 聊城 252059)
0 引 言
波形信号发生器是一种数据信号发生器,广泛应用于通信、测控、导航、雷达、医疗等领域,在高校实验室中应用也十分普遍。基于单片机的简易波形信号发生器是一种常用的信号源,它广泛用在电子技术实验、自动控制系统和其他科研领域。目前,简易波形发生器的构成方法有很多,例如采用DDS型的任意波发生器[1-4]、采用专用的信号发生芯片MAX038以及传统的AWG[5-7]。
本文在分析现有信号发生器工作原理的基础上,通过分析比较后,基于单片机AT89C52和DAC0832设计了一种信号发生器,应用于高校实验室学生实验,具有硬件简单,价格低廉容易对频率和幅值进行控制等优点。
1 测控需求分析
设计的波形发生器的测控需求如下:
1)利用单片机程序,产生数字式的正弦波、三角波、方波频率可调的信号。
波形要求:
正弦波:输出电压值为-5V~5V,初始频率为10Hz,频率最大值为1 000 Hz,频率调节步进值为10Hz。
三角波:输出电压为-5V~5V,初始频率为50Hz,频率最大值为500Hz,频率调节步进值为50Hz。
方波:输出电压为-5V~5V,初始频率为200Hz,频率最大值为2kHz,频率调节步进值为200Hz。
2)可通过键盘进行波形和频率的切换。
3)通过LCD显示波形类型及频率大小。
4)设计硬件电路,选择合适的器件,调节好器件的工作状态,保证能输出明显的波形信号,且不失真。
2 系统总体设计
2.1 系统总体设计方案
在系统总体设计时分块完成,按照波形设定、D/A转换、51单片机连接、键盘控制和显示5个模块来设计。最后通过联调仿真,得出仿真结果。总体设计框图如图1所示。
图1 系统总体设计框图
2.2 系统模块设计
2.2.1 控制模块
用单片AT89C52作为系统的主控核心。具有体积小,使用灵活,易于人机对话,数据处理良好,单指令周期和35M高速运算等优点,且单片机功耗低,价格低廉。
在此系统中,采用单片机作为控制比采用FPGA实现更简便。基于综合性价比,确定选择此方案。
2.2.2 按键及其显示模块
为了提高单片机的资源利用率和运行效率,按键显示部分直接使用zlg7289扩展键盘,键盘与单片机连接。zlg7289芯片与单片机之间通信方便,而且由zlg7289对键盘进行自动扫描,可以去抖动,充分地提高了单片机的工作效率。
2.2.3 波形产生模块
使用单片机的定时器设置定时时间,每半个周期对I/O口取反一次,从而实现频率输出。这种方案虽然在高频频段误差比较大,但是编程简单易控制,因此,确定选择此方案。
2.2.4 D/A转换
单片输出的是数字信号,必须通过D/A转换后才能模拟信号,采用DAC0832,这是8位的并行D/A转换器,转换速度快。
3 系统硬件设计
3.1 单片机控制DAC0832电路
AT89C52单片机的内部结构与MCS-51系列单片机的构成基本相同。正常情况下DAC0832与单片机的接口应为4条数据线。当DAC0832未工作时其CS输入端应为高电平,此时芯片禁用,CLK和DO/DI的电平可任意。当要进行A/D转换时,须先将CS使能端置于低电平并且保持低电平直到转换完全结束。此时芯片开始转换工作,同时由处理器向芯片时钟输入端CLK输入时钟脉冲,DO/DI端则使用DI端输入通道功能选择的数据信号。在第1个时钟脉冲的下沉之前DI端必须是高电平,表示启始信号。在第2、3个脉冲下沉之前DI端应输入2位数据用于选择通道功能。
3.2 按键电路
按键原理图如2所示,对于中断方式对波形的切换,因为INT0优先于INT1,当按键按下时,首先判断是否有幅值输出然后判断出现相应波形,当无中断0时,即默认第二个DA转换器的参考电压为5V,在执行中断1判断出相应的波形。第1个按键进行波形选择,选择各波形的初始频率;第2个按键对频率进行升高;第3个按键对频率进行降低;第4个按键输出波形。
图2 按键电路图
3.3 数、模转换及放大电路
由于单片机输出的是数字信号,要得到模拟信号的波形就必须对其进行数模转换,采用DAC0832数模转换器。由于其输出为电流输出,因为外加运算放大器使之装换为电压输出。通过DI7~DI0与单片机P0端口相连接;CS与单片机P2.0端口相连接;WR2与单片机P2.1端口相连接。
3.4 显示电路
图3 D/A转换电路
图4 显示电路
通过液晶1602显示输出的波形、频率,其电路图如图3~图6所示。其中D0~D7与单片机P1端口相连接;RS与单片机P2.2端口相连接;RW与单片机P2.3端口相连接;E与单片机P2.4端口相连接。
4 系统软件设计
4.1 波形程序设计
4.1.1 正弦波设计
假设 Y=128SIN(360X/255/360×2×3.14)+128 的正弦波,DAC0832数据端口给的数据的范围是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进制数。
4.1.2 三角波程序设计
当电压随时间线性增加,到一定时间又线性降低时,就形成了三角波。单片机可以输出的数最小为0,最大为255。当输出的值从00000000B线性增加到11111111B,然后从11111111B减小到00000000B时,就可以产生三角波。本文共采集了65个三角波坐标。
4.1.3 方波程序设计
当单片机输出从00000000B直接增加到11111111B时,输出的电压就从低电平变到高电平了,用延时程序是高低电平保持一段时间在切换。由此,产生方波只需要取2个值,0x00和0XFF。
4.2 频率改变与波形输出程序
频率改变与波形输出程序框图如图5和图6所示。
图5 频率改变程序流程图
图6 波形输出程序流程图
4.3 频率程序设计
采用定时器来控制波形频率,通过输出的两点间的延时来实现调频功能。当晶振频率为24M时,单片机的机器周期为0.5μs。假设需要10Hz的正弦波,由于正弦波的取点个数为256个,所以每个点所要的时间为1/10/256s,选用定时/计数器T0的方式1实现,设计数器初值为X:
表1 正弦波频率初值
表2 三角波频率初值
表3 方波频率初值
图7 三角波仿真实验图
表1为正弦波频率初值,表2为三角波频率初值,表3为方波频率初值。
4.4 键盘程序设计
本文键盘部分由4个键组成,分别控制波形的选择、频率的升、降以及波形输出。P3.2为中断入口地址,当P3.2=0时,说明有键按下。取P3口的值和0Xf0相遇,取出P3口的高4位,最后使用swatch(),当P3&0xf0=0xe0时,波形选择键按下;当P3&0xf0=0xd0时,频率升键按下;当P3&0xf0=0xb0时,频率衰减键按下。
4.5 键盘程序设计
1602字符型LCD通常有14条引脚线或16条引脚线,LCD显示流程为初始化LCD,设置显示位置,最后显示字符。
图8 方波仿真实验图
5 仿真实验
将各部分的程序及各子程序编好,使用Keil进行编译,加载到Proteus软件电路中进行仿真[8]。
5.1 三角波仿真对比图
图7为频率在50,200,400Hz条件下的三角波仿真图。
5.2 方波仿真对比图
图8为频率在200,600,1 200 Hz条件下的方波仿真图。
5.3 正弦波仿真对比图
图9为频率在10,40,80Hz条件下的正弦波波仿真图。
图9 正弦波仿真实验图
表4 测量实验结果
图10 示波器测量的波形图
6 波形实验
调试好软硬件后,利用北京普源精工生产的DS1102示波器测量波形质量,方波、三角波和正弦波波形如图10所示。
在周期T-8T下对频率的测试结果如表4所示。
误差指标选用最小均方差(mean squared error,MSE),定义如下:
式中:(i)——理论值;
x(i)——实测值,n=8。
计算得到波形频率测量误差的MSE为0.04Hz,符合一般测量的精度要求。
7 结束语
1)针对测控需求,确定了函数发生器的硬件和软件设计方案。
2)采用单片机作为控制器,直接由软件产生波形信号的输出,可通过修改软件,还可以输出其他任意波形。
3)基于Proteus实现了波形发生器的仿真测试,并做了典型波形测量实验,波形频率测量精度MSE为0.04Hz。
后续工作中,拟采用集成可编程DDS器件实现直接频率合成,在单片机的控制与协调下输出频率和相位可调的信号波形,提高频率范围。
[1] Tierney J.A digital frequency synthesizer[J].IEEE Transactions on Audio and Electroacoustics,1971(19):48-57.
[2] 王丹,李平,文玉梅,等.采用DDS频率合成的虚拟信号发生器研究[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技术的波形发生器设计[J].仪表技术与传感器,2009,45(4):67-70.
[5] 董亚男,马俊,周泉,等.基于单片机的智能信号发生器设计与仿真[J].电子测量技术,2014,37(1):62-65.
[6] 孙勤江,沈彬.基于单片机的信号发生器设计[J].石油和化工设备,2014,17(1):19-22.
[7] 周登荣,周玉荣.一种任意波形信号发生器的实现方法[J].重庆师范大学学报:自然科学版,2014,31(1):84-88.
[8] 范海绍.零起点学Proteus单片机仿真技术[M].北京:机械工业出版社,2012:51-54.