(1)利用设计一个能产生正弦波、方波、三角波、梯形波、锯齿波的波形发生器。(2)以单片机为核心,利用数模转换芯片0832 完成数模转换。
(3)以按键来选择要产生的波形。(4)用示波器观察波形。
采用单片机和 DAC0832 数模转换器生成波形。通过编程的方法来控制输入到数模转换电路的数字量,从而控制输出信号的波形和频率。它的特点是价格低、设计简单, 在低频范围内稳定性好、操作方便、体积小、耗电少。
用 LCD 液晶进行显示。LCD 由于其显示清晰,显示内容丰富,显示信息量大,使用方便,显示快速而得到了广泛的应用。
采用独立式按键电路,每个按键单独占有一根 I/O 接口线,每个 I/O 口的工作状态互不影响,此类键盘采用端口直接扫描方式。缺点为当按键较多时占用单片机的 I/O 口数目较多,优点为电路设计简单,且编程相对比较容易。
本系统包括主控模块,显示模块,信号发生模块,键盘模块,运放模块,综上各方案所述,确定最终设计方案为:采用AT89C51 作为主控制系统,LCD 液晶显示作为显示部分,独立式按键作为键盘模块,数模转换芯片 DAC0832 作为信号发生模块,LM324 作为电流/电压转换放大模块。
数模转换电路是本设计的关键电路,它决定着将数字信号转变为模拟信号,从而得到各种所需要的波形。
1. 数模转换器的工作原理数模转换器可将数字量信号转换成与此数值成正比的模拟量信号。需要转换的数字量由一个二进制数字表示,每位二进制数字都有一定的权,在转换中,应将二进制数的每一位按照权的大小转换成相应的模拟量输出分量,然后将各个输出分量叠加,总和就是与数字量成正比的模拟量数值。
电路设计如图 5 所示,包括由 R-2R 组成的电阻网络、模拟电子开关和集成运算放大器。
对于电阻网络,无论从哪个 R-2R 节点看,等效电阻都是 R,因此,从参考电压端输入的电流为: IR=VREF/R
VO = - RF∑Ii= -Rfb VREF/R×28(D7×27 +D6×26 +D5×25+ D4×24+D3×23+D2×22+D1×21+D0×20)
其中 VREF 是进行 D/A 转换的系统提供的参考电压,Rfb 为集成运算放大器的反馈电阻,D7 ~ D0 取值为 0 或 1,0 表示切换开关与地相连,1 表示与参考电压相连。通过上述电路,即完成了二进制数字信号到模拟电压信号的转换。
2. 数模转换器的主要技术指标出满刻度值与 2n 之比(n 为 D/A 转换器的二进制位数)。二进制位数越多,分辨率越高, 即 D/A 转换器对输入量变化的敏感程度越高。使用时,应根据对 D/A 转换器分辨率的需要来选定 D/A 转换器的位数。
相对精度是指在满刻度已经校准的前提下,在整个刻度范围内,对应于任一数码的模拟量输出与它的理论值之差。通常用偏差几个 LSB 来表示。
建立时间是描述 D/A 转换器转换快慢的一个参数,用于表明转换时间或转换速度。其值为从输入数字量到输出达到总值误差±(1/2)LSB(最低有效位)时所需的时间。电流输出的转换时间较短,而电压输出的转换器,由于要加上完成 I-V 转换的运算放大器的延迟时间,因此转换时间要长一些。快速 D/A 转换器的转换时间可控制在 1us 以下。
通常用非线性误差的大小表示 D/A 转换器的线性度,输入输出特性的偏差与满刻度输出之比的百分数表示非线性误差。一定温度下的最大非线性误差一般为 0.01%~0.03%。
半导体公司生产的具有 2 个数据寄存器的 8 位分辨率的D/A 转换芯片。此芯片与微处理器完全兼容,并且价格低廉,接口简单,转换控制容易, 在单片机应用系统中得到了广泛的应用。
DAC0832 的内部结构框图如图 6 所示。它由 8 位输入锁存器、8 位 DAC 寄存器、8 位 D/A 转换器及转换控制电路构成,通过两个输入寄存器构成两级数据输入锁存。
使用时,数据输入可以采用两级锁存(双锁存)、单级锁存(一级锁存,一级直通方式)或直接输入(两级直通)形式。上图中,2个与门电路组成寄存器输出控制逻辑电路, 该逻辑电路的功能是进行数据锁存控制。
Rfb:反馈电阻输入端。内部接反馈电阻,外部通过该引脚接运放输出端。为了取得电压输出,需要在输出端接运算放大器,Rfb 即为运算放大器的反馈电阻端。
Vref:基准电压,其值为-10V~+10V。AGND:模拟信号地。
DGND:数字信号地,为工作电源地和数字逻辑地,可在基准电源处进行单点共地。VCC:电源输入端,其值为+5V~+15V。
4. DAC0832 芯片与单片机的接口处于直通工作方式,数字量一旦输入,就直接进入 DAC 寄存器,进行 D/A 转换,从输出端得到转换的模拟量。
![]() |
DAC0832 输出信号经运放电路转变为电压后有两种输出方式。一种为单极性输出方式。此方式中,DAC0832 通过使用一片LM324 运算放大器将从单片机输入的数字量 Din 转换为电压输出,其输出电压为 Uout=Din/28 *(-VREF)。当 VREF=5V 时,Uout的输出范围为-5V~0V。另一种为双极性输出方式。本设计中采用双极性输出方式,如图 9 所示。其双极性输出原理为:因为 U1为-5V~0V,根据电流环路定理有
所以当 VREF=5V,而 U1 为-5V~ 0V 输出时,Uout 的输出为-5~+5V,即实现了双极性输出。
显示模块主要是用来显示输出信号的波形类型和频率大小,本设计中以 LM016L 作为显示器件。LM016L 智能型显示模块是一种低功耗、低价值、低损耗的显示器件,它不但可以显示各式各样的字符、汉字和图形,同时具有可编程能力,且与单片机接口方便。
1. 引脚功能说明LCD LM016L 采用标准的14脚接口,各引脚接口说明如下: 第1脚:VSS 为地电源。
第3脚:VEE 为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K 的电位器调整对比度。
第4脚:RS 为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W 为读写信号线,高电平时进行读操作,低电平时进行写操作。当 RS 和 R/W 共同为低电平时可以写入指令或者显示地址,当 RS 为低电平 R/W 为高电平时可以
第6脚:E 端为使能端,当 E 端由高电平跳变成低电平时,液晶模块执行命令。第7~14脚:D0~D7为8位双向数据线。
2. 基本操作时序表016液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形。
该子系统是5 个独立键盘和一个2 输入与门组成,其中与门输出端连接单片机的P3.2 口以便形成外部中断。5 个按键分别连接单片机的 P2.0~P2.4 口。2 输入与门一引脚与K1 按键相连,另一引脚接高电平。当 K1 按下时,INT0 为低电平,可知外部中断到了, 系统执行中断程序。当 K2~K5 按键某一个按下时,对应的 P2.1~P2.4 口中某个为低电平, 系统可以感知此按键按下,从而执行相应的程序。每个按键的功能如表 2 所示。
功能 | 属性 |
波形选择 | 自动复位 |
频率升高 | 自动复位 |
频率降低 | 自动复位 |
步进值 | 自动复位 |
系统软件主要是用来控制信号发生器系统按照设计的逻辑进行运行。在软件设计上, 根据功能分成了多个模块编程,主要包括:主程序模块、四种不同的波形产生模块、按键处理模块、外部中断模块、液晶显示模块等。
本系统采用编程的方法,来输出四种不同的波形即正弦波、矩形波、三角波、锯齿波。各种波形的产生方法如下。
正弦波的产生比较特殊,它不能由单片机直接产生,只能由如图 17 所示的阶梯波来向正弦波逼近。很显然,在一个周期内阶梯波的阶梯数目越多,单片机输出的波形也就
先假定正弦波的振幅是 2.56 V,则波谷对应的数字量为最小值 00H,波峰对应的数字量为最大值 FFH。将正弦波的第一个周期的波形按角度均分为若干等份,并计算出各点对应的电压值,电压值计算方法:Vx=2.5·(1+sinθ),因为 00H~FFH 对应的数字量为0~255,所以根据算出的电压就可直接写出各点所对应的数字量。单片机将一个周期的数字量存入一定的存储区域中,然后依次循环取出这些数字量,并送 D/A 电路转换成阶梯波,即近似的正弦波输出。图 18 为正弦波产生的流程图。
如图 19 所示,矩形波的实现比较简单。首先定义一个无符号字符型变量 i=0,使自变量 i 不断的自动加 1,若 i 的值小于squa_num,将 P0 口赋值为 0xFF;若 i 的值大于squa_num,则将 P0 口赋值为 0x00。当 i 自加到 256 后又自动变为 0,以此循环,即可得
到矩形波。当 squa_num=128 时,此时输出的为方波。调节 squa_num 的大小,即可实现矩形波占空比的调节;调节延时时间的大小,即可实现矩形波频率的改变。
三角波中的斜线用一个个小台阶来逼近,当台阶间隔很小时,波形基本上近似一直线。首先定义一个无符号字符型变量i=0,使自变量 i 不断的自动加 1,若 i 的值小于 128, 将 P0 口赋值为 i;若 i 的值大于 128,则将 P0 口赋值为 256-i。当 i 自加到 256 后又自动变为 0,以此循环,从而 P0 口实现了周期性的数字量变换,在经过数模转换后转变成模拟信号,经运算放大电路后就得到了周期性的三角波。三角波产生流程图如图 20 所示。
锯齿波的实现过程与三角波类似,也是定义一个变量 i=0,并使 P0=i,自变量 i 不断的自动加 1,直到加到 255,然后 i 又可以自动归为 0,再不断的重复上过程。在此过程中,P0 口的值也随着 i 一样变化,经数模转换 DAC0832 后,周期性逐一变化的数字量就转换为锯齿波输出了。通过调节 P0 口每相邻两个值之间的延迟时间,就可以改变锯齿波的频率。图 21 为锯齿波发生流程图。
中断子程序是用来控制输出波形的选择及将输出波形的类型在 LCD 液晶显示屏上显示出来。当波形选择按键 K1 按下时,进入中断程序中,此时波形选择标识 WaveChoice 加 1,LCD 液晶显示屏上显示出相应的波形类型。中断结束后,主程序中根据WaveChoice的值输出相应的波形。图 24 为 INT0 中断流程图。
打开 Keil 新建工程文件,然后添加源程序文件,保存时把文件后缀名改成“.c”,再直接导入新建的工程中。
把源程序全部录入后,先粗略的检查一遍,主要改正明显的各种错误,这样可以减少之后的修改工作量。接着 Options forTarget “Target 1” ,点击 Output ,勾选 Create Hex 那个选项,生成可执行的文件。然后点击 Project 菜单下的 Built Target 命令然后再进行编译、连接,形成目标文件。编译、连接用 Project 菜单下的 Built Target 命令(或快捷键 F7),也可以直接点击工具栏中相对应的图标。
在 Proteus 软件中先从元件库中加载要使用的那些元件,然后把元件放在图纸上一个一个的接线,尽量不让线交错,便于查看、分析,有必要时,使用接线标号法。完成所有元器件的接线后,在单片机上右击选 Edit Properties,在 Program file 那一行右侧点击, 然后选择前面生成的以“.hex”为后缀名的文件,为单片机 AT89C51 添加可执行文件。然后点击左下角的相关按键,开始进行仿真。
(1) 通过查阅大量资料使自己对信号发生器的研究现状、原理、工作方式等的基本 概念及技术发展有了更好的理解。
(3) 本系统使用了单片机作为主控制器,直接由软件产生不同波形信号的输出, 因此在如何编写程序方面下了很大的功夫,也收获了很多知识。
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |