当前位置:文档之家› 简易低频信号源的设计

简易低频信号源的设计

简易低频信号源的设计
简易低频信号源的设计

天津理工大学中环信息学院电子系单片机课程设计报告

题目:简易低频信号源的设计

班级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等软件。

通过实践,我发现单片机的功能相当强大。如果要用模电的方法实现相同的功能,那需要相当的工程。而单片机却能极其方便精确的实现。

致谢

两周的课程设计结束了,通过这两周的实训,我对单片机有了更具体的了解。

平时老师在课堂上讲的基本理论在实践中终于得以实现。这需要感谢我的专业课田老师的悉心教导,耐心的纠正。

在设计,组装电路的过程中。有过很多困难,但是在老师,同学集体的努力

相关主题
文本预览
相关文档 最新文档