测量放大器的设计与制作.docx
《测量放大器的设计与制作.docx》由会员分享,可在线阅读,更多相关《测量放大器的设计与制作.docx(20页珍藏版)》请在冰点文库上搜索。
测量放大器的设计与制作
测量放大器
组长:
吴霜0689205
组员:
黄义忠0705030230
组号:
B28组
指导教师:
李东新
二〇〇九年七月
目录
摘要
设计任务和要求
一、方案设计与论证
1、放大电路
2、控制部分
二、系统总体设计方案
1、总体设计思路
2、原理分析和说明
(1)测量放大器原理
(2)控制原理设计
三、采用元器件的说明
1、单片机
2、4*4键盘
3、选用测量仪器
四、主要电路说明
1、模拟放大电路部分
2、程控放大电路部分
五、主要电路的参数计算
1、模拟放大电路部分
2、程控电路部分
3、通频带的计算
六、软件程序部分
七、测试数据
1、放大倍数
2、输出电压线性度
八、结论
附录:
该实验主要程序
设计任务:
测量放大器
基本要求:
a、差模电压放大倍数AVD=1~500,可手动调节;
b、最大输出电压为±10V,非线性误差<0.5%;
c、在输入共模电压+7.5V~-7.5V范围内,共模抑制比KCMR>105;
d、在AVD=500时,输出端噪声电压的峰-峰值小于1V;
e、通频带0~10Hz;
f、直流电压放大器的差模输入电阻≥2M
摘要
本设计由三个模块电路构成:
前级高共模抑制比仪器放大器、8位DAC0832衰减器、和单片机键盘显示处理模块。
前级模拟放大器部分具有高共模抑制比、高输入电阻、可调电压放大倍数;DAC衰减器将模拟放大器的输出信号进行相应的衰减;键盘输入信号放大倍数,并同时选取适当模拟放大倍数,通过单片机整体控制,实现信号放大的功能。
一、方案设计与论证
1、放大电路
方案一:
如下图所示。
线路前级为同相差动放大结构,要求两运放的性能完全相同,这样,线路除具有差模、共模输入电阻大的特点外,两运放的共模增益、失调及其漂移产生的误差也相互抵消,因而不需精密匹配电阻。
后级的作用是抑制共模信号,并将双端输出转变为单端放大输出,以适应接地负载的需要,后级的电阻精度则要求匹配。
增益分配一般前级取高值,后级取低值。
方案二:
方案一电路结构简单,易于定位和控制。
但要调节增益必须手动调节变阻器,所以考虑将放大倍数设成固定的几挡,以满足题目的要求。
2、控制部分
方案一:
数字电路实现方法
根据放大倍数1~500倍范围内变化的要求,可用八位拨码开关对DAC0832的D0~D7位设置放大倍数,并手动切换三挡增益。
该方案电路简单,但置的是十六进制数,使用者必须根据增益在哪一挡来换算放大倍数,且只能实现预置数功能。
方案二:
单片机实现方法
MCU最小系统可由51单片机或其派生芯片构成。
置数键可由0~9这十个数字键及几个功能键完成。
在软件的控制下,单片机开机后先将预置数读入,在送去显示的同时,送入D/A然后等待键盘中断,并做相应的处理。
显然,方案二采用单片机控制,效果优于前者。
二、系统总体设计方案
1、总体设计思路
根据题目的要求,我们认真取舍,充分利用了模拟和数字系统各自的优点,发挥其优势,采用单片机控制放大器增益的方法,大大提高了系统的精度;采用仪器放大器输入,大大提高了放大器的品质。
由片运放构成的前级高共模输入的仪表差动放大器,对不同的差模输入信号电压进行不同倍数的放大,再经后级数控衰减器得到要求放大倍数的输出信号。
每种信号都将在单片机的算法控制下得到最合理的前级放大和后级衰减,以使信号放大的质量最佳。
如图所示即为本系统原理方框图:
在前级仪器放大器中,将不同等级的电压信号分别选择不同的通道进行放大,在后级衰减器中,由D/A的数字量控制其衰减的倍数。
2、原理分析和说明
(1)测量放大器原理
在工业自动控制等领域中,常需要对远离运放的多路信号进行测量,由于信号远离运放,两者地电位不统一,不可避免地存在长线干扰和传输网络阻抗不对称引入的误差。
为了抑制干扰,运放通常采用差动输入方式。
对测量电路的基本要求是:
①高输入阻抗,以抑制信号源与传输网络电阻不对称引入的误差。
②高共模抑制比,以抑制各种共模干扰引入的误差。
③高增益及宽的增益调节范围,以适应信号源电平的宽范围。
以上这些要求通常采用多运放组合的电路来满足,典型的组合方式有以下几种:
同相串联式高阻测量放大器,同相并联式高阻测量放大器,高共模抑制测量放大器。
抑制共模信号传递的最简单方法是在基本的同相并联电路之后,再接一级差动运算放大器,它不仅能割断共模信号的传递,还将双端变单端,适应接地负载的需要。
它具有输入阻抗高、增益调节方便、漂移相互补偿,以及输出不包含共模信号等优点,其代价是所用组件数目较多,共模抑制能力略有下降。
为了提高整个电路的共模抑制能力,除了设法提高前置级和输出级的共模抑制比外,使整个电路的增益主要由前置级来承担,也是十分有利的,但是这样做又会限制差动输入电压范围,必须权衡利弊,全面考虑。
一般应用中,差动运算放大器的主要问题是提高共模抑制比,所以往往使输出级的增益取低值(这对差分输入运放的共模抑制比CMR3不利,必须相应提高电阻匹配的精度,才能保证CMR3不下降),前置级的增益取高值,把输入电压的工作范围放在第二位考虑。
(2)控制原理设计
本系统的控制由单片机完成,任一输入信号都将在前级放大的基础上再经后级数控衰减器才得到最终的放大倍数,因此其控制特色主要也体现在这两个方面。
首先是在前级放大器的控制上。
在仔细考虑题目要求的基础上,我们将前级放大器的可变电阻按要求分为四个控制段,分别对0~0.02、0.02~0.2,0.2~2,2~10V四个不同电压等级的信号输入进行控制,用开关切换以实现不同的放大倍数。
按分析,规定的放大倍数如上图所示。
由于要求最后放大电压的输出不超过10V,所以对大信号的放大倍数是很小的。
前级仪用放大器的放大倍数的适当选取是在单片机的算法控制下实现的,在用户预置的放大倍数有多种设定方式时,开关动作的原则是:
选择最小的前级放大倍数和相应最小的后级衰减方式。
这样的选择可使由放大器和衰减器引起的误差最小。
例如,从键盘输入的放大倍数为9,虽然有三种阻值的模拟放大电路可满足要求,但只能根据输入电压的大致范围选择其中的一种阻值通路,并配合单片机的编程进行正确的电压放大。
在衰减器电路中,由一片D/A构成的控制器在单片机的控制下对用户预置的放大倍数作出响应。
DAC08328位口的输入则相当于对该网络的输出电阻进行编程,对于输入不同的数字量,得到不同的输出输入电压比。
由于前级放大器已经对输入信号有了一定放大,在D/A中只要做相应的衰减即可满足题目要求。
因为我们选择的是8位的DAC0832,在放大500倍时,放大布距无法为1,而最终设定的放大布距为2。
具体放大倍数情况如下图所示:
输入电压
前级放大倍数
最终可放大倍数
2~10V
1
1
0.2~2V
5
1~5
0.02~0.2V
50
1~50
0~0.02V
500
1~500
三、采用元器件的说明
1、单片机
①单片机的定义
单片机是将CPU、RAM、ROM、(A/D)、T/C和多种接口电路集成在一个集成块上的微型计算机。
②单片机的特点
(1)ROM、RAM采用两个不同的地址指针,分别对ROM、RAM区进行寻址访问。
(2)芯片的引脚具有多种功能。
(3)具有多个SFR,外部接口SFR化,SFR的地址RAM化。
(4)有一个全双工的串行接口,可很方便地作成RS-232/RS-485标准串行接口,实现与外部设备的串行通信。
(5)内部具有能独立操作的位处理器、可位寻址的RAM、SFR、I/O口,因此单片机具有很强的位处理能力。
(6)单片机的特点是体积小、成本低、功能强、功耗小。
③单片机的模型图
④单片机的引脚以及各引脚的功能
⑤单片机功能简述
停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAAT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
AT89S52具有以下标准功能:
8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPUM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
2、4*4键盘
键盘模型图
按照题目要求,我们选用了这款简单方便的4*4式键盘。
3、选用测量仪器:
F1731SCA2A稳压源
EE1411合成函数信号发生器
DS5062C示波器
VC203万用表
四、主要电路说明
(1)模拟放大电路部分
按照方案的对比论证,我们选择了反馈电阻可调的共模输入并联电路和一个放大倍数为1或5的差模输入运放电路,实际电路如下图:
(2)程控放大电路部分
单片机最小系统由AT89S52系列单片机和一个4*4键盘构成,通过键盘输入键值得到设置的放大倍数,单片机的P2口接DAC0832的数字接口,将经过单片机转换的相应数值送到D/A中,得正确衰减倍数,再将D/A的输出送入一个差分输入的运放电路,最终得到放大设置倍数的信号。
五、主要电路的参数计算
1、模拟放大电路部分
第一级差模放大倍数
所以总的前端放大倍数为1、5.12、51.2、512
2、程控电路部分
为保证最终的放大倍数为1~500,且输出电压不超过10V,通过单片机将从键盘得到的放大倍数加以换算送入D/A。
如测量0.02~0.2V间的电压,前端已放大至1.024~10.24V,若输入放大倍数为30,则单片机将30/2得15,在*10得150,那么最终的放大倍数为51.2*150/256=30。
3、通频带的计算
在信号输入端加入了一个R=200K,C=10nF的低通过滤电路
计算f=1/(2*π*200*10*0.01*0.001)=7.94Hz
满足题目1~10Hz的设计要求
六、软件程序部分
程序流程图
七、测试数据
输入一差模信号,调节反馈电阻来改变差模电压增益,使之与预置的数一一对应。
1、放大倍数
测试条件:
输入直流信号
输入差模电压/V
设定放大倍数
输出差模电压/V
实测放大倍数
放大倍数相对误差
5
1
5.001
1.002
0.002
1
3
3.002
3.002
0.0007
0.173
30
5.19
30
0
0.068
30
2.05
30.147
0.0049
0.498
5
2.49
5
0
0.03
100
3.01
100.3
0.0033
2、输出电压线性度
测试条件:
输入直流信号
差模放大倍数
输入差模电压/V
输出电压实测值/V
输出电压理论值/V
输出电压非线性误差
0.053
1.593
1.59
0.0019
0.068
2.05
2.04
0.0049
0.083
2.49
2.49
0
0.103
3.09
3.09
0
0.173
5.19
5.19
0
八、结论
整个系统本着简单可靠的原则完成了本设计任务。
可根据输入电压的范围选择1~500中适当的放大倍数进行放大,且最大输出电不超过10V。
由测试数据可以看出,该测量放大器的非线性误差<0.5%,经计算和实际测量,通频带0~10Hz、共模抑制比的要求也已达到。
附录:
该实验主要程序
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
chari,j,temp,num,num_1;
longa;
floata_c,b_c;
ucharflag,fuhao;
ucharcodetable[]={
1,2,3,0,
4,5,6,0,
7,8,9,0,
0,0,0,0};
ucharcodetable1[]={
1,2,3,0x41-0x30,
4,5,6,0x42-0x30,
7,8,9,0x43-0x30,
0x60-0x30,0,0x3d-0x30,0x44-0x30};
voiddelay(ucharz)//延迟函数
{
uchary;
for(z;z>0;z--)
for(y=0;y<110;y++);
}
voidinit()//初始化
{
num=-1;
a=0;
P2=0x00;
flag=0;
fuhao=0;
}
voidkeyscan()//键盘扫描程序
{
P3=0xfd;
if(P3!
=0xfd)
{
delay(20);
if(P3!
=0xfd)
{
temp=P3&0xf0;
switch(temp)
{
case0xe0:
num=8;break;
case0xd0:
num=9;break;
case0xb0:
num=10;break;
case0x70:
num=11;break;
}
}
while(P3!
=0xfd);
if(num==8||num==9||num==10)//如果按下0的是'7','8'或'9
{
a=a*10+table[num];
}
else//如果按下的是'/'
{
flag=1;
fuhao=3;
}
}
P3=0xfb;
if(P3!
=0xfb)
{
delay(20);
if(P3!
=0xfb)
{
temp=P3&0xf0;
switch(temp)
{
case0xe0:
num=4;break;
case0xd0:
num=5;break;
case0xb0:
num=6;break;
case0x70:
num=7;break;
}
}
while(P3!
=0xfb);
if(num==4||num==5||num==6)//如果按下的是'4','5'或'6'
{
a=a*10+table[num];
}
else//如果按下的是'/'
{
flag=1;
fuhao=2;
}
}
P3=0xf7;
if(P3!
=0xf7)
{
delay(20);
if(P3!
=0xf7)
{
temp=P3&0xf0;
switch(temp)
{
case0xe0:
num=0;break;
case0xd0:
num=1;break;
case0xb0:
num=2;break;
case0x70:
num=3;break;
}
}
while(P3!
=0xf7);
if(num==0||num==1||num==2)//如果按下的是'1','2'或'3'
{
a=a*10+table[num];
}
else
{
flag=1;
fuhao=1;
}
}
P3=0xfe;
if(P3!
=0xfe)
{
delay(20);
if(P3!
=0xfe)
{
temp=P3&0xf0;
switch(temp)
{
case0xe0:
num=12;break;
case0xd0:
num=13;break;
case0xb0:
num=14;break;
case0x70:
num=15;break;
}
}
while(P3!
=0xfe);
switch(num)
{
case12:
init();break;
case13:
{//按下的是"0"
a=a*10;
}
break;
case14:
{
if(fuhao==1)
{
P2=0xff;
}
elseif(fuhao==2){
switch(a)
{
case2:
P2=0x64;break;
case3:
P2=0x96;break;
case4:
P2=0xc8;break;
case5:
P2=0xff;break;
}
}
elseif(fuhao==3){P2=10*a/2;}
elseif(fuhao==4){P2=a/2;}
a=0;flag=0;fuhao=0;
}
break;
case15:
{flag=1;
fuhao=4;
}
break;
}
}
}
main()
{
init();
while
(1)
{
keyscan();
}
}