基于51单片机的信号发生器 完整电路程序文档格式.docx
《基于51单片机的信号发生器 完整电路程序文档格式.docx》由会员分享,可在线阅读,更多相关《基于51单片机的信号发生器 完整电路程序文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
1
1.设计任务
1.设计题目:
基于51单片机的信号发生器的设计与实现
2.任务与要求:
设计一个由单片机控制的信号发生器。
运用单片机系统控制产生多种波形,这些波形包括方波、三角波、锯齿波、正弦波等。
信号发生器所产生的波形的频率、幅度均可调节。
并可通过软件任意改变信号的波形。
3.基本要求:
1).产生三种以上波形。
如正弦波、三角波、矩形波等。
2).最大频率不低于500Hz。
并且频率可按一定规律调节,如周期按1T,2T,3T,4T或1T,2T,4T,8T变化。
3).幅度可调,峰峰值在0——5V之间变化。
2.系统概述
2.1设计方案
2.1.1总体方案:
采用AT89C51单片机和DAC0832数模转换器生成波形,加上一个低通滤波器,生成的波形比较纯净。
它的特点是可产生任意波形,频率容易调节,频率能达到设计的500HZ以上。
性能高,在低频范围内稳定性好、操作方便、体积小、耗电少。
既可满足基本要求又能充分发挥其优势,电路简单,易控制,性价比高,所以采用该方案.
2.1.2改变幅度方案:
将输出电压通过一个运算放大器的放大。
这样还有个优点是幅度连续可调。
既可满足基本要求,并且电路也挺简单。
2.2工作原理
数字信号可以通过数/模转换器转换成模拟信号,因此可通过产生数字信号再转换成模拟信号的方法来获得所需要的波形。
89C51单片机本身就是一个完整的微型计算机,具有组成微型计算机的各部分部件:
中央处理器CPU、随机存取存储器RAM、只读存储器ROM、I/O接口电路、定时器/计数器以及串行通讯接口等,只要将89C51再配置键盘及、数模转换及波形输出、放大电路等部分,即可构成所需的波形发生器,其信号发生器构成如下图所示。
系统框图
2
波形数模转换电路单片机按键电路表RO放大电电低通滤波形输出
是整个波形发生器的核心部分,通过程序的编写和执行,产生各种各89C51当数字并从键盘接收数据,进行各种功能的转换和信号幅度的调节。
样的信号,信号电路到达转换电路,将其转换成模拟信号也就是所需要的输出波形。
内。
RON64个点,储存在单片机得波形ROM表是将信号一个周期等间距地分离成生成的程序如下:
MATLAB生成的,例如正弦表,MATLAB具体ROM表是通过x=0:
2*pi/64:
2*pi;
y=round(sin(x)*127)+128
单元电路设计与分析3单元电路设计3.1主控电路3.1.1)拥有完善的外(1型单片机,它具有如下优点:
设计中主要采用STC89C51)该单片机(2部扩展总线,通过这些总线可方便地扩展外围单元、外围接口等。
数据存储空间,字节的RAMROM程序存储器空间和256内部拥有4K字节的FLASH
如果更改程序故可重复使用。
完全可以满足程序的要求。
由于该芯片可电擦写,型机的指令51MCS-(内容,可将芯片拿下重新烧写。
3)该单片机与工业标准的集和输出引脚兼容。
当中央处理中断系统是使处理器具有对外界异步事件的处理能力而设置的。
暂停当前的工作,要求CPU器CPU正在处理某件事的时候外界发生了紧急事件,转而去处理这个紧急事件。
的管脚相连,10和外部中断在波形发生器中,用两个开光直接与外部中断开光用来改变频率。
在程序主函数中,写了个死开光用来改变波形,S2其中S1按下又抬起时,程序会暂时跳出死或S1S2循环一直输出一个默认的波形,当循环,进入中断处理程序,从而对波形和频率进行改变。
时钟电路。
由于频率较大时,三角波、正弦波、方波等波中每一点延时时间3
为几微秒,故延时时间还要加上指令时间即可得到指定频率的波形,该电路用11.0592MHz晶振。
主控电路图
3.1.2数/模转换电路
由于单片机产生的是数字信号,要想得到所需要的波形,就要把数字信号转换成模拟信号,所以该文选用价格低廉、接口简单、转换控制容易并具有8位分辨率的数模转换器DAC0832。
DAC0832主要由8位输入寄存器、8位DAC寄存器、8位D/A转换器以及输入控制电路四部分组成。
但实际上,DAC0832输出的电量也不是真正能连续可调,而是以其绝对分辨率为单位增减,是准模拟量的输出。
DAC0832是电流型输出,在应用时外接运放使之成为电压型输出。
根据对DAC0832的数据锁存器和DAC寄存器的不同的控制方式,DAC0832有三种工作方式:
直通方式、单缓冲方式和双缓冲方式。
本设计选用直通方式:
DAC0832的数据口和单片机的P0口相连。
CSDA:
片选信号输入线(选通数据锁存器),低电平有效;
WR:
数据锁存器写选通输入线,负脉冲(脉宽应大于500ns)有效。
由ILE、CS、WR1的逻辑组合产生LE1,当LE1为高电平时,数据锁存器状态随输入数据线变换,LE1的负跳变时将输入数据锁存。
4
数模转换电路
3.1.3运算放大电路和低通滤波电路
管脚6管脚相连,LM324的管脚与DAC0832的(IOUT2)12LM324的5)9REF(7管脚与DAC0832的的DAC0832与的(IOUT1)11管脚相连,LM324管脚相连。
输出的电流信号转化为电压信号第一级运算放大器的作用是将DAC0832R2/R1)倍。
通过反向放大电路-(V1V1,第二级运算放大器的作用是将选择R1的电压大约是5V,所以0-5V题目要求输出的电压在可调,而V1,最)=1010/5选择10K的电位器,这样最大的输出电压为5*(5K的电阻,R20-5V。
小电压为0,可以实现题目要求的在第二个运算放大器的输出端连了一个低通滤波器。
如果不加低通滤波器,加一个低通滤波器不仅起到的滤但是产生的信号中噪声很多,也能够生成波形,这F=1/(2*pi*R3*C6),波的作用,还起到了平滑的作用。
低通滤波器的截止频率。
实验表电容,截止频率F=16KHZ104C6100R3里我们选择为欧姆电阻,为明,此时的输出波形效果不错。
5
串口通信电路3.1.4
是一种串行接口,一般微处理器中都包含这种外设接(UART)通用异步收发器口。
异步串行接口提供了一种简单的途径,使两个器件无需共享同一个时钟信号就RS232MAX232,串口就能能用在能进行通信。
如果再加入一个合适的电平转换器端口连接。
串口只需两根信号等网络中实现通信,或者与计算机的COM和RS485即可实现,而且只要两端器件都采用同样的位格式和波特率,那么它和TX)线(RX们无需其它任何对方的信息就可以成功传输数据。
串口通信电路图
3.2系统软件设计
软件设计上,根据功能分了几个模块编程。
模块主要有:
主程序模块、外部中断0模块,外部中断1模块。
3.2.1主程序:
主程序先是进行一些初始化的工作,然后根据波形标志a,b,c,d,e的值进入相应的while循环。
这样写的好处是输出的波形频率可以790多HZ。
在while循环中,单片机根据地址标志位不停低查表,然后把查得的值赋给DAC0832的数据口,然后地址标志位加一,并判断地址标志位是否等于64,如果是就置0再往下执行,如果不是直接往下执行。
然后根据频率标志位进行相应的延时。
6
开输出数字量数据DAC083初始地址标志位的值进入a,b,c,d,根循whil应地址标志位6否等循whil地址标志位根据地址标志位查相应延时(对应率)
主程序流程图
3.2.2中断服务程序:
在程序中还加入了消本程序中两个外部中断分别起到了控制波形和频率的作用。
抖部分。
根据波形标志做0波形标志位置相应处理否是否有中断信波形标志位是是是0波形标志位加1外部中断号否等于5否根据频率标志做0频率标志位置相应处理否频率标志位是是否有中断信是是1外部中断频率标志位加18否等于号否
7
4.软件仿真
4.1系统仿真波形:
8
5设计总结
基于单片机的信号发生器设计,这个信号发生器的设计中涉及到一个典型的控制过程。
通过单片机控制一个模数转换器DAC0832产生所需要的电流,然后使用运算放大器LM324可以将其电流输出线性地转换成电压输出,再将电压经过运算放大器的放大,可以得到足够幅度的信号。
通过程序的控制,可以产生一系列有规律的波形。
这样一个信号发生装置在控制领域有相当广泛的应用范围。
最终做出来的信号发生器满足了题目中的所有要求:
1.产生五种波形。
正弦波、三角波、矩形波、梯形波,锯齿波。
2.最大频率为798.6HZ。
并且频率可按按1T,2T,3T,4T,5T,6T,7T,8T变化。
3.幅度可调,峰峰值在0——5V之间变化。
当然还是存在不足的地方,比如不能实现频率的按一个小的步进调整。
并且当频率太小时矩形波会有些失真。
参考文献:
[1]郭天翔.新概念51单片机C语言教程入门、提高、开发、拓展全.北京.电子工业出版社2009.1
[2]童诗白.模拟电路技术基础[M].北京:
高等教育出版社,2000.171~202.
9
总电路图10
附录2:
源程序
#include<
reg51.h>
#defineucharunsignedchar
#defineuintunsignedint
sbitcsda=P2^2;
sbitwr=P2^1;
sbits1=P3^2;
sbits2=P3^3;
uchark=0,p=0,delay=0;
ucharbxxz=0;
pinglv=0;
uchara=1,b=0,c=0,d=0,e=0;
ucharcodesin[64]={
135,145,158,167,176,188,199,209,218,226,234,240,245,249,252,254,254,253,251,247,243,237,230,222,213,204,193,182,170,158,
146,133,121,108,96,84,72,61,50,41,32,24,17,11,7,3,1,0,0,2,5,9,14,20,28,36,45,55,66,78,90,102,114,128
};
ucharcodejuxing[64]={
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,