天津理工大学中环信息学院电子系单片机课程设计报告
题目:简易低频信号源的设计
班级09信科2班
指导教师
设计成员
电子系
2012年6 月18 日
一.课程设计意义
二.课程设计任务书
三、课程设计进度计划及检查情况记录表
四、成绩评定与评语
题目:
低频信号发生器的实现主要有如下几种:
一:利用单片机与精密函数发生器构成的程控信号发生器。这种信号发生器能够克服常规信号发生器的缺陷,保证在某个信号的频带内正弦波的失真度小于0.5%。它的输出信号频率调整和幅值调整都由单片机完成。但是,由于数模转换器的非线性误差和函数发生器本身的非线性误差,这种信号发生器输出信号的频率与理论值会有一定的偏差。
二:利用DSP处理器,根据幅值,频率参数,计算产生高精度的信号所需数据表,经数模转换后输出,形成需要的信号波形。这种信号发生器可实现程控调幅,调频。但这种信号发生器输出频率不能连续可调,计算烦琐,控制也不便。
三:基于单片机,锁相环,可编程分频、相位累加、存储器波形存储以及D/A转换器等组成的数字式函数信号发生器。输出的频率的大小由锁相环和可编程计数器来控制,最终由地址发生器对存储器中的波形数据硬件扫描,单片机提供要输出的波形数据给存储器。这种方案电路简洁,不受单片机的时钟频率的限制,输出信号精度高,频率“连续”,稳定性好,可靠性高,功耗低,调频,调
幅都很方便,而且可简化软件设计,实现模块化设计的要求。
四:考虑到输出信号的频率较低,使用单片机作为控制器使用单片机作为控制器,用中断查表法完成波形数据的输出,再用D/A转换器输出规定的波形信号。方波信号直接由单片机的端口输出。结合功能要求情况,使用80C51单片机作为控制器,用DAC0832作为D/A转换器。功能按键使用单片机的3个端口。能使输出频率有较好的稳定性,元器件比较常见,价格低廉,电路设计方便。
综合考虑,方案四各项性能和指标都优于其他几种方案,能使输出频率有较好的稳定性,充分体现了模块化设计的要求,而且这些芯片及器件均为通用器件,在市场上较常见,价格也低廉,样品制作成功的可能性比较大,所以本设计采用方案四。其系统组成原理框图如图2.1所示。
图2.1 简易低频信号源系统结构框图
3系统电路设计
3.1 系统控制电路
控制芯片选择80C51单片机。芯片为40脚双列直插式封装,工作电压为2.7~6V,具有13个I/O口,完全满足系统设计要求。控制系统按最小化工作模式设计,p3.2为波形选择,p3.3为频率变换。LM324在图中不接电源,只起到跟随器的作用,节能环保。
3.1.1 D/A转换部分
DAC0832是CMOS工艺制造的8位数/模(D/A)转换器,属于8位电流输出型D/A转换器,转换时间为1US,片内带输入数字锁存器,其引脚排列和内部组成原理如图(2)所示。DAC0832与单片机接成数据直接写入方式,当单片机把一个数据直接写入DAC寄存器时,DAC0832的输出模拟电压信号随之变化。利用D/A转换器可以产生各种波形,如方波,三角波,锯齿波等以及它们组合产生的复合波形和不规则波形。这些复合波形利用标准的测试设备很难产生的。
3.1.2 DAC0832简要介绍
(1)DAC0832的主要性能
输入数据量为8位。
采用CMOS工艺,所有引脚的逻辑电平与TTL兼容。
数据输入可以采用双缓冲,单缓冲或直通方式。
转换时间:1US。
精度:1LSB。
分辨率:8位。
单一电源:5~15V,功耗20MV。
参考电压:+10~ —10V。
(2)DAC0832的引脚功能
D7~D0:8位数据量输入。
ILE:数据输入锁存允许,高电平有效。
(3)CS:片选。
WR1:输入寄存器写信号。当ILE、CS、WR1同时有效时,数据装入输入寄存器,实现输入数据的第一级缓冲。
XFER:数据传送控制信号。控制从输入寄存器到DAC寄存器的内部数据传送。
WR2:DAC寄存器写信号。当XFER和WR2均有效时,将输入寄存器中的数据装
入DAC寄存器并开始D/A 转换,实现输入数据的第二级缓冲。
Vref:参考电压源。电压为-10~+10V。
Rfb:内部反馈电阻接线端。
Iout1:DAC电流输出1。其值随输入数字量线性变化。
Iout2:DAC电流输出2。
—当DAC寄存器内容全为1时,Iout1最大,Iout2=0;
—当DAC寄存器内容全为0时,Iout1=0,Iout2最大;
—当DAC寄存器内容为N时,Iout1= Vref*N/(256* Rfb),
Iout2= Vref/ Rfb—Iout1,无论N值多大,
Iout1+ Iout2= Vref/ Rfb*(1—28)=常数,约等于Vref/ Rfb。
VCC:工作电源。其值为+5~15V,典型值为+15V。
AGND:模拟信号地线。
DGND:数字信号地线。
(4)DAC0832的工作方式
DAC0832有双缓冲、单缓冲和直通3种工作方式。
双缓冲工作方式:进行两级缓冲。
单缓冲工作方式:只进行一级缓冲。
直通工作方式:不进行缓冲,适应于比较简单的场合。
3.1.3 80C51管脚说明
单片机采用MCS-51系列单片机80C51,其芯片引脚图3.1所示:
图3.1 8051引脚
管脚功能如下:
VCC:供电电压。
GND:接地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储
器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH 编程和校验时,P1口作为第八位地址接收。
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL 门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为80C51的一些特殊功能口,如下表所示:
表3.1 P3口的第二功能
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作
对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:来自反向振荡器的输出。
4电路设计原理图
4.1 简易低频信号源电路原理图
5 系统程序的设计
5.1 初始化子函数
初始化子函数的主要工作是设置每次波形输出之间的时间间隔,即延时程序从而达到改变频率的作用。
图4.1 初始化子函数程序流程图
5.2 键扫描子函数
键扫描子函数的任务是检查3个按键中是否有键按下,若有键按下,则执行相应的功能。这里3个按键分别用于频率增加、频率减小和正弦波与三角波的选择功能。其程序流程图如图4.2所示:
图4.2 查键子函数程序流程图
5.3 波形数据产生子函数
波形数据产生函数是定时器T1的中断程序。当定时器计数益出时,发生一次中断。当发生中断时,单片机按次序将波形数据表中的波形数据一一送入DAC0832,DAC0832根据输入的数据大小输出对应电压。波形数据产生子函数程序流程图如图4.3所示:
图4.3 波形数据产生子函数程序流程图
5.4 主函数
主函数的任务是进行上电初始化,并在程序运行中不断查询按键情况执行相应的功能。以下是简易低频信号源控制C源程序清单:
#include
#define uchar unsigned char
#define uint unsigned int
uchar code sin_tab[256]={
0x80,0x83,0x85,0x88,0x8A,0x8D,0x8F,0x92,
0x94,0x97,0x99,0x9B,0x9E,0xA0,0xA3,0xA5,
0xA7,0xAA,0xAC,0xAE,0xB1,0xB3,0xB5,0xB7,
0xB9,0xBB,0xBD,0xBF,0xC1,0xC3,0xC5,0xC7,
0xC9,0xCB,0xCC,0xCE,0xD0,0xD1,0xD3,0xD4,
0xD6,0xD7,0xD8,0xDA,0xDB,0xDC,0xDD,0xDE,
0xDF,0xE0,0xE1,0xE2,0xE3,0xE3,0xE4,0xE4,
0xE5,0xE5,0xE6,0xE6,0xE7,0xE7,0xE7,0xE7,
0xE7,0xE7,0xE7,0xE7,0xE6,0xE6,0xE5,0xE5,
0xE4,0xE4,0xE3,0xE3,0xE2,0xE1,0xE0,0xDF,
0xDE,0xDD,0xDC,0xDB,0xDA,0xD8,0xD7,0xD6, 0xD4,0xD3,0xD1,0xD0,0xCE,0xCC,0xCB,0xC9,
0xC7,0xC5,0xC3,0xC1,0xBF,0xBD,0xBB,0xB9,
0xB7,0xB5,0xB3,0xB1,0xAE,0xAC,0xAA,0xA7,
0xA5,0xA3,0xA0,0x9E,0x9B,0x99,0x97,0x94,
0x92,0x8F,0x8D,0x8A,0x88,0x85,0x83,0x80,
0x7D,0x7B,0x78,0x76,0x73,0x71,0x6E,0x6C,
0x69,0x67,0x65,0x62,0x60,0x5D,0x5B,0x59,
0x56,0x54,0x52,0x4F,0x4D,0x4B,0x49,0x47,
0x45,0x43,0x41,0x3F,0x3D,0x3B,0x39,0x37,
0x35,0x34,0x32,0x30,0x2F,0x2D,0x2C,0x2A,
0x29,0x28,0x26,0x25,0x24,0x23,0x22,0x21,
0x20,0x1F,0x1E,0x1D,0x1D,0x1C,0x1C,0x1B,
0x1B,0x1A,0x1A,0x1A,0x19,0x19,0x19,0x19,
0x19,0x19,0x19,0x19,0x1A,0x1A,0x1A,0x1B,
0x1B,0x1C,0x1C,0x1D,0x1D,0x1E,0x1F,0x20,
0x21,0x22,0x23,0x24,0x25,0x26,0x28,0x29,
0x2A,0x2C,0x2D,0x2F,0x30,0x32,0x34,0x35,
0x37,0x39,0x3B,0x3D,0x3F,0x41,0x43,0x45,
0x47,0x49,0x4B,0x4D,0x4F,0x52,0x54,0x56,
0x59,0x5B,0x5D,0x60,0x62,0x65,0x67,0x69,
0x6C,0x6E,0x71,0x73,0x76,0x78,0x7B,0x7D};
uchar code thr_tab[256]=
{0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,
0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,
0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,
0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,
0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,
0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, 0xBF,0xBE,0xBD,0xBC,0xBB,0xBA,0xB9,0xB8, 0xB7,0xB6,0xB5,0xB4,0xB3,0xB2,0xB1,0xB0,
0xAF,0xAE,0xAD,0xAC,0xAB,0xAA,0xA9,0xA8, 0xA7,0xA6,0xA5,0xA4,0xA3,0xA2,0xA1,0xA0,
0x9F,0x9E,0x9D,0x9C,0x9B,0x9A,0x99,0x98,
0x97,0x96,0x95,0x94,0x93,0x92,0x91,0x90,
0x8F,0x8E,0x8D,0x8C,0x8B,0x8A,0x89,0x88,
0x87,0x86,0x85,0x84,0x83,0x82,0x81,0x80,
0x7F,0x7E,0x7D,0x7C,0x7B,0x7A,0x79,0x78,
0x77,0x76,0x75,0x74,0x73,0x72,0x71,0x70,
0x6F,0x6E,0x6D,0x6C,0x6B,0x6A,0x69,0x68,
0x67,0x66,0x65,0x64,0x63,0x62,0x61,0x60,
0x5F,0x5E,0x5D,0x5C,0x5B,0x5A,0x59,0x58,
0x57,0x56,0x55,0x54,0x53,0x52,0x51,0x50,
0x4F,0x4E,0x4D,0x4C,0x4B,0x4A,0x49,0x48,
0x47,0x46,0x45,0x44,0x43,0x42,0x41,0x40,
0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,
0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,
0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,
0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,
0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,
0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,
0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,
0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F}; uchar size=1;////波形选?
uchar ff1=1; //// 频率
///////////延时函数///////////////////////
void delay(uchar t)
{ uchar m;
uint i;
for (i=t;i>0;i--)
for(m=28;m>0;m--);
}
////////////////////////////////////////
//正弦波
void sin()
{
uchar a;
for(a=0;a<255;a++)
{
P2=sin_tab[a];
delay(ff1);
}
}
//////////////////////////////////////
//三角波
void sanjiao()
{
uchar a;
for(a=0;a<255;a++)
{
P2=thr_tab[a];
delay(ff1);
}
}
//////////////////////////////////
///////方波/////////////
void fangbo()
{
uchar a;
for(a=0;a<177;a++)
{
P2=0xdf;
delay(ff1);
}
for(a=0;a<177;a++)
{P2=0x10;
delay(ff1);
}
}
//外部中断0子
int0() interrupt 0
{
size++; //中断一次加1
if(size>3)
size=1;
}
//##################################### //##################################### //外部中断1子函数
int1() interrupt 2
{
ff1++; //中断一次加1
if(ff1>3)
ff1=1;
}
//##################################### void inint()
{
IT0=1; //下降沿触发
EX0=1; //开中断0
IT1=1; //下降沿触发
EX1=1; //开中断1
EA=1; //开总中断
}
///////////////////////////////////////////
void main(void)
{ inint();
while(1)
{
switch(size)
{
case 1:
fangbo(); //方波
break;
case 2:
sanjiao(); //三角波
break;
case 3:
sin(); //正弦波
break;
default: fangbo();
break;
}
}
}
6仿真电路图6.1方波
图6.1方波仿真
6.2三角波
图6.2三角波仿真6.3正弦波
图6.3正弦波仿真图
6.4改变频率
图6.4频率变化仿真图
小结
此次课程设计主要阐述了高精度数字式函数信号发生器的软、硬件设计。由于采用了单片机,使所设计的信号源具有较大的灵活性。利用单片机80C51,以DAC0832作为D/A转换器等部件,此函数信号发生器调节灵活方便,输出波形精度高且波形较为稳定。
课程设计是相当综合培养一个人的能力,不仅对硬件加深了理解,如对DAC0832以及LM324等芯片应用更加熟悉。通过编程,对C语言的使用也更加熟练。同时对程序的调试及仿真,也熟悉了KEIL与PROTUS等软件。
通过实践,我发现单片机的功能相当强大。如果要用模电的方法实现相同的功能,那需要相当的工程。而单片机却能极其方便精确的实现。
致谢
两周的课程设计结束了,通过这两周的实训,我对单片机有了更具体的了解。
平时老师在课堂上讲的基本理论在实践中终于得以实现。这需要感谢我的专业课田老师的悉心教导,耐心的纠正。
在设计,组装电路的过程中。有过很多困难,但是在老师,同学集体的努力