工程训练课程设计报告
设计课题:信号发生器的设计
姓名:
班级:
设计时间:
基于51单片机的多功能信号发生器设计
摘 要: 本系统利用单片机AT89S52采用程序设计方法产生正弦波、脉冲波两种波形,再通过D/A转换器DAC0832将数字信号转换成模拟信号,滤波放大,最终由示波器显示出来,能产1Hz—5kHz的波形。通过键盘来控制两种波形的类型选择、频率变化,幅度变化,并通过数码管显示其各自的类型以及数值,系统大致包括信号发生部分、数/模转换部分以及数码管显示部分三部分,其中尤其对数/模转换部分和波形产生和变化部分进行详细论述。
关键词:单片机AT89S52、DAC0832
Abstract: this system capitalize on AT89s52,it makes use of central processor to generate three kinds of waves, they are triangle wave, and use D/A conversion module, wave generate module, it can have the 1Hz-5KHz profile. In this system it can control wave form choosing, frequency, range,can have the sine wave, the square-wave, the triangular wave. Simultaneously may also take the frequency measurement frequency,and displays them through liquid crystal display of 1602. this design includes three modules. They are D/A conversion module, wave generate module and liquid crystal display of LED module. In this design, the wave generator into wave form module and D/A conversion module are discussed in detail.
key word: AT89S52, DAC0832.
目录
1.1 设计要求
1.2方案设计与论证
1.2.1 信号发生电路方案论证
1.2.2 单片机的选择论证
1.2.3 显示方案论证
1.2.4 幅度控制论证
1.3 总体系统设计
1.4 硬件实现及单元电路设计
1.4.1 单片机最小系统的设计
1.4.2 数模转换模块设计
1.4.3 显示模块的设计
1.5 软件设计流程
1.6 源程序
1.7. 输出波形的种类与频率的测试
1.8 附录
1.81 参考文献
1.82 总体设计图
1、 系统设计
经过考虑,我确定方案如下:利用AT89S52单片机采用程序设计方法产生正弦波、脉冲波两种波形,再通过D/A转换器DAC0832将数字信号转换成模拟信号,滤波放大,最终由示波器显示出来,通过另一块DAC0832控制幅度的调节,通过键盘来控制两种波形的类型选择、频率变化,幅度变化,最终输出显示其各自的类型以及数值。
1.1、设计要求
1、 基本要求
(1)正弦波信号源
信号频率:步进调整,步长为;
频率稳定度:优于;
非线性失真系数。
(2)脉冲波信号源
信号频率:步进调整,步长为;
上升时间和下降时间:;
平顶斜降:;
脉冲占空比:步进调整,步长为。
(3)上述两个信号源公共要求
信号频率可预置;
在负载为时,输出幅度为;
完成5位频率的数字显示。
2、发挥部分
(1)正弦波和脉冲波频率步长改为;
(2)正弦波和脉冲波幅度可步进调整,调整范围为,步长为;
(3)正弦波和脉冲波频率可自动步进,步长为;
(4)降低正弦波非线性失真系数。
1.2方案设计与论证
1.2.1 信号发生电路方案论证
方案一:通过单片机控制D/A,输出三种波形。此方案输出的波形不够稳定,抗干扰能力弱,不易调节。但此方案电路简单、成本低。
方案二:使用传统的锁相频率合成方法。通过芯片IC145152,压控振荡器搭接的锁相环电路输出稳定性极好的正弦波,再利用过零比较器转换成方波,积分电路转换成三角波。此方案,电路复杂,干扰因素多,不易实现。
方案三:利用MAX038芯片组成的电路输出波形。MAX038是精密高频波形产生电路,能够产生准确的三角波、方波和正弦波三种周期性波形。但此方案成本高,程序复杂度高。
以上三种方案综合考虑,选择方案一。
1.2.2 单片机的选择论证
方案一:AT89S52单片机是一种高性能8位单片微型计算机。它把构成计算机的中央处理器CPU、存储器、寄存器、I/O接口制作在一块集成电路芯片中,从而构成较为完整的计算机、而且其价格便宜。
方案二:C8051F005单片机是完全集成的混合信号系统级芯片,具有与8051兼容的微控制器内核,与MCS-51指令集完全兼容。除了具有标准8052的数字外设部件,片内还集成了数据采集和控制系统中常用的模拟部件和其他数字外设及功能部件,而且执行速度快。但其价格较贵
以上两种方案综合考虑,选择方案一
1.2.3 显示方案论证
方案一:采用LED数码管。LED数码管由8个发光二极管组成,每只数码管轮流显示各自的字符。由于人眼具有视觉暂留特性,当每只数码管显示的时间间隔小于1/16s时人眼感觉不到闪动,看到的是每只数码管常亮。使用数码管显示编程较易,占用时间较短。
方案二:采用LCD液晶显示器1602。其功率小,效果明显,显示编程容易控制,可以显示字母,但使用液晶显示,需要较长时间的软件延迟,影响产生波形的频率。
以上两种方案综合考虑,选择方案一。
1.2.4幅度控制方案论证:
方案一:可以将送给DA的数字量乘以一个系数,这样就可以改变DA输出电流的幅度,从而改变输出电压;但是这样做有很严重的问题,单片机在做乘法运算时需要很长的时间,这样的话输出波形的频率就会很低,达不到至少500HZ的要求;
并且该方案的输出电压做不到连续可调,当DA的输入数字量比较小时,输出的波形失真就会比较严重。
方案二:将输出电压通过一个运算放大器的放大。这样还有个优点是幅度连续可调。
方案三:用另外一片DA控制波形输出DA的参考电压值,以实现幅度控制。
经比较,方案三既可满足课程设计的基本要求,并且电路也挺简单
1.3总体系统设计
该系统采用单片机作为数据处理及控制核心,由单片机完成人机界面、系统控制、信号的采集分析以及信号的处理和变换,采用按键输入,利用液晶显示电路输出数字显示的方案。将设计任务分解为按键电路、液晶显示电路等模块。图(1)为系统的总体框图
图(1) 总体方框图
1.4硬件实现及单元电路设计
1.4.1单片机最小系统的设计
89C51是片内有ROM/EPROM的单片机,因此,这种芯片构成的最小系统简单﹑可靠。用80C51单片机构成最小应用系统时,只要将单片机接上时钟电路和复位电路即可,如图(2) 89C51单片机最小系统所示。由于集成度的限制,最小应用系统只能用作一些小型的控制单元。其应用特点:
(1) 有可供用户使用的大量I/O口线。
(2) 内部存储器容量有限。
(3) 应用系统开发具有特殊性。
图(2) 89C51单片机最小系统
1.4.2 波形产生模块设计
由单片机采用编程方法产生三种波形、通过DA转换模块DAC0832在进过滤波放大之后输出。其电路图如下:
图(3) 数模转换模块
如上图所示,单片机的P0口连接DAC0832的八位数据输入端,DAC0832的输出端接放大器,经过放大后输出所要的波形。DAC0832的为八位数据并行输入的,其结构图如下:
图(4)DAC0832的内部结构
1.4.3 显示模块的设计
图(5)数码管显示模块
1.4.4 幅度控制模块及滤波模块设计
图(6)幅度控制模块
图(6)滤波模块模块
1.5 软件设计流程
本系统采用AT89S52单片机,用编程的方法来产生三种波形,并通过编程
来切换三种波形以及波形频率的改变。
具体功能有:(1)各个波形的切换;(2)各种参数的设定;(3)频率增减等。
软件调通后,通过编程器下载到AT89S52芯片中,然后插到系统中即可独立完成所有的控制。
1.6源程序
#include<reg52.h>
#include<absacc.h>
#include<intrins.h>
sbit k1=P3^0;
sbit k2=P3^1;
sbit k3=P3^3;
sbit k4=P3^4;
sbit k5=P3^5;
sbit k6=P3^7;
bit led=1;
//sbit RS=P3^4;
//sbit RW=P3^5;
//sbit E=P3^7;
/*sbit LED0=P3^0;
sbit LED1=P3^1;
sbit LED2=P3^3;
sbit LED3=P3^4;
sbit LED4=P3^5;
sbit LED5=P3^7;*/
unsigned char i=0,k,f=14,g=255,n=0,m=0;
unsigned int j=200,num=800,num1;
unsigned char code sin[16]={135,176,218,245,254,243,213,170,121,72,24,3,2,20,55,102};
unsigned char code mai[2]={255,0};
unsigned char code du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
unsigned char code we[]={0x01,0x02,0x04,0x08,0x10,0x20};
init()
{
EA=1;
EX0=1;
IT0=1;
EA=1;
ET0=1;
TMOD=0x01;
TH0=(65536-1)/256;
TL0=(65536-1)%256;
TR0=1;
}
main()
{
init();
XBYTE[0xbfff]=255;
while(1)
{
//num=16+j*16;
if(k5==0&&g>0)
{
g--;
XBYTE[0xbfff]=g;
}
if(k6==0&&g<255)
{
g++;
XBYTE[0xbfff]=g;
}
if(k1==0&&j<65535)
{
j+=30;
}
if(k2==0&&j>0)
{
j-=30;
}
if(led==1)
{
XBYTE[0x7fff]=sin[0];
for(i=0;i<j;i++);
XBYTE[0x7fff]=sin[1];
for(i=0;i<j;i++);
XBYTE[0x7fff]=sin[2];
for(i=0;i<j;i++);
XBYTE[0x7fff]=sin[3];
for(i=0;i<j;i++);
XBYTE[0x7fff]=sin[4];
for(i=0;i<j;i++);
XBYTE[0x7fff]=sin[5];
for(i=0;i<j;i++);
XBYTE[0x7fff]=sin[6];
for(i=0;i<j;i++);
XBYTE[0x7fff]=sin[7];
for(i=0;i<j;i++);
XBYTE[0x7fff]=sin[8];
for(i=0;i<j;i++);
XBYTE[0x7fff]=sin[9];
for(i=0;i<j;i++);
XBYTE[0x7fff]=sin[10];
for(i=0;i<j;i++);
XBYTE[0x7fff]=sin[11];
for(i=0;i<j;i++);
XBYTE[0x7fff]=sin[12];
for(i=0;i<j;i++);
XBYTE[0x7fff]=sin[13];
for(i=0;i<j;i++);
XBYTE[0x7fff]=sin[14];
for(i=0;i<j;i++);
XBYTE[0x7fff]=sin[15];
for(i=0;i<j;i++);
}
if(led==0)
{
if(k4==0&&f<14)
{
f++;
}
if(k3==0&&f>0)
{
f--;
}
for(k=0;k<f;k++)
{
XBYTE[0x7fff]=mai[0];
for(i=0;i<j;i++);
}
for(k=0;k<(15-f);k++)
{
XBYTE[0x7fff]=mai[1];
for(i=0;i<j;i++);
}
}
}
}
void int0() interrupt 0
{
led=~led;
}
void jsq() interrupt 1
{
TH0=(65536-1)/256;
TL0=(65536-1)%256;
P2=P2&0xc0;
P2=P2|we[5-n];
if(n<6)
{
m=num1%10;
num1=num1/10;
P1=du[m];
}
n++;
if(n==6)
{
n=0;
num1=num;
}
}
1.7. 输出波形的种类与频率的测试
图(7)4000HZ正弦波输出
图(8)4000HZ脉冲波输出
1.8附录
1.81 参考文献
[1] 戴仙金主编 51单片机及其C语言汇编程序开发实例 清华大学出版社,2008
[2] 高吉祥主编 全国大学生电子设计竞赛培训系列教程 电子工业出版社,2007
[3] 杨素行主编 模拟电子技术基础简明教程 高等教育出版社,2007
[4] 蒋辉平主编 单片机原理与应用设计 北京航空航天大学出版社 2007
1.82 总体设计图