多功能信号发生器设计.docx
《多功能信号发生器设计.docx》由会员分享,可在线阅读,更多相关《多功能信号发生器设计.docx(29页珍藏版)》请在冰豆网上搜索。
多功能信号发生器设计
河南理工大学
《单片机应用与仿真训练》设计报告
多功能信号发生器设计
姓名:
学号
专业班级:
电气本11-4
指导老师:
所在学院:
电气工程与自动化学院
时
摘要
本设计采用基于AT89S52的单片机最小系统为核心,成功产生出幅值和频率都可调的正弦波、锯齿波、方波、三角波等波形。
频率范围是100-1KHz,幅值调节范围0V到+5V。
本系统主要由四大模块组成:
显示模块、波形发生模块,幅频调节模块、及外部电源模块。
各个模块的实现方法如下:
一、显示模块:
本系统采用应用较广泛的数码管作为显示模块。
其显示与控制机理是单片机通过与数码管按照一定的规定相连接,然后再程序中在对数码管进行初始化后,就可以向其写字符或读字符。
二、波形发生模块及稳幅输出模块:
产生指定波形可以通过DAC芯片来实现,不同波形产生实质上是对输出的二进制数字量进行相应改变来实现的。
本系统采用的是两片DAC08328位数/模转换器,前级DAC0832的输出作为后级DAC0832的参考电压。
稳幅输出则通过LM324集成运放来实现对DAC0832输出电流信号到电压信号的转变。
三、幅频调节模块:
通过按键与门电路74LS08的组合来实现通过产生中断来实现对波形的选择和频率的调节。
而幅值调节通过改变前级DAC输入数字量来实现后级DAC参考电压Vref的改变来改变幅值。
为了产生尽可能精确的频率,在定时器中断程序中调用波形的输出程序,每发生一次定时器中断,输出一个点。
程序设计输出64个点,64*T,就是波形的周期。
通过改变定时器的周期来改变输出波形的周期。
四、电源模块:
利用MAX232的2脚,6脚产生正负10V直流电压用作LM324的电源。
本系统软件主要通过C语言开发,硬件电路设计具有典型性。
同时,本系统中任何一部分电路模块均可移植于其它实用开发系统的设计中,电路设计实用性很强。
1、概述
1.1信号发生器现状
.目前,市场上的信号发生器多种多样,一般按频带分为超高频、高频、低频、超低频、超高频信号发生器。
其中高频、低频和超低频信号发生器,大多使用文氏桥振荡电路,即RC振荡电路,通过改变电容和电阻值,改变频率。
用以上原理设计的信号发生器,其输出波形一般只有两种,即正弦波和脉冲波,其零点不可调,而且价格也比较贵,一般在几百元左右。
但是在科学研究和生产实践中,如工业过程控制,生物医学,地震模拟震动等领域往往需要低频信号源,而由硬件搭建的波形发生器效果往往达不到好的效果,而且低频信号源所需要的RC很大,大电阻,大电容在制作上有困难,参数的精度也难以保证,而且体积大,漏电,体积大是该类波形发生器的显著缺点。
1.2单片机在波形发生器中的应用
随着电子技术的飞快发展,单片机的应用不断的深入,基于单片机的智能仪器的设计技术不断成熟。
单片机构成的仪器具有高可靠性,高性价比,单片机技术在智能仪表和自动化等诸多领域有了极为广泛的应用,并应用到各种家庭电器,单片机技术的广泛应用推动了社会的进步。
利用单片机采用程序设计方法来产生波形,线路相对简单,结构紧凑,价格低廉,频率稳定度高,抗干扰能力强等优点,而且还能对波形进行细微的调整,改良波形,易于通过程序控制,只要对电路稍加修改,调整程序,就能实现功能的升级。
2、系统总体方案及硬件设计
2.1系统分析
基于单片机的信号发生系统是一个实际应用系统,可为相关实验及实际应用提供支持。
本论文包括硬件系统的详细设计及C语言在基本控制中的应用。
此系统具有的功能如下:
硬件部分
(1)七段数码管显示电路;
(2)键盘和与与门中断产生电路;
(3)时钟电路与复位电路;
(4)具有8位精度的D/A转换和波形产生电路;
(5)正负10V直流电源转换电路;
软件部分
(1)系统复位初始化;
(2)键盘中断与处理;
(3)中断0服务程序;
(4)定时器0中断服务程序;
(5)正弦波发生程序;
(6)三角波发生程序;
(7)方波发生程序;
(8)锯齿波发生程序。
2.2总体方案设计
2.2.1系统总体结构框图设计
图2-1系统主结构框图
2.3总体硬件设计
(1)程序存贮器
AT89S52内部自带8K的ROM,512B的RAM,所以不需要对其扩展存储器。
(2)按键及中断接口
系统采用按键通过门电路来产生中断,并在中断服务程序里来扫描按键来实现波形切换和频率的调节。
(3)显示模块
本设计实现了89S52的P1口控制数码管显示当前波形种类和波形频率。
(4)D/A转换
本设计D/A转换部分采用DAC0832芯片,通过对单片机输出的二进制数字量进行从数字量到模拟量的变换来实现波形的产生。
(5)信号变换部分
对信号的变换部分采用四运放集成芯片LM324,它采用14脚双列直插塑料封装,它的内部包含四组形式完全相同的运算放大器。
(6)外部电源
因LM324工作需要正负12V的直流电源,因此利用MAX232的2,6脚的RS232电平输出LM324所需的正负10v电压。
2.4系统各模块设计
2.4.1资源分配
为了满足功能和指标要求,现分配资源如下:
1.晶振采用12MHZ
2.IO端口分配:
P0口与DAC0832的DI0-DI7数据输入;P3口的P3.4~P3.7分别与四个按键相连,依次控制波形种类的选择。
波形频率的增加、波形频率的减小和波形幅值的增加与减小用74LS02连接到P3.2。
DAC0832-I的输入寄存器写选通信号WR1与P2.4连接,DAC寄存器写选通WR2和数据传送信号XFER相连后与P2.6连接。
P1口做数码管的数据输入端口。
2.4.2显示器接口设计
本系统采用的数码管是一类价格便宜使用简单,通过对其不同的管脚输入相对的电流,使其发亮,从而显示出数字能够显示时间、日期、温度等所有可用数字表示的参数的器件。
P0口与两片74HC573连接,分时输出段码与位选码。
P3.1与P3.3分别控制两个锁存器的选通与否。
图2.2系统显示电路
2.4.3复位与时钟电路设计
2.4.3.1复位电路设计
单片机的复位是靠外电路实现的,在时钟电路工作后,只要在单片机的RST引脚上出现24个时钟振荡脉冲(2个机器周期)以上的高电平,单片机便实现初始化状态复位。
为了保证应用系统可靠地复位,通常是RST引脚保持10ms以上的高电平。
复位电路连接如图3-2所示。
此电路仅用一个电容及一个电阻。
系统上电时,在RC电路充电过程中,由于电容两端电压不能跳变,故使RESET端电平呈高电位,系统复位。
经过一段时间,电容充电,使RESET端呈低电位,复位结束。
图2-3复位电路
2.4.3.2时钟电路设计
8XX51系列单片机工作时必须要有个时钟脉冲,有两种方法可以向AT89S51提供时钟脉冲:
第一:
外部时钟方式。
使用外部电路始终给AT89S51提供时钟脉冲如右图
图2-4晶振电路
第二:
内部时钟方式。
使用晶振利用AT89S51内部电路产生时钟脉冲如左图。
我们一般使用这种方式。
AT89S51中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。
这个放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起构成自激振荡器
外接石英晶体及电容C1、C2接在放大器的反馈回路中构成并联振荡电路。
对外接电容C1、C2虽然没有十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程度及温度稳定性。
如果使用石英晶体,我们推荐使用30pF+/-10pF,而如使用陶瓷谐振器建议选择40pF+/-10PF。
2.4.4按键中断电路设计
图2-5按键中断实现
工作原理如下:
1.当没有按键按下时,INT0端口保持高电平,中断不触发,当有任何一个按键按下时通过74LS21(四输入端双与门)实现INT0变成低电平。
从而触发中断,进而执行中断服务程序。
2.进入中断服务程序后,系统执行键盘扫描程序,来识别究竟是哪个按键按下。
然后根据识别的按键来进入相关的处理函数,例如按下波形选择键触发中断后,在中断服务程序中,系统将波形符号加1,从而改变波形。
2.4.5D/A转换电路设计
2.4.5.1DAC0832基本介绍
DAC0832是双列直插式8位D/A转换器。
能完成数字量输入到模拟量(电流)输出的转换。
其主要参数如下:
1.分辨率为8位
2.转换时间为1μs
3.满量程误差为±1LSB
4.参考电压为(+10~-10)V
5.供电电源为(+5~+15)V
6.逻辑电平输入与TTL兼容
2.4.5.2DAC0832引脚图
图2-6DAC0832引脚图
(1)DI7~DI0:
8位的数据输入端,DI7为最高位。
(2)IOUT1:
模拟电流输出端1,当DAC寄存器中数据全为1时,输出电流最大,当DAC寄存器中数据全为0时,输出电流为0。
(3)IOUT2:
模拟电流输出端2,IOUT2与IOUT1的和为一个常数,即IOUT1+IOUT2=常数。
(4)RFB:
反馈电阻引出端,DAC0832内部已经有反馈电阻,所以RFB端可以直接接到外部运算放大器的输出端,这样相当于将一个反馈电阻接在运算放大器的输出端和输入端之间。
(5)VREF:
参考电压输入端,此端可接一个正电压,也可接一个负电压,它决定0至255的数字量转化出来的模拟量电压值的幅度,VREF范围为(+10~-10)V。
VREF端与D/A内部T形电阻网络相连。
(6)Vcc:
芯片供电电压,范围为(+5~15)V。
(7)AGND:
模拟量地,即模拟电路接地端。
(8)DGND:
数字量地。
2.4.5.3内部结构框图
图2-7DAC0832内部结构图
内部结构框图分析:
在DAC0832中有两级锁存器,第一级锁存器称为输入寄存器,它的允许锁存信号为ILE,第二级锁存器称为DAC寄存器,它的锁存信号也称为通道控制信号XFER。
当ILE为高电平,片选信号/CS和写信号/WR1为低电平时,输入寄存器控制信号为1,这种情况下,输入寄存器的输出随输入而变化。
此后,当/WR1由低电平变高时,控制信号成为低电平,此时,数据被锁存到输入寄存器中,这样输入寄存器的输出端不再随外部数据DB的变化而变化。
对第二级锁存来说,传送控制信号/XFER和写信号/WR2同时为低电平时,二级锁存控制信号为高电平,8位的DAC寄存器的输出随输入而变化,此后,当/WR2由低电平变高时,控制信号变为低电平,于是将输入寄存器的信息锁存到DAC寄存器中。
2.4.5.4DAC0832的工作方式
1.单缓冲工作方式
此方式是使两个寄存器中任一个处于直通状态,另一个工作于受控锁存器状态或两个寄存器同步受控。
一般的做法是将WR1和XFER接数字地,使DAC寄存器处于直通状态。
另外把ILE接高电平,CS接端口地址译码信号,WR1接CPU系统总线的IOW信号,这样便可通过执行一条输出指令,选中该端口,使CS和WR1有效,从而启动D/A转换。
图2-8单缓冲工作单极性方式电路连接
双极性模拟输出电压:
图2-9单缓冲工作双极性方式电路连接
(2)双缓冲工作方式
双缓冲方式的一大用途是数据接收和启动转换可以异步进行,即在对某数据转换的同时,能进行下一数据的接收,以提高转换速率。
这时,可将ILE接高电平,WR1和WR2接CPU的IOW,CS和XFER分别接两个不同的I/O地址译码信号。
(3)直通工作方式
当DAC0832芯片的片选信号、写信号、及传送控制信号的引脚全部接地,允许输入锁存信号ILE引脚接+5V时,DAC0832芯片就处于直通工作方式,数字量一旦输入,就直接进入DAC寄存器,进行D/A转换。
2.4.5.5本系统采用的AD转换原理图
DAC0832主要由8位输入寄存器、8位DAC寄存器、8位D/A转换器以及输入控制电路四部分组成。
8位输入寄存器用于存放主机送来的数字量,使输入数字量得到缓冲和锁存,由加以控制;8位DAC寄存器用于存放待转换的数字量,由加以控制;8位D/A转换器输出与数字量成正比的模拟电流;由与门、非与门组成的输入控制电路来控制2个寄存器的选通或锁存状态。
DAC0832与反相比例放大器相连,实现电流到电压的转换,因此输出模拟信号的极性与参考电压的极性相反,数字量与模拟量的转换关系为
Vout1=-Vref×(数字码/256)
图2-10D/A转换器双极性输出电路
3、软件设计
3.1软件总体设计
应用系统中的应用软件是根据系统功能要求而设计的,能可靠地实现系统的各种功能。
一个优秀的应用系统的应具有下列特点:
(1)根据软件功能要求,将系统软件分成若干个独立的部分。
设计出软件的总体结构,使其结构清晰、流程合理。
(2)要树立结构化程序设计风格,各功能程序模块化、子程序化。
既便于调试、链接,又便于移植、修改。
(3)建立正确的数学模型。
即根据功能要求,描述各个输入和输出变量之间的数学关系,它是关系到系统好坏的重要因素。
(4)为提高软件设计的总体效率,以简明、直观法对任务进行描述,在编写应用软件之前,应绘制出程序流程图。
(5)要合理分配系统资源,包括ROM、RAM、定时数器、中断资源等。
(6)注意在程序的有关位置处写上功能注释,提高程序的可读性。
(7)加强软件抗干扰设计,它是提高系统应用可靠性的有利措施。
本系统的软件包括以下几个程序模块:
(1)系统复位初始化;
(2)键盘中断与处理;
(3)中断0服务程序;
(4)定时器0中断服务程序;
(5)正弦波发生程序;
(6)三角波发生程序;
(7)方波发生程序;
(8)锯齿波发生程序。
3.2软件功能设计
3.2.1系统初始化程序设计
初始化程序如下:
#include
#include
#include
#include
#defineuncharunsignedchar
#defineuintunsignedint
#defineDAC0832XBYTE[0xfffe]
#definepi3.1415926
#defineDAdataP0
sbitSQU_K=P3^4;
sbitSAW_K=P3^5;
sbitTRI_K=P3^6;
sbitSIN_K=P3^7;
sbitZF=P2^0;//增大幅值
sbitJF=P2^1;//减小幅值
sbitZT=P2^2;//增大周期
sbitJT=P2^3;//减小周期
sbitDA1=P2^4;//输入寄存器开关
sbitDA2=P2^5;
sbitDAC1=P2^6;//DAC寄存器开关
sbitDAC2=P2^7;
sbitdula=P3^3;//段选锁存控制位
sbitwela=P3^1;//位选锁存控制位
uncharWavecount=0,Waveform=0;
uncharaat=0xef;
uncharTHtemp=0xff,TLtemp=0x64;
floatfuzhi,fuzhitemp=5;
uncharfuzhige,fuzhixiaoshu;
uncharhztempbai,hztempshi,hztempge;
uncharjisuan;
inthztemp;
voidDAout1()
{
DAdata=aat;
DA1=0;
DA1=1;
DAC1=0;
DAC1=1;
}
voidDAout2(uncharDAtemp)
{
DAdata=DAtemp;
DA2=0;
DA2=1;
DAC2=0;
DAC2=1;
}
3.2.2按键检测及中断处理程序
单片机系统中,键盘扫描是CPU工作的一个主要内容之一。
CPU忙于各项工作任务时,如何兼顾键盘扫描。
既保证不失时机的响应键盘操作,又不过多占用CPU时间。
因此,要根据应用系统中的CPU的忙、闲情况,选择好键盘的工作方式。
本系统采用中断工作方式,该方式相交其它方式有节省CPU资源,提高效率等优点。
即当键盘有健按下时,才执行键盘扫描,然后执行该键功能程序。
图3.1按键处理结构图
3.2.3方波波发生程序设计
voidsquare()//方波
{
DAout2(juxing[Wavecount++]);
//DAdata=juxing[Wavecount++];
if(Wavecount>63)Wavecount=0;
}
//方波表
uncharcodejuxing[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,0,0,0,0,0,0,0
};
3.2.4正弦波产生程序
voidsinwave()//正弦波
{DAout2(sin[Wavecount++]);
//DAdata=sin[Wavecount++];
if(Wavecount>63)Wavecount=0;
}
//正弦波表
uncharcodesin[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
};
3.2.5三角波产生程序
voidtriang()//三角波
{
DAout2(sanjiao[Wavecount++]);
//DAdata=sanjiao[Wavecount++];
if(Wavecount>63)Wavecount=0;
}
//三角波表
uncharcodesanjiao[64]={
0,8,16,24,32,40,48,56,64,72,80,88,96,104,112,120,128,136,144,152,160,168,176,184,192,200,208,216,224,232,240,248,
248,240,232,224,216,208,200,192,184,176,168,160,152,144,136,128,120,112,104,96,88,80,72,64,56,48,40,32,24,16,8,0
};
3.2.6锯齿波产生程序
voidsawtooth()//锯齿波
{
DAout2(juchi[Wavecount++]);
//DAdata=juchi[Wavecount++];
if(Wavecount>63)Wavecount=0;
}
//锯齿波表
uncharcodejuchi[64]={
0,4,8,12,16,20,24,28,32,36,40,45,49,53,57,61,65,69,73,77,81,85,89,93,97,101,105,109,113,117,121,125,130,134,138,142,
146,150,154,158,162,166,170,174,178,182,186,190,194,198,202,206,210,215,219,223,227,231,235,239,243,247,251,255
};
4、实验仿真
4.1protues软件仿真
打开PROTEUS软件,选择所需器件并连接如图4-1所示
图4-1连接导线
打开KEIL软件,调出程序编译,生成HEX文件,并将其载入protues里。
调试窗口见图4-2。
图4-2系统调试
4.2仿真结果
1.正弦波仿真:
频率44HZ仿真结果如图4-3
图4-3正弦波
2.三角波仿真:
频率100HZ仿真结果如图4-4
图4-4三角波
3.方波仿真:
频率100HZ仿真结果如图4-5
图4-5方波
4.锯齿波仿真:
频率100HZ仿真结果如图4-6
图4-6锯齿波
4.3仿真结论
采用PROTEUS进行单片机仿真,可以大大缩短单片机的开发周期。
它不仅能仿真单片机CPU的工作情况,也能仿真单片机外围电路或没有单片机参与的其它电路的工作情况。
本系统仿真结果,满足设计需求。
实际操作灵活,使用方便。
5、课程设计体会
这次课程设计主要是基于对单片机的掌握和应用,这是我第一次动手实践制作电路图和焊接硬件电路,从课题的选择、系统原理方案的设计,电路原理的理解,到电路上元器件的焊接、程序的编写,电路的调试,调试下载,一步步,我觉得每个环节我都收获很大。
在设计中,我力求硬件电路简单,充分发挥软件灵活方面的特点,在满足系统设计要求的同时在一定程度上作出扩展。
在此次课程设计中,我主要有以下几个方面的心得体会:
一、在对单片机的具体实践掌握方面。
上个学期我们开设了单片机原理与接口技术这门专业课,尽管在这门课程的学习上,自己态度非常认真而且也下了很大的功夫。
但是在纯粹的理论上,总感觉不是那么的踏实和具体,而这次课程设计就为我具体实践提供了一次很好的机会,我觉得这个教学安排对我们实践能力的锻炼时很有帮助的,通过此次课程设计,我对单片机的掌握有了更加切实的感受和接触,以及简单的应用,收获很大
二、在软件的使用方面。
这次课程设计主要用到keiluvision2和Proteus两个软件,这次课程设计使我更加深入和熟练的掌握了这两个软件的使用。
特别是protues软件,该软件功能强大,操作简单,可以大大加快单片机的开发过程,是单片机开发的有力帮手。
三、在C语言程序的编写方面。
在大三学过汇编编程,但与C语言相比汇编有可读性好,移植容易等优点,所以这次采用了更方便好用的C语言编写程序。
此次课程设计是我掌握了编写一个较大型系统软件的思路,提高了自己的编程水平。
单片机课程设计马上就要结束了,自己在设计过程中碰到了不少“难题”,通过自己翻阅大量资料和请教老师,解决了一个个难题。
通过这次毕业设计,我深深体会到:
世上无难题,只怕有心人。
碰到难题不要惧怕,只要你肯钻研,问题总会有解决的办法。
最后在此我特别感谢在此次课程设计对我提供帮助的老师和同学。
参考文献
[1]余发山王福忠单片机原理及应用技术北京:
中国矿业大学出版社,2008
[2]张义和等编.例说51单片机北京:
人民邮电出版社,2008
[3]周和琴,吴秀清编著.微型计算机原理与接口技术北京:
中国科学技术大学出版社,2004
[4]周润景等编著.Proteus在MCS-51&ARM7系统中的应用百例:
电子工业出版社,2006
[5]