如何掌握波形发生器管理规划_第1页
如何掌握波形发生器管理规划_第2页
如何掌握波形发生器管理规划_第3页
如何掌握波形发生器管理规划_第4页
如何掌握波形发生器管理规划_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

波 形 发 生 器 贵州 贵阳 欧川在工作中,我们常常会用到波形发生器,它是使用频度很高的电子仪器。现在的波形发生器都采用单片机来构成。单片机波形发生器是以单片机核心,配相应的外围电路和功能软件,能实现各种波形发生的应用系统,它由硬件部分和软件部分组成,硬件是系统的基础,软件则是在硬件的基础上,对其合理的调配和使用,从而完成波形发生的任务。波形发生器的技术指标:(1) 波形类型:方型、正弦波、三角波、锯齿波;(2) 幅值电压:1V、2V、3V、4V、5V;(3) 频率值:10HZ、20HZ、50HZ、100HZ、200HZ、500HZ、1KHZ;(4) 输出极性:双极性操作设计1、 机器通电后,系统进行初始化,LED在面板上显示6个0,表示系统处于初始状态,等待用户输入设置命令,此时,无任何波形信号输出。2、 用户按下“F”、“V”、“W”,可以分别进入频率,幅值波形设置,使系统进入设置状态,相应的数码管显示“一”,此时,按其它键,无效;3、 在进入某一设置状态后,输入09等数字键,(数字键仅在设置状态时,有效)为欲输出的波形设置相应参数,LED将参数显示在面板上;4、 如果在设置中,要改变已设定的参数,可按下“CL”键,清除所有已设定参数,系统恢复初始状态,LED显示6个0,等待重新输入命令;5、 当必要的参数设定完毕后,所有参数显示于LED上,用户按下“EN”键,系统会将各波形参数传递到波形产生模块中,以便控制波形发生,实现不同频率,不同电压幅值,不同类型波形的输出;6、 用户按下“EN”键后,波形发生器开始输出满足参数的波形信号,面板上相应类型的运行指示灯闪烁,表示波形正在输出,LED显示波形类型编号,频率值、电压幅值等波形参数;7、 波形发生器在输出信号时,按下任意一个键,就停止波形信号输出,等待重新设置参数,设置过程如上所述,如果不改变参数,可按下“EN”键,继续输出原波形信号;8、 要停止波形发生器的使用,可按下复位按钮,将系统复位,然后关闭电源。硬件组成部分通过综合比较,决定选用获得广泛应用,性能价格高的常用芯片来构成硬件电路。单片机采用MCS-51系列的89C51(一块),74LS244和74LS373(各一块),反相驱动器 ULN2803A(一块),运算放大器 LM324(一块)MCS-51系列芯片LED显示 键盘D/A运放 波形发生器的硬件电路由单片机、键盘显示器接口电路、波形转换(D/ A)电路和电源线路等四部分构成。1.单片机电路功能:形成扫描码,键值识别,键功能处理,完成参数设置;形成显示段码,向LED显示接口电路输出;产生定时中断;形成波形的数字编码,并输出到D/A接口电路;如电路原理图所示: 89C51的P0口和P2口作为扩展I/O口,与8255、0832、74LS373相连接,可寻址片外的寄存器。单片机寻址外设,采用存储器映像方式,外部接口芯片与内部存储器统一编址,8951提供16根地址线P0(分时复用)和P2,P2口提供高8位地址线,P0口提供低8位地址线。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()工作方式选择寄存器(TMOD)()中断允许控制寄存器(IE)()2、键盘显示器接口电路功能:驱动6位数码管动态显示; 提供响应界面; 扫面键盘; 提供输入按键。由并口芯片8255,锁存器74LS273,74LS244,反向驱动器ULN2803A,6位共阴极数码管(LED)和44行列式键盘组成。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):BFFFH4、电源电路:功能:为波形发生器提供直流能量;构成由变压器、整流硅堆,稳压块7805组成。220V的交流电,经过开关,保险管(1.5A/250V),到变压器降压,由220V降为10V,通过硅堆将交流电变成直流电,对于谐波,用4700F的电解电容给予滤除。为保证直流电压稳定,使用7805进行稳压。最后,5V电源配送到各用电负载。软件结构在波形产生器系统中,程序由人机交互模块和波形产生模块组成,人机交互模块又可分成键盘子模块和LED子模块。人机交互模块作为主程序,管理单片机系统,波形发生模块作为中断服务程序,实现系统的波形输出。主流程初始化LED显示键盘输入处理判断波形方波正弦波三角波锯齿波中断返回定时中断开始如图(2)所示:(A)是波形发生器的主流图,由系统初始化和人机交互模块组成,其中LED显示子模块和键盘输入处理子模块占用单片机主要处理时间,单片机反复运行该模块程序人机交互模块相当于系统的监控程序;(B)是定时中断服务流程图,波形发生模块放置在定时中断服务程序中,系统每隔一定时间,产生一个定时中断,暂停主流程运行,转到定时中断服务程序起始处,执行波形发生模块,该模块输出一个样值后,结束此次中断服务,返回主流程断点处继续运行。反复多次定时中断服务,从而完成波形生成。片内RAM有128B的容量, 30H3FH定义为堆栈区,40H45H定义为LED显示缓冲储存区,40H存放波形编号,41H44H存放频率值,45H存放参考电压值,46H定义为设置标志区。1、 人机交互模块()LED显示子模块在单片机内部RAM中的40H45H是LED显示器的显示缓冲区,40H的内容送到左边的第一只数码管显示,41H的内容送左边的第二只数码管,45H的内容送左边的第六只数码管(最后一位)。显示缓冲区的内容如何形成可以显示的段码呢?在设计中,我们采用查表的方式来形成。编写程序前,根据共阴极LED显示器的工作原理,确定显示数字(1、2、38、9)的段码,将它们按大小顺序编制成显示码表,存于ROM中。在编程时,可以由显示缓冲区内的数字,通过查表的方法得到相应的段码。显示子模块的程序流程图如图()所示。R1存位选信号,R2存显示次数,R0存显示缓冲区地址。程序执行过程如下:单片机先向8255的PB口送位选信号,修改R1中的内容,形成下次位选信号;从显存取数字,通过查表,得到显示段码,送到8255的PC口;调用延时子程序,保持显示;修改RO的内容;判断是否已执行显示6次,若不满6次,转到开始处,重复执行,若已执行6次,则结束显示。LED显示初始化向8255的B口送位选信号形成下一次位选信号通过查表,将数字转换成显示段码送8255的A口延时形成下一位显示数字的地址显示6次吗?结束开始(2)键盘输入处理子模块在具体实现时,键值识别部分作为主程序,键功能处理部分作为子程序,它们之间的关系是主程序调用子程序。键盘的工作过程:(1)扫描键盘,获得列扫描码和行状态码,从而确定被按下的按键的键值;(2)根据键值,通过散转表,跳转到相应的键功能处理部分;(3)进入键处理部分,完成键功能;(4)完成一次键输入工作。通过键盘对单片机系统进行设置,每按一次键,键盘都会有上述的处理过程,每次仅能完成一个键功能。在实际设置波形参数时,一个参数需要多个键功能来实现,那么相应的键盘也要多次完成键值识别,跳转键处理的工作过程。工作过程如图()和图()所示。散转表“0”键处理“1”键处理“9”键处理“En”键处理“CL”键处理“F”键处理“V”键处理“W”键处理返回键盘输入主程序“.”键处理开始键闭合查询闭合去抖动列扫描键盘行状态有零吗?获取列码和行码与键特征值比对找到键值吗?等待释放调用键功能处理退出形成下次列扫描码扫描4次吗?形成下个键值、形成下个特征比对16次吗?开始各功能键处理,设计如下:“F”键的处理,进入“KEY-F-PRO”子程序段,将设置标志区(ROM46H)设为01H,表示是频率参数设定;送42H到R5中,41H是频率值显示缓冲区首址;将ROM中41H、42H、43H等存储单元送#0AH,使LED显示“-0”,最后退回到键盘主程序,处理流程图(6)。将设置标志ROM46H设定为频率(01)RS设定为41H返回扫描程序开始“V”键处理:将设置标志区(ROM46H存储单元),设为02H,表示是参考电压设定;将ROM中46H存储单元置为#0AH,使相应位的LED显示“-”。处理流程图(7)。46H02返回扫描程序开始“W”键处理,将设置标志区设为03H,表示是波形编号设定;将40H存储单元的内容置#0AH,使相应位的LED显示“-”。处理流程图(8)。46H03返回扫描程序开始“09”键处理:首先查看设置标志区46H的内容,判断有无设置,若有设置,则判断是频率设置,还是参考电压设置,或者是波形编号设置,确定是某种设置,则进入设定操作,即将数字(09)送到显存相应的地址单元。如果无设置,则直接退回到主程序。处理流程图(9)。设置类型数字送显存ROM41H43H数字送显存ROM45H数字送显存ROM40H返回键盘扫描程序开始“CL”键处理:将显示缓冲区ROM40H45H的内容全部清零,使LED显示“”;将设置标志区ROM46H的内空清零,使其处于“无设置”状态;将定时器TO的初值清零,并停止TO的定时运行,使定时器TO不工作;之后,退回主程序,处理流程图(10)。显存内容清零设置标志清零定时初值清零停止定时运行返回扫描程序开始“EN”键处理:首先检查W、V、F等参数值是否已全部设置,如果已经全部设置;(1)从ROM45H取出参考电压值,通过查表,获得电压的数字编码,送到0832(1),产生输出,作为0832(2)参考电压;(2)从ROM41H43H中取频率值,判定该值,判定该值,根据判断结果,进入相应的程序段,实现“频率与定时初值的转换”,完成TMOD的设定和初值设定;(3)开启定时中断,向R6赋于样值初始编号;最后,退回到主程序,处理流程图(11)W、V、F都设置好了吗?向0832(1)送电压编码,0832(1)输出参考电压频率值判断TMOD设定定时初值设定开启定时中断赋以样值初始编号返回扫描程序开始 2、波形产生模块设计思想:(1)将一个周期T的信号分离成32个点(按X轴等分),每面点之间的时间间隔为T,用单片机的定时器产生。(2)一个周期被分离成32个点,对应的三种波形的32个数据存放在以TAB1TAB3为起始地址的存储器中。中断服务流程如图(12)所示。保护现场波形类型值送R7调用波形产生子程序恢复现场返回主程序开始波形产生流程如图(13)所示查表获得样值编码将样值编码送0852(2)形成下一个样值编号样值编号等于32吗?样值编号清零(R6)0返回中断服务程序开始参考程序段多功能波形发生器VHDL程序-文件名:mine4.vhd。-功能:实现4种常见波形正弦、三角、锯齿、方波(A、B)的频率、幅度可控输出(方波-A的占空比也是可控的),可以存储任意波形特征数据并能重现该波形,还可完成-各种波形的线形叠加输出。-说明: SSS(前三位)和SW信号控制4种常见波形种哪种波形输出。4种波形的频率、-幅度(基准幅度A)的调节均是通过up、down、set按键和4个BCD码置入器以及一-个置入档位控制信号(ss)完成的(AMP的调节范围是05V,调节量阶为1/51V)。-其中方波的幅度还可通过u0、d0调节输出数据的归一化幅值(AMP0)进行进一步-细调(调节量阶为1/(51*255)V)。方波A的占空比通过zu、zp按键调节(调节-量阶1/64*T)。系统采用内部存储器RAM实现任意输入波形的存储,程序只支-持键盘式波形特征参数置入存储,posting 为进入任意波置入(set)、清除(clr)状态-控制信号,SSS控制存储波形的输出。P180为预留端口, -最后修改日期:2004.3.26。library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity mine4 isport(clk : in std_logic; -时钟信号输入set, clr, up, down, zu, zd : in std_logic; -各个波形特征的调节触发信号posting : in std_logic; -任意波键盘置入信号u0,d0,sw : in std_logic; -方波A、B的切换sw,和方波B的幅度调节按键ss : in std_logic_vector( 3 downto 0 ); -档位选择信号sss : in std_logic_vector( 4 downto 0 ); -波形选择信号Data3, Data2, Data1,Data0 : in std_logic_vector(3 downto 0); -BCD码输入p180 : out std_logic; -预留接口lcd : out std_logic_vector(7 downto 0); -显示输出shift : out std_logic_vector(3 downto 0); -位码输出dd, a : out std_logic_vector( 7 downto 0); -波形、幅度数据输出end mine4;architecture behav of mine4 issubtype word is std_logic_vector( 7 downto 0 );type unit is array(63 downto 0) of word;signal ram : unit;signal qqq : integer range 0 to ;signal qq : integer range 0 to ;signal tmp : integer range 0 to 9999;signal coun : integer range 0 to ;signal coun0 : integer range 0 to ;signal b : integer range 0 to ;signal c : integer range 0 to ;signal z, con : integer range 0 to 63;signal f : std_logic_vector( 7 downto 0 );signal amp, amp0, d : std_logic_vector(7 downto 0);signal bcd0,bcd1,bcd2,bcd3 : integer range 0 to 9;signal bcd01,bcd11,bcd21,bcd31 : integer range 0 to 9;signal bcd00,bcd10,bcd20,bcd30 : integer range 0 to 9;signal y : integer range 0 to 9;signal addr : integer range 0 to 63;beginqq= when ss=1000 else when ss=0100 else when ss=0010 else78125;-qq信号对应SW=0时的档位选择信号SS,实现方波A和其他三种波形的频率预置qqq= when ss=1000 else when ss=0100 else when ss=0010 else50000;-qqq信号对应SW=1时的档位选择信号SS,实现方波B的频率预置process(clk) -此进程分别描述了各种波形的频率、幅度(方波A的占空比)调节以及各种波形的任意线-形叠加等。variable count4 : integer range 0 to ;variable count : integer range 0 to ;variable count3 : integer range 0 to ;variable count1 : integer range 0 to ;variable count0 : integer range 0 to ;variable ddd : std_logic_vector(9 downto 0);variable dd0,dd1,dd2,dd3,dd4 : integer range 0 to 255;variable adr : integer range 0 to 63;beginif rising_edge(clk) thenif posting=1 then if count4= then count4:=0; adr:=conv_integer(Data3)*10+conv_integer(Data2);-存储单位地址if adr64 then if set=1 then ram(adr)=conv_std_logic_vector(conv_integer(Data1)*10+conv_integer(Data0)*2,8); -对置入的任意波形数据进行储存elsif clr=1 then adr:=0; -存储器所有单元清零for i in 0 to 63 loopram(i)0);end loop;end if;end if;else count4:=count4+1;end if;else if set=1 then coun=0; b=0; coun0=0;c=0;z=31;amp0=; addr=0;tmp=conv_integer(Data3)*1000+conv_integer(Data2)*100+conv_integer(Data1)*10+conv_integer(Data0); -频率数据amp0 thenif sw=0 thenif counqq then coun=coun+tmp; b=b+1; -频率到采样点间隔脉冲数转换 else if count=b then count:=1; if f=63 then f=;else f=f+1;end if;if sss=00010 then -方波Aif con=z then dd=amp0; con=con+1;elsif con=63 then con=0; dd=;else con=con+1; dd=;end if;elsif sss=10000 then dd=d; -正弦波elsif sss=00100 then dd31 then dd=(-f(5 downto 0)&00;else dd=f(5 downto 0)&00;end if;elsif sss=00001 then -任意波if addr63 then dd=ram(addr); addr=addr+1;elsif addr=63 then dd=ram(63); addr=0;end if;else -完成5种波形的线形叠加if sss(1)=1 thenif con=z then con=con+1; dd0:=conv_integer(amp0); -方波波形数据dd0else con31 then dd3:=conv_integer(-f(5 downto 0)&00);else dd3:=conv_integer(f(5 downto 0)&00); -三角波波形数据dd3end if;end if;if sss(0)=1 then if addr63 then dd4:=conv_integer(ram(addr); addr=addr+1;elsif addr=63 then dd4:=conv_integer(ram(63); addr=0;end if; -任意波波形数据dd4end if;ddd:=conv_std_logic_vector(dd0+dd1+dd2+dd3+dd4),10);-波形线形叠加输出dd=ddd(9 downto 2);end if;else count:=count+1; end if;end if;else if coun0qqq then coun0=coun0+tmp; c=c+1;else if count3=c/2 then count3:=count3+1; dd=amp0;elsif count3=c then count3:=1;dd=; else count3:=count3+1; dd=;end if;end if; end if; end if; if count1= then count1:=0; -调方波A的占空比if zu=1 thenif z63 then z=z+1;else z0 then z=z-1;else z=0;end if;end if;else count1:=count1+1;end if;if count0= then count0:=0;-up、down对4种波形幅度调节,u0、d0进一步对方波进行幅度调节if u0=1 thenif amp0 then amp0=amp0+1;else amp0 then amp0=amp0-1;else amp0=;end if;elsif up=1 thenif amp then amp=amp+1;else amp then amp=amp-1;else amp=;end if;end if;else count0:=count0+1;end if;end if;end if;end if;end process;a=amp; -将幅值输出。cov_a:process(clk,amp,amp0) -主要实现各波形幅度值到BCD码的转化,由于方波和其他三种波形的幅度调节方式、精-度不同,因此对幅度的处理方式分两种:“sss=00010 or sw=1”是判断输出波形是否为-方波(A或B),bcd00,bcd10,bcd20,bcd30是本进程的输出。variable count : integer range 0 to ;variable counter : integer range 0 to ;variable count1,count0 : integer range 0 to ;beginif rising_edge(clk) thenif sss=00010 or sw=1 then count0:=0; -方波if count1= then count1:=0; bcd0=0; bcd1=0; bcd2=0; bcd3=0;count:=(conv_integer(amp)*(conv_integer(amp0)*769; -幅值运算elsif count1= then count1:=count1+1;bcd00=bcd0; bcd10=bcd1; bcd20=bcd2; bcd30 then count:=count-; bcd0 then count:=count-; bcd199999 then count:=count-; bcd29999 then count:=count-10000; bcd3=bcd3+1;else null;end if;end if;else count1:=0; -正弦波、三角波、锯齿波if count0= then counter:=conv_integer(amp)*1961;count0:=0; bcd01=0; bcd11=0; bcd21=0; bcd31=0;elsif count0= then bcd00=bcd01; bcd10=bcd11; bcd20=bcd21; bcd3099999 then counter:=count

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论