电工系毕业设计Word文档格式.docx
《电工系毕业设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《电工系毕业设计Word文档格式.docx(24页珍藏版)》请在冰豆网上搜索。
譬如在示波器、电视机等仪器中,为了使电子按照一定规律运动,以利用荧光屏显示图像,常用到锯齿波产生器作为时基电路。
信号发生器作为一种通用的电子仪器,在生产、科研、测控、通讯等领域都得到了广泛的应用。
但市面上能看到的仪器在频率精度、带宽、波形种类及程控方面都已不能满足许多方面实际应用的需求。
加之各类功能的半导体集成芯片的快速生产,都使我们研制一种低功耗、宽频带、能产生多种波形并具有程控等功能的低频信号发生器成为可能。
1.2研究目的和意义
便携式和智能化越来越成为仪器的基本要求,对传统仪器的数字化,智能化,集成化也就显得尤为重要。
平时常用信号源产生正弦波,方波,三角波等常见波形作为待测系统的输入,测试系统的性能。
在某些场合,我们需要特殊波形对系统进行测试,这是传统的模拟信号发生器和数字信号发生器很难胜任的。
利用单片机的强大功能,设计合适的人机交互界面,使用户能够通过手动的设定,设置所需波形。
本设计课题研究和制作的低频信号发生系统,其工作流程:
波形的设定,单片机控制和数据输出(键盘控制),D/A转换,信号转换与放大,示波器波形显示。
具有电路实现简单,成本低,波形易调整等优点。
1.3发展历史与现状
在70年代前,信号发生器主要有两类:
正弦波发生器和脉冲波发生器,而函数发生器介于两类之间,能够提供正弦波、余弦波、方波、三角波等几种常用标准波形,产生其它波形时,需要采用较复杂的电路和机电结合的方法。
这个时期的波形发生器多采用模拟电子技术,而且模拟器件构成的电路存在着尺寸大、价格贵、功耗大等缺点,并且要产生较为复杂的信号波形,则电路结构非常复杂。
同时,主要表现为两个突出问题:
一是通过电位器的调节来实现输出频率的调节,因此很难将频率调到某一固定值;
二是脉冲的占空比不可调节。
在70年代后,微处理器的出现,可以利用处理器、A/D/和D/A,硬件和软件使波形发生器的功能扩大,产生更加复杂的波形。
这时期的波形发生器多以软件为主,实质是采用微处理器对DAC的程序控制,就可以得到各种简单的波形。
2硬件电路设计
2.1设计思路
信号发生器的基本构成有如下几个部分:
控制模块、D/A转换模块、按键模块、指示模块等部分,各部分之间的关系可用如下所示的设计框图2-1表示。
图2-2流程图
本设计的低频函数信号发生器由MCU、D/A转换电路、电压转换放大电路和电源等电路组成,工作原理为当程序载入MCU后,上电直接输出方波,通过按下波形选择按键分别出现三角波、正弦波、锯齿波,再按下后又回到方波,如此循环,其它按键可调波形的幅度和频率,原理框图如图2-1所示。
图2-3原理框图
本设计采用STC89C52单片机为控制核心,通过DAC0832数模转换器,通过将数字信号转换为模拟信号来输出多种模拟波形信号,再经过两个运算放大器实现电压信号的转变和放大,从而输出4种模拟波形,通过编写程序,来控制输出波形的频率和幅度,并实现波形之间的切换。
2.2控制模块
控制模块以STC89C52单片机为核心,周围接外接电路。
STC89C52单片机的介绍和使用方法如下:
STC89C52是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用STC公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,STC89C52单片机在电子行业中有着广泛的应用。
其引脚图如图2-4所示。
图2-4:
STC89C52引脚图
主要特性如下:
(1)兼容MCS51指令系统
(2)8k可反复擦写(大于1000次)FlashROM;
(3)32个双向I/O口;
(4)256x8bit内部RAM;
(5)3个16位可编程定时/计数器中断;
(6)时钟频率0-24MHz;
(7)2个串行中断,可编程UART串行通道;
(8)2个外部中断源,共8个中断源;
(9)2个读写中断口线,3级加密位;
(10)低功耗空闲和掉电模式,软件设置睡眠和唤醒功能;
(11)有PDIP、PQFP、TQFP及PLCC等几种封装形式,以适应不同需求
单片机主要管脚有:
XTAL1(19脚)和XTAL2(18脚)为振荡器输入输出端口,外接12MHz晶振。
RST/Vpd(9脚)为复位输入端口,外接电阻电容组成的复位电路。
VCC(40脚)和VSS(20脚)为供电端口,分别接+5V电源的正负端。
P0~P3为可编程通用I/O脚,其功能用途由软件定。
,
本设计中单片机引脚连接如2-5图所示:
图2-5单片机引脚连接图
在本设计中,P3端口(32~39脚)被定义为开关按键功能控制端口,分别与相应的开关按键相连接,控制波形转换以及幅度和频率的调整。
P1端口为数据输出端,输出255个数以产生不同的波形,P0口接波形指示电路,不同的led灯表示单片机输出不同种波形。
2.3DA转换模块
本设计中DA转换采用DAC0832模块,DAC0832是一种电流输出型D/A转换器,可与微处理器直接进行控制连接,是美国国民半导体公司研制的一种8位D/A转换芯片。
此外,还有DAC0830和DAC0831。
由于器件采用吸纳进的CMOS工艺,因此功耗低、输出漏电流误差较小,性价比高,因此广泛应用于目前很多小型的D/A转换电路设计中。
其引脚图如图2-6所示:
图2-6DAC0832引脚图
其中待转换的8位数字量由芯片的8位数据输入线D0~D7输入,经DAC0832转换后,通过2个电流输出端IOUT1和IOUT2输出,IOUT1是逻辑电平为"
1"
的各位输出电流之和,IOUT2是逻辑电平为"
0"
的各位输出电流之和。
另外,ILE、
、
和
是控制转换的控制信号。
在本设计中,DAC0832与单片机连接方式详见下图:
图2-7DAC0832与单片机连图
其中,DAC0832的引脚详细连接如下所述:
(1)DAC0832的8位的数据输入端DI7~DI0接单片机的P1.7~P1.0口输入端数据,将255个不同的数据转换成对应的模拟量。
(2)IOUT1和IOUT2为DAC0832的电流输出端,分别接放大器的+、-输入端,通过放大器转换为电压信号。
(3)Vcc为芯片供电电压,接+5V电压。
(4)RFB:
反馈电阻引出端,DAC0832内部已经有反馈电阻,所以RFB端可以直接接到外部运算放大器的输出端,这样相当于将一个反馈电阻接在运算放大器的输出端和输入端之间。
(5)VREF:
参考电压输入端,此端接一个正5V电压,它决定0至255的数字量转化出来的模拟量电压值的幅度最大为5V,幅度最小变化量为0.02V。
VREF端与D/A内部T形电阻网络相连。
(6)WR2、
和XFER直接接地,使第二级8位DAC寄存器的输入端到输出端直通,只有第一级8位输入寄存器置成可选通、可锁存的单缓冲输入方式。
(7)ILE接+5V高电平,输入寄存器的状态随数据输入线状态变化,LE的负跳变将输入数据线上的信息存入输入寄存器。
2.5MCU复位电路
单片机复位电路是指单片机的初始化操作。
单片机启运运行时,都需要先复位,其作用是使CPU和系统中其他部件处于一个确定的初始状态,并从这个状态开始工作。
因而,复位是一个很重要的操作方式。
复位电路的基本功能是:
系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。
为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。
单片机的复位是由外部的复位电路来实现的。
片内复位电路是复位引脚RST通过一个斯密特触发器与复位电路相连,斯密特触发器用来抑制噪声,它的输出在每个机器周期的S5P2,由复位电路采样一次。
复位电路通常采用上电自动复位和按钮复位两种方式。
本设计复位电路如下图2-8所示,
图2-8RC复位电路
单片机的复位操作使单片机进入初始化状态,其中包括使程序计数器PC=0000H,这表明程序从0000H地址单元开始执行。
2.6晶振电路
晶振是晶体振荡器的简称,在电气上它可以等效成一个电容和一个电阻并联再串联一个电容的二端网络,电工学上这个网络有两个谐振点,以频率的高低分其中较低的频率是串联谐振,较高的频率是并联谐振。
STC89C52单片机内部有一个用于构成振荡器的高增益反相放大器。
引脚XTAL1和XTAL2分别是此放大器的输入端和输出端。
这个放大器与作为反馈元件的片外晶体谐振器一起构成一个自激振荡器。
外接晶体谐振器以及电容C1和C2构成并联谐振电路,接在放大器的反馈回路中。
对外接电容的值虽然没有严格的要求,但电容的大小会影响震荡器频率的高低、震荡器的稳定性、起振的快速性和温度的稳定性。
因此,此系统电路的晶体振荡器的值为12MHz,电容应尽可能的选择陶瓷电容,电容值约为30μF。
在焊接刷电路板时,晶体振荡器和电容应尽可能安装得与单片机芯片靠近,以减少寄生电容,更好地保证震荡器稳定和可靠地工作.
晶振有一个重要的参数,那就是负载电容值,选择与负载电容值相等的并联电容,就可以得到晶振标称的谐振频率。
晶体振荡电路如下图2-9所示。
图2-9振荡电路
2.7I/V转换电路
信号发生器一般要求输出是电压,DAC0832为电流输出型转换器,所以还必须经过一个外接的运算放大器LM324转换成电压。
LM324芯片介绍如下:
LM324是四运放集成电路,它采用14脚双列直插塑料封装,外形如图所示。
它的内部包含四组形式完全相同的运算放大器,除电源共用外,四组运放相互独立。
每一组运算放大器可用下图3-6中图1所示的符号来表示,它有5个引出脚,其中“+”、“-”为两个信号输入端,“V+”、“V-”为正、负电源端,“Vo”为输出端。
两个信号输入端中,Vi-(-)为反相输入端,表示运放输出端Vo的信号与该输入端的相位相反;
Vi+(+)为同相输入端,表示运放输出端Vo的信号与该输入端的相位相同。
LM324的引脚排列见下图3-6的图2。
由于LM324四运放电路具有电源电压范围宽,静态功耗小,可单电源使用,价格低廉等优点,因此被广泛应用在各种电路。
LM324对应引脚如图2-10所示:
图2-10LM324引脚图
图2-11所示为两级运算放大器LM324组成的模拟电压输出电路。
从第一个运放输出为单极性模拟电压,从第二个运放输出为双极性模拟电压。
图2-11波形转换电路
3软件程序设计
3.1软件设计思路
本设计中的应用软件是根据功能要求而设计的,能可靠地实现系统的各种功能。
本软件设计具有下列特点:
(1)根据软件功能要求,将系统软件分成若干个独立的部分。
设计出软件的总体结构,结构清晰、流程合理。
(2)树立结构化程序设计风格,各功能程序模块化、子程序化。
既便于调试、链接,又便于移植、修改。
(3)以简明、直观法对任务进行描述,在编写应用软件之前,绘制出程序流程图。
(4)合理分配系统资源,包括ROM、RAM、定时数器、中断资源等。
(5)在程序的有关位置处写上功能注释,提高程序的可读性。
(6)加强软件抗干扰设计,提高系统应用可靠性。
Keil的介绍:
Keil是德国开发的一个51单片机开发软件平台,最开始只是一个支持C语言和汇编语言的编译器软件。
后来随着开发人员的不断努力以及版本的不断升级,使它已经成为了一个重要的单片机开发平台,不过KEIL的界面并不是非常复杂,操作也不是非常困难,很多工程师的开发的优秀程序都是在KEIL的平台上编写出来的。
可以说它是一个比较重要的软件,熟悉他的人很多很多,操作有不懂的地方只要找相关的书看看,到相关的单片机技术论坛问问,很快就可以掌握它的基本使用了。
Keil的µ
Vision2可以进行纯粹的软件仿真(仿真软件程序,不接硬件电路);
也可以利用硬件仿真器,搭接上单片机硬件系统,在仿真器中载入项目程序后进行实时仿真;
还可以使用µ
Vision2的内嵌模块KeilMonitor-51,在不需要额外的硬件仿真器的条件下,搭接单片机硬件系统对项目程序进行实时仿真。
本系统的程序设计要注意处理好几个硬件功能在程序执行上的次序,具体处理可放到子程序中。
子程序主要包含两大方面,其一为波形产生子程序,其二为案件处理程。
主程序流程图如图3-1所示:
图3-1主程序流程图
主程序流程如下所述:
(1)程序初始化,执行按键扫描程序,判断S3键是否按下,是则做波形切换处理,否则进入下一步;
(2)扫描S1,S2键是否按下,是则做调幅处理,否则进入下一步;
(3)扫描S4,S5键是否按下,是则做调频处理,否则返回程序,重新执行按键扫描程序。
按键处理子程序相对比较简单,只需要先扫描是否有按键动作,然后,再根据按键对应的功能进行程序操作。
对于增减幅度按键的动作,可先检查当前输出波形是否为正弦波。
若不是,则可令幅度值加5或减5,对应的电压值为加或减0.1V;
若是,则可通过减少其幅值计算时的负倍数来达到增大幅值的目的,也可通过增加其幅值计算时的负倍数来达到减小幅值的目的通过调幅增和调幅减按键,幅度数值变化范围为50-250,对应的电压值为1V-5V。
对于增减频率按键的动作,由于本程序设计是通过调节延时时间来实现调节输出波形频率的,因此,增大或减小延时时间,就可达到减小或增大频率的目的,通过频率增和频率减键,频率的变化范围是5Hz-50Hz。
波形产生子程序是本次程序设计的核心。
信号发生器输出4种波形,因而对应就会有4个相应的波形产生子程序。
下面开始进行分别介绍。
3.2方波程序
方波输出一组高电平与低电平交替产生的信号,因此,需要先令信号输出端输出高电平,然后令其按照规定的延时时间保持此电平不变;
再令信号输出端输出低电平,然后也令其按照规定延时时间保持此电平不变,如此反复,就可实现输出方波的目的。
程序如下所示。
voidfang()
{
if(flag==0)////判断信号标志位
{
if(s_Counter++>
=199)//延时
{
flag=1;
s_Counter--;
}
P1=fudu;
//输出高电平
}
else
if(s_Counter--<
=1)//延时
flag=0;
P1=0;
//输出低电平
delay(k);
//延时
}
程序流程图如图3-2所示:
图3-2方波程序流程图
具体流程如下所述:
(1)判断flag寄存器信号为零则输出高电平并延时,为1则输出低电平并延时。
(2)将flag信号取反并重新开始判断。
3.3锯齿波程序
锯齿波输出中的斜线从宏观上看,是从0V线性下降到负的最大值。
实际上它是被分成256个小台阶,每个小台阶暂留的时间为执行一遍程序所需的时间。
换句话说,锯齿波的产生就是用一个个小台阶来逼近,在一个周期内从最小值开始逐步递增,达到最大值后又回到最小值。
如此循环下去,当台阶间隔很小时,波形基本上近似于直线。
适当选择循环的时间,可以得到不同周期的锯齿波。
voidjuchi()
if(s_Counter++>
=fudu)
s_Counter=0;
P1=s_Counter;
程序流程图如图3-3所示:
图3-3锯齿波程序流程图
(1)判断累加器值是否为所设定峰值;
(2)是则累加器清零,并将累加器值赋给P1口输出并延时;
否将累加器值赋给P1口输出则继续累加并延时;
(3)返回重新判断累加器值
3.4正弦波程序
正弦波的产生采用查表法,即在程序运行前先给定一个正弦波输出数字值表格。
表格数值计算思路如下:
由于单片机的I/O输出均为+5V的TTL电平,因此产生的正弦波幅值也就为+5V。
先将一个周期内的正弦波形等分为N份,那么第一点的角度为0°
,对应的正弦值为5sin0°
,第二点的角度为360°
/N,对应的正弦值为5sin(360°
/N)……如此计算下去,将这些模拟量正弦值都转换为双极性方式下的数字量,就得到一张按照点号顺序排列的数字量正弦值表格。
本设计中将一周期内正弦波等分为180份,具体数值见源程序。
具体程序如下所示:
voidzhengxian()
unsignedchark1=2*k;
P1=sinTab[s_Counter]/beishu;
s_Counter++;
if(s_Counter>
=180)
delay(k1);
程序流程图如图3-4所示:
图3-4正弦波程序流程图
(1)设定正弦表数组,共180个元素;
(2)累加器累加;
(3)判断累加器值是否大于等于180;
(4)是则将累加器清零并输出数组中第一个元素的值,否则将累加器的数值所对应的数组中的元素作为输出并继续累加判断。
3.5三角波程序
三角波的产生类似于锯齿波,只不过他的输出分为两段,即线性上升段和线性下降段。
线性上升段就是令信号由最小值匀速增至最大值,线性下降段就是令信号由最大值匀速减小到最小值。
输出两段的转折就在于当前幅值与幅度最大值之间的关系,当前幅值超过最大值时,应转至线性下降段;
当前幅值小于1时,表示此时已经处于负极性区,应转至线性上升段。
voidsanjiao()
if(flag==0)
flag=1;
If(s_Counter--<
=1)
flag=0;
(1)判断flag寄存器值是否为幅度峰值;
(2)是则累加器递减,并将累加器值作为输出;
否则累加器递增;
(3)判断累加器是否为零,是则累加器值递增,否则继续递减;
(4)累加器为零则将flag赋值为0;
为最大值则将flag赋值为1;
(5)返回重新判断flag和累加器值。
程序流程图如图3-5所示:
图3-5三角波程序流程图
4软件仿真
4.1软件仿真
软件仿真部分主要用proteus进行,proteus软件具有诸多优势:
Proteus是一种低投资的电子设计自动化软件,提供SchematicDrawing、SPICE仿真与PCB设计功