课程设计信号发生器硬件及软件设计.docx
《课程设计信号发生器硬件及软件设计.docx》由会员分享,可在线阅读,更多相关《课程设计信号发生器硬件及软件设计.docx(39页珍藏版)》请在冰豆网上搜索。
课程设计信号发生器硬件及软件设计
1绪论
1.1信号发生器概述
目前,市场上的信号发生器多种多样,一般按频带分为以下几种:
超高频:
频率范围1MHz以上,可达几十兆赫兹。
高频:
几百KHZ到几MHZ。
低频:
频率范围为几十HZ到几百KHZ。
超低频:
频率范围为零点几赫兹到几百赫兹。
超高频信号发生器,产生波形一般用LC振荡电路。
高频、低频和超低频信号发生器,大多使用文氏桥振荡电路,即RC振荡电路,通过改变电容和电阻值,改变频率。
用以上原理设计的信号发生器,其输出波形一般只有两种,即正弦波和脉冲波,其零点不可调,而且价格也比较贵,一般在几百元左右。
在实际使用中,超低频波和高频波一般是不用的,一般用中频,即几十HZ到几十KHZ。
用单片机89S52,加上一片DAC0808,就可以做成一个简单的信号发生器,其频率受单片机运行的程序的控制。
我们可以把产生各种波形的程序,写在ROM中,装入本机,按用户的选择,运行不同的程序,产生不同的波形。
再在DAC0808输出端加上一些电压变换电路,就完成了一个频率、幅值均可调的多功能信号发生器的设计。
这样的机器体积小,价格便宜,耗电少,频率适中,便于携带。
1.2本论文主要研究的内容
本设计采用89S52及其外围扩展系统,软件方面主要是使用C语言设计程序。
系统以89S52单片机为核心,配置相应的外设及接口电路,用C语言开发,组成一个多功能信号发生系统。
该系统的软件可运行于WindowsXP环境下,硬件电路设计具有典型性。
同时,本系统中任何一部分电路模块均可移植于实用开发系统的设计中,电路设计具有实用性。
本设计将完成以下几个方面的工作:
(1)选芯片,尽量满足一般工业控制要求、以增强其实用性。
(2)原理图设计在保证正确的前提下,尽量采用典型的电路设计。
(3)印制板设计既要精巧,又要便于摆放及测试。
(4)固化于单片机芯片中的软件采用模块设计,层次清楚,具有上电复位及初始化功能,具有很好的软件开发框架。
(5)掌握单片机仿真软件Proteus6.7的使用。
为此,论文包括以下内容:
Ⅰ绪论。
主要介绍单片机发展概况和信号发生器的概述,为以后几章的介绍奠定基础。
Ⅱ系统总体方案设计。
本章主要考虑系统性能、功能和器件选择。
包括两个主要内容:
系统分析和系统总体方案设计。
其中系统分析包括问题定义、可行性研究和需求分析。
问题定义中对设计的课题进行定义,详述设计环境。
可行性分析中分别从经济可行性、元器件具备程度和对可能遇到的问题的可解决性几个方面论证设计是否可行。
需求分析对系统功能要求、性能要求和运行环境要求说明。
系统总体方案设计包括算法设计、系统总体框图设计以及系统中使用的主要芯片。
Ⅲ系统的硬件设计。
本章完成系统的硬件总体设计,详细说明了设计思路。
Ⅳ系统软件设计实现。
本章是系统的具体实现,对系统按功能模块进行介绍。
Ⅴ系统测试报告。
分别对系统的功能测试、调试过程和系统的使用方法进行介绍。
Ⅵ总结和展望未来。
2系统设计方案
2.1系统分析
2.1.1问题定义
基于单片机的信号发生系统是一个实际使用系统,可为相关实验及实际使用提供支持。
本论文包括硬件系统的详细设计及C语言在基本控制中的使用。
此系统具有的功能如下:
硬件部分
(1)8位七段数码动态扫描显示;
(2)2×4的8位矩阵键盘;
(3)时钟电路和复位电路;
(4)具有8位精度的D/A转换功能;
(5)波形产生功能;
软件部分
(1)系统复位初始化;
(2)键盘扫描和处理;
(3)按键服务程序;
(4)定时器0中断服务程序;
(5)正弦波发生程序;
(6)三角波发生程序;
(7)方波发生程序;
(8)锯齿波发生程序。
2.2系统需求分析
2.2.1系统功能要求
系统具有D/A转换功能,信号幅度放大功能,8位七段数码显示功能,上电自动复位功能,2×4键盘输入接口。
2.2.2系统性能要求
(1)系统的D/A转换功能具有8位精度;
(2)动态扫描七段数码显示器;
(3)89S52单片机时钟信号为12MHZ;
(4)系统上电自动复位;
(5)系统具有8位行列扫描键盘。
2.3总体方案设计
2.3.1算法设计
本设计涉及的算法较少,将在第四章软件设计中介绍。
2.3.2系统总体结构框图设计
图2-1主系统结构框图
3硬件设计
3.1总体硬件设计
(1)程序存贮器
89S52内部自带8K的ROM,512B的RAM,所以不需要对其扩展存储器。
(2)键盘接口
系统采用矩阵键盘,用I/O线组成行、列结构,按键设置在行列的交点上,2×4的行列结构可构成8个键的键盘,采用行列扫描法。
(3)数码管驱动
本设计实现了89S52的I/O口对2×4键盘和8位数码管显示的控制。
为增加对数码管显示器的驱动能力及稳定性,在它和89S52之间设置了提高驱动能力的74LS373。
(4)D/A转换
本设计D/A转换部分采用DAC0808芯片,由于它不带锁存器,故在使用时必须加74LS373进行数据锁存。
(5)信号变换部分
对信号的变换部分采用四运放集成芯片LM324,它采用14脚双列直插塑料封装,它的内部包含四组形式完全相同的运算放大器。
(6)可靠性方面
在使用使用系统时,可能会受到多种干扰的侵袭,直接影响到系统的可靠性,因此,本系统适当加入去耦电容,以减少干扰,确保精度。
3.2系统模块设计
3.2.1显示器接口设计
本机显示采用软件译码动态显示,系统显示电路如图3-1所示。
采用软件译码动态显示的理由如下:
1)如果用静态显示,单片机的接口资源肯定不够用,那么还要进行接口的扩展,增加了系统的复杂度;2)如果要制成印刷线路板,得占相当大一块面积;3)另外,采用动态显示,可以明显的降低功耗,因为每一时刻只有一个LED发光,其功耗为静态显示的1/8。
一个LED最大电流为120mA,如用静态显示,8个LED就耗电流960mA综上分析,采用动态显示才是最经济的方案。
在显示的时候,只要把显示的字码输送到P2口,再经过74LS373进行数据锁存,P3口作为位选控制信号。
由于采用的是共阴极数码管,当需要显示哪一位的时候,只要在相应的位选控制信号输出低电平就行。
例如,要在第一个数码管显示P,那么在P2口就要输出73H字段码,同时P3口输出FEH位选码。
图3-1系统显示电路
3.2.2复位和时钟电路设计
3.2.2.1复位电路设计
单片机的复位是靠外电路实现的,在时钟电路工作后,只要在单片机的RST引脚上出现24个时钟振荡脉冲(2个机器周期)以上的高电平,单片机便实现初始化状态复位。
为了保证使用系统可靠地复位,通常是RST引脚保持10ms以上的高电平。
复位电路连接如图3-2所示。
此电路仅用一个电容及一个电阻。
系统上电时,在RC电路充电过程中,由于电容两端电压不能跳变,故使RESET端电平呈高电位,系统复位。
经过一段时间,电容充电,使RESET端呈低电位,复位结束[2]。
图3-2复位电路
3.2.2.2时钟电路设计
8XX51系列单片机的时钟信号通常用两种电路形式得到:
内部振荡方式和外部振荡方式。
在引脚XTAL1和XTAL2外接晶体振荡器(简称晶振),就构成了内部振荡方式。
由于单片机内部有一个高增益反向放大器,当外接晶振后,就构成了自激振荡器,并产生振荡时钟脉冲。
晶振通常选用6MHZ、12MHZ或24MHZ。
内部振荡方式如图3-3所示。
图中电容C1、C2起稳定振荡频率、快速起振的作用。
电容值一般为5~30pF。
内部振荡方式所得时钟信号比较稳定,实用电路中使用较多。
外部振荡方式是把已有的时钟信号引入单片机内。
这种方式适宜用来使单片机的时钟和外部信号保持一致。
外部振荡方式电路如图3-4所示。
对HMOS的单片机(8031,8031AH等),外部时钟信号由XTAL2引入;对于CHMOS的单片机(8XCXX),外部时钟信号由XTAL1引入。
图3-3内部振荡图3-4外部振荡
3.2.3键盘接口设计
3-5系统键盘实现
工作原理如下:
1.检测键盘上是否有键按下:
将行线送入低电平,列线送入高电平。
读入P1口的状态来判别。
其具体过程如下:
P1口输出0FH,即所有行线置成高电平,所有列线置成低电平,然后将P1口状态读入和0FH比较。
如果有键按下,总会有一根行线电平被拉至低电平,从而使行输入状态不全为1。
2.识别键盘中哪一个键按下:
确认有键按下后,保存行扫描时有键按下时的状态X。
P1口输出F0H,进行列扫描,保存列扫描状态Y,取出键值Z=X|Y.例如第一行第一列有键按下,那么行扫描读入的状态为00001110,列扫描读入的状态为11100000,最后键值Z=11101110=EEH,然后转去执行相应的服务程序。
3.2.4D/A转换设计
一、D/A转换器概述
D/A转换器的性能指标[3]:
1.分辨率:
输出模拟电压应能区分0~2n-1共2n个输入数字量。
表示方法:
(1)用输入二进制数的位数表示;如8位。
(2)用输出模拟电压的最小值和最大值的比值表示。
指最小输出电压和最大输出电压之比。
DAC0808的分辨率为1/256。
2.精度:
DAC实际输出电压和理想的输出电压的偏差。
DAC0808的最大满刻度偏差为+1LSB。
3.线性度:
DAC实际传输特性曲线和理想的传输特性曲线的偏差。
DAC0808的最大误差为+0.19%。
4.温度灵敏度:
在输入不变的情况下,输出模拟电压随温度变化产生的变化量。
一般用满刻度输出条件下温度每升高1℃,输出电压变化的百分数作为温度系数。
5.转换速度:
用完成一次转换所需的时间——建立时间Tset来衡量。
建立时间:
输入信号从开始变化到输出电压进入和稳态值相差1/2LSB范围以内的时间。
输入信号由全0变为全1所需时间最长。
当外接运放时,转换时间还应加上运放的上升(下降)时间。
(3—1)
式中
为转换时间,
为建立时间,
输出最大电压值,
为运放输出转换速率。
二、D/A转换器的分类
D/A转换器的品种繁多、性能各异。
按输入数字量的位数分:
8位、10位、12位和16位等;按输入的数码分:
二进制方式和BCD码方式;按传送数字量的方式分:
并行方式和串行方式;按输出形式分:
电流输出型和电压输出型,电压输出型又有单极性和双极性;按和单片机的接口分:
带输入锁存的和不带输入锁存的。
三、D/A转换器的原理
以倒T形电阻网络D/A转换器为例,介绍D/A转换器的原理。
倒T形电阻网络D/A转换器结构如图3-6所示。
图3-6倒T形电阻网络D/A转换器
图中S0~S3为模拟开关,由输入数码Di控制,当Di=1时,Si接运算放大器反相输入端(虚地),电流Ii流入求和电路;当Di=0时,Si将电阻2R接地。
所以,无论Si处于何种位置,和Si相连的2R电阻均接“地”(地或虚地)。
流过各开关支路(从右到左)的电流分别为I/2、I/4、I/8、I/16。
总电流:
(3—2)
输出电压:
(3—3)
将输入数字量扩展到n位,则有:
可简写为:
(3—4)
其中
,
=
四、DAC0808简介
DAC0808是八位电流输出型D/A转换器件,由4脚输出转换电流,其简化电路图及引脚结构如图3-7所示。
VREF为参考电源,VEE负电压供电;D0是高数据位(MSB),D7才是地数据位(LSB)。
DAC0808的电源极性:
VCC=+5V,VEE=-15V,VREF=+15V。
D0~D7是数据输入端,I0是电流输出端,COMP是接电容进行补偿。
在单片机使用系统中通常需要的是电压信号,电流信号和电压信号之间的转换可由运算放大器实现。
DAC0808不带锁存器,所以在使用时必须加一个74LS373进行数据锁存。
图3-7DAC0808简化电路框图和管脚排列
根据DAC0808的特性设计出本系统的D/A转换电路如图3-8所示。
图3-8系统D/A实现
工作原理:
本系统由VREF提供参考电压,相应参考电流为I=VREF/R1。
电容C4提供补偿,OUT输出电流,经过LM324运算放大器转换成电压。
所以输出电压:
=5K
(3—5)
3.2.5D/A转换及电压变换
1.D/A转换原理
D/A转换器的原理很简单,可以总结为“按权展开,然后展开”几个字。
换句话说,D/A转换器要输入数字量中每位都按其权值分别转换成模拟量,并通过运算放大器求和相加。
因此,D/A转换器内部必须要有一个解码网络,以实现按权值分别进行D/A转换。
解码网络通常有两种:
二进制加权电阻网络和T型电阻网络。
在二进制加权电阻网络中,每位二进制的D/A转换是通过相应位加权电阻实现的,这必然造成加权电阻阻值差别极大,尤其在D/A转换器位数较大时更不能容忍。
例如,若某D/A转换器有12位,则最高加权电阻为10k
2
=20M
。
这么大的电阻值在VLSI技术中是很难制造出来的。
即便制造出来,其精度也是很难符合要求的。
因此,现在的D/A转换器毫无例外地采用T型电阻网络进行解码活动[5]。
为了说明T型电阻网络的原理,现以4位D/A转换器为例加以讨论。
图3-8为此4位D/A转换器的原理框图。
图中,虚框为T型电阻网络(桥上电阻均为R,桥臂电阻均为2R);OA为运算放大器,也可外接,A点为虚拟地,接近零伏;Vref为参考电压,由稳压电源提供;S0,S1,S2,S3为电子开关,受4位DAC寄存器中b0,b1,b2,b3控制。
为了分析问题方便,设b0,b1,b2,b3全为“1”,故S0,S1,S2,S3全部和“1”端连接。
根据克希荷夫定律,如下关系式成立:
图3-8T型电阻网络型D/A转换器
事实上,S0,S1,S2,S3的状态是受b0,b1b2,b3的控制的,并不一定全是“1”。
若它们中有些位为“0”,S0,S1,S2,S3中相应开关会因和“0”端相连接而无电流通过。
为此,可以得到通式:
选取Rf=R,并考虑A点为虚拟地,故Iref=-Iout1
因此,可以得到
对于n位T型电阻网络,上式可变为
上述讨论表明:
D/A转换过程主要是由解码网络实现的,而且是并行工作的。
换句话说,D/A转换器是并行输入数字量的,每位代码也是同时被转换成模拟量的。
这种转换方式速度快,一般为微秒级,有的可达几十毫微秒
2.DAC0832的简介及接口
DAC0832为8位数模转换器,转换速度:
1μS;参考电压:
3V~15V。
DAC0832是由输入数据寄存器、DAC寄存器和D/A转换器所组成的CMOS器件,其特点是片内设有二个独立的8位寄存器,即输入数据寄存器和DAC寄存器,因而又具有缓冲作用。
被转换的数据寄存在DAC寄存器中,下一组输入数据又可装入数据寄存器中,这就可以根据需要快速修改DAC0832的输出。
DAC0832的各引脚的功能如下:
:
片选信号,低电平有效。
它和ILE信号结合,可对
信号是否起作用进行控制。
ILE:
允许输入锁存信号,高电平有效。
:
写信号1,用于将数字量输入锁存到输入数据寄存器中。
在
、ILE同时有效下,
由低电平到高电平的上升沿将输入数据线上的信号打入输入数据寄存器。
:
写信号2,用于将锁存在输入数据寄存器中的数据传送到DAC寄存器中。
在
信号有效时,
由低电平到高电平的上升沿将输入数据寄存器中的信号打入DAC寄存器。
:
控制传送信号,低电平有效。
用于控制
。
DI0~DI7:
8位数据输入端。
Iout1、Iout2:
DAC电流输出端,Iout1、Iout2之和为常数。
Iout1随DAC寄存器的内容线性变化。
Rfb:
反馈信号输入线,反馈电阻在芯片内部。
Vrfe:
基准电源输入端。
Vcc:
电源输入端。
AGND:
模拟量接地端。
DGND:
数字量接地端。
DAC0832和MCS-51的接口如图3-9所示。
图中,ILE接+5V以及使
、
接地,故0832的“8位DAC寄存器”处于直通方式下。
8位输入寄存器受
和
端信号控制[6]。
图3-98031和DAC0832的接口及电压变换原理
在单片机使用系统中通常需要的是电压信号,电流信号和电压信号之间的转换可由运算放大器实现。
由于DAC0832的输出是电流型的,所以0832的Iout1口输出的电流值,通过集成运算放大器转化成电压值。
此电压值为0V~-5V。
对上图的几点说明:
1)波形零点可调的实现
图3-10中,第一个运放接成电压跟随器,把把电位器上的分压传输到下一级。
第二个集成运放接成反向相加电路,把前一级的波形信号和电位器上的分压相加,即在原来波形上叠加上一个直流恒定电压信号,电位器上的分压即是原来波形的新零点。
所以,调节电位器的值,即可以调节波形的零点。
图3-10零点调节电路原理图
2)波形幅值可调电路
DAC0832输出的电流,经过运放的作用,变成0V~-5V的电压信号。
再经过图3-11所示的电路变化,就成为正负对称的波形。
调节电路中的电位器W,就可以改变波形的幅值。
在图中,集成运放工作于深度负反馈状态,可以运用虚短的概念,即“A点”电位等于地电位。
那么,I1恒定,
I1=(5-0)/2R=5/2R
根据基尔霍夫电流定律,
I1=I2+I3
I2=(0–UI)/R=–UI/R
I3=I1–I2=5/(2R)–(-UI/R)=5/(2R)+UI/R=(5+2UI)/(2R)
0–U0=WI3
U0=–WI3=–W×(5+2UI)=–(5W)/(2R)–(W/R)UI
假设W恒定,则(5W)/(2R)=常数W/R=常数
设C1=(5W)/(2R)=2.5W/R,C2=W/R,
则U0=–C1–C2UI=–C2(2.5+UI)(式3-2)
设W=R,则C1=2.5,C2=1
则UI(V)和U0(V)的关系如表3-3所示。
UI(V)
0
-1
-2
-2.5
-3
-4
-5
U0(V)
-2.5
-1.5
-0.5
0
0.5
1.5
2.5
表3-3UI(V)和U0(V)关系
由(式3-2)可以看出,C2为一
个常数,UI为0~-5V。
则2.5+UI必
为+2.5V~-2.5V,变成双极性。
C2(2.5+UI)是把C2(2.5+UI)的波形
放大C2倍,–C2(2.5+UI)是再把所
得的波形反向一次,所以这个电路可
以实现波形幅值的可调[8]。
图3-11信号幅值可调电路原理
2)滤波实现波形的平滑
DAC0832为数模转换器,由于数字信号是离散的,0832产生的电流信号也必定是离散的,所以要通过滤波电路滤除信号中的高次谐波。
滤波电路应该越靠近0832越好,因为越向后,谐波被放大越多,越不容易滤除。
在电压变换电路中,第一级放大器的输出电阻很小,滤波电容不能加在这;第二级的输入端电位近似等于低电位,电容在那起不了作用,因此电容只能加在R5和R6之间。
而有些波形是不需要滤波的,像方波,脉冲波,所以需要加个开关,需滤波就合上开关,反之则打开。
第4章系统软件编程
4.1软件总体设计
在第3章中已经介绍了波形发生器的硬件实现问题,设计出了相应的电路图,现在只要编写不同的程序便可以产生不同波形的模拟电压。
使用系统中的使用软件是根据系统功能要求设计的,应该可靠地实现系统的各种功能。
一个优秀的使用系统的软件应具有下列特点:
(1)根据软件功能要求,将系统软件分成若干个相对独立的部分。
设计出软件的总体结构,使其结构清晰、简捷、流程合理。
(2)要树立结构化程序设计风格,各功能程序实现模块化、子程序化。
既便于调试、链接,又便于移植、修正。
(3)建立正确的数学模型。
即根据功能要求,描绘出各个输入和输出变量之间的数学关系,它是关系到系统性能好坏的重要因素。
(4)为提高软件设计的总体效率,以简明、直观的方法对任务进行描述,在编写使用软件之前,应绘制出程序流程图。
(5)要合理分配系统资源,包括ROM、RAM、定时器/计数器、中断资源等。
本系统的软件设计包括以下七个程序模块:
(1)系统复位初始化;
(2)键盘显示/扫描和处理;
(3)MON键中断程序;
(4)锯齿波发生程序;
(5)三角波发生程序;
(6)方波发生程序;
(7)正弦波发生程序;
4.2功能软件设计
4.2.1系统复位初始化程序
复位程序完成如下工作:
1.改变PSW的RS0、RS1两位值,选择第三组寄存器作为工作寄存器;
2.设置堆栈指针SP=70H;
3.设置显示缓冲区于23H,22H,21H,20H四位,使显示“GOOD”;
4.设置28H,27H,26H,25H,24H五个字节作为键盘输入的十进制表示的频率;
5.置P1口输出7FH数据;
6.设置2AH表示需要产生的波形的代号,一字节,十进制数;
7.设置2FH为显示的当前位;
8.设置2EH为当前显示的字的地址,初始值(2EH)=20H;
9.设置2CH字节放置键扫描时输入的每位值;
10.键值表设于3FF0H开始处;
11.字形码表设于3FE0H开始处;
12.设置2DH字节表示输入的是一位波形代号还是5位的频率,复位程序置
(2DH)=00H或07H,表示输入值应为波形代号
(2DH)=77H,表示应该输入频率值或正在输入频率值
(2DH)=17H,表示正在输出波形
13.设置31H字节记录输入的数字的数目。
输入的数字最多为4个;
14.置TCON寄存器第2位8AH位=1,选择
下降沿触发形式;
15.置中断允许触发器IE=86H,即
(AFH)位=1,允许中断
(AAH)位=1,允许
中断
(A9H)位=1,允许定时器0中断
16.置定时器0工作于方式0,即13位定时器方式,送入定时器0定时初值,启动定时器0工作;
17.转键盘扫描程序。
4.2.2键盘/显示扫描程序
键盘/显示系统是单片机不可缺少的部件,它常有硬件电路和软件电路两部分组成。
硬件电路如图3-6所示,软件程序有动态显示子程序、键盘扫描子程序和求键值子程序等组成[1]。
图4-1为键盘/显示系统的主程序流程图。
键盘/显示系统主程序为:
ORG0400H
START:
MOVDPTR,#8000H;DPTR指向命令/状态口
MOVA,#05H;方式字05H送A
MOVX@DPTR,A;送8155命令/状态口
DSP:
ACALLDISP1;调用显示子程序
ACALLSCAN;调用键盘扫描子程序
JZDSP;若无键按下,则DSP
ACALLKCODE;若有键按下,则KCODE
CJNEA,#10H,CONT;是否是数字键?
CONT:
JCNUM;若是,则NUM
MOVDPTR,#JTAB;若否,则命令转移表始址送DPTR
SUBBA,#10H;形成JTAB表地址偏移量
RLA;地址偏移量×2