简易波形发生器

  • 格式:doc
  • 大小:186.50 KB
  • 文档页数:5

简易波形发生器

一、实验目的

1.掌握DAC0832和ADC0809的应用和编程方法。

2.熟悉几种典型波形的产生方法。

二、实验内容与要求

利用微机实验平台编程实现一个波形发生器,可以产生正弦波、方波、三角波等各种波形,频率和幅度均可调。

1. 基本要求

(1)具有产生正弦波、方波、三角波三种周期性波形的功能。

(2)输出波形的频率范围为100Hz~1kHz,步进为100Hz。

(3)输出波形幅度范围1~5V(峰-峰值),可按步进1V(峰-峰值)调整。

(4)通过ADC0809采样DAC0832的输出,在屏幕上画出图形。示波器查看波形发生器的输出和屏幕上的图形比较。

2. 提高要求

(1)增加输出波形的类型。

(2)扩展输出波形频率范围。

(3)减少幅度范围的步进量。

三、实验报告要求

1.设计目的和内容

2.总体设计

3.硬件设计:原理图(接线图)及简要说明

4.软件设计框图及程序清单

5.设计结果和体会(包括遇到的问题及解决的方法)

四、总体设计

本次设计结合D/A和A/D转换,用键盘输入来选择DAC0832的输出波形,再通过ADC0809采集后在PC机上以图形方式显示。实验主要利用实验箱上的DAC0832 、ADC0809和8253等硬件电路和PC机资源。

设计要求该波形发生器能产生正弦波、方波、三角波等形状的波形,频率和幅度可调。不同的波形主要是由输入DAC0832的不同规律的数据,所以在软件设计是主要是构造各种波形的数据表格。方波只需要控制输出高低电平的时间,三角波的表格可以由数字量的增减来控制,产生正弦波关于构造一个正弦函数数值表,通过查该函数表来实现波形的输出。波形的频率控制是通过对输出数据的时间间隔控制。幅度是通过改变输出数据的大小来控制的。为了程序实现方便,可以把每种波形的数据表构造好,再统一查表来实现。 五、硬件设计

硬件由于采用了PC机的资源和微机实验平台,不用外加其他的电路,比较简单。将微机系统里面的中断、8253、 DAC0832以及ADC0832的电路弄清楚,通过相应的跳线就可以完成电路的设计。

本次设计中,通过PC机键盘选择波形,启动DAC0832工作,在其输出端口VOUT1将会产生0~5V的直流电压,再由ADC 0809的IN0端口进行采样,显示到屏幕上。DAC0832所对应的片选为CS4,ADC0809所对应的片选为CS0。DAC0832 和ADC0809硬件连接图如图1所示。

在ADC0809芯片连接中,CLOCK用来接收外部时钟信号,在本实验中接收Q3端产生的时钟信号。ADD_A,ADD_B和ADD_C这三个端口为三位地址线,用来选通8路模拟量输入中的一路。在本实验中,只使用ADC 0809中的IN0端口,当ADD_A,ADD_B和ADD_C端口都为低电平时,才能选中IN0端口。在本PC实验箱中ADC 0809IN0端口地址为280H,其地址总线中的A0,A1,A2均为低电平。故将ADD_A,ADD_B和ADD_C与A0,A1,A2如图所示连接。REF(+)接正参考电压(+5V),REF(-)接负参考电压(接地)。

图1 设计硬件连接图

8253定时/计数器用来产生定时中断,收到中断请求后输出数据到DAC0832。所以采用8253的0号计数器,将GATE0接高电平,OUT0接IRQ2,clk0接Q3。一个周期输出64个数据,定时时间是T/64,根据选择的不同频率计算相应的计数初值,放在一个表中,根据选择来查找。 六、软件设计

本设计的主要是掌握各种典型波形的产生方法,例如三角波、方波和正弦波。构造各种波形的数据表和对ADC0832的编程输出。对于波形的频率调节主要是由8253定时/计数器来控制。

1. 波形数据表的构造

每个周期的数据表由64个数据组成,不同的幅度对应的数据不一样,可以根据倍数关系求出。但是为了简化计算,将每个幅值的数据表列出。这边我们只讨论幅值为5V时的数据表,其他的数据表可以根据倍数关系求得。

1)方波数据表的构造

只要输出高电平和低电平就可以了,所以输入到ADC0832的数据由32个00H和32个FFH组成。

2)三角波数据表的构造

三角波是由数据量的增减来控制的。在前半个周期数据由00H增加到FFH,在后半个周期数据由FFH减少到00H,每次变化为08H。所以三角波的数据表为:

BUF DB 00H,08H,10H,18H,20H,28H,30H,38H,40H,48H,50H,58H,60H,68H,70H,78H

DB 80H,88H,90H,98H,0A0H,0A8H,0B0H,0B8H

DB 0C0H,0C8H,0D0H,0D8H,0E0H,0E8H,0F0H,0F8H

DB 0FFH,0F8H,0F0H,0E8H,0E0H,0D8H,0D0H,0C8H

DB 0C0H,0B8H,0B0H,0A8H,0A0H,98H,90H,88H

DB 80H,78H,70H,68H,60H,58H,50H,48H,40H,38H,30H,28H,20H,18H,10H,08H

3)正弦波数据表的构造

DAC 0832的输入数据与输出电压的关系为:Ua=(UREF)/256*N,其中UREF表示参考电压(+5V),N表示数据。由于8位D/A转换器DAC 0832的数据N 的范围为:00H—FFH,故Ua的范围为:0V—4.98V。则产生的正弦波的幅度也为0V—4.98V。我们以正弦函数的0--/2为例,0度时我们设定其对应的N为:80H,/2时必然对应的 N为:FFH,在0--/2的范围内有16个点,故间隔为6度。综上所诉正弦波函数为:Ua =2.48*sin6x+2.5(x=0,1,……15)。联合上述两式,就可得出0--/2范围内的16个N值。构造出正弦波数据表如下:

SINBUF DB 080H,08CH,098H,0A5H,0B0H,0BCH,0C7H,0D1H

DB 0DAH,0E2H,0EAH,0F0H,0F6H,0FAH,0FDH,0FFH

DB 0FFH,0FDH,0FAH,0F6H,0F0H,0EAH,0E2H,0DAH

DB 0D1H,0C7H,0BCH,0B0H,0A5H,098H,08CH,080H

DB 7FH,73H,67H,5AH,4FH,43H,38H,2EH

DB 25H,1DH,15H,0FH,09H,05H,02H,00H

DB 00H,02H,05H,09H,0FH,15H,1DH,25H

DB 2EH,38H,43H,4FH,5AH,67H,73H,7FH 2. 程序的主要模块

程序主要由主程序和中断服务程序构成。主要由菜单显示、键盘读取、DA输出、AD采样、屏幕画图等模块组成。

菜单显示包含有3个菜单:主菜单和2个子菜单。主菜单有选择波形和退出选项,子菜单有选择频率菜单和选择幅度菜单。

键盘读取是配合菜单显示的条件下,接收键盘的输入,得到相应的数据来处理,决定输出波形的信息。

DA输出是将数据输出到ADC0832转换为模拟量输出。ADC0809的转换控制如下:选择通道并启动转换延时等待读取转换结果。

屏幕画图主要是调用了INT 10H中第12H号功能(AH=12,CX=列号,DX=行号,AL=点的颜色),在屏幕上写点。并通过幅度=(数字量)/255(FFH)*160这个公式来使从ADC 0809转换出的值显示到屏幕上。

3. 程序框图

1).主程序框图如图2。

开始显示主菜单等待键盘按键键号是‘1’键号是‘2’键号是‘3’键号是‘4’选取频率选取幅度等待中断键盘按键否回到DOSYYYYYNNNN系统初始化N

图2 主程序框图 2)中断程序框图

保护现场查找数据DA转换启动AD转换延时读取转换结果屏幕画点恢复现场中断退出

图3 中断服务程序