找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 724|回复: 0
打印 上一主题 下一主题
收起左侧

基于单片机DAC0832的低频波形发生器设计文档

[复制链接]
跳转到指定楼层
楼主
ID:1077798 发表于 2023-5-16 11:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
(1)利用所学单片机的理论知识进行软硬件整体设计,锻炼理论联系实际、提高我们的综合应用能力。
(2)我们这次的设计是以单片机为基础,设计并开发统输出多种波形(正弦波、三角波、锯齿波、方波、梯形波)且频率,幅度可变的函数发生器。
(3)掌握各个接口芯片(如 0832 等)的功质特性及接口方法,并能运用其实现一个简单的微机应用系统功能器件。
(4) 在平时的学习中,我们所学的知识大都是课本上的,在机房的练习大家也都是分散的对各个章节的内容进行练习,因此,缺乏一种系统的设计锻练。在所学结束以后,这样的设计十分有助于知识系统的总结到一起。
(5) 通过这几个波形进行组合形成了一个函数发生器,使得我对系统的整个框架的设计有了一个很好的锻炼,这不仅有助于大家找到自己感兴趣的项目,更可以锻练大家微机知识的应用。

1.2 设计内容

(1)利用设计一个能产生正弦波、方波、三角波、梯形波、锯齿波的波形发生器。(2)以单片机为核心,利用数模转换芯片0832 完成数模转换。

(3)以按键来选择要产生的波形。(4)用示波器观察波形。



第 2 章 系统总体设计
2.1  系统基本模块设计与论证
2.1.1   信号发生模块

采用单片机和 DAC0832 数模转换器生成波形。通过编程的方法来控制输入到数模转换电路的数字量,从而控制输出信号的波形和频率。它的特点是价格低、设计简单, 在低频范围内稳定性好、操作方便、体积小、耗电少。


2.1.2   输出显示模块

用 LCD 液晶进行显示。LCD 由于其显示清晰,显示内容丰富,显示信息量大,使用方便,显示快速而得到了广泛的应用。


2.1.3  键盘模块

采用独立式按键电路,每个按键单独占有一根 I/O 接口线,每个 I/O 口的工作状态互不影响,此类键盘采用端口直接扫描方式。缺点为当按键较多时占用单片机的 I/O 口数目较多,优点为电路设计简单,且编程相对比较容易。


2.1.4   电路设计最终方案

本系统包括主控模块,显示模块,信号发生模块,键盘模块,运放模块,综上各方案所述,确定最终设计方案为:采用AT89C51 作为主控制系统,LCD 液晶显示作为显示部分,独立式按键作为键盘模块,数模转换芯片 DAC0832 作为信号发生模块,LM324 作为电流/电压转换放大模块。


2.2  系统原理及总体结构图
2.2.1   系统总体结构图
根据上述电路设计的最终方案,系统总体设计结构如图 1 所示。




图 1   系统总体结构图



3.1.1   数模转换电路

数模转换电路是本设计的关键电路,它决定着将数字信号转变为模拟信号,从而得到各种所需要的波形。

1.     数模转换器的工作原理

数模转换器可将数字量信号转换成与此数值成正比的模拟量信号。需要转换的数字量由一个二进制数字表示,每位二进制数字都有一定的权,在转换中,应将二进制数的每一位按照权的大小转换成相应的模拟量输出分量,然后将各个输出分量叠加,总和就是与数字量成正比的模拟量数值。

上述的 D/A 转换,常用如图 5 所示的倒 T 形解码网络加以实现。


图5    倒T形电阻网络D/A转换器

电路设计如图 5 所示,包括由 R-2R 组成的电阻网络、模拟电子开关和集成运算放大器。

对于电阻网络,无论从哪个 R-2R 节点看,等效电阻都是 R,因此,从参考电压端输入的电流为: IR=VREF/R

根据分流公式,各支路电流为:
I7=I/21I6 =I/22I5 =I/23I4 =I/24I3 =I/25I2 =I/26I1 =I/27I0 =I/28
于是,经过运算放大器输出的模拟电压 VO 为:

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.       数模转换器的主要技术指标
(1) 分辨率
分辨率指输入给 D/A 转换器的单位数字量引起的模拟量输出的变化,通常定义为输


出满刻度值与 2n 之比(n 为 D/A 转换器的二进制位数)。二进制位数越多,分辨率越高, 即 D/A 转换器对输入量变化的敏感程度越高。使用时,应根据对 D/A 转换器分辨率的需要来选定 D/A 转换器的位数。

(2) 相对精度

相对精度是指在满刻度已经校准的前提下,在整个刻度范围内,对应于任一数码的模拟量输出与它的理论值之差。通常用偏差几个 LSB 来表示。

(3) 建立时间

建立时间是描述 D/A 转换器转换快慢的一个参数,用于表明转换时间或转换速度。其值为从输入数字量到输出达到总值误差±(1/2)LSB(最低有效位)时所需的时间。电流输出的转换时间较短,而电压输出的转换器,由于要加上完成 I-V 转换的运算放大器的延迟时间,因此转换时间要长一些。快速 D/A 转换器的转换时间可控制在 1us 以下。

(4) 线性度

通常用非线性误差的大小表示 D/A 转换器的线性度,输入输出特性的偏差与满刻度输出之比的百分数表示非线性误差。一定温度下的最大非线性误差一般为 0.01%~0.03%。

3.   DAC0832 数模转换芯片主要特性与结构

半导体公司生产的具有 2 个数据寄存器的 8 位分辨率的D/A 转换芯片。此芯片与微处理器完全兼容,并且价格低廉,接口简单,转换控制容易, 在单片机应用系统中得到了广泛的应用。

1.      DAC0832 的主要特性
l  分辨率为 8 位;
l  转换时间为 1us;
l  可单缓冲、双缓冲或者直接数字转换;
l  只需在满量程下调整其线性度;
l  逻辑电平输入与 TTL 兼容;
l  单一电源供电(+5V~+15V);
l  基准电压的范围为±10V。
2.      DAC0832 的内部结构

DAC0832 的内部结构框图如图 6 所示。它由 8 位输入锁存器、8 位 DAC 寄存器、8 位 D/A 转换器及转换控制电路构成,通过两个输入寄存器构成两级数据输入锁存。




图 6   DAC0832 内部逻辑框图

使用时,数据输入可以采用两级锁存(双锁存)、单级锁存(一级锁存,一级直通方式)或直接输入(两级直通)形式。上图中,2个与门电路组成寄存器输出控制逻辑电路, 该逻辑电路的功能是进行数据锁存控制。

3.      DAC0832 的引脚功能
DI0~DI7:8 位数据输入线。
— —
CS:片选信号输入,低电平有效。
ILE:数据锁存允许控制信号,高电平有效。
— —
WR1:输入寄存器写选通输入信号,低
平有效。


图 7   DAC0832 的引脚
— —
WR2:DAC 寄存器写选通输入信号,低电平有效。
:数据传送控制信号,低电平有效。上述两个信号控制 DAC 寄存器是否为数据直
— —            — — — —                                                                 — —            — — — —
通方式。当 WR2=0 和XFER=0 时,为 DAC 寄存器直通方式;当 WR2=1 或XFER=1 时,


为 DAC 寄存器锁存方式。
IOUT1、IOUT2:电流输出,IOUT1+IOUT2=常数。

Rfb:反馈电阻输入端。内部接反馈电阻,外部通过该引脚接运放输出端。为了取得电压输出,需要在输出端接运算放大器,Rfb 即为运算放大器的反馈电阻端。

Vref:基准电压,其值为-10V~+10V。AGND:模拟信号地。

DGND:数字信号地,为工作电源地和数字逻辑地,可在基准电源处进行单点共地。VCC:电源输入端,其值为+5V~+15V。

4.      DAC0832 芯片与单片机的接口
— —                  — —        — —
采用直通工作方式,当 DAC0832 芯片的片选信号CS、写信号 WR1、WR2 及传送
— — — —
控制信号XFER的引脚全部接地,允许输入锁存信号 ILE 引脚+5V 时,DAC0832 芯片就

处于直通工作方式,数字量一旦输入,就直接进入 DAC 寄存器,进行 D/A 转换,从输出端得到转换的模拟量。


3.1.2   电流/电压转换放大电路



由于从 DAC0832 转换出来的模拟信号为电流信号,为了方便观测输出信号的特征, 特将 DAC0832 输出的信号经过电流/电压转换放大电路转变为电压信号。本设计中使用的运放为 LM324。LM324 运算放大器是价格便宜的带差动输入功能的四运算放大器。其引脚图如图 8 所示。
图 8   LM324 引脚
LM324 的特点:
1.短路保护输出
2.真差动输入级
3.可单电源工作:3V-32V
4.低偏置电流:最大 100nA(LM324A)


5.每封装含四个运算放大器。
6.具有内部补偿的功能。
7.共模范围扩展到负电源
8.行业标准的引脚排列
9.输入端具有静电保护功能

DAC0832 输出信号经运放电路转变为电压后有两种输出方式。一种为单极性输出方式。此方式中,DAC0832 通过使用一片LM324 运算放大器将从单片机输入的数字量 Din 转换为电压输出,其输出电压为 Uout=Din/28 *(-VREF)。当 VREF=5V 时,Uout的输出范围为-5V~0V。另一种为双极性输出方式。本设计中采用双极性输出方式,如图 9 所示。其双极性输出原理为:因为 U1为-5V~0V,根据电流环路定理有

U1 + UREF  + Uout   = 0
R       2R        2R

即:Uout=-VREF-2U1

所以当 VREF=5V,而 U1 为-5V~ 0V 输出时,Uout 的输出为-5~+5V,即实现了双极性输出。


            

图 9   DAC0832 和两片 LM324 实现双极性输出

3.1.3   液晶显示电路

显示模块主要是用来显示输出信号的波形类型和频率大小,本设计中以 LM016L 作为显示器件。LM016L 智能型显示模块是一种低功耗、低价值、低损耗的显示器件,它不但可以显示各式各样的字符、汉字和图形,同时具有可编程能力,且与单片机接口方便。

1.        引脚功能说明

LCD LM016L 采用标准的14脚接口,各引脚接口说明如下: 第1脚:VSS 为地电源。

第2脚:VDD 接5V 正电源。

第3脚:VEE 为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K 的电位器调整对比度。

第4脚:RS 为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W 为读写信号线,高电平时进行读操作,低电平时进行写操作。当 RS 和 R/W 共同为低电平时可以写入指令或者显示地址,当 RS 为低电平 R/W 为高电平时可以

读忙信号,当 RS 为高电平 R/W 为低电平时可以写入数据。

第6脚:E 端为使能端,当 E 端由高电平跳变成低电平时,液晶模块执行命令。第7~14脚:D0~D7为8位双向数据线。

2.        基本操作时序表
读写操作时序如图10和图11所示。


图 10 读操作时序
图 11   写操作时序
3.        LCD LM016L 的 RAM 地址映射及标准字库表
液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标


志为低电平,表示不忙,否则此指令失效。图12是016的内部显示地址。



图 12   1602LCD 内部显示地址

016液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形。



图 13 字符代码与图形对应图
4.        液晶 LM016L 显示电路图
本设计中,液晶显示电路与单片机的连接如图 14 所示。



图 14  液晶显示电路

3.1.4  键盘电路

该子系统是5 个独立键盘和一个2 输入与门组成,其中与门输出端连接单片机的P3.2 口以便形成外部中断。5 个按键分别连接单片机的 P2.0~P2.4 口。2 输入与门一引脚与K1 按键相连,另一引脚接高电平。当 K1 按下时,INT0 为低电平,可知外部中断到了, 系统执行中断程序。当 K2~K5 按键某一个按下时,对应的 P2.1~P2.4 口中某个为低电平, 系统可以感知此按键按下,从而执行相应的程序。每个按键的功能如表 2 所示。

表 2 按键功能表

功能
属性
波形选择
自动复位
频率升高
自动复位
频率降低
自动复位
步进值
自动复位
按键电路的电路图如图 15 所示。
                          
图 15 按键电路图




第 4 章 系统软件设计

系统软件主要是用来控制信号发生器系统按照设计的逻辑进行运行。在软件设计上, 根据功能分成了多个模块编程,主要包括:主程序模块、四种不同的波形产生模块、按键处理模块、外部中断模块、液晶显示模块等。


4.1  系统主程序流程框图
系统主程序流程图如图 16 所示,源程序见附件。


图 16   系统主程序流程图


4.2  信号产生子程序

本系统采用编程的方法,来输出四种不同的波形即正弦波、矩形波、三角波、锯齿波。各种波形的产生方法如下。


4.2.1   正弦波发生子程序

正弦波的产生比较特殊,它不能由单片机直接产生,只能由如图 17 所示的阶梯波来向正弦波逼近。很显然,在一个周期内阶梯波的阶梯数目越多,单片机输出的波形也就



越接近正弦波。



图 17   正弦波信号的产生

先假定正弦波的振幅是 2.56 V,则波谷对应的数字量为最小值 00H,波峰对应的数字量为最大值 FFH。将正弦波的第一个周期的波形按角度均分为若干等份,并计算出各点对应的电压值,电压值计算方法:Vx=2.5·(1+sinθ),因为 00H~FFH 对应的数字量为0~255,所以根据算出的电压就可直接写出各点所对应的数字量。单片机将一个周期的数字量存入一定的存储区域中,然后依次循环取出这些数字量,并送 D/A 电路转换成阶梯波,即近似的正弦波输出。图 18 为正弦波产生的流程图。



图 18 正弦波产生的流程图

4.2.2   矩形波发生子程序

如图 19 所示,矩形波的实现比较简单。首先定义一个无符号字符型变量 i=0,使自变量 i 不断的自动加 1,若 i 的值小于squa_num,将 P0 口赋值为 0xFF;若 i 的值大于squa_num,则将 P0 口赋值为 0x00。当 i 自加到 256 后又自动变为 0,以此循环,即可得



到矩形波。当 squa_num=128 时,此时输出的为方波。调节 squa_num 的大小,即可实现矩形波占空比的调节;调节延时时间的大小,即可实现矩形波频率的改变。




图 19 矩形波产生流程图

4.2.3   三角波发生子程序

三角波中的斜线用一个个小台阶来逼近,当台阶间隔很小时,波形基本上近似一直线。首先定义一个无符号字符型变量i=0,使自变量 i 不断的自动加 1,若 i 的值小于 128, 将 P0 口赋值为 i;若 i 的值大于 128,则将 P0 口赋值为 256-i。当 i 自加到 256 后又自动变为 0,以此循环,从而 P0 口实现了周期性的数字量变换,在经过数模转换后转变成模拟信号,经运算放大电路后就得到了周期性的三角波。三角波产生流程图如图 20 所示。



图 20 三角波发生流程图


4.2.4   锯齿波发生子程序

锯齿波的实现过程与三角波类似,也是定义一个变量 i=0,并使 P0=i,自变量 i 不断的自动加 1,直到加到 255,然后 i 又可以自动归为 0,再不断的重复上过程。在此过程中,P0 口的值也随着 i 一样变化,经数模转换 DAC0832 后,周期性逐一变化的数字量就转换为锯齿波输出了。通过调节 P0 口每相邻两个值之间的延迟时间,就可以改变锯齿波的频率。图 21 为锯齿波发生流程图。



图 21 锯齿波发生流程图


4.3 按键处理子程序
在本设计中,主要是通过按键来调节输出波形的类型、频率的大小及矩形波的占空比,采用程序控制扫描方式,时刻监视着有无按键按下。为了能够更准确的判断按键的情况,一旦有按键按下时,先延时去除按键的抖动,再判断是哪个按键按下,从而单片机对应的执行相应的程序。图 22 为按键处理流程图。
图 22  按键处理流程图


4.4 液晶显示子程序
LCD LM016L 的显示函数很简单,只要严格按照其时序图操作,并结合其相关指令集,写好 LCD 的初始化程序,清屏程序,写指令程序,写数据程序,读数据程序等一系列驱动程序,即可完成 LCD 的所有显示需要。在本设计中,由于需要显示的内容比较多, 且有些需要重复显示,有些只要显示一次,故只画出液晶显示的基本流程,如图 23 所示。
图 23  液晶显示流程图


4.5  INT0 中断子程序

中断子程序是用来控制输出波形的选择及将输出波形的类型在 LCD 液晶显示屏上显示出来。当波形选择按键 K1 按下时,进入中断程序中,此时波形选择标识 WaveChoice 加 1,LCD 液晶显示屏上显示出相应的波形类型。中断结束后,主程序中根据WaveChoice的值输出相应的波形。图 24 为 INT0 中断流程图。




图 24 INT0 中断流程图


第 5 章 系统调试

5.1  系统调试过程
1.      编译、连接项目,形成目标文件

打开 Keil 新建工程文件,然后添加源程序文件,保存时把文件后缀名改成“.c”,再直接导入新建的工程中。

把源程序全部录入后,先粗略的检查一遍,主要改正明显的各种错误,这样可以减少之后的修改工作量。接着 Options forTarget “Target 1” ,点击 Output ,勾选 Create Hex 那个选项,生成可执行的文件。然后点击 Project 菜单下的 Built Target 命令然后再进行编译、连接,形成目标文件。编译、连接用 Project 菜单下的 Built Target 命令(或快捷键 F7),也可以直接点击工具栏中相对应的图标。

2.      运行调试

在 Proteus 软件中先从元件库中加载要使用的那些元件,然后把元件放在图纸上一个一个的接线,尽量不让线交错,便于查看、分析,有必要时,使用接线标号法。完成所有元器件的接线后,在单片机上右击选 Edit Properties,在 Program file 那一行右侧点击, 然后选择前面生成的以“.hex”为后缀名的文件,为单片机 AT89C51 添加可执行文件。然后点击左下角的相关按键,开始进行仿真。

3.源程序(部分重要代码)

5.2  系统仿真结果
经以上调试,确认程序没有问题时,加载到 Proteus 软件中进行仿真,所得仿真结果

如下。
(1)刚开始运行程序,没有按键操作时,仿真结果如图 25 所示。

           

图 25  仿真初始化结果
(2)当按下进行波形四种波形选择时,每种波形的仿真结果如下。

           
频率增大后
           
图 26   正弦波



           
频率增大后
           

图 27   方波

           
频率增加后
           
图 28   三角波

经过为期两周的单片机综合应用实践的学习深有体会,主要有以下几个方面:

(1)      通过查阅大量资料使自己对信号发生器的研究现状、原理、工作方式等的基本    概念及技术发展有了更好的理解。

(2)      针对设计的任务和要求,确定信号发生器的设计方案,并逐步来实现。

(3)      本系统使用了单片机作为主控制器,直接由软件产生不同波形信号的输出, 因此在如何编写程序方面下了很大的功夫,也收获了很多知识。



     附录A 电路原理图

本人初学,仅供参考,存在错误和不足之处,请大家回帖多多指教,不胜感激.切勿照搬
以上图文的Word格式文档下载(word文档内容和本网页上的一模一样,方便大家保存):
word文档: word文档.docx (1.81 MB, 下载次数: 9)
程序:http://www.51hei.com/bbs/dpj-229095-1.html
仿真:无

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表