该设计是电子设计大赛的题目—自动增益控制放大器
里面有单片机源码,电路原理图,资料分析和proteus与Multisim仿真 大赛报告(论文)等资料
本次设计的自动增益控制放大器由DAC内部的电阻网络来实现自动增益,只要改变DAC内部的电阻网络结构,再通过电阻网络与输入输出的电压关系即可实现自动增益。由于DAC输出的是电流,我们再通过一个流压转换器把电流转化为电压,然后通过一个反相比例电路来输出电压。因为输入DAC内部的是数字量,我们先通过一个ADC来实现模数转换。输出的电压接到ADC输出口,把模拟量转化为数字量后,我们可以通过液晶显示屏来实现输入输出的电压以及增益。对于发挥部分2,由于输入的是交流信号,为了方便编程,我们先把交流信号变为直流信号,从而在本质上与发挥1一致以达到效果。这就是基本的设计思路。 目录 一.系统方案论证: 二.系统总体框图: 三.理论分析与计算: 四.电路与程序设计: 五.测试方案与测试结果:
一.系统方案论证: 下面分别就此系统的各个部分分别进行论证: 方案一:数码管显示器应用比较灵活,原理简单,但是用它来显示系统比较复杂的电路困难,只能显示数字内容,速度慢,易受干扰。 方案二:液晶显示器可显示的内容丰富,不局限于数字,屏幕调节方便,低耗能,散热小,但价格较高 综合两个方案,选择方案二。 方案一:ADC0809是CMOS单片型逐次逼近式A/D转换器,ADC0809是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件。转换时间为100μs(时钟为640KHz时),130μs(时钟为500KHz时)。可以和单片机直接接口,但成本较高。 方案二:ADC0832是8引脚双列直插式封装芯片 双通道A/D转换,5V电源供电时输入电压在0~5V之间,工作频率为250KHZ,转换时间为32μS, 一般功耗仅为15mW,成本较低。 综合两个方案,选择方案二。 方案一:用继电器构成电阻网络,由单片机控制以改变信号增益手动调节增益,可实现增益控制,但硬件规模较大,控制繁琐且人机界面欠佳,另外,利用电阻网络实现增益调节需使用不同阻值的高精度电阻,这种电阻价格昂贵且不易购买。 方案二:使用模拟开关CD4052,它是一个双路四选一模拟开关,开关的工作状态由控制信号A、B来决定。当BA=00时,X0导通;当BA=01时,X1导通;当BA=10时,X2导通电压放,当BA=11时,X3导通电压放。这样,通过改变模拟开关的导通通道就可以改变反馈电阻,电压增益也随之改变。但其导通电阻较大,而且各通道信号会互相干扰,容易影响系统性能。另外,编程较困难,且实现的增益不是特别准确。 方案三:借用DAC内部的电阻网络;单片机通过控制DAC内部的电阻网络结构来控制其电阻值,从而实现输入电压,输出电压和DAC内部电阻网络结构关系。我们选用DAC0832,它由倒T型R-2R电阻网络、模拟开关、运算放大器和参考电压VREF四大部分组成。硬件电路如下图所示。 利用虚短、虚断的知识可推导出可控增益的计算公式: ,code是单片机传给DAC的码,此处100k是加在Rfb之后的反馈电阻,满足输入阻抗不小于100K的要求。通过改变code码,即可改变输出与输入之间的关系。但此方案的缺点是输出电压是反相的,所以应在此电路后面加一个反相比例放大电路。 二.系统总体框图:三.理论分析与计算:(1)任务的实现: 题目要求我们设计一个带有自动增益控制功能的放大器。输入阻抗不小于100k。输出阻抗不大于1k。 由于放大器的带宽不小于100KHz。放大器的增益最大需要10倍。所以我们选择运放的增益带宽积必须要大于1M。本次设计我们选的是OP37,其增益带宽积为63M,输出阻抗小于1k,已经远远满足要求。 在Rfb之后加100k的反馈电阻,满足输入阻抗不 小于100K的要求,因为Rfb=15k。 (2)基础部分计算: ,因为Rfb=R=15k,所以此式可简化为: .下图是基础部分计算图: 输出电压稳定在1V±0.2V之间,我们让Vout=1,Vin可由ADC0832转化成数字量读出,便可计算出code码。对于发挥部分二,我们先把交流变为直流,其后的思路与上述一样。 四.电路与程序设计:基础要求部分: 发挥部分交流变直流: (2)程序设计思路: ①输入信号到adc0832的CH0通道,送adc0832 19个脉冲信号来实现通道的选择和信号的读取。 ②对液晶屏进行初始化、读命令、读数据操作。将adc0832接收的数字信号转化为模拟量,aa=(aa*5000/255);用液晶屏显示数值。 ③输入信号经输入电阻100k欧姆到达dac0832的参考电压端,利用虚短虚断的知识得到公式,推算出增益所对应的code码,实现基础部分。 ④令上述公式中输出电压为1v,根据输入电压的大小可以自动改变增益,实现发挥部分。因dac0832内部电阻有误差,经试验测得,最后推出理论算式:CODE=(uchar)(10.6*255*aa/73000;); ⑤输出信号到adc0832的CH1通道,送adc0832 19个脉冲信号来实现通道的选择和信号的读取。 ⑥对液晶屏进行初始化、读命令、读数据操作。将adc0832接收的数字信号转化为模拟量,aa=(aa*5000/255);用液晶屏显示数值。 五.测试方案与测试结果:(1)测试使用的仪器 直流稳压电源 数字万用表 计算器 示波器 函数信号发生器 (2)测试方案: 用稳压电源提供5V,±12V电压,然后用万用表分别测量输入与输出端口看是否与显示屏所显示的一致,然后用计算器计算看看增益是否一致。对于发挥部分,用函数信号发生器作为信号源,用示波器检测交流是否变为直流。 (3)测试结果 (4)测试结果分析: 经过一系列的调试,基础要求部分的结果基本符合要求,实现了四个档位之间的转换,且输出与输入之间的比值与相对应的增益相差结果接近为0;发挥部分(1)也实现了电压稳定在1v±0.2v之间。发挥部分(2)由交流信号变为直流,其实现的结果也大体符合要求。
单片机源程序如下:
- #include<reg51.h>
- #include <intrins.h>
- //#define dates P0 //P0 LCD1602专用IO口
- #define uint unsigned int
- #define uchar unsigned char
- sbit lcdcos=P2^6;
- sbit lcdrw=P2^5;
- sbit lcden=P2^7;
- sbit adcs=P3^3; //芯片选通信号,低有效
- sbit adclk=P3^2; //芯片时钟信号
- sbit addo=P3^7; //通道0
- sbit addi=P3^6; //通道1
- sbit A=P3^4; //模拟通道选择IO口AB
- sbit C=P3^5; //模拟通道选择IO口AB
- sbit LNH=P3^1; //AB选择使能口
- uchar date;
- int a,b,c;
- //uchar i,j,z,dat1,dat2; // dat1,dat2分别为adc转化后的8位数,即LCD先转化后显示的数
- void delay(uint z) //延时程序z ms
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- void delay1() //延时两个空指令
- {
- _nop_();
- _nop_();
- }
- void chosecom0(uint com) //读数据操作
- {
- lcdcos=0;
- P0=com;
- delay(5);
- lcden=1;
- delay(5);
- lcden=0;
- }
- void choseshu1(uint shu) //读数据操作
- {
- lcdcos=1;
- P0=shu;
- delay(5);
- lcden=1;
- delay(5);
- lcden=0;
- }
- void init() //初始化lcd,规定运行方式,
- {
- lcden=0;
- chosecom0(0x38);
- chosecom0(0x0c);
- chosecom0(0x06);
- chosecom0(0x01);
-
- }
- void main()
- {
- init();
- chosecom0(0x80); //将要显示的字符显示在此地址处
- choseshu1('w');
- choseshu1('a');
- choseshu1('r');
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
全部资料51hei下载地址(单片机源码+仿真+word格式的设计报告):
自动增益控制放大器.rar
(19.29 MB, 下载次数: 266)
|