文档库

最新最全的文档下载
当前位置:文档库 > 基于DAC0832程控放大器

基于DAC0832程控放大器

测控系统综合训练

报告

题目:程控放大器的设计

班级:

姓名:

学号:

指导教师:

成绩:

江苏理工学院

电气信息工程学院

2014年12月29日~2015年1月23日

目录

摘要 (2)

第1章绪论 (3)

1.1 课题研究背景 (3)

1.2 设计思路 (3)

第2章系统总体设计 (4)

2.1 方案选择 (4)

2.1.1程控部分方案选择 (4)

2.1.2显示部分方案选择 (5)

2.2系统设计要求 (6)

2.3 系统结构与总体设计 (6)

第3章系统硬件设计 (6)

3.1单片机的应用与选择 (7)

3.2芯片简介 (7)

3.2.1 STC89C51性能简介 (7)

3.2.2 STC89C51的主要特性 (7)

3.2.3 STC89C51管脚功能 (7)

3.3 控制显示电路 (9)

3.4按键输入电路 (11)

3.5 D/A转换电路 (12)

3.5.1 管脚功能 (12)

3.5.2 D/A转换电路模块 (13)

3.6 转换电路 (14)

第4章系统软件设计 (15)

4.1软件开发环境简介 (15)

4.2 C语言简介 (15)

4.3软件总体设计 (15)

4.4部分程序段代码 (16)

4.4.1 DAC0832程序段 (16)

4.4.2 LCD液晶显示代码 (17)

第5章系统仿真调试 (19)

5.1 系统仿真结果 (19)

第6章整机实物调试与分析 (20)

6.1 增益测试 (20)

6.2 带宽测试 (20)

6.3 误差分析 (23)

第7章学习总结 (24)

7.1 心得体会 (24)

7.2 参考文献 (24)

附录: (25)

附录一总程序代码 (25)

附录二实物图 (31)

附录三整机电路 (32)

摘要

在电子信息技术中,常常需要对输入信号进行放大。特别是对于一些输入信号幅度变化较大的系统,常常需要实时改变其放大倍数,以保证其输出信号能满足系统的要求。为了满足该需求市面上出现了多种程控放大器。但该类放大器多采用价格昂贵的专用芯片实现,从而性价比不高。

针对以上问题,本文设计出一种可通过程序实现改变信号增益的高增益高精度信号放大器。该放大器利用电流型DAC内部的倒梯形网络配合运算放大器组成反馈网络实现程控放大的功能。

本设计采用与之相关的STC89C51单片机,TL084放大器,DAC0832D\A转换器的概况及应用。本文介绍了目前程控放大器的各项技术特征,并且阐述了其工作过程和要求,硬件系统设计以及软件系统设计,简单地对可编程控制器(PLC)系统结构、工作原理及控制原理进行了分析,详细阐述了程控放大器的外观设计、放大过程、硬件设计、软件程序设计的实现过程。

关键词:STC89C51单片机、DAC0832、运算放大器

第1章绪论

1.1 课题研究背景

程控放大器,又名可编程放大器,是一种放大倍数由程序控制的放大器。程控放大器可以通过软件改变增益,利用模数转换器可以自动适应大范围变化的模拟信号电平,因此越来越多地应用在自动控制系统、智能化仪器仪表中。本课题适用于科学教研、生产实践和教学实验等领域。它是用STC89C51单片机、DAC0832、TL084等通过按键来实现增益的产生与切换。

1.2 设计思路

本系统的主控制模块是由单片机最小系统,四个独立按键构成的,每一个按键对应一种调整模式,分别为设置、增加、减小、移位。按下按键后,会执行相应的按键功能,松开后停止。

程控放大器的输出电压U0与DAC0832的R f端口的输入信号的关系式:U0=-[(Vref·R f)]/2nD(D n-1·2n-1+D n-2·2n-2+...+D0·20)。Vref为系统的反馈信号输入线电阻,D为DAC0832的数字输出量,就相当于改变系统的增益。

具体实现过程:系统上电后先对DAC0832和LCD1602液晶初始化,再对按键进行扫描。当按键有按下时,系统产生相应的变化,从而改变系统的增益,使得输出电压发生相应的变化。系统的放大倍数和输出电压通过液晶实时显示。

第2章 系统总体设计

2.1 方案选择

2.1.1程控部分方案选择

方案一: 采用压控放大器(如AD603)实现高增益程控放大。将可程控的电压源加到压控放大器的控制端,通过调整电压的幅值即可调整输入信号的放大倍数,实现程控放大。但这种方法所能实现的程控增益有限,很难满足题目中的高增益要求,并且在高增益时所加电压有小的纹波都会引起增益的较大变化,所以需要配合一个高精度的DAC 以及一个高精度的参考电源,所需成本较高。故不采用此方案。

方案二:采用分级PGA 芯片配合分压电阻网络和多路开关实现程控放大器。此方案的多路开关实现程控放大的原理如图2-1所示,可实现高增益程控放大。

程控放大器利用选通开关,控制放大器的反馈电阻阻值,实现改变放大倍数的原理工作。

基于DAC0832程控放大器

+

_u i

u o

图2-1 多路开关实现程控放大的原理图

利用数模开关选通不同的开关通道,通过反馈电阻的搭配可以实现多种数值的放大,但要小步进的增益控制,则需要很复杂的电阻网络和通道选择,控制难度大,成本也相应的增加,只能进行较为简单的放大倍数控制。

方案三:利用数字电位器作为放大器的反馈电阻,实现放大器的放大倍数改变。此方案和方案二原理基本相同,都是通过调节反馈电阻来实现对增益的控制,不同的是选用数字电位器来实现,缺点是数字电位器为了扩大使用电压范围,内部附加了由振荡器组成的充电泵,因而会产生有害的高频噪声。

方案四:采用固定增益放大器与利用D/A 芯片的倒梯形权电阻网络的程控放大器级实现。

可利用数模转换器内部所具有的电阻网络作为反馈电阻。电流输出型D/A

芯片的参考电压引脚和电流输出引脚之间等效于一个数控的电阻网络,该网络较为精准和易于控制。采用该种方案的程控放大器,增益的细分程度取决于D/A 转换器的精度(即位数)。

固定增益部分由两级放大电路实现,程控放大部分由DAC和低噪声运放程控放大,在信号经过选频网络之后经过后期固定增益档位的可控放大使输出结果更为理想。该方案的优点是灵活性相当大,增益调节范围很宽,容易实现高精度、高分辨率的高增益程控放大。故综合考虑选择方案四。

2.1.2显示部分方案选择

为便于系统简化和满足人机交互基本功能,显示部分方案选择比较:

方案一:用LED数码管作显示。

采用七段码显示时,数据管中的每一段相当于一个发光二极管。对于共阳极数码管,内部每个发光二极管的阳极被连在一起,成为该各段的公共选通线,发光二极管的阴极则成为段选线。对于共阴极数码管,则正好相反,内部发光二极管的阴极接在一起,阳极成为段选线。这两种数码管的驱动方式是不同的。当需要点亮共阳极数码管的一段时,公共段需接高电平,该段的段选选线接低电平。从而该段被点亮。当需要点亮共阴极数码管的一段时,公共段需接低电平,该段的段选接高电平,该段被点亮。

LED数码管显示清晰明亮,适合用于白天等强光条件下显示,能使用时间长久,价格低廉,但LED数码管显示单一,且显示电路处理麻烦,很占控制器的资源。

方案二:用液晶LCD1602作显示。

LCD1602可以显示字母、数字符号、中文字型及图形,具有绘图及文字画面混合显示功能。提供三种控制接口,分别是8位微处理器接口,4位微处理器接口及串行接口。所有的功能,包含显示RAM,字型产生器,都包含在一个芯片里,只要一个最小的微处理系统,就可以方便操作模块。

LCD1602液晶极其省电,且能显示26个英文字母和一些简单的图标,在人机交互,可以有更多的选择,灵活多变,且价格低廉,占用控制器的资源少。

综合以上几种方案的优缺点,本设计采用方案二,用液晶LCD1602作显示。

2.2系统设计要求

本系统设计的程控放大器可以实现如下功能:

(1)输出的值可通过LCD1602液晶显示;

(2)可以通过按键输入改变放大器的放大倍数。

2.3 系统结构与总体设计

从总体结构上来看,整体结构可以分为两块。增益程控模块和信号输出模块,其中增益信号模块主要利用按键来给芯片的信号输入来调节增益,继而用LCD 显示。而信号输出模块主要利用用DAC0832芯片的R-2R电阻网络来进行对输入信号进行增益,在通过单极型差动运放和方向比例运放来形成输出信号。

基于DAC0832程控放大器

图2-2 系统结构框图

第3章系统硬件设计

3.1单片机的应用与选择

8051是MCS-51系列单片机中的代表产品,它内部集成了功能强大的中央处理器,包含了硬件乘除法器、21个专用控制寄存器、64kB的程序存储器、256B字节的数据存储器、4组8位的并行口、两个16位的可编程定时/计数器、一个全双工的串行口以及布尔处理器。

由于MCS-51集成了几乎完善的8位中央处理单元,处理功能强,中央处理单元中集成了方便灵活的专用寄存器,硬件的加、减、乘、除法器和布尔处理机及各种逻辑运算和转移指令,这给应用提供了极大的便利。

3.2芯片简介

3.2.1 STC89C51性能简介

STC89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的STC89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

3.2.2 STC89C51的主要特性

(1)4K字节可编程FLASH存储器(寿命:1000写/擦循环);

(2)全静态工作:0Hz-24KHz;

(3)三级程序存储器保密锁定;

(4)128*8位内部RAM;

(5)32条可编程I/O线;

(6)两个16位定时器/计数器;

(7)5个中断源;

(8)可编程串行通道。

3.2.3 STC89C51管脚功能

MCS-51系列单片机芯片均为40个引脚,HMOS工艺制造的芯片采用双列

直插(DIP)方式封装,其引脚示意及功能分类如图3-1:

基于DAC0832程控放大器

图3-1 STC89C51引脚图

MCS-51系列单片机的40个引脚中有2个专用于主电源的引脚,2个外接晶体的引脚,4个控制或与其它电源复用的引脚,以及32条输入输出I/O引脚。

VCC:供电电压。

GND:接地。

(1)P0口(P0.0~P0.7) 为双向8位三态I/O口,当作为I/O口使用时,可直接连接外部I/O设备。它是地址总线低8位及数据总线分时复用口,可驱动8个TTL负载。一般作为扩展时地址/数据总线口使用。

(2)P1口(P1.0~P1.7) 为8位准双向I/O口,它的每一位都可以分别定义为输入线或输出线(作为输入时,口锁存器必须置1),可驱动4个TTL负载。

(3)P2口(P2.0~P2.7) 为8位准双向I/O口,当作为I/O口使用时,可直接连接外部I/O设备。它是与地址总线高8位复用,可驱动4个TTL负载。一般作为扩展时地址总线的高8位使用。

(4)P3口(P3.0~P3.7) 为8位准双向I/O口,是双功能复用口,可驱动4个TTL负载。

RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。

XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2:来自反向振荡器的输出。

综上所述,MCS-51系列单片机的引脚作用可归纳为以下两点:

(1)单片机功能多,引脚数少,因而许多引脚都具有第2功能;

(2)单片机对外呈3总线形式,由P2、P0口组成16位地址总线;由P0口分时复用作为数据总线;由ALE、PSEN/、EA/与P3口中的INT0/、INT1/、T0、T1、WR/、RD/共10个引脚组成控制总线。

3.3 控制显示电路

本设计用STC89C51单片机最小控制系统,显示部分采用LCD1602液晶显示器LCD引脚图如图3-2所示。

基于DAC0832程控放大器

图3-2 LCD1602引脚图

此液晶属于工业字符型液晶,能够同时显示16x02即32个字符。(16列2行)

1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。

1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。

本设计中液晶主要用于显示放大器的倍数和方便设置放大器的倍数。由于液晶显示以及程序设计灵活,可以省去数码管显示的繁琐操作。同时液晶显示更加人性化,且现在液晶成本低廉,在本设计中是一个很好的选择。图中单片机的P0口作为液晶显示的数据端口。由于51单片机设计者为了满足多电平的兼容性。在设计时P0口作输出时,设计为集电极开路输出,因此本设计作为液晶的数据端口,P0口输出增加上拉电R2将P0口输出上拉至VCC。以保证单片机输出1时,液晶数据口接收到的信号为高电平。

3.4按键输入电路

按键输入电路如图3-4所示,通过按键控制放大倍数。P1.0接放大设置按钮,P1.1接放大倍数增加按钮,P1.2接放大倍数减小按钮,P1.3接移位按钮。

基于DAC0832程控放大器

图3-4 按键输入电路

3.5 D/A 转换电路

D/A 转换电路采用DAC0832来实现,首先来介绍下DAC0832芯片。 3.5.1 管脚功能

DAC0832管脚功能如图3-5所示。

基于DAC0832程控放大器

图3-5 DAC0832引脚图

DAC0832的主要特性参数如下: (1)分辨率为8位;

(2)输出为电流信号,电流的建立时间为1us ; (3)可单缓冲、双缓冲或直接数字输入; (4)只需在满量程下调整其线性度;

(5)单一电源供电(+5V ~+15V ),低功耗,20mW ; (6)参考电压可以达到±10V ;

(7)直接的数字接口可以与任何一款单片机相连。 DAC0832的引脚功能:

(1)D0~D7:8位数据输入线,TTL 电平,通常与单片机的数据总线相连,用于输入CUP 送来的待转换数字量。有效时间应大于90ns(否则锁存器的数据会出错);

(2)ILE :数据锁存允许控制信号输入线,高电平有效; (3)C S ————

:片选信号输入线(选通数据锁存器),低电平有效;

(4)W R 1——————:数据锁存器写选通输入线,负脉冲(脉宽应大于500ns )有效。由ILE 、C S ————

、W R 1——————

的逻辑组合产生LE1,当LE1为高电平时,数据锁存

器状态随输入数据线变换,LE1的负跳变时将输入数据锁存;

(5)X F E R ————————

:数据传输控制信号输入线,低电平有效,负脉冲(脉宽应大于500ns )有效;

(6)W R 2——————:DAC 寄存器选通输入线,负脉冲(脉宽应大于500ns )有效。由W R 1——————

、X F E R ————————的逻辑组合产生LE2,当LE2为高电平时,DAC 寄存器的输出随寄存器的输入而变化,LE2的负跳变时将数据锁存器的内容打入DAC 寄存器并开始D/A 转换。

(7)IOUT1:电流输出端1,其值随DAC 寄存器的内容线性变化; (8)IOUT2:电流输出端2,其值与IOUT1值之和为一常数;

当DAC 寄存器内容全为1时,IOUT1为最大,IOUT2=0;当DAC 寄存器内容全为0时,IOUT1=0,IOUT2为最大;

为了保证输出电流的线性,应将IOUT1 及IOUT2接到外部运算放大器的输入端上。

(9)Rfb :反馈信号输入线,改变Rfb 端外接电阻值可调整转换满量程精度; (11)Vcc :芯片工作电源,范围为+5V ~+15V ;

(12)VREF :基准电压输入线,VREF 的范围为-10V ~+10V ; (13)AGND :模拟信号地,为模拟信号和基准电源的参考地; (14)DGND :数字信号地,为工作电源地和数字逻辑地 3.5.2 D/A 转换电路模块

D/A 转换电路如图3-6所示,单片机的P2口输出信号给0832的8位并口数据输入,控制端口接地。输出信号至运算放大器。

基于DAC0832程控放大器

图3-6 D/A 转换电路

3.6 转换电路

运放与DAC0832连接的运放电路如图3-6所示。DAC0832输出的转换结果为电流信号,在本设计中利用TL084运算放大器将其转换为模拟电压信号。运放的反馈接到运放的Vref端口。图中所示运算放大器U3的作用是反向器,是输出的电压与D/A转换的电压相同。

运放与DAC0832连接的运放电路如图3-7所示。

基于DAC0832程控放大器

图3-7 运放与DAC0832连接电路

第4章系统软件设计

4.1软件开发环境简介

本设计中选用德国KEIL公司推出的uVision4集成开发环境作为主机程序设计的编译器。该软件集成了业内最领先的技术。Keil software的8051开发工具提供以下程序,可以用它们来编译C程序代码,汇编源程序,连接和重定位目标文件和库文件,创建HEX文件以及调试目标程序。

4.2 C语言简介

C语言是一种结构化的语言,它层次清晰,便于按模块化的方式组织程序,易于调试和维护,语言简洁,紧凑,使用方便灵活。其次,它丰富的运算和数据类型,便于实现各类复杂的数据解耦。第三,可以直接访问内存地址,能进行位操作的特点,使其能够胜任开发炒作系统的工作。第四,由于C语言可以对硬件进行编程操作,因此,它既有高级语言的功能,同时也有低级语言的优势。不仅可用于系统软件的开发,同时也适用于应用软件的开发。另外,C语言还有效率高的,可移植性强等特点。例如,原来使用的汇编语言编写的程序,由于别人编写的程序不易被读懂,在一段时间后再去做升级和维护就会感觉非常的不方便。但在使用和维护C语言编写的程序时,就不会遇到这样的困扰,这时候C 语言的优势就大大的体现出来了。

4.3软件总体设计

如图4-1所示为系统的软件流程图。

主程序中,首先对系统进行初始化。初始化所完成的是对系统中所用到的资源的控制寄存器等赋初值(如按键端口、液晶端口I/O方向进行初始化、液晶LCD1602显示初始化、放大器控制初始化等),默认放大倍数为1。

各程序段,主要包括DAC0832程序段和LCD1602液晶显示程序段。

首先,系统进行初始化,包括液晶初始化和和各端口的初始化,并设定默认倍数为1,根据相应的放大倍数和D/A值关系,输出D/A控制命令,然后,程序进行入按键扫描段,如果“选择/确定”键按下,则进入放大倍数修改段。根据扫描的键值,进行相应的修改,如,若“加”键被按下,相应位上加1;若“减”键被按下,相应位减1;若”移位”键被按下,光标移位。最后,程序根据修改的放大倍数值,根据相应的放大倍数和D/A值关系,输出D/A控制命令。

基于DAC0832程控放大器

图4-1 系统软件流程序

4.4部分程序段代码

4.4.1 DAC0832程序段

首先,DAC0832输出一个默认的放大倍数1,然后根据键值做出相应的改变,根据键值和放大倍数的对应数学关系,计算出DAC0832应输出的控制命令。

如下为DAC0832程序段:

/*****************************

对第一片DAC0832进行赋值设置

*****************************/

void DAC0832_SET(uint16 Data)

{

uint8 i;

uint16 buffer;

buffer=Data+0x1000;

SYNC=0;

for(i=0;i<16;i++)

{

SCLK=1;

if(buffer&0x8000)SDIN=1;

else SDIN=0;

SCLK=0;

buffer<<=1;

}

SYNC=1;

}

4.4.2 LCD液晶显示代码

液晶的显示部分采用带一款字符型液晶1602,此模块的程序结构较简单,难点也只是液晶读写的时序,本程序中只需要时时对液晶写入数据,便于人机交互,只要对液晶驱动了后写数据也就相应的简单了,通过查看液晶的时序图4-2,然后再模拟时序编程别能驱动液晶了。液晶操作的命令码可以查询LCD1602官方给出的命令码表。

首先对液晶进行初始化,然后,根据相应的键值,作出相应的变化,如若“加”键被按下,相应位上加1,输出对应的ASCII值;若“减”键被按下,相应位减1,输出对应的ASCII值;若“移位”键被按下,光标移位等。

基于DAC0832程控放大器

图4-2 读操作时序图

1602液晶驱动程序:

void LCD_init(void)

{ LCD_write_com(0x38); /*显示模式设置*/

delay_ms(5);

LCD_write_com(0x38);

delay_ms(5);

LCD_write_com(0x38);

delay_ms(5);

LCD_write_com(0x38);

LCD_write_com(0x08); /*显示关闭*/

LCD_write_com(0x01); /*显示清屏*/

LCD_write_com(0x06); /*显示光标移动设置*/

delay_ms(5);

LCD_write_com(0x0C); } /*显示开及光标设置*/

void LCD_write_com(uint8 com)

{ RS_CLR;

RW_CLR;

EN_SET;

P0 = com;

delay_us(5);

EN_CLR;}

/* 写入数据函数*/ /***************************************************************/ void LCD_write_Data(uint8 Data)

{ RS_SET;

RW_CLR;

EN_SET;

P0 = Data;

delay_us(5);

EN_CLR;}

/* 清屏函数*/ /****************************************************************/ void LCD_clear(void)

{ LCD_write_com(0x01);

delay_ms(5);}

第5章系统仿真调试

5.1 系统仿真结果

当输入信号为正弦信号,且幅度为10mv,频率为100Hz时,信号从A通道输入,从D通道输出,仿真输出结果如图5-1所示。

基于DAC0832程控放大器

基于DAC0832程控放大器

图5-1 仿真结果

如图5-1所示,初始放大倍数为1,A通道输入的原始信号与D通道输出的信号一致,实现了原始信号的正确输出;通过按键改变放大倍数为5,D通道旋转按钮显示为50mv,经过简单计算,可得输出信号被放大了5倍,由此得出,仿真结果如预期所想。