智能化多功能波形发生器实验报告.docx
- 文档编号:30095574
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:28
- 大小:1.20MB
智能化多功能波形发生器实验报告.docx
《智能化多功能波形发生器实验报告.docx》由会员分享,可在线阅读,更多相关《智能化多功能波形发生器实验报告.docx(28页珍藏版)》请在冰豆网上搜索。
智能化多功能波形发生器实验报告
信息系统工程硬件基础综合实验报告
智能化多功能
波形发生器设计
2010年8月1日
第一章信息系统工程硬件基础综合实验的目的意义
1.1实验目的
通过与课堂教学的密切配合,巩固和扩充课堂讲授的理论知识,加深对课堂教学内容的理解;训练科学实验的基本技能和工程实践的基本方法,养成严谨的科学态度和工作作风,培养应用所学理论知识独立分析、解决实际问题的能力和实际动手能力。
1.2课程在教学计划中的地位和作用
《微机应用系统设计与综合实验》课程是自动化专业本科生必修的一门技术基础课程。
通过该课程的学习使学生对微机系统有一个全面的了解、掌握常规芯片的使用方法、掌握简单微型计算机应用系统软硬的设计方法。
为了使我们微机应用课程设计目标更明确,要求更具体,学生收获更大,我们特编写课程设计任务书,学生可根据本人的爱好任选其中一个课题,要求独立完成课题,写出课程设计说明书,设计出电路原理图,说明工作原理,画出电路板图,编写程序及程序流程图。
希望同学认真阅读本任务书,认真查阅资料与上机调试,圆满完成课程设计。
通过课程设计进一步锻炼同学们在微型计算机应用方面的实际工作能力。
计算机科学在应用上得到飞速发展,因此,学习这方面的知识必须紧密联系实际:
掌握这方面的知识更要强调解决实际问题的能力。
同学们要着重学会面对一个实际问题,如何去自己收集资料,如何自己去学习新的知识,如何自己去制定解决问题的方案并通过实践不断地去分析和解决前进道路上的一切问题,最终到达胜利的彼岸。
第二章智能化多功能波形发生器设计任务
2.1设计内容及要求
多功能波形发生器是科学实验研究中常用的电子仪器之一。
本实验通过设计一个由微机控制的多功能波形信号发生器,旨在:
熟悉几种典型波形产生的原理;
进一步掌握D/A转换电路在智能化仪表电路装置中的应用;
了解由微机控制的多功能波形发生器的设计思路与实现方法。
2.2课程设计的要求
设计一个由微机控制的多功能波形发生器。
具体要求如下:
该发生器能够在操作人员控制下输出正弦波、方波、三角波或锯齿波波形;
这些波形的极性、幅度、周期、占空比(对矩形波而言)等可由操作人员控制和修改;
通过示波器显示、检验产生的波形。
第三章总体设计方案
3.1设计思想
任何一个随时间连续变化的波形都可以分解成许多离散的数据点,每周期中数据点的个数取决于周期的长短饿数据点间时间间隔的大小,而各点数据的幅值则与连续波形的变化规律相同,也随时间的变化而变化。
因此,要实现各种波形的输出,可以利用一个定时/计数器,控制微机系统周期性地定时输出一些随时间而有规律变化的数据,这些数据的变化规律与要求的输出波形相一致。
这样,就可以得到需要的输出波形了。
输出波形的曲线光滑程度取决于每周期中数据点的多少,或者说数据点时间间隔的长短。
数据点越多,时间间隔越短,输出曲线将越光滑。
要想看到产生的波形,必须将危机输出的二进制数据变换为模拟电压或电流信号送往示波器。
为此,需要采用D/A转换器。
D/A转化器的位数取决于所需的精度和分辨率。
位数越多,一个周期中的数据点数就可越多,波形自然就越光滑、越准确。
3.1.1智能多功能波形发生器设计的需求分析
根据老师对实验的要求和平台可使用的硬件资源,通过分析和设计,智能化多功能波形发生器实现的主要功能有:
预先在内存数据区中建立正弦波形的一周期输出数据表。
然后,每来一次定时中断信号或每演示一定时间,循环地一次从表中去一个数据输出,便可得到相应的波形。
对于方波、锯齿波、三角波等脉冲波形的产生,并不预先建立输出的数据表,而是直接根据波形特点,依次将每点输出数据加/减一个数或在上、下限值上交替变化来实现。
数据点输出的间隔时间采用定时/计数器硬件控制。
通过改变输出间隔即可达到改变波形周期的目的。
为改变波形幅度,采用预置和修改上、下限幅值的方法来实现。
改变上、下限值输出的延时时间,可改变矩形波的占空比。
3.1.2实验设备
1、80X86系列微机一台;
2、微机硬件实验平台;
3、示波器一台;
4、定时计数器和DAC接口芯片;
5、基本TTL电路芯片。
3.1.3方案设计
1.定时计数功能设计
本设计采用一个10KHz的方波波源接入8253的CLK端,使8253工作在方式3即方波方式下,通过对8253计数初值的设置,实现对OUT端输出方波的频率控制,以此为中断源以控制中断产生的频率,从而控制各波形的频率。
2.中断功能设计
微机中的中断处理芯片8259A处理由8253发送的中断请求。
中断处理程序需要实现的功能:
通过判断波形参数决定应该发送那一种波形的周期中的哪一点数据,具体的波形种类和波形参数如下:
种类:
正弦波,锯齿波,三角波,矩形波
参数:
极性,振幅,周期,占空比(矩形波)
其中正弦波的基础数据由预先给定,再与波形参数结合计算得出要发送的数据,其余波形的数据由数据在一周期中的序号与波形参数结合计算得出。
3.DAC功能设计
本设计用DAC0832芯片实现DA转换的功能,DAC0832的精度为8位,因此,输入的数据范围为0~255,这一范围由上一功能模块的中断处理程序控制。
取DAC0832的参考电压为5V,由于实验所用的DAC模块将DAC0832输出的差动电流转化为单级的电压,其范围为0~5V,对应DAC0832的输入数据0~255。
4.I/V转换功能设计
本设计将由DAC模块输出的单极性的0~5V的电压信号转换为-5~5V的双极性的电压,从而在示波器上得到双极性的波形。
这一功能模块的设计采用集成运放芯片741和若干电阻实现。
5.菜单功能设计
进入主程序默认产生4HZ的正弦波。
当按下M键时,弹出菜单供用户选择波形和设定波形参数。
菜单功能具体如下:
选择波形:
1-正弦波,2-锯齿波,3-三角波,4-矩形波
设定波形参数:
1-极性,2-振幅,3-周期,4-占空比(矩形波)
其中极性可以选择单极性或双极性,其他参数有一定的允许范围,取决于硬件电路的整体性能和选择的基准信号频率。
5.退出功能设计
当按下ESC键后程序退出。
3.2总体设计
3.2.1总体硬件结构设计
通过分析,本系统的总体硬件结构设计示意如图3.1所示。
图3.1智能多功能波形发生器设计硬件结构图
3.2.2总体软件流程设计
软件设计主要包括计数器计数触发中断程序设计与主程序设计。
当计数器达到计数初值时,中断程序运行在示波器上显示一个图像点,通过不断触发中断,从而在示波器上显示完整图像。
图3.2为软件总体设计流程图。
软件总体分为三大部分。
第一部分为初始化程序,第二部分为中断处理程序,第三部分为参数设置的主循环。
图3.2软件总体设计流程图
初始化程序完成对8253技术通道的选择和计数初值的初始设定,保存旧的中断向量和设置新的中断向量,开中断等任务。
中断处理程序完成对当前波形参数的判断,并由波形参数得到应该输出的数据,向DAC0832芯片输出数据。
参数设定主循环完成对用户输入的不间断扫描,根据用户输入的命令设定波形参数(包括波形种类),作为中断处理程序输出数据的依据。
由用户按下ESC键退出该循环,
退出程序之前应完成关中断个回复中断向量的操作,以保证系统的正常运行。
第四章硬件设计
4.1硬件设计概要
由外部基准时钟信号(实验中采用10KHz脉冲源)输入计时/计数芯片8253的CLK端,再由8253的OUT端引出经过分频的中断脉冲源,这里8253工作在方式3即方波方式。
将8253的OUT端接入ISA总线的IRQ端向主机发起中断,经中断处理芯片8259A处理后执行中断处理程序,采用波形参数进行计算得到波形数据,再向DAC0832发送。
DA转换芯片DAC0832将收到的波形数据转化为模拟的电压型号。
由实验箱上引出的电压信号还是单级的波形信号,因此好需要经过一级I/V转换电路,将其转化为双极性的波形信号。
I/V转换电路由集成运放741和阻值分别为1K欧和2K欧的电阻构成,其输出端接示波器,即能在示波器上观察到对应的波形。
4.2所用到的芯片及其各自功能说明
4.2.1芯片列表
1、8253计数器芯片
2、8259A中断控制器
3、DAC0832——模数转换
4、74LS138——译码器
5、741——I/V转换
4.2.28253的功能简介
8253是为解决与微处理器设计有关的公共时间问题而专门设计的可编程间隔定时器。
基本功能:
有三个独立的16位计数器通道。
每个计数器可按二进制或十进制(BCD)计数。
每个计数器可工作于6种不同工作方式。
每个计数器允许的最高计数频率为2MHZ。
每个计数器通道的逻辑功能完全相同,既可作定时器用,又可作计数器用。
本实验通道作为计数器使用。
当通道作为计数器用时,表明只关心在CLK端出现(代表事件)脉冲个数,每当CLK端里出现了规定个数的脉冲,OUT输出一个脉冲信号。
计数初值寄存器内容可由CPU预置或修改。
在本实验中,我们采用方式3即方波方式。
(控制字
的值为0X11。
)在这种方式下,OUT端输出的是方波或近似方波信号。
当写入控制字,使8253进入工作方式3后,OUT输出低电平,这时若装入计数初值n且GATE为高电平,则在其后的下个CLK脉冲下降沿,OUT跳变为高电平,同时开始减法计数。
如果置入CR的初值n是偶数,减法计数对每个CLK脉冲减2,经过n/2个CLK脉冲,计数值达到0值,OUT输出变为低;然后,CR内的初值自动再装入CE并继续减2计数,经过n/2个CLK脉冲,计数值达0值,OUT输出又立即变高。
如此周而复始,OUT端得到的是完全对称(占空比为1/2)的方波信号。
如果置入的初值是奇数,则技术过程略有不同:
在OUT变为高电平瞬间,CR内的初值向CE装入时减1成为偶数,然后对CLK减2计数,减至0时OUT不立即变低,而是再经过一个CLK脉冲后变低。
这就是说方波的高电平持续时间为(n-1)/2+1=(n+1)/2个脉冲周期。
OUT从高变低瞬间,CR内初值向CE装入时减1,然后对CLK减2计数,计数到0值时,OUT输出立即变高。
这就是说,方波的低电平持续(n-1)/2个脉冲周期。
如此周而复始,OUT端得到的是近似对称的方波信号。
GATE端加入低电平将停止计数,GATE端加入触发信号(上升沿)也将重新从CR向CE装入初值,从而对OUT输出起同步作用。
4.2.38259A的功能简介
8259A是一个可编程的中断控制器,应用在实时的、以中断方式进行监控的计算机系统中。
用一片8259A可以管理8个等级的中断申请。
并可再经级联扩展多至8片8259A,使得中断等级可扩展多至64级。
8259A可以作为一个I/O外围器件,用系统软件编程,它所具有的多种优先权方式可以通过主程序在任何时候进行改变或重新组织。
这意味着可以按照全系统的外围情况和要求,设计出一个完整的中断结构,用来实现优先管理、中断屏蔽以及自动中断矢量转移。
它几乎可以适合于任何一种中断控制的结构,因而得到了广泛的应用。
8259A工作过程:
第一步:
当中断请求线(IR0~IR7)上有信号输入时,就把中断请求寄存器IRR相应的位置1。
第二步:
当IRR的一位置1后,就会与IMR中相应的屏蔽位进行比较,如该屏蔽位为0,则请求被发送给优先级分析器;如为1,则封锁该请求。
第三步:
当一个中断请求被输入优先级分析器后,将由优先权分析器判定其优先权,然后向CPU发中断申请,INT脚变高(INT联到8086的INTR)。
第四步:
CPU的INTR引脚为异步状态接收。
在软件控制下利用STI指令(中断置位)或CLI(中断复位)指令可分别将CPU的“中断开放标志位”IF置位或复位,可以做到接受或不理睬在INTR上的中断申请。
第五步:
假定CPU中的IF标志为1,则CPU在完成当前指令的即进入中断响应周期,这个中断响应周期将标志寄存器入栈,然后清除IF标志,关闭了中断。
再将代码段寄存器和指令指针也入栈,然后CPU发出第二个INTA脉冲通知8259A,说明8086已经允许了它的中断请求。
若8086用于“最小方式”,则INTA脉冲信号为8086INTA引脚上的信号;若8086用于“最大方式”时,则8086LOCK脚在中断响应序列执行期间变为低电平。
LOCK信号用来指示其它系统总线控制器:
当中断响应序列到来时不要获取系统总线控制,一个“HOLD”请求在LOCK变低时不会被响应。
第六步:
8259A收到第一个INTA负脉冲后,将禁止IRR锁存器,使IRR不受IR7~IR0进一步变化的影响,这种状态一直保持到第二个INTA脉冲结束。
第一个INTA脉冲还使ISR的某一位置位,并清除相应的IRR位。
第二个INTA脉冲使ICW2当前内容被放到D7~D0上,CPU用该字节确定中断型号。
此后CPU将按照这个指定的中断类型号中的内容去执行所对应的中断程序。
注意:
若ICW4的中断自动结束位(AEOI)为1,则第二个INTA脉冲结束时,ISR中被第一个INTA脉冲置位的位被清除,否则要等到送内含中断结束(EOI)命令的OCW2后方能清除ISR中的该位。
第七步:
当进入中断服务程序时,那些主程序和子程序都要用到的寄存器应当保存入栈,最好的方法是立刻“PUSH”每个用到的寄存器入栈。
当中断服务程序完成后,再以相应的反次序“POP”每个寄存器出栈。
第八步:
一旦中断服务程序完成,就应用IRET(中断返回)指令使CPU再回到主程序。
IRET指令就会自动弹出中断前的指令指针,使主程序恢复到被中断之处,并且恢复中断前与中断服务变化无关的标志状态(包括IF标志的状态)。
而中断也自动放开。
4.2.4DAC0832的功能简介
DAC0832是采样频率为八位的D/A转换器件,芯片内有两级输入寄存器,使DAC0832具备双缓冲、单缓冲和直通三种输入方式,以便适于各种电路的需要(如要求多路D/A异步输入、同步转换等)。
D/A转换结果采用电流形式输出。
要是需要相应的模拟信号,可通过一个高输入阻抗的线性运算放大器实现这个供功能。
运放的反馈电阻可通过RFB端引用片内固有电阻,还可以外接。
4.2.574LS138的功能简介
当一个选通端(G1)为高电平,另两个选通端(/(G2A)和/(G2B))为低电平时,可将地址端(A、B、C)的二进制编码在一个对应的输出端以低电平译出。
4.2.6741的功能简介
通过与各种阻值的电阻的配合连接,实现对信号的运算放大功能,在本实验用于I/V转换。
4.3硬件电路设计系统原理图及其说明
8259A采用IRQ3端口;8253采用通道1,方式3,计数值为count(初始为10,可在运行中改变);
实验的详细硬件电路图如下:
其中蓝色连线是实验箱已经连接好的内置连线,红色连线时需要我们自己动手去连接的部分。
第五章软件设计
5.1流程图及其说明
程序工作流程:
计数器初始化,当计数值达到所设定的初始值时,选择需要输出的波形后中断服务程序启动,中断一次描一个点,一个周期内中断程序固定触发256次。
波形参数改变功能:
周期、振幅、极性为各种波形都有的属性,占空比为方波专有属性。
图像周期通过计数初值的改变而变化;振幅、占空比通过直接设定函数参数来改变;极性通过连接741I/V转换器改变。
主程序流程图及终端服务程序流程图如下:
图5.1主程序流程图
图5.3终端服务程序流程图
5.2软件系统的使用说明
启动程序后显示“欢迎使用波形发生器
按M键设置波形参数
按Esc键退出”
按下M键后显示“请选择要执行的操作:
选择波形,2-设置参数”
按下1后显示“请选择波形:
正弦波,2-锯齿波,3-三角波,4-方波”
继续选择后可在示波器上出现相应波形。
按下2后显示“请选择要设定的参数:
”
若为方波则继续显示“1-极性,2-振幅,3-周期,4-占空比”
否则显示“1-极性,2-振幅,3-周期”
选择后可改变相应参数。
按下Esc键后可推出程序。
5.3源程序及其说明
//波形发生器
//采用计时/计数芯片8253
//中断控制芯片8259A
//片选芯片74LS138
//DA转换芯片DAC0832
//I/V转换电路(运放芯片741)
//实现波形发生器功能。
//
//程序中可以选择的波形有:
//正弦波,锯齿波,三角波和矩形波
//可以设置波形的各种参数,包括:
//极性,振幅,周期和占空比(矩形波)
//
//默认波形为4HZ的正弦波,按M键可以设定波形参数或者选择波形
//要退出程序时一定要按ESC键,否则中断向量无法恢复,可能造成系统错误
//
//程序中使用的波形的采样频率皆为256次/周期
#include
#include
#include
#include
unsignedcharsine[256]={128,131,134,137,140,143,146,149,152,155,158,162
165,167,170,173,176,179,182,185,188,190,193,196,198,201,203,206,208,211
213,215,218,220,222,224,226,228,230,232,234,235,237,238,240,241,243,244
245,246,248,249,250,250,251,252,253,253,254,254,254,255,255,255,255,255
255,255,254,254,254,253,253,252,251,250,250,249,248,246,245,244,243,241
240,238,237,235,234,232,230,228,226,224,222,220,218,215,213,211,208,206
203,201,198,196,193,190,188,185,182,179,176,173,170,167,165,162,158,155
152,149,146,143,140,137,134,131,128,124,121,118,115,112,109,106,103,100
97,93,90,88,85,82,79,76,73,70,67,65,62,59,57,54,52,49,47,44,42,40,37,35
33,31,29,27,25,23,21,20,18,17,15,14,12,11,10,9,7,6,5,5,4,3,2,2,1,1,1,0
0,0,0,0,0,0,1,1,1,2,2,3,4,5,5,6,7,9,10,11,12,14,15,17,18,20,21,23,25,27
29,31,33,35,37,40,42,44,47,49,52,54,57,59,62,65,67,70,73,76,79,82,85,88
90,93,97,100,103,106,109,112,115,118,121,124};
enum{SINE=1,TEETHED,TRIANGLE,SQUARE};
intwaveType=SINE;
floatam=5,T=0.25,k=1;//幅度系数周期占空比系数
intcount=10;//计数值
intpl=2;//极性,初始为双极性
intdataindex=0;
intbaseTIMER=0x270,baseDA=0x250;
intkey;
voidmenu();
voidinterrupt(*oldintf)(void);
//中断服务程序
voidinterruptnewintf(void)
{
intdataout;
outportb(0x21,inport(0x21)|0x08);
switch(waveType)
{
caseSINE:
dataout=(int)(am/5*sine[dataindex]);
break;
caseTEETHED:
dataout=dataindex*am/5;
break;
caseTRIANGLE:
if(dataindex<128)dataout=2*dataindex*am/5;
elsedataout=(511-2*dataindex)*am/5;
break;
caseSQUARE:
if(dataindex<256*k/(1+k))dataout=255*am/5;
elsedataout=0;
break;
}
if(pl==1)dataout=(int)(128+dataout/2);
outportb(baseDA,dataout);
outportb(baseDA+1,dataout);
dataindex++;
if(dataindex==256)dataindex=0;
outportb(0x21,inportb(0x21)&0xf7);/*开IRQ7*/
outportb(0x20,0x20);
}
intmain()
{
//unionREGSregs;
printf("欢迎使用波形发生器\n\t按M键设置波形参数\n\t按Esc键退出");
outportb(baseTIMER+3,0x56);/*8253计数器通道1工作方式3*/
outportb(baseTIMER+1,count);/*计数值10,对应4Hz*/
oldintf=getvect(0xb);/*保存原中断矢量*/
setvect(0xb,newintf);/*设置新中断矢量*/
outportb(0x21,inportb(0x21)&0xf7);/*开IRQ7*/
enable();
while
(1)
{
if(kbhit())
{
key=getch();
if(key==0x1b)break;
if(key=='m'||key=='M')menu();
printf("欢迎使用波形发生器\n\t按M键设置波形参数\n\t按Esc键退出");
}
}
setvect(0xb,oldintf);
return1;
}
voidmenu()
{
intchoice;
floatvalue;
do
{
//clrscr();
printf("请选择要执行的操作:
\n\t");
printf("1-选择波形,2-设置参数\n\t");
scanf("%d",&choice);
}while(choice!
=1&&choice!
=2);
if(choice==1)
{
do
{
printf("请选择波形:
\n\t");
printf("1-正弦波,2-锯齿波,3-三角波,4-方波\n\t");
scanf("%d",&choice);
}while(choice<1||choice>4);
waveType=choice;
}
elseif(choice==2)
{
do
{
printf("请选择要设定的参数:
\n\t");
if(waveType!
=SQUARE)printf("1-极性,2-振幅,3-周期\n\t");
elseprintf("1-极性,2-振幅,3-周期,4
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 智能化 多功能 波形 发生器 实验 报告