如何设计单片机波形发生器啊

如何设计单片机波形发生器啊,第1张

一、 设计任务

设计制作一个波形发生器,该波形发生器能产生正弦波、方波、三角波和由用户编辑的

特定形状波形。

二、 设计要求

1 基本要求

具有产生正弦波、方波、三角波三种周期性的波形。

用键盘输入编辑生成上述三种波形(同周期)的线性组合波形,以及由基波及其谐波(

5次以下)线性组合的波形。

具有波形存储功能。

输出波形的频率为100Hz~20KHz(非正弦波频率按10次谐波计算):重复频率可调,频

率步进间隔≤100Hz。

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

具有显示输出波形的类型、重复频率(周期)和幅度的功能。

2发挥部分

输出波形频率范围扩展至100Hz~200KHz。

用键盘或其他输入装置产生任意波形。

增加稳幅输出功能,当负载变化时,输出电压幅度变化不大于±3%(负载电压变化范围

:100Ω~∞)。

具有掉电存储功能,可存储掉电前用户编辑的波形和设置。

可产生单次或多次(1000次以下)特定波形(如产生一个半周期三角波输出)。

其它(如增加频谱分析、失真度分析、频率扩展>200KHz、扫频输出等功能)。

只要你了解PWM产生机理,原理图较简单,你可在百度文库搜索一下,原程序最好自己学会。只能提供以下几点建议:

1、可采用单片机定时器的PWM加积分器的方式输出任意波形,其优点是可输出任意形状的波形,缺点是受单片机主频的影响,输出信号带宽较窄。

2、高频方波可直接输出,方波输出接积分器即可输出三角波。

3、高频正弦波可采用方波加锁相环选频获取。

4、输出频率误差可达01%没有问题,只要频率够低,PWM分辨率够高,电源够稳定,幅值误差应该可以达到05%甚至更高都没有问题。

121 课题背景随着科学技术的迅速发展,数字化技术已渗透到各个领域。智能仪表装置由于其安全、方便、高效、快捷、智能化等特点,使它在21世纪成为各种科学技术领域和工程实践的助手。它对于改善现代人类的生活质量,创造、安全、便利的生活空间有着非常重要的意义。随着电子技术的发展 , 数字化技术在智能仪表 ,外设控制等方面取得了广泛的运用。其中幅值、波形和频率可调的智能信号发生器经常要用在各种科学技术领域和工程实践中。函数信号发生器和示波器、电压表、频率计等仪器一样是最普通、最基本的 ,也是应用最广泛的电子仪器之一 ,几乎所有的电参量的测量都需要用到信号发生器 。频率越高、产生的波形种类越多的发生器性能越好,但器件的成本和技术要求也大大提高。比如:利用专用直接数字合成DDS芯片实现信号发生器。这种信号发生器能产生任意波形并达到很高的频率,但成本很高。因此,综合成本和性能等多方面考虑,设计出一款单片集成芯片配合52单片机实现的智能信号发生器是一次非常有意义的尝试。该种智能信号发生器能产生多种波形信号,达到较高的频率,易于调试,且有很高的性价比。怎么样才能设计出一款内部功能齐全,外围电路简单,使用方便的智能信号发生器呢?这就需要用到集成信号发生芯片。随着半导体芯片制造业的迅速发展和研制水平的飞速提高,出现了很多功能强大且性能可靠的集成信号发生芯片 ,几乎代替了以前用分立元件搭成的信号发生电路模块。精密函数发生芯片MAX038就是其中之一,而且在众多的信号发生芯片中MAX038 芯片的性价比较高 。所以本设计选用精密函数发生芯片MAX038。本设计中,用户可根据自己的需要,将要输出的波形种类通过外置键盘输入单片机,调用其相应的子程序,再通过与MAX038相连的可变电阻来调节波形的频率和占空比,经MAX038输出到放大电路,最后接到示波器,由示波器显示产生的波形。这种信号源的频率改变十分方便 ,而且线路简单,调试和修理简捷,性能价格比较高。122 技术指标本文设计的智能信号发生器的技术指标如下:(1)可以输出正弦波、矩形波及三角波;(2)输出方波的占空比可调范围在10%~90%;(3)输出信号的频率稳定度和准确度: ;(4)正弦波非线性失真度 :小于1%;(5)频率可调范围:01HZ~20MHZ;(6)幅度:6V为了达到这一目标,本课题重点在以下几个方面展开工作:(1)信号发生器的基本原理及相关技术的研究学习本课题工作初期主要阅读了大量相关书籍,特别是MAX038芯片的资料,还深入研究了信号发生器的基本原理、技术特点等。在这些工作的基础上,提出了系统的解决方案,并解决了其中的关键技术难题。 (2)硬件系统设计 硬件电路设计主要包括键盘电路、单片机外围电路、MAX038外围电路(占空比调节、频率调整电路)、放大电路的设计。根据系统方案的要求,ATMEL公司的8位Flash 单片机AT89C52作为系统的控制核心及数据处理中心,接距阵式键盘和MAX038电路部分。 (3)软件系统设计软件系统主要包括键盘去抖动延时程序、键盘扫描程序、波形选择程序。软件编程用C51语言。第二章 系统方案及原理框图2.1 系统方案设计MAX038是单片集成芯片,需要通过单片机的控制实现函数信号的波形选择。波形选择由两个输入引脚A0 和A1的逻辑电平设定。通过44键盘输入要产生的波形的种类,单片机判断键码并通过两个I/O口控制MAX038的A0和A1引脚,从而控制MAX038输出相应的波形。关于占空比调节和频率调整,为简单起见,可采用外部电位器调整控制。2.2 系统工作原理及框图从图2-1可以看出,系统按功能模块可分为几个部分:单片机系统:控制外围的信号发生芯片,完成波形选择。外围电路:实现外围的信号发生芯片和单片机之间的接口电路。C51程序:编写单片机外围信号发生芯片的接口程序,实现单片机函数信号输出功能。

AT89C52单片机

44键盘

波形选择

占空比调节节

MAX038

频率调整

放大电路

波形输出

图2-1 系统原理框图工作过程为:打开电源开始工作,按复位键复位,在键盘上输入所需波形,调用单片机的程序存储器中其相应的子程序 ,再通过与MAX038相连的可变电阻来调节波形的频率和占空比,经MAX038输出到放大电路,最后接到示波器,由示波器显示产生的波形。第三章 硬件电路设计本章将介绍信号发生器的电路设计原理,对各个功能模块分别进行讨论,主要包括键盘电路、单片机外围电路、MAX038外围电路(占空比调节、频率调整电路)、放大电路。3.1 键盘电路行列式键盘也即矩阵式键盘,它由行和列组成,在每个行列的交叉点上放置一个按键。44键盘是一种常见的键盘,用在本设计中完全能够满足要求。44行列式键盘共由16个键盘组成。图3-1是键盘电路图。矩阵键盘原理:矩阵键盘中,一个按键按下后会触发两个电平信号:X、Y,单片机通过扫描X、Y的值判断按键状态。

把单片机AT89C52中的P10-P17端口用8芯排线连接到“44行列式键盘”区域中的L1-L4、C1-C4端口上。图3-1 键盘电路32 单片机外围电路设计MAX038是单片集成芯片,需要通过单片机的控制实现函数信号的波形选择。单片机是核心器件之一,通过它对MAX038的设置,实现不同波形的选择和输出。由于系统控制方案不太复杂 ,数据量也不太大,我们选用 AT89C52 作为控制系统的核心。它极为常用,价格便宜,易于获取。321 单片机外围电路硬件部分AT89C52是美国Atmel公司生产的低电压、高性能CMOS 8位单片机,片内含8KB的可

图 3-2 AT89C52管脚图反复檫写的程序存储器和12B的随机存取数据存储器(RAM),器件采用Atmel公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内配置通用8位中央处理器(CPU)和Flash存储单元,功能强大的AT89C52单片机可灵活应用于各种控制领域。AT89C52单片机属于AT89C51单片机的增强型,与Intel公司的80C52在引脚排列、硬件组成、工作特点和指令系统等方面兼容。图 3-2 是AT89C52的管脚图。其主要工作特性是:片内程序存储器内含8KB的Flash程序存储器,可擦写寿命为1000次;片内数据存储器内含256字节的RAM;具有32根可编程I/O口线;具有3个可编程定时器;中断系统是具有8个中断源、6个中断矢量、2个级优先权的中断结构;串行口是具有一个全双工的可编程串行通信口;具有一个数据指针DPTR;低功耗工作模式有空闲模式和掉电模式具有可编程的3级程序锁定位;AT89C52工作电源电压为5(1+02)V,且典型值为5V;AT89C52最高工作频率为24MHz。单片机正常工作时,都需要有一个时钟电路和一个复位电路,来构成单片机的最小电路。如图3-3所示。

(1) 时钟电路

XTAL0(18脚)和XTAL1(19脚):计算机工作时,是在统一的时钟脉冲控制下一拍一拍的进行的,这个脉冲是由单片机控制器中的时序电路发出的。单片机的时序就是CPU在执行指令时所需控制信号的时间顺序。为了保证各部件间的同步工作。单片机内部电路就在唯一的时钟信号控制下严格地按时序进行工作。要给单片机提供时序要有相关的硬件电路,即振荡器和时钟电路。因此选择了内部时钟方式。利用芯片内部的振荡器,然后在引脚XTAL0和XTAL1两端跨接晶体或陶瓷谐振器,就构成了稳定的自激振荡器,其发出的脉冲直接送入内部时钟电路,AT89C52最高工作频率为24MHz,在本设计中采用110592 MHz晶振。外接晶振时,C1和C2值通常选择为22PF左右。C1,C2对频率有微调作用。晶体的频率范围可在12~12MHZ之间选择。在实际连接中,为了减少寄生电容,更好地保证振荡器稳定、可靠地工作,振荡器和电容应尽可能安装得与单片机芯片靠近。

(2) 复位电路

RESET( 9脚)是复位, 由图3-3可以看出,按键电平复位电路相当于按复位键S1后复位端通过电阻与Vcc电源接通。复位是单片机的初始化 *** 作。单片机在启动运行时,都需要先复位,其作用是使CPU和系统中其他部件都处于一个确定的初始状态,并从这个状态开始工作。因而,复位是一个很重要的 *** 作方式。但单片机本身是不能自动进行复位的,必须配合相应的外部电路来实现。(3) 单片机电源(40脚)是电源:AT89C52工作电源电压为5(1+02)V,且典型值为5V;在线路中,电源去藕是一个关键问题。整个线路往往会由于电源引线而产生电路谐振,当有大的瞬时变化时,也会产生尖峰干扰信号。消除这两种现象的有效办法就是在片子的电源管脚与地之间加上适当的去藕电容,如图3-3中的C4。(4) P1、P2口P1口:是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作为输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。在图3-3中,KEY为单片机的外围44键盘接口,它和单片机的P10~P17连接,P10~P13对应于键盘的行1~4,P14~P17对应键盘的列1~4。P2口:P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲极可驱(吸收或输出电流)4个TTL逻辑门电路。Flash编程或校验时,P2也接收高位地址和一些控制信号。在本设计中,单片机的P20和P21脚和MAX038的A0和A1相连,用于选择输出波形种类。

图3-3 单片机部分硬件电路

322 单片机外围仿真电路部分仿真软件:Proteus71A0=0或者1、A1=1,即键盘第一行第一列的情况。表示选择的是正弦波。A0=0、A1=0,即键盘第一行第二列的情况,表示选择的是矩形波;A0=1、A1=0,即键盘第一行第三列,表示选择三角波输出。D1(A0)D2(A1)选择的波形暗(0)或者亮(1)亮(1)正弦波暗(0)暗(0)矩形波亮(1)暗(0)三角波表3-1单片机部分仿真结果图3-4仿真的是A0=0、A1=1,即键盘第一行第一列。表示选择的是正弦波的情况。图3-4 单片机部分软件仿真电路33 MAX038外围电路设计331 MAX038的基本工作原理MAX038是美国Maxim公司的一款高频率、高精度、低输出电阻、驱动能力强的函数信号发生器芯片,它是新一代的单片函数信号发生芯片。MAX038内部含有精密带隙电压基准、鉴相器和TTL同步输出,能以最少的外部元件构成波形高频函数信号发生器,也可以应用于压控振荡器(PPL)、脉宽调制器、锁相环、频率调制器、频率合成器及FSK信号(正弦波和方波)发生器,是目前较为理想的信号发生集成芯片 。如图3-5所示MAX038内部主要由振荡器、参考电压源25V、 恒流源250UA发生电路、多路选择开关 、比较器、相位监测器、输出缓冲器等电路组成。MAX038是单片精密函数信号产生器 ,它用±5V电源工作 ,基本的振荡器是一个交变地以恒定电流向电容器充电和放电的驰张振荡器 ,同时产生一个三角波和矩形波。通过改变COSC引

脚的外接电容 和流入 引脚的充放电电流的大小来控制输出信号频率, 工作频率范围为01Hz~20MHz。 流入 引脚的电流由加到FADJ 和DADJ 引脚上的电压来调制, 通过这两个引脚可用外接电压信号分别调整频率和占空比。MAX038内部有一个正弦波形成电路把振荡器的三角波转变成一个具有等幅的低失真度正弦波。三角波、正弦波和矩形波输入一个多路器,两根地址线A0和A1从这三个波形中选出一个。图3-5 MAX038的内部结构(虚线框内)

MAX038内部有一个25V的基准电压源,由REF引脚输出。基准电压源电路由两个运放LF353及电阻、电容组成,分别组成放大倍数为+1和-1的缓冲器,因而得到 的基准电源。这个电压源对整机的性能很重要,因为各控制电路均需要参考输入。图3-6 MAX038管脚图鉴相器是作为锁相环的备用单元,为异或门电路结构,输入信号一路来自内部差动矩形波OSCA和OSCB,另一路来自外部引脚PD1。鉴相器输出信号为电流,由PD0引脚输出,平均值变化范围为0~550 。当两路输入信号的相位差为 时,输出电流的占空比为50%,平均值为250 。如果构成锁相环电路,则PDO和FADJ相连,并且对地连接一个电阻 ,同时并联一个电容 。 决定鉴相器的灵敏度, 则滤除电流中的高频成分。MAX038的各引脚功能见于表3-2。

表3-2 MAX038引脚功能注:5个GND脚在MAX038内部是不连接的,在电路设计时,需要一个地平面,然后所有5个GND脚连到靠近MAX038器件的地平面上。表3-3是MAX038 地址线A0和A1对波形选择的取值。

表3-3 MAX038 地址线A0和A1对波形选择的取值波形选择由A0和A1两个输入引脚的逻辑电平设定:当A0=0或1、A1=1时为正弦波;当A0=0、A1=0时输出矩形波;当A0=1、A1=0时输出三角波。MAX038的关键特性如下:(1)工作频率范围从 01HZ~ 20MHZ,各种波形的输出幅度均为2 V(P-P);(2)能精密地产生三角波、方波、正弦波信号;(3)占空比调节范围宽, 占空比和频率均可单独调节, 互不影响, 占空比最大调节范围10%~90%;(4)波形失真小, 正弦波失真度低于1%;(5) 采用±5V双电源供电, 允许有5%变化范围,电源电流为 80mA , 典型功耗 400 mW, 工作温度范围为0~70℃;(6) 内设25V电压基准,利用控制端FADJ、DADJ实现频率微调和占空比调节;(7)频率扫描范围:350倍;(8)输出电阻:01 ;(9)温度系数: 。MAX038核心部分是一个电流控制的振荡器,通过恒定的电流对外部电容 充电和放电,获得三角波和方波信号输出。充、放电电流由流进MAX038的 脚的电流控制,由加在引脚FADJ、DADJ上的电压调整。电路的振荡频率为: f= (1-02915 )= (1-02915 )/ (1)波形的占空比为: (2)当 =0时, 可设为2~750 ,对应中心频率为350:1的变化范围;当= 时,调制频偏为 。控制外部电容 充、放电电流的比值,当 =0时,波形的占空比为50%;当 = 时,占空比为10%~90%。在FADJ和DADJ端口的内部,设置了250 的下拉电流源,可简化外部电路设计,仅用电阻 (连接引脚FADJ和25V基准电压的可变电阻)和 (连接引脚DADJ和25V基准电压的可变电阻)就可以对频偏和占空比进行调整。 端口由内部的运放强制为虚地,故仅用电阻 就能调整输入电流 ,实现中心频率的调节。332 占空比调节原理MAX038的DADJ引脚上的电压可控制波形的占空比 (定义为输出波形为正时所占时间的百分数),并且能够改善正弦波的波形,可进行脉冲宽度调制和产生锯齿波。当 接地(即 =0)时,由 可得其占空比为50%。当 =±23V时,占空比可在 10%~90%范围内调整;当电压超过±23V 时,将使频率偏移或引起不稳定。加在DADJ上的电压: (3)其中: 为 DADJ 引脚上的电压, 为定义为输出波形的占空比。由公式(3)可完成的占空比设置。在本设计中要求占空比 在10%~90%的变化范围,这样 的范围为-23V~+23V之间变化。因为:为内部恒流源; :连接引脚DADJ和25V基准电压的可变电阻。基准电压 :+25V由以上分析,可以计算出要使 的范围为-23V~+23V之间变化时 的范围在08K~192K 之间变化。所以 可以选择20K 的可变电阻。综上,MAX038工作时引脚DADJ电压的变化可引起电容 充电和放电的相对速率的变化,由此引起矩形波占空比发生变化 ,当 时矩形波占空比为50%,即输出为方波。 的变化范围为±23V则占空比的变化范围为10%~90%。所以 ,可使 变化 ,从而改变占空比,这即是设置占空比调节的原理。333 频率调整原理(1) 频率粗调原理由MAX038内部结构及参考文献[4]可得,当引脚FADJ的电压 =0时,MAX038输出信号频率的计算由式(1)给出: (4)(4)式中, 的计算为 (5) (5)式中 为内部输出的25V恒定参考电压,可见 时, 输出信号的频率完全由内部结构及充电电容 决定。 电流大小在2~750μA内变化,电容大小若为pF量级,则输出频率的大小为MHz量级;电容大小若为 μF量级 则输出频率的大小为kHz量级;电容大小若为μF量级,则输出频率的大小为Hz量级;所以其输出频率范围为01Hz~20MHz。由此可通过改变电容 的大小达到大幅度地改变输出信号频率,这即是设置频率粗调的原理。在本设计中要求频率在01HZ~20MHZ的变化范围,所以选择电容大小若为pF量级。(2) 频率细调原理MAX038工作时引脚FADJ的电压 由参考电压 及可调电阻 决定 = -250μA× (6)由(6)式得 (7)= 时,代入(7)式得到 的变化范围为04K~196K,所以 可以选择20K 的可变电阻。由(6)式调节 ,可变化FADJ引脚的电压,其变化范围为±24V。而 的变化可引起电容充电电流的变化 输出频率则以(4)式的频率 为中心频率,产生±70%左右的变化。由此可通过调节可变电阻 的大小,达到小幅度改变输出信号的频率,这即是设置细调输出信号频率的原理。综上所述,MAX038的输出频率 由 、 、 三者共同决定,当 =0时 = = / = / ,实现粗调;当 0时, = (1-02915 ),实现细调。334 MAX038外围电路

图 3-7 MAX038外围电路原理图由以上的分析,设计出的MAX038部分的电路如图3-7。SYNC电路具有单独的电源引线因而可被禁止。 数字电压 (+5V)电源端,如果没有用到SYNC的时候 应该悬空。PDI、PDO引脚分别是相位检波器的输入和输出端,在本设计中不用应该接地。335 MAX038外围电路注意事项由MAX038实现的信号发生电路是模数混合电路,因此在电路设计和线路板布局上都必须注意。具体有:(1)如果PCB板中,MAX038的模拟电源和数字电源需要分开,在供电时要分别供电,即分别取不同的电源,以防数字信号通过电源线干扰模拟部分;同样,模拟地和数字地的处理要慎重,万用板上要用低阻地平面分别将模拟地和数字地连接,再在某点上将两地相连。(2)信号线要尽量部在焊接面,元件面为地平面,这样就可减少信号间的干扰,这一点对系统性能的稳定尤为重要,因为系统性能受 、FADJ、COSC、DADJ等引脚周围的分布电容及信号环境变化的影响特别敏感。此外,这些引脚引线的长度和面积还应尽量短小。(3)由于不同结构的电阻具有不同的寄生电容和寄生电感,因此选择电阻时,应选用寄生电容和寄生电感小的电阻。推荐使用1%以上精度的金属膜电阻。(4)在高频线路中,电源去藕是一个关键问题。整个线路往往会由于电源引线而产生电路谐振,当有大的瞬时变化时,也会产生尖峰干扰信号。消除这两种现象的有效办法就是在片子的电源管脚与地之间加上适当的去藕电容,一般使用1 以上的优质电容。在许多场合,采用2个电容并联的方法(并联一个01 电容),则去藕效果更佳。34 幅度放大电路

由于MAX038的输出信号为恒定的2V(P-P),且输出电流不高,所以必须在输出级至少有一级的放大电路来提供足够的输出电压和电流,以满足一般的使用要求。以下是放大电路设计的几点考虑:图3-8 放大电路(1) 首先,要求放大电路具有很高的频宽。因为输出信号最大基频为20MHZ,其三角波和矩形波的高次谐波成分很高,只有高频宽才能得到不失真的输出波形。(2) 其次,高频大信号放大要求电路有足够的输出电压转换速率。(3) 另外,要带动低阻负载,放大电路的电流输出能力也是个重要参数。要在10 负载上输出6V信号,则放大器至少要有60mA的连续电流输出能力。居于以上要求本设计的放大电路部分如图3-8。采用低功耗,宽带,高速运算放大器AD8055提高了放大电路的带宽和转换速率,把电压由原来MAX038输出的2V放大到6V。而9013和9012构成了“推挽式电路”也叫做互补对称电路,实现了在静态时管子不取电流,而在有信号时,T1、T2轮流导电。T1、T2是工作在乙类的放大电路,管耗小,提高了电流,从而提高了效率,而且减少了失真。最后接的电阻是为了防止输出端的外接负载短路,所以加一个电阻限制电流。35 软件设计软件需要实现的主要功能是检测键盘的输入,根据输入结果选择输出相应的波信号。键盘 *** 作和对应的输出如下:输入按键“0”(第一行第一列),得到正弦波;输入按键“1”(第一行第二列),得到矩形波;输入按键“2”(第一行第三列),得到三角波;软件编程用C51语言,主要包括键盘去抖动延时程序、键盘扫描程序、波形选择程序。单片机控制MAX038实现波形输出的程序流程图3-9。

开始

初始化

键盘扫描

键码为11?

键码为21?

键码为41?

NO

NO

NO

输出正弦波

输出矩形波

输出三角波图3-9 单片机控制MAX038实现波形输出的程序流程图键码为11对应的是第一行第一列的按键;键码为21对应的是第一行第二列的按键;键码为41对应的是第一行第三列的按键。

希望对你能有所帮助。

波形发生器是一种常用的信号源,广泛地应用于电子电路、自动控制系统和教学实验等领域。本次课程设计使用的AT89S51 单片机构成的发生器可产生锯齿波、三角波、正弦波等多种波形,波形的周期可以用程序改变,并可根据需要选择单极性输出或双极性输出,具有线路简单、结构紧凑等优点。在本设计的基础上,加上按钮控制和LED显示器,则可通过按钮设定所需要的波形频率,并在LED上显示频率、幅值电压,波形可用示波器显示。

二、系统设计

波形发生器原理方框图如下所示。波形的产生是通过AT89S51 执行某一波形发生程序,向D/A转换器的输入端按一定的规律发生数据,从而在D/A转换电路的输出端得到相应的电压波形。在AT89S51的P2口接5个按扭,通过软件编程来选择各种波形、幅值电压和频率,另有3个P2口管脚接TEC6122芯片,以驱动数码管显示电压幅值和频率,每种波形对应一个按钮。此方案的有点是电路原理比较简单,实现起来比较容易。缺点是,采样频率由单片机内部产生故使整个系统的频率降低。

1、波形发生器技术指标

1)波形:方波、正弦波、锯齿波;

2)幅值电压:1V、2V、3V、4V、5V;

3)频率:10HZ、20HZ、50HZ、100HZ、200HZ、500HZ、1KHZ;

2、 *** 作设计

1)上电后,系统初始化,数码显示6个‘-’,等待输入设置命令。

2)按钮分别控制“幅值”、“频率”、“方波”、“正弦波”、“锯齿波”。

3)“幅值“键初始值是1V,随后再次按下依次增长1V,到达5V后在按就回到1V。

4)“频率“键初始值是10HZ,随后在按下依次为20HZ、50HZ、100HZ、200HZ、500HZ、1000HZ循环。

三、硬件设计

本系统由单片机、显示接口电路,波形转换(D/A)电路和电源等四部分构成。电路图2附在后

1、单片机电路

功能:形成扫描码,键值识别、键处理、参数设置;形成显示段码;产生定时中断;形成波形的数字编码,并输出到D/A接口电路和显示驱动电路。

AT89S51外接12M晶振作为时钟频率。并采用电源复位设计。复位电路采用上电复位,它的工作原理是,通电时,电容两端相当于短路,于是RST引脚上为高电平,然后电源通过对电容充电。RST端电压慢慢下降,降到一定程序,即为低电平,单片机开始工作。

AT89S51的P2口作为功能按钮和TEC6122的接口。P1口做为D/A转换芯片0832的接口。用定时/计数器作为中断源。不同的频率值对应不同的定时初值,允许定时器溢出中断。定时器中断的特殊功能寄存器设置如下:

定时控制寄存器TCON=20H;

工作方式选择寄存器TMOD=01H;

中断允许控制寄存器IE=82H。

2、显示电路

功能:驱动6位数码管显示,扫描按钮。

由集成驱动芯片TEC6122、6位共阴极数码管和5个按钮组成。当某一按钮按下时,扫描程序扫描到之后,通过P2口将数字信号发送到 TEC6122芯片。TEC6122是一款数字集成芯片。它的外接电压也是+5V,并且由于数码管的载压较小,为了保护数码管,必须在两者间接电阻,大约是560欧。

扫描利用软件程序实现,当某一按键按下时,扫描程序立即检测到,随后调用子程序,执行相应的功能。

3、D/A电路

功能:将波形样值的编码转换成模拟值,完成双极性的波形输出。

由一片0832和两块LM358运放组成。DAC0832是一个具有两个输入数据寄存器的8位DAC。目前生产的DAC芯片分为两类,一类芯片内部设置有数据寄存器,不需要外加电路就可以直接与微型计算机接口。另一类芯片内部没有数据寄存器,输出信号随数据输入线的状态变化而变化,因此不能直接与微型计算机接口,必须通过并行接口与微型计算机接口。DAC0832是具有20条引线的双列直插式CMOS器件,它内部具有两级数据寄存器,完成8位电流D/A转换,故不需要外加电路。0832是电流输出型,示波器上显示波形,通常需要电压信号,电流信号到电压信号的转换可以由运算放大器LM358实现,用两片LM358可以实现双极性输出。

单片机向0832发送数字编码,产生不同的输出。先利用采样定理对各波形进行抽样,然后把各采样值进行编码,的到的数字量存入各个波形表,执行程序时通过查表方法依次取出,经过D/A转换后输出就可以得到波形。假如N个点构成波形的一个周期,则0832输出N个样值点后,样值点形成运动轨迹,即一个周期。重复输出N个点,成为第二个周期。利用单片机的晶振控制输出周期的速度,也就是控制了输出的波形的频率。这样就控制了输出的波形及其幅值和频率。

四、 软件设计

主程序和子程序都存放在AT89S51单片机中。

主程序的功能是:开机以后负责查键,即做键盘扫描及显示工作,然后根据用户所按的键转到相应的子程序进行处理,主程序框图如图1所示。

子程序的功能有:幅值输入处理、频率输入处理、正弦波输出、锯齿波输出、方波输出、显示等。

下面是程序

include <reg51h>

#define uchar unsigned char

#define uint unsigned int

sbit LCP=P2^2;

sbit SCP=P2^1;

sbit SI=P2^0;

sbit S1=P2^3;

sbit S2=P2^4;

sbit S3=P2^5;

sbit S4=P2^6;

sbit S5=P2^7;

sbit DA0832=P3^3;

sbit DA0832_ON=P3^2;

uchar fun=0,b=0,c=0,d=0,tl,th;

uchar code tab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

uchar code tosin[256]={0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5

,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4,0xf5

,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd

,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf2,0xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda

,0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99

,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51

,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16

,0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00

,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02 ,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15

,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e

,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66 ,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80 };

void display(unsigned char command)

{

unsigned char i;

LCP=0;

for(i=8;i>0;i--)

{

SCP=0;

if((command & 0x80)==0)

{

SI=0;

}

else

{

SI=1;

}

command<<=1;

SCP=1;

}

LCP=1;

}

void key1(void)

{

fun++;

if(fun==4)

fun=0x00;

}

void key2(void)

{

tl++;

if(tl==0x1f)

th++;

}

void key3(void)

{

tl--;

if(tl==0x00)

th--;

}

void key4(void)

{

double t;

int f;

TR0=0;

t=(65535-th256-tl)04;

f=(int)(1000/t);

S3=tab[f%10];

f=f/10;

S2=tab[f%10];

f=f/10;

if(f==0)

S1=0;

else

S1=tab[f];

TR0=1;

}

void key5(void)

{

tl--;

if(tl==0x00)

th++;

}

void judge(void)

{

uchar line,row,de1,de2,keym;

P1=0x0f;

keym=P1;

if(keym==0x0f)return;

for(de1=0;de1<200;de1++)

for(de2=0;de2<125;de2++){;}

P1=0x0f;

keym=P1;

if(keym==0x0f)return;

P1=0x0f;

line=P1;

P1=0xf0;

row=P1;

line=line+row; /存放特征键值/

if(line==0xde)key1();

if(line==0x7e)key2();

if(line==0xbd)key3();

if(line==0x7d)key4();

}

void time0_int(void) interrupt 1 //中断服务程序

{

TR0=0;

if(fun==1)

{

DA0832=tosin[b]; //正弦波

b++;

}

else if(fun==2) //锯齿波

{

if(c<128)

DA0832=c;

else

DA0832=255-c;

c++;

}

else if(fun==3) // 方波

{

d++;

if(d<=128)

DA0832=0x00;

else

DA0832=0xff;

}

TH0=th;

TL0=tl;

TR0=1;

}

void main(void)

{

TMOD=0X01;

TR0=1;

th=0xff;

tl=0xd0;

TH0=th;

TL0=tl;

ET0=1;

EA=1;

while(1)

{

display();

judge();

}

}

五、心得体会

开始的时候由于没有经验,不知如何下手,所以就去图书管找了一些书看,尽管有许多的设计方案,可是总感觉自己还是有许多的东西弄不太清楚,于是就请教同学。他常做一些设计,有一些经验。经过他的解释分析各方案之后,决定用查表的方法来做。这样可以降低一些硬件设计的难度,初次设计应切合自己的水平。用8031需要扩展ROM,这样还要进行存储器扩展。而且现在8031实际中已经基本上不再使用,实际用的AT89S51芯片有ROM,这样把经过采样得到的数值制成表,利用查表来做就简单了。我认为程序应该不大,片内ROM应该够用的。用LED显示频率和幅值,现有集成的接口驱动芯片,波形可通过示波器进行显示,单片机接上D/A转换芯片即可,这样硬件很快就搭好了。

我以为这些做好了,构思也有了,写程序应该是相对容易的。谁知道,写起程序来,才想到功能键要有扫描程序才行呀,我真的感到很难。那时真的有点想放弃?于是就去请教了老师,老师帮忙分析了一下,自己又查阅了一些资料,终于明白了扫描程序怎么写。

于是在自己的努力下,程序很快就写好了。这次是我的第一个设计器件,尽管经历了不少的艰辛,但给我积累了一点设计的经验,最后也有点小小的成就感。后面的路还很长,我还的努力!

参考文献

[1] 童诗白,华成英模拟电子技术基础〔M〕北京:高等教育出版社,2003345-362

[2] 潘永雄,沙河,刘向阳电子线路CAD实用教程〔M〕西安:西安电子科技大学出版社,200113-118

[3] 张毅刚,彭喜源,谭晓昀,曲春波MCS-51单片机应用设计[M]哈尔滨:哈

尔滨工业大学出版社,199753-61

用PWM,即脉宽调制。我使用1个定时器中断做周期,在中断服务程序中用DJNZ指令循环比较做占空比实现步进电机的电流控制的。占空多了,电流就弱。要控制电压可能需要电路转换一下,如:在主回路串接PWM控制的开关管和电感,输出并电容。

ORG 000BH;-----------------------T0-----PWM

CLR ET0

LJMP PWM

;---------------------------------T0----------PWM-SUB---------延长地址间的距离

PWM: PUSH ACC

CLR TR0

SETB P1^0;

MOV TH0,#0FFH ;

MOV TL0,#73H ;

SETB TR0

MOV R7,#0AH

DJNZ R7,$;高电平保持时间

LIJ: JB TF0,NEXT0 ;满占空比的一个绝对固定SIN时间间隔

CLR P1^0 ;填空(低电平时间)

SJMP LIJ

NEXT0:CLR P1^0 ;清空输出

NOP

NOP

NOP

NOP

CLR TR0

CLR TF0

MOV TH0,#0FFH ;重新赋PWM周期值

MOV TL0,#73H ;

POP ACC

SETB ET0

SETB TR0

RETI

以上就是关于如何设计单片机波形发生器啊全部的内容,包括:如何设计单片机波形发生器啊、急!!基于单片机设计一个任意波形发生器要求能产生任意波、频率,幅值可设定并有显示、方波占空比可调、“波形发生器”设计等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9284048.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存