廖林 函数信号发生器的设计.docx
- 文档编号:6474715
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:18
- 大小:425.51KB
廖林 函数信号发生器的设计.docx
《廖林 函数信号发生器的设计.docx》由会员分享,可在线阅读,更多相关《廖林 函数信号发生器的设计.docx(18页珍藏版)》请在冰豆网上搜索。
廖林函数信号发生器的设计
重庆电力高等专科学校
计算机科学系
设计报告
课程名称
电子产品设计开发
设计名称
函数信号发生器的设计
班级
信息0911
姓名
廖林
学号
200903020243
教师
徐纯新
日期
2011-06-30
地点
机房及教室
设计成绩评定:
目录
1、设计概况...............................3
设计背景……………………………………3
基本原理…………………………………….4
提出解决问题的方案及选取…………………4
波形的确定…………………………………..7
2、波形说明...........7
3、其他说明.............9
单片机……………………………………..9
数模转换及运放部分………………………….11
显示部分………………………………………..13
按键部分………………………………………….13
电源部分…………………………………………..14
4、心得体会..............15
5、附录............16
程序………………………………………….16
原理图…………………………………………24
一、设计概况:
1.1设计背景
函数信号发生器是一种能能够产生多种波形的设备(电路),,如三角波、锯齿波、矩形波(含方波)、正弦波的电路被称为函数信号发生器。
函数信号发生器在电路实验和设备检测中具有十分广泛的用途。
现在我们通过对函数信号发生器的原理以及构成设计一个能变换出三角波、正弦波、方波的简易函数信号发生器。
在自动控制系统设计、调试和电子实验过程中,经常会遇到需要不同频率的正弦波、方波和三角波等信号作为信号源。
虽然有很多方法可以产生出方波还有正弦波,我们可以用数字电路的方法,也可以用模拟电路的方法。
常规的方法多采用分立元件达成非稳态的多谐振荡器,然后根据具体需要加入积分电路等构成正弦、方形和三角波等波形发生器。
这种信号发生器输出频率范围窄且电路设计参数设定比较繁琐,其频率大小的测量往往需要通过硬件电路的切换来实现不同范围值的测量,电路设计复杂,操作不便,这些方法在实际应用时很不方便,例如想要使频率可调或使相位差可调,就很麻烦,最主要就是通过很多硬件连接而成,这样就投入了很高的成本,同时遥控起来也很不方便。
而如果用单片机的话,这些就很可能很简单,通过对单片机的编程,我们不需要深入研究电路的复杂的连线,只需用C语言写出程序,在写入单片机,连上硬件电路。
就可以产生频率和相位都可调的方波。
所以这里就采用了软件编程的方式来进行波形的产生,利用编写波形数据表的方式来实现波形的产生。
我们通过对电路的分析,参数的确定选择出一种最适合本课题的方案。
在达到课题要求的前提下保证最经济、最方便、最优化的设计策略。
按照设计的方案选择具体的原件,焊接出具体的实物图,并在实验室对焊接好的实物图进行调试,观察效果并与课题要求的性能指标作对比。
最后分析出现误差的原因以及影响因素。
1.2基本原理
函数发生器的组成是指能自动产生正弦波、方波、三角波的电压波形的电路或者仪器。
电路形式可以采用由运放及分离元件构成;也可以采用单片集成函数发生器。
根据用途不同,有产生三种或多种波形的函数发生器,本课题介绍方波、三角波、正弦波函数发生器的方法。
1.3提出解决问题的方案及选取
方案一:
用运算放大器,粹的硬件电路来实现
由运算放大器单路及分立元件构成,方波——三角波——正弦波函数发生器电路组成如图所示,由于技术难点在三角波到正弦波的变换,故以下将详细介绍三角波到正弦波的变换。
以上那个是利用差分放大电路实现三角波——正弦波的变换,波形变换的原理是利用差分放大器的传输特性曲线的非线性,波形变换过程我们可以推算出,传输特性曲线越对称,线性区域越窄越好;三角波的幅度也是更加的合适,这样不断的调节就达到了要求,但是似乎太繁琐了。
方案二:
利用软件编程,利用AD9850来实现。
选用单片机作为实验课程的主控芯片,通过键盘输入所需信号的频率数值,该数值经单片机芯片处理后,形成控制字,输送给AD9850芯片,经AD9850芯片接受,识别,处理,产生我们需要的频率的正弦波,方波,三角波。
单片机与AD9850的接口既可采用并行方式,也可采用串行方式,这里采用的是并行方式。
为了充分发挥芯片的高速性能和节约单片机资源,本设计选择并行方式将AT89S52的P0口直接接至DDS的并行输入控制端(D0~D7)。
AD9850外接50MHz的有源晶振,产生的正弦信号经低通滤波器(LPF)去掉高频谐波后即可得到波形良好的模拟信号。
这样,将D/A转换器的输出信号经低通滤波后,接到AD9850内部的高速比较器上,即可直接输出一个抖动很小的方波。
另外,也可通过键盘编辑任意波形的输出信号。
但是在protues当中找不到这种芯片,所以放弃了这种方案。
方案三:
利用软件编程,利用DAC0832来实现。
设计中采用的是DAC0832型芯片.它是一种使用较多的8位D/A转换器,其转换时间为1μs,工作电压为+5V~+15V,基准电压为±5V或±10V.由于其内部有两个8位寄存器和一个8位D/A转换器,故可进行两级缓冲操作,使操作有很大的灵活性。
当中用到的DA0832是电流输出型的DA转换IC,所以要接运算放大器,转换成电压输出。
1.4波形的确定
1、从电路的设计过程来看电路分为三部分:
①正弦波部分②方波部分③三角波部分,但是由于使用的是利用软件编程,采用波形数据来实现的所以,这里就和为了一体。
2、波形产生部分
上图只是DAC0832的一部分,最主要的参上波形的是在程序里面,通过波形的数据来产生,这里只是为了将单片机传送出来的数字信号转换为模拟的连续波形信号,以至于在示波器上显示出来。
以上频率并未完全到达要求的指标范围,最主要的问题就是频率的调节还没有达到要求,同时最主要是阻抗方面还有很大的不足。
最严重的一个问题就是,在进行切换到方波时有一点失真,并不是完整的,规则的方波。
(当然这是运放部分的问题大一点)
二、波形说明:
正弦波、方波、三角波:
在本次设计当中,本来是希望采用硬件的波形发生和运算放大器、比较器等来实现对正弦波、方波、三角波的产生和调整,但是最后考虑到要用到红外遥控来进行选择,所以就采用了软件的方式产生波形,但是这样就带来了很大的麻烦,比如在程序当中该怎么来控制产生的波形还有就是怎么选择波形,经过查找资料,原来可以通过波形数据的方式来实现波形的数字信号的发住,然后经过DAC0832的芯片来进行数模转换,最后经过运放来调节频率和振幅等相关数据参数。
三、其他说明:
1、单片机:
本次实验采用的单片机是AT89C52,那么就该芯片做一个简单的介绍。
89C52是INTEL公司MCS-51系列单片机中基本的产品,属于标准的MCS-51的HCMOS产品,由于开发使用的时间比较久,所以更加的稳定,同时对于我们来说也是比较熟悉的,不需要再去学习,所以开发时间就大大缩短了。
它结合了HMOS的高速和高密度技术及CHMOS的低功耗特征,它基于标准的MCS-51单片机体系结构和指令系统,属于80C51增强型单片机版本,集成了时钟输出和向上或向下计数器等更多的功能。
89C52内置8位中央处理单元、256字节内部数据存储器RAM、8k片内程序存储器(ROM)32个双向输入/输出(I/O)口、3个16位定时/计数器和5个两级中断结构,一个全双工串行通信口,片内时钟振荡电路。
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高,这样就需要外接一个排阻,具体多大的电阻值,看运用而定,一般接的是1K到7.5K。
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口还可以作为AT89C52的一些特殊功能口。
以上的P2口在这一次设计当中是作为地址线而用的,就是为了给DAC0832提供片选地址。
P2口在这一次设计当中是作为数据线而用的,就是为了给DAC0832传输数据信号,以达到输出波形的作用。
P3口在此次设计当中是作为独立按键的控制端口的。
P1口则是为了给共阴极数码管驱动器而输出数据的端口,这里用了共阴极数码管驱动器最主要是由于只在单片机上实现这样的功能端口还不够。
2、数模转换及运放部分:
本次实验采用的芯片是DAC0832,那么就该芯片做一个简单的介绍。
DAC0832是8分辨率的D/A转换集成芯片。
与微处理器完全兼容。
这个DA芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到广泛的应用。
DA转换器是由8位输入锁存器、8位DAC寄存器、8位D/A转换电路及转换控制电路构成。
*D0~D7:
8位数据输入线,TTL电平,有效响应时间大于90ns(否则锁存器的数据会出错);
*ILE:
数据锁存允许控制信号输入线,高电平有效;
*CS:
片选信号输入线(选通数据锁存器),低电平有效;
*WR1:
数据锁存器写选通输入线,负脉冲(脉宽应大于500ns)有效。
由ILE、CS、WR1的逻辑组合产生LE1,当LE1为高电平时,数据锁存器状态随输入数据线变换,LE1的负跳变时将输入数据锁存;
*XFER:
数据传输控制信号输入线,低电平有效,负脉冲(脉宽应大于500ns)有效;
*WR2:
DAC寄存器选通输入线,负脉冲(脉宽应大于500ns)有效。
由WR2、XFER的逻辑组合产生LE2,当LE2为高电平时,DAC寄存器的输出随寄存器的输入而变化,LE2的负跳变时将数据锁存器的内容打入DAC寄存器并开始D/A转换。
*IOUT1:
电流输出端1,其值随DAC寄存器的内容线性变化;
*IOUT2:
电流输出端2,其值与IOUT1值之和为一常数;
*RBF:
反馈信号输入线,改变Rfb端外接电阻值可调整转换满量程精度;
*VCC:
电源输入端,Vcc的范围为+5V~+15V;
*VREF:
基准电压输入线,VREF的范围为-10V~+10V;
*AGND:
模拟信号地
*DGND:
数字信号地
本次实验采用的芯片是OPAMP,那么就该芯片做一个简单的介绍。
OPAMP是一种直流耦合,差动模式输入、通常为单端输出的高增益电压放大器,因为刚开始主要用于加法,乘法等运算电路中,因而得名。
通常使用运算放大器时,会将其输出端与其反相输入端连接,形成一负反馈组态。
原因是运算放大器的电压增益非常大,范围从数百至数万倍不等,使用负回授方可保证电路的稳定运作。
但是这并不代表运算放大器不能连接成正反馈组态,相反地,在很多需要产生震荡讯号的系统中,正回授组态的运算放大器是很常见的组成元件。
这次的设计采用本元件的主要原因是试验了很多次,就只有这样的元件产生出来的波形更加的理想,这个元件也是更加接近理想运算放大器的一个运算放大器。
3、显示部分:
本次设计采用的是四位一体共阴极数码管。
本次实验采用的芯片是MAX7219,那么就该芯片做一个简单的介绍。
MAX7219是一种集成化的串行输入/输出共阴极显示驱动器,它连接微处理器与8位数字的7段数字LED显示,也可以连接条线图显示器或者64个独立的LED。
其上包括一个片上的B型BCD编码器、多路扫描回路,段字驱动器,而且还有一个8*8的静态RAM用来存储每一个数据。
只有一个外部寄存器用来设置各个LED的段电流。
4、按键部分:
这里采用的是独立按键式的键盘,虽然用到的单片机端口比矩阵式键盘用的多,但是编程简单,所以选择了这样的方式。
另一个原因是没有红外遥控和接收部分。
当有按键按下时,按键处就由低电平变为高电平。
5、电源部分:
7805外形图
以上的电源部分的电路图是利用7805使220V交流电转为5V直流电的,所以中间用到了7805三端稳压器。
同时在220V交流电与整流桥之间应该接一个变压器,但是由于接上了之后仿真不了,所以没有接上变压器,这个变压器可以是线圈数量比为:
18比上1的比例,最后经过变压器变压后为12V到16V的交流电。
常见的三端稳压集成电路有正电压输出的78××系列和负电压输出的79××系列。
顾名思义,三端IC是指这种稳压用的集成电路,只有三条引脚输出,分别是输入端、接地端和输出端。
它的样子象是普通的三极管,TO-220的标准封装,也有9013样子的TO-92封装。
用78/79系列三端稳压IC来组成稳压电源所需的外围元件极少,电路内部还有过流、过热及调整管的保护电路,使用起来可靠、方便,而且价格便宜。
该系列集成稳压IC型号中的78或79后面的数字代表该三端集成稳压电路的输出电压,如7806表示输出电压为正6V,7909表示输出电压为负9V。
因为三端固定集成稳压电路的使用方便,电子制作中经常采用。
四、心得体会
通过对本次红外遥控函数信号发生器的设计,我深刻的知道了自己的很多方面不足,特别是作为一个组长,我还有很多方面不足,很很多本组其他成员比起来,在某些方面还是很欠缺的,特别是在最开始分配任务的时候完全不知道该怎么办,同时伴随着对本组成员的全部知识了解情况不是很了解。
在几次的分组和调节的过程下,才最后确定了下来。
C语言很熟悉的就负责主要困难的编程,即为红外遥控和接收部分。
在与本设计最相关的方面,我就是通过在书上查找,同时伴随着在网上搜索,毕竟自己的很多相关方面的专业知识还没有到达随时拿来用就可以的那种地步。
经过了这一学期的学习到了期末的时候才了解到只有理论联系到了实际才可以达到学以致用,明白了学以致用的真谛。
我们最重要的即使用到所学的知识去解决实际的问题,提高我们的动手能力,同时在这样的过程当中去熟悉自己所学的理论知识。
五、附录:
1、程序:
Main.C
#include
#include
#include
#include
#defineDACXBYTE[0xfeff]//P2.0接CS这样进行片选
sbitkey0=P3^2;//增减切换键
sbitkey1=P3^3;//粗调
sbitkey2=P3^4;//细调
sbitkey3=P3^5;//选择正弦、三角、方波
unsignedchari,j;
unsignedintcounter,step,m;
//定时器0进行初始化
voidInit_Timer0(void)
{
TMOD=(TMOD&0XF0)|0X01;
TH0=0xff;
TL0=0x00;
TR0=1;
ET0=1;
}
main()
{
unsignedintf,n;
delay_ms(500);//延时
InitAllComponents();
disp7219(000);
Init_Timer0();
step=18;
EA=1;
while
(1)
{if(key0==0)
n=n+1;
if(n==0&&key1==0)if(step<4096)step+=180;
if(n==0&&key2==0)if(step<4096)step+=18;
if(n==1&&key1==0)if(step>180)step-=180;
if(n==1&&key2==0)if(step>18)step-=18;
if(n==2)n=0;
if(key3==0)m=m+1;
if(m==3)m=0;
while((!
key0)||(!
key1)||(!
key2)||(!
key3));
f=step/18;
disp7219(f);}
}
voidOS_Timer0(void)interrupt1using2
{TH0=0xff;
TL0=0x00;
counter=counter+step;
DAC=type[m][(unsignedint)counter>>8];
}
MAX7219.H
#ifndef__MAX7219_H__
#define__MAX7219_H__
#defineMAX7219NUM1
//引脚连接
sbitDIN=P1^0;
sbitLOAD=P1^1;
sbitCLK=P1^2;
typedefunsignedcharuchar;
typedefunsignedintuint;
voiddelay_ms(uintn)//延时1m秒
{
ucharj;
while(n--)
for(j=0;j<120;j++);
}
voidSendChar(ucharCharData)
{ucharii;
for(ii=0;ii<8;ii++)
{
CLK=0;
if(((CharData< DIN=1; else DIN=0; CLK=1; } } voidSendAddrDataMulti(ucharAddr,ucharData,ucharNum) { LOAD=0; do { SendChar(Addr); SendChar(Data); } while(--Num); LOAD=1; } voidSendAddrDataSingle(ucharAddr,ucharData) { SendChar(Addr); SendChar(Data); } voidInitAllComponents(void) {SendAddrDataMulti(0xf9,0xff,MAX7219NUM); SendAddrDataMulti(0xfa,0x0f,MAX7219NUM); SendAddrDataMulti(0xfb,0xf7,MAX7219NUM); SendAddrDataMulti(0xfc,0x01,MAX7219NUM); SendAddrDataMulti(0xff,0x00,MAX7219NUM); } disp7219(unsignedlongdat) {unsignedchari; unsignedcharled[4]; led[3]=dat%10; led[2]=dat/10%10; led[1]=dat/100%10; led[0]=dat/1000%10; for(i=0;i<8;i++) {LOAD=0; SendAddrDataSingle(i+1,led[i]); LOAD=1;} } #endif DAIMA.H #ifndef__DAIMA_H__ #define__DAIMA_H__ unsignedcharcodetype[3][256]={ {//正弦波 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x2,0x03,0x03,0x04,0x05, 0x06,0x07,0x08,0x09,0x0b,0x0c,0x0d,0x0f,0x10,0x12,0x13,0x15,0x17, 0x19,0x1b,0x1d,0x1f,0x21,0x23,0x25,0x27,0x2a,0x2c,0x2e,0x31,0x33, 0x36,0x39,0x3b,0x3e,0x41,0x43,0x46,0x49,0x4c,0x4f,0x52,0x55,0x58, 0x5b,0x5e,0x61,0x64,0x67,0x6a,0x6d,0x70,0x73,0x76,0x7a,0x7d,0x80, 0x83,0x86,0x89,0x8c,0x8f,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8, 0xab,0xae,0xb1,0xb4,0xb6,0xb9,0xbc,0xbf,0xc1,0xc4,0xc7,0xc9,0xcc, 0xce,0xd1,0xd3,0xd5,0xd8,0xda,0xdc,0xde,0xe0,0xe2,0xe4,0xe6,0xe8, 0xea,0xeb,0xed,0xef,0xf0,0xf1,0xf3,0xf4,0xf5,0xf6,0xf8,0xf9,0xf9, 0xfa,0xfb,0xfc,0xfc,0xfd,0xfd,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe, 0xfe,0xfe,0xfe,0xfd,0xfd,0xfc,0xfc,0xfb,0xfa,0xf9,0xf9,0xf8,0xf6, 0xf5,0xf4,0xf3,0xf1,0xf0,0xef,0xed,0xeb,0xea,0xe8,0xe6,0xe4,0xe2, 0xe0,0xde,0xdc,0xda,0xd8,0xd5,0xd3,0xd1,0xce,0xcc,0xc9,0xc7,0xc4, 0xc1,0xbf,0xbc,0xb9,0xb6,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f, 0x9c,0x99,0x96,0x93,0x8f,0x8c,0x89,0x86,0x83,0x80,0x7d,0x7a,0x76, 0x73,0x70,0x6d,0x6a,0x67,0x64,0x61,0x5e,0x5b,0x58,0x55,0x52,0x4f, 0x4c,0x49,0x46,0x43,0x41,0x3e,0x3b,0x39,0x36,0x33,0x31,0x2e,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 廖林 函数信号发生器的设计 函数 信号发生器 设计