波形发生器Word文档下载推荐.docx
- 文档编号:6819313
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:28
- 大小:247.87KB
波形发生器Word文档下载推荐.docx
《波形发生器Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《波形发生器Word文档下载推荐.docx(28页珍藏版)》请在冰点文库上搜索。
P0口同时还要负责与8255,0832的数据传递。
P2.7是8255的片选信号,P2.6是0832
(1)的片选,P2.5是0832
(2)的片选,低电平有效,P0.0、P0.1经过74LS373锁存后,送到8255的A1、A2作,片内A口,B口,C口,控制口等寄存器的字选。
89C51的P1口的低4位连接4只发光三极管,作为波形类型指示灯,表示
正在输出的波形是什么类型。
单片机89C51内部有两个定时器/计数器,在波形发生器中使用T0作为中断源。
不同的频率值对应不同的定时初值,定时器的溢出信号作为中断请求。
控制定时器中断的特殊功能寄存器设置如下:
定时控制寄存器TCON=(00010000)
工作方式选择寄存器(TMOD)=(00000000)
中断允许控制寄存器(IE)=(10000010)
2、键盘显示器接口电路
驱动6位数码管动态显示;
提供响应界面;
扫面键盘;
提供输入按键。
由并口芯片8255,锁存器74LS273,74LS244,反向驱动器ULN2803A,6位共阴极数码管(LED)和4×
4行列式键盘组成。
8255的C口作为键盘的I/O接口,C口的低4位输出到扫描码,高4位作为输入行状态,按键的分布如图所示。
8255的A口作为LED段码输出口,与74LS244相连接,B口作为LED的位选信号输出口,与ULN2803A相连接。
8255内部的4个寄存器地址分配如下:
控制口:
7FFFH,A口:
7FFFCH,B口:
7FFDH,C口:
7FFEH
3、D/A电路
将波形样值的数字编码转换成模拟值;
完成单极性向双极性的波形输出;
构成由两片0832和一块LM324运放组成。
0832
(1)是参考电压提供者,单片机向0832
(1)内的锁存器送数字编码,不同的编码会产生不同的输出值,在本发生器中,可输出1V、2V、3V、4V、5V等五个模拟值,这些值作为0832
(2)的参考电压,使0832
(2)输出波形信号时,其幅度是可调的。
0832
(2)用于产生各种波形信号,单片机在波形产生程序的控制下,生成波形样值编码,并送到0832
(2)中的锁存器,经过D/A转换,得到波形的模拟样值点,假如N个点就构成波形的一个周期,那么0832
(2)输出N个样值点后,样值点形成运动轨迹,就是波形信号的一个周期。
重复输出N个点后,由此成第二个周期,第三个周期……。
这样0832
(2)就能连续的输出周期变化的波形信号。
运放A1是直流放大器,运放A2是单极性电压放大器,运放A3是双极性驱动放大器,使波形信号能带得起负载。
地址分配:
0832
(1):
DFFFH ,0832
(2):
BFFFH
4、电源电路:
为波形发生器提供直流能量;
构成由变压器、整流硅堆,稳压块7805组成。
220V的交流电,经过开关,保险管(1.5A/250V),到变压器降压,由220V降为10V,通过硅堆将交流电变成直流电,对于谐波,用4700μF的电解电容给予滤除。
为保证直流电压稳定,使用7805进行稳压。
最后,+5V电源配送到各用电负载。
软件结构
在波形产生器系统中,程序由人机交互模块和波形产生模块组成,人机交互模块又可分成键盘子模块和LED子模块。
人机交互模块作为主程序,管理单片机系统,波形发生模块作为中断服务程序,实现系统的波形输出。
如图
(2)所示:
(A) 是波形发生器的主流图,由系统初始化和人机交互模块组成,其中LED显示子模块和键盘输入处理子模块占用单片机主要处理时间,单片机反复运行该模块程序人机交互模块相当于系统的监控程序;
(B)是定时中断服务流程图,波形发生模块放置在定时中断服务程序中,系统每隔一定时间,产生一个定时中断,暂停主流程运行,转到定时中断服务程序起始处,执行波形发生模块,该模块输出一个样值后,结束此次中断服务,返回主流程断点处继续运行。
反复多次定时中断服务,从而完成波形生成。
片内RAM有128B的容量,30H~3FH定义为堆栈区,40H~45H定义为LED显示缓冲储存区,40H存放波形编号,41H~44H存放频率值,45H存放参考电压值,46H定义为设置标志区。
1、人机交互模块
(1)LED显示子模块
在单片机内部RAM中的40H~45H是LED显示器的显示缓冲区,40H的内容送到左边的第一只数码管显示,41H的内容送左边的第二只数码管……,45H的内容送左边的第六只数码管(最后一位)。
显示缓冲区的内容如何形成可以显示的段码呢?
在设计中,我们采用查表的方式来形成。
编写程序前,根据共阴极LED显示器的工作原理,确定显示数字(1、2、3……8、9)的段码,将它们按大小顺序编制成显示码表,存于ROM中。
在编程时,可以由显示缓冲区内的数字,通过查表的方法得到相应的段码。
显示子模块的程序流程图如图(3)所示。
R1存位选信号,R2存显示次数,R0存显示缓冲区地址。
程序执行过程如下:
单片机先向8255的PB口送位选信号,修改R1中的内容,形成下次位选信号;
从显存取数字,通过查表,得到显示段码,送到8255的PC口;
调用延时子程序,保持显示;
修改RO的内容;
判断是否已执行显示6次,若不满6次,转到开始处,重复执行,若已执行6次,则结束显示。
(2)键盘输入处理子模块
在具体实现时,键值识别部分作为主程序,键功能处理部分作为子程序,它们之间的关系是主程序调用子程序
。
键盘的工作过程:
(1)扫描键盘,获得列扫描码和行状态码,从而确定被按下的按键的键值;
(2)根据键值,通过散转表,跳转到相应的键功能处理部分;
(3)进入键处理部分,完成键功能;
(4)完成一次键输入工作。
通过键盘对单片机系统进行设置,每按一次键,键盘都会有上述的处理过程,每次仅能完成一个键功能。
在实际设置波形参数时,一个参数需要多个键功能来实现,那么相应的键盘也要多次完成键值识别,跳转键处理的工作过程。
工作过程如图(4)和图(5)所示。
各功能键处理,设计如下:
“F”键的处理,进入“KEY-F-PRO”子程序段,将设置标志区(ROM46H)设为01H,表示是频率参数设定;
送42H到R5中,41H是频率值显示缓冲区首址;
将ROM中41H、42H、43H等存储单元送#0AH,使LED显示“---0”,最后退回到键盘主程序,处理流程图(6)。
“V”键处理:
将设置标志区(ROM46H存储单元),设为02H,表示是参考电压设定;
将ROM中46H存储单元置为#0AH,使相应位的LED显示“-”。
处理流程图(7)。
“W”键处理,将设置标志区设为03H,表示是波形编号设定;
将40H存储单元的内容置#0AH,使相应位的LED显示“-”。
处理流程图(8)。
“0~9”键处理:
首先查看设置标志区46H的内容,判断有无设置,若有设置,则判断是频率设置,还是参考电压设置,或者是波形编号设置,确定是某种设置,则进入设定操作,即将数字(0~9)送到显存相应的地址单元。
如果无设置,则直接退回到主程序。
处理流程图(9)。
“CL”键处理:
将显示缓冲区ROM40H~45H的内容全部清零,使LED显示“000000”;
将设置标志区ROM46H的内空清零,使其处于“无设置”状态;
将定时器TO的初值清零,并停止TO的定时运行,使定时器TO不工作;
之后,退回主程序,处理流程图(10)。
“EN”键处理:
首先检查W、V、F等参数值是否已全部设置,如果已经全部设置;
(1)从ROM45H取出参考电压值,通过查表,获得电压的数字编码,送到0832
(1),产生输出,作为0832
(2)参考电压;
(2)从ROM41H~43H中取频率值,判定该值,判定该值,根据判断结果,进入相应的程序段,实现“频率与定时初值的转换”,完成TMOD的设定和初值设定;
(3)开启定时中断,向R6赋于样值初始编号;
最后,退回到主程序,处理流程图(11)
2、波形产生模块
设计思想:
(1)将一个周期T的信号分离成32个点(按X轴等分),每面点之间的时间间隔为ΔT,用单片机的定时器产生。
(2)一个周期被分离成32个点,对应的三种波形的32个数据存放在以TAB1~TAB3为起始地址的存储器中。
中断服务流程如图(12)所示。
波形产生流程如图(13)所示
参考程序段
多功能波形发生器VHDL程序
--文件名:
mine4.vhd。
--功能:
实现4种常见波形正弦、三角、锯齿、方波(A、B)的频率、幅度可控输出(方波
--A的占空比也是可控的),可以存储任意波形特征数据并能重现该波形,还可完成
--各种波形的线形叠加输出。
--说明:
SSS(前三位)和SW信号控制4种常见波形种哪种波形输出。
4种波形的频率、
--幅度(基准幅度A)的调节均是通过up、down、set按键和4个BCD码置入器以及一
--个置入档位控制信号(ss)完成的(AMP的调节范围是0~5V,调节量阶为1/51V)。
--其中方波的幅度还可通过u0、d0调节输出数据的归一化幅值(AMP0)进行进一步
--细调(调节量阶为1/(51*255)V)。
方波A的占空比通过zu、zp按键调节(调节
--量阶1/64*T)。
系统采用内部存储器——RAM实现任意输入波形的存储,程序只支
--持键盘式波形特征参数置入存储,posting为进入任意波置入(set)、清除(clr)状态
--控制信号,SSS控制存储波形的输出。
P180为预留端口,
--最后修改日期:
2004.3.26。
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entitymine4is
port(clk:
instd_logic;
--时钟信号输入
set,clr,up,down,zu,zd:
--各个波形特征的调节触发信号
posting:
--任意波键盘置入信号
u0,d0,sw:
--方波A、B的切换sw,和方波B的幅度调节按键
ss:
instd_logic_vector(3downto0);
--档位选择信号
sss:
instd_logic_vector(4downto0);
--波形选择信号
Data3,Data2,Data1,Data0:
instd_logic_vector(3downto0);
--BCD码输入
p180:
outstd_logic;
--预留接口
lcd:
outstd_logic_vector(7downto0);
--显示输出
shift:
outstd_logic_vector(3downto0);
--位码输出
dd,a:
outstd_logic_vector(7downto0));
--波形、幅度数据输出
endmine4;
architecturebehavofmine4is
subtypewordisstd_logic_vector(7downto0);
typeunitisarray(63downto0)ofword;
signalram:
unit;
signalqqq:
integerrange0to250000000;
signalqq:
integerrange0to78125000;
signaltmp:
integerrange0to9999;
signalcoun:
signalcoun0:
signalb:
signalc:
integerrange0to500000000;
signalz,con:
integerrange0to63;
signalf:
std_logic_vector(7downto0);
signalamp,amp0,d:
std_logic_vector(7downto0);
signalbcd0,bcd1,bcd2,bcd3:
integerrange0to9;
signalbcd01,bcd11,bcd21,bcd31:
signalbcd00,bcd10,bcd20,bcd30:
signaly:
signaladdr:
begin
qq<
=781250whenss="
1000"
else
7812500whenss="
0100"
else
78125000whenss="
0010"
78125;
--qq信号对应SW=0时的档位选择信号SS,实现方波A和其他三种波形的频率预置
qqq<
=500000whenss="
5000000whenss="
50000000whenss="
50000;
--qqq信号对应SW=1时的档位选择信号SS,实现方波B的频率预置
process(clk)
--此进程分别描述了各种波形的频率、幅度(方波A的占空比)调节以及各种波形的任意线
--形叠加等。
variablecount4:
integerrange0to6250000;
variablecount:
variablecount3:
variablecount1:
integerrange0to12500000;
variablecount0:
integerrange0to3249999;
variableddd:
std_logic_vector(9downto0);
variabledd0,dd1,dd2,dd3,dd4:
integerrange0to255;
variableadr:
ifrising_edge(clk)then
ifposting='
1'
then
ifcount4=6249999thencount4:
=0;
adr:
=conv_integer(Data3)*10+conv_integer(Data2);
--存储单位地址
ifadr<
64then
ifset='
thenram(adr)<
=conv_std_logic_vector((conv_integer(Data1)*10
+conv_integer(Data0))*2,8);
--对置入的任意波形数据进行储存
elsifclr='
thenadr:
--存储器所有单元清零
foriin0to63loop
ram(i)<
=(others=>
'
0'
);
endloop;
endif;
elsecount4:
=count4+1;
else
thencoun<
b<
coun0<
c<
z<
=31;
amp0<
="
01111111"
;
addr<
tmp<
=conv_integer(Data3)*1000+conv_integer(Data2)*100
+conv_integer(Data1)*10+conv_integer(Data0);
--频率数据
amp<
--幅值
else
iftmp>
0then
ifsw='
then
ifcoun<
qqthencoun<
=coun+tmp;
=b+1;
--频率到采样点间隔脉冲数转换
ifcount=bthencount:
=1;
iff=63thenf<
00000000"
elsef<
=f+1;
ifsss="
00010"
then--方波A
ifcon<
=zthendd<
=amp0;
con<
=con+1;
elsifcon=63thencon<
dd<
elsecon<
elsifsss="
10000"
thendd<
=d;
--正弦波
00100"
=f(5downto0)&
"
00"
--锯齿波
01000"
then--三角波
iff>
31thendd<
=("
111111"
-f(5downto0))&
elsedd<
00001"
then--任意波
ifaddr<
63thendd<
=ram(addr);
=addr+1;
elsifaddr=63thendd<
=ram(63);
else--完成5种波形的线形叠加
ifsss
(1)='
=zthencon<
dd0:
=conv_integer(amp0);
--方波波形数据dd0
dd0:
ifsss(4)='
thendd1:
=conv_integer(d);
--正弦波波形数据dd1
ifsss
(2)='
thendd2:
=conv_integer(f(5downto0)&
--锯齿波波形数据dd2
ifsss(3)='
31thendd3:
=conv_integer(("
elsedd3:
--三角波波形数据dd3
ifsss(0)='
63thendd4:
=conv_integer(ram(addr));
elsifaddr=63thendd4:
=conv_integer(ram(63));
--任意波波形数据dd4
ddd:
=conv_std_logic_vector((dd0+dd1+dd2+dd3+dd4),10);
--波形线形叠加输出
dd<
=ddd(9downto2);
elsecount:
=count+1;
ifcoun0<
qqqthencoun0<
=coun0+tmp;
c<
=c+1;
ifcount3<
=c/2thencount3:
=count3+1;
elsifcount3=cthencount3:
elsecount3:
ifcount1=12499999thencount1:
--调方波A的占空比
ifzu='
ifz<
63thenz<
=z+1;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 波形 发生器
![提示](https://static.bingdoc.com/images/bang_tan.gif)