低频低噪声高增益放大器讲解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
低频低噪声高增益放大器
一、基本要求
(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.4 DAC0832程控网络
说明:通过DAC0832实现电压放大倍数200~3000倍的控制,把放大3000倍后的信号作为DAC0832的参考电压,通过数字量实现步进100倍的增益控制。
2.5 后级放大
说明:放大倍数进一步放大,固定放大1000倍。
2.6 电源制作模块
电源电路图说明:制作电源给电路供电。
三、软件设计
软件设计部分的程序流程框图
程序流程框图
键盘扫描
有键按下keyflag=1
Key=ox0e Key=ox0d Key=ox0b Key=ox0f 置倍数3000 倍减倍加置倍数200
LED显示
仿真效果图及原理图
说明:通过键盘控制达到改变增益的目的。
四、系统功能设计与测试
4.2带宽测试
4.3基本功能实现部分
1.放大倍数200~2000实现,发挥至3000倍。
2.步进100倍。
3.最大不失真输出幅度不小于15V
4.输入电阻不小于1kΩ,输出电阻不大于20Ω。
5. 自制供电电源。单相交流220伏电压供电,电源波动±10%时可正常工作。
6. 自制适合于本放大器测试用的信号源。
附录
1.信号源程序
#include
#define uchar unsigned char
#define uint unsigned int
sbit dawr=P3^6;
sbit led=P0^0;
uchar code table[]={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 };
void main()
{
uint val;
dawr=0;
P2=0;
while(1)
{
for(val=0;val<30;val++)
{
P2=table[val];
}
}
}
2.增益控制程序
#include
#include
#include
#define uint unsigned int
#define uchar unsigned char
unsigned char dis_data[4]=0; //数码管显示缓冲区unsigned led_seg[10]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f}; //定义数码管字形数据uchar x=0;
uint code table[]={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};
uchar dac;
void delayms(uint x)
{
uint j;
for(x;x>0;x--)
for(j=11;j>0;j--);
} //延时xms
void timer(void) interrupt 3 using 3
{
TH1=0xe0; //重置定时器初值
TL1=0;
P2=~(0x00|(1< P0=dis_data[x++]; if(x>3) x=0; } void calculate(uint db) { //定义增益值变量 uchar sw=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); } void main(void) { uchar key=0; bit keyflag=1; uint dac=0; //定义DA转换器变量