低频低噪声高增益放大器.docx
《低频低噪声高增益放大器.docx》由会员分享,可在线阅读,更多相关《低频低噪声高增益放大器.docx(14页珍藏版)》请在冰豆网上搜索。
低频低噪声高增益放大器
低频低噪声高增益放大器
一、基本要求
(1)放大器
a.电压放大倍数200~2000倍,放大倍数可预置步进(间隔不大于200倍),有数字显示额外加分。
b.通频带3kHz~5kHz。
c.放大倍数为2000倍时,测得输出噪声电压峰—峰值等效到输入端小于800nV。
d.最大不失真输出幅度不小于8V。
e.输入电阻不小于1kΩ,输出电阻不大于20Ω。
(2)自制供电电源。
单相交流220伏电压供电,电源波动±10%时可正常工作。
(3)自制适合于本放大器测试用的信号源。
发挥部分
(1)电压放大倍数更高、步长更小
(2)等效输入噪声不大于200nV。
(3)等效输入电阻大于10kΩ。
(4)数字显示精度进一步改善
二、方案设计
2.1方案流程图
2.2信号源制作模块
信号源原理图
信号源效果图
说明:
单片机制作4.5KHZ的信号源,为电路提高信号源。
2.3π网络衰减射随器带通滤波器模块制作
衰减网络
说明:
由于单片机制作的信号源输出幅度很大,4V左右,而题目的要求知,信号源提供的电压幅度在10mV左右,因此通过衰减网络达到目的。
射随器
说明:
射随器提高输入阻抗,以达到题目指定的要求。
带通滤波器
说明:
带通滤波器的范围为3kHz~5kHz,因此可以满足通频带3kHz~5kHz的要求。
2.4DAC0832程控网络
说明:
通过DAC0832实现电压放大倍数200~3000倍的控制,把放大3000倍后的信号作为DAC0832的参考电压,通过数字量实现步进100倍的增益控制。
2.5后级放大
说明:
放大倍数进一步放大,固定放大1000倍。
2.6电源制作模块
电源电路图
说明:
制作电源给电路供电。
三、软件设计
软件设计部分的程序流程框图
程序流程框图
仿真效果图及原理图
说明:
通过键盘控制达到改变增益的目的。
四、系统功能设计与测试
4.1放大倍数测试
测试值
组别
键盘输入放大倍数
实际测试放大倍数
误差(%)
1
200
198
1.00
2
400
404
1.00
3
700
680
2.86
4
1000
1024
2.40
5
1400
1350
3.57
6
1600
1647
2.93
7
1900
1987
4.57
8
2000
2098
4.90
9
2500
2467
1.38
10
3000
3121
4.03
4.2带宽测试
频率(Hz)
振幅(V)
1547
2068
3036
3613
4524
6108
6668
2000
5.6
7.2
9.6
10.0
9.2
7.3
6,8
1000
2,8
3.6
4.8
5.0
4.8
3.6
3.4
500
1.4
1.8
2.4
2.5
2.4
1.8
1.7
4.3基本功能实现部分
1.放大倍数200~2000实现,发挥至3000倍。
2.步进100倍。
3.最大不失真输出幅度不小于15V
4.输入电阻不小于1kΩ,输出电阻不大于20Ω。
5.自制供电电源。
单相交流220伏电压供电,电源波动±10%时可正常工作。
6.自制适合于本放大器测试用的信号源。
附录
1.信号源程序
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitdawr=P3^6;
sbitled=P0^0;
ucharcodetable[]={128,154,180,203,223,238,249,
255,255,249,238,223,203,180,
154,128,101,75,52,32,17,6,
0,0,6,17,32,52,75,101,127};
voidmain()
{
uintval;
dawr=0;
P2=0;
while
(1)
{
for(val=0;val<30;val++)
{
P2=table[val];
}
}
}
2.增益控制程序
#include
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
unsignedchardis_data[4]=0;//数码管显示缓冲区
unsignedled_seg[10]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};//定义数码管字形数据
ucharx=0;
uintcodetable[]={200,300,400,500,600,700,800,900,
1000,1100,1200,1300,1400,1500,
1600,1700,1800,1900,2000,2100,2200,2300,
2400,2500,2600,2700,2800,2900,3000};
uchardac;
voiddelayms(uintx)
{
uintj;
for(x;x>0;x--)
for(j=11;j>0;j--);
}//延时xms
voidtimer(void)interrupt3using3
{
TH1=0xe0;//重置定时器初值
TL1=0;
P2=~(0x00|(1<P0=dis_data[x++];
if(x>3)x=0;
}
voidcalculate(uintdb)
{//定义增益值变量
ucharsw=0,gw=0,sfw=0,bfw=0;//定义数据位变量
P3=(uint)(db*255.0/3000.0);//改DA
sw=(int)db/1000;//计算十位
gw=(int)db/100%10;//计算个位
sfw=(int)db/10%10;//计算十分位
bfw=(int)db%10;//计算百分位
dis_data[3]=led_seg[sw];//刷新显示
if(sw==0)dis_data[3]=0x00;//十位灭零
delayms
(1);
dis_data[2]=led_seg[gw];
delayms
(1);
dis_data[1]=led_seg[sfw];
delayms
(1);
dis_data[0]=led_seg[bfw];
delayms
(1);
}
voidmain(void)
{
ucharkey=0;
bitkeyflag=1;
uintdac=0;//定义DA转换器变量
TMOD=0x10;//初始化定时器
TH1=0xe0;//置定时器初值
TL1=0;
EA=1;
ET1=1;
TR1=1;
P3=0;
dis_data[3]=led_seg[0];
dis_data[2]=led_seg[0];
dis_data[1]=led_seg[0];
dis_data[0]=led_seg[0]|0x20;
while
(1)//键盘扫描程序
{
key=P2&0xf0;
key>>=4;
switch(key)
{
case0x0e:
if(keyflag)
{
dac=0;
calculate(table[dac]);
keyflag=0;
}
break;
case0x0d:
if(keyflag){
dac+=1;
if(0<=dac&&dac<=28)
calculate(table[dac]);
keyflag=0;
}
break;
case0x0b:
if(keyflag)
{
dac-=1;
if(0<=dac&&dac<=28)
calculate(table[dac]);
keyflag=0;
}
break;
case0x07:
if(keyflag)
{
dac=28;
calculate(table[dac]);
keyflag=0;
}
break;
case0x0f:
keyflag=1;
break;
}
}