基于AT89C52单片机的函数发生器的实验总结
1.组成概述与框图
主控部分使用STC89C52单片机进行控制。
人机交互部分使用一个纽扣按键和一个拨码开关。
数据处理部分使用由DAC0832组成的数模转换电路。
信号预处理部分使用有LM358组成的运放电路。
2.软件设计流程
3.波形产生方案:
(1)查表法输出波形
根据波形波表产生器产生8位位宽,128个采样点的数据,存放在单片机的数据存储器中,在中断程序中直接输出相应地址的数据到DAC模块产生波形。
(2)算法输出波形
方波:循环输出0xff和0x00的数据端口
三角波:先设置一个变量,从0-255依次输出,再从255-0依次输出,以此反复。
(3)采取方案:正弦波采用查表法输出,而三角波和方波使用算法输出,可有效节约数据存储器的内存。
4.调试总结
(1)现象:程序在Protues软件上仿真时一切正常,但在实际电路上运行,产生的正弦波,三角波,方波都出现了严重失真的现象(如图)。
(2)分析与解决方法:最开始以为是运放电路部分的反馈电阻太大导致的失真,
经过调试发现,方波失真是因为软件的延时时间太长导致的周期时间太长引起的失真,把延时时间调小便解决了问题。正弦波失真和三角波失真是因为硬件电路引起的,按照理论值,当P0口输出0x00是DA输出电压为0V,P0口输出0xff是DA输出电压为5V,但实际电路P0口输出0xFF是电压只有2.5V左右,于是便猜想,把软件8位的输入改为7位的输入,即P0口最大输出0x7F,三角波和正弦波的最大值为127。经过实验确实解决了上述失真的问题。
5.Protues仿真原理图:
6.Altium原理图:
7.实际电路板:
8.实验现象
9.资料链接
链接:[https://pan.baidu.com/s/1MhP0C2c198hZSvxzl1vBpA]
提取码:3zx3