宽带直流放大器毕业设计.docx
《宽带直流放大器毕业设计.docx》由会员分享,可在线阅读,更多相关《宽带直流放大器毕业设计.docx(31页珍藏版)》请在冰豆网上搜索。
宽带直流放大器毕业设计
设计题目:
宽带直流放大器
摘要:
本设计基于AT89S52单片机作为主控器,由AD603作为放大器的宽带直流放大器。
本电路由级联两片AD603放大电路、增益控制电路、液晶1602显示电路及4*4矩阵键盘处理电路、测量电路和电源电路等部分组成。
在电路的设计过程中,力求硬件电路简单,充分发挥软件编程方便灵活的特点,并最大限度挖掘单片机的资源,来满足系统设计要求。
本电路具有宽带数字程控功能,运用程序采样测出峰值电压,然后用公式算出有效值并通过液晶显示,并运用电容去耦、屏蔽线作为输入输出信号线和金属体屏蔽高频放大电路等降噪声、抗干扰措施,使电路输出信号波形清晰、稳定。
本电路具有设计简单,功耗低,成本小等特点。
关键字:
宽带直流放大数字程控AD603屏蔽抗干扰
目录
1.设计任务与要求1
1.1设计任务1
1.2要求1
2.方案论证与比较1
2.1总体设计方案1
2.2主控芯片的比较与选择1
2.3显示模块比较与选择2
2.4放大器电路比较与选择2
3.理论分析与计算3
3.1带宽增益积3
3.2通频带内增益起伏控制3
3.3线性相位3
3.4抑制直流零点漂移4
3.5放大器稳定性4
4.电路与程序设计4
4.1系统的硬件设计4
4.2系统软件设计:
5
软件设计框图如下5
5.测试方案与测试结果5
5.1测试仪器5
5.2测试数据6
6.设计总结6
参考文献6
附录6
1.设计任务与要求
1.1设计任务
设计并制作一个宽带直流放大器及所用的直流稳压电源。
1.2要求
1.2.1基本要求
(1)电压增益AV≥40dB,输入电压有效值Vi≤20mV。
AV可在0~40dB范围内手动连续调节。
(2)最大输出电压正弦波有效值Vo≥2V,输出信号波形无明显失真。
(3)3dB通频带0~5MHz;在0~4MHz通频带内增益起伏≤1dB。
(4)放大器的输入电阻≥50,负载电阻(50±2)。
(5)设计并制作满足放大器要求所用的直流稳压电源。
1.2.2发挥部分
(1)最大电压增益AV≥60dB,输入电压有效值Vi≤10mV。
(2)在AV=60dB时,输出端噪声电压的峰-峰值VONPP≤0.3V。
(3)3dB通频带0~10MHz;在0~9MHz通频带内增益起伏≤1dB。
(4)最大输出电压正弦波有效值Vo≥10V,输出信号波形无明显失真。
(5)进一步降低输入电压提高放大器的电压增益。
(6)电压增益AV可预置并显示,预置范围为0~60dB,步距为5dB(也可以连续调节);放大器的带宽可预置并显示(至少5MHz、10MHz两点)。
(7)降低放大器的制作成本,提高电源效率。
(8)其他(例如改善放大器性能的其它措施等)。
2.方案论证与比较
2.1总体设计方案
分析题目要求,我们将本设计分为:
放大电路及输入输出电路、增益控制、键盘显示及处理、测量和稳压电源五大功能模块
2.2主控芯片的比较与选择
方案一:
采用8031作为控制核心,以使用最为普遍的器件ADC0809作模数转换可以实现模数转换,但所需的I/O口较多。
此方案简易可行,器件的价格便宜,但8031内部没有程序存储器,需要扩展,增加了电路的复杂性同时也增加了成本,不能满足高性价比的要求。
方案二:
采用凌阳SPCE061A单片机。
它中断资源丰富,而且内置了在线仿真、编程接口,可方便地实现在线调试。
但其程序编写较难,且性价比不够高。
方案三:
采用AT89S52作为电路的控制核心,使用8位的I2C总线式的模数转换器进行数据转换。
而且AT89S52单片机是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止;可实现液晶显示和键盘设定等多种功能。
此方案电路简单并且可以满足题目的各项要求的精度,所以选择方案三。
2.3显示模块比较与选择
方案一:
采用数码管显示位数太少,布线麻烦,管脚多,则占用相应的I/O口也多;
方案二:
采用液晶显示位数多,使用方便,2行每行16个字符。
自带字符库、带背光,经典的液晶显示器件通过液晶屏显示你想要的信息,比发光二极管、数码管等显示更漂亮,更专业化, 所以选择液晶。
2.4放大器电路比较与选择
方案一:
简单的放大电路可由分立元件搭接完成。
此方案元器件成本低,易于购置。
但是要满足增益60db的要求,需采用多级放大电路实现,这样便大量采用三极管等分立元件,这样电路比较复杂,工作点难于调整,调试难度太大,周期很长,尤其是短时间内手工制作难以保证可靠性及指标,故不采用此方案。
方案二:
为了实现最大电压增益AV≥60dB,输入电压有效值Vi≤10mV的要求,采用可调增益集成运放设计,如运放AD603,它由无源输入衰减器、增益控制界面和固定增益放大器三部分组成(如图
(1)所示)。
图中加在梯型网络输入端(VINP)的信号经衰减后,由固定增益放大器输出,衰减量是由加在增益控制接口的电压决定。
增益的调整与其自身电压值无关,而仅与其差值V有关,由于控制电压GPOS/GNEG端的输入电阻高达50MΩ,因而输入电流很小,致使片内控制电路对提供增益控制电压的外电路影响减小。
以上特点很适合构成程控增益放大器。
此方案优势是电路集成度高,容易实现,控制方便、易于数字化用单片机处理,指标和可靠性容易得到保证,故采用此方案。
3.理论分析与计算
3.1带宽增益积
为实现60dB放大能力,本设计采取两级AD603级联和后级放大电路的增益分配方式。
依据资料,AD603单级采用的是增益为-1dB~42dB、带宽在9MHZ-90MHZ之间的工作方式,其每级增益为:
GAD603(dB)=40×Vg+20(式3.1-1)
式中,Vg为AD603的增益控制电压,是一脚和二脚的压差,范围为-0.50V~0.50V。
故两级级联理论上可以达到84Db,超过要求的60dB
单片机通过D/A的输出电压控制AD603的增益,本设计采用TCL5615的十位分辨率DA芯片,则D/A输入值KDA与AD603控制电压的对应关系为:
第一级AD603控制电压的对应关系为:
Vg=(1/1023*Kda*5)-1(式3.1-3)
式中,KDA为D/A的输入值,5为TLC5615的参考电压,1为AD603二脚的电压
第一级AD603控制电压的对应关系为:
Vg=(1/1023*Kda*5)-2(式3.1-3)
由式2-3及式2-4可知增益G与D/A输入值KDA的对应关系为:
第一级为:
Kda=(G+20)/40*1023/5(式3.1-4)
步进控制AD603增益:
根据发挥部分要求,可以以5dB步进调节增益,根据(式3.1-4),我们可以很容易的编程实现。
3.2通频带内增益起伏控制
由于是小信号放大,频带较宽,所以整个系统比较容易受电磁的干扰,表现为信号波形有飘动起伏,因此必须进行干扰屏蔽。
做法有:
要有稳定、少纹波的电源,PCB板设计要考虑高频,系统屏蔽等措施。
3.3线性相位
由于本系统设计要求是宽带,频率变化很快,从0HZ到几十MHZ,如果电路设计不好容易产生相移,产生相移的原因是电路通道中使用了电容,电感性器件,集成芯片需要相位补偿。
所以在设计电路的时候电路通道中尽量少用电容,并注意芯片正确使用。
3.4抑制直流零点漂移
产生直流零点漂移的原因很多,如电源电压不稳、元器件参数变值、环境温度变化等。
在我们的设计中,为了抑制直流零点漂移,我们精选器件,如:
我们选用精密电阻、电解电容,进行有关参数的精确设置;另外,我们使用双电源对电路进行供电,集成块内使用差分电路,可以有效的抑制直流零点漂移。
3.5放大器稳定性
该放大器由级联两片AD603组成,对于低频信号的输入起到稳定的放大作用,但对于5MHz以上的高频信号,放大波形有微小失真,且幅值有所减小。
但总体上其放大输出波形还是理想的,工作还是稳定的。
4.电路与程序设计
根据选取的总方框图,分别对各个主要电路进行设计和选取,其内容应该包括:
4.1系统的硬件设计
根据题目的要求,结合考虑过的各种方案,我们认真取舍,充分利用模拟和数字系统各自的优点,发挥其优势,采用单片机预置和控制放大器增益的方法大大提高了系统的精度和可控性;后级放大器使用提高了输出电压有效值。
我们使信号都在单片机的数字算法控制下得到最合理的前级放大,使其放大倍数精确。
图
(2)所示即为本系统原理框图:
具体电路见附录
4.2系统软件设计:
软件设计框图如下:
5.测试方案与测试结果
5.1测试仪器
双踪示波器CA9020
信号发生器CA1460-02
数字万用表VC890D
5.2测试数据
测试方案、结果与结果分析
(1)最大增益G=20lg(Vo/Vi),在固定频率下测试得。
数据如表中:
Vip-p(mv)
5
8
10
12
14
16
18
Vop-p(v)
2.00
3.00
3.75
4.40
5.00
5.75
6.55
Gm(dB)
52.4
51.48
51.48
51.28
51.06
51.11
51.22
结果分析,本系统最大增益达到51.43,大于基本要求的40dB,并且输入的信号有效值远小于20mV
(2)输出有效值及幅频特性
第一组:
f(Hz)
50
1K
50K
100K
500K
1M
2M
3M
5M
8M
10M
12M
Vip-p(mV)
18
18
18
18
18
18
18
18
18
18
18
18
Vop-p(V)
6.45
6.45
6.50
6.50
6.20
6.00
5.58
5.58
5.56
5.45
5.04
5.00
Vo
2.28
2.28
2.28
2.28
2.19
2.12
1.97
1.97
1.95
1.9
1.76
1.70
G(dB)
51.08
51.08
51.15
51.15
50.74
50.46
49.83
49.83
49.80
49.62
48.94
48.87
上面的那个表格是我们在最大AD603最大增益波形无明显失真的情况下测量出来的数据,可以得出最大输出正弦波有效值Vo=2.30V,大于基本要求的大于2V..。
幅频特性从0Hz到12M,都是比较平稳的,但是从8MHz开始出现失真,并且增益明显下降。
该系统有大于12Mhz的带宽,满足题目要求。
(3)放大器输入电阻、负载电阻测量
测量方法:
使用万用表直接测量
得出结果是输入电阻为100Ω,负载电阻为50Ω,满足放大器的输入电阻≥50,负载电阻(50±2)的要求。
(4)增益步进测试
测试电路如下图所示:
G设(dB)
0
5
10
15
20
25
30
35
40
Vi(mV)
18
18
18
18
18
18
18
18
18
V0(V)
0.016
0.034
0.06
0.10
0.19
0.315
0.59
1.40
2.20
G测
-1.02
5.24
10.46
14.89
20.47
24.86
30
35.23
41.74
|G测--G设|
1.02
0.24
0.46
0.11
0.47
0.14
0
0.23
0.74
从表中的数据得出:
手动步进增益与实际的增益是有一些误差的,总的误差为0.38Db,不是很大.出现误差的原因有DA输出来的电压有一些误差,另外AD603的一二脚的压差也有一点误差。
总得来说步进增益还是不错的。
6.设计总结
经过四天三夜的奋斗,我们设计的电路基本实现了题目基本部分的要求,并完成了部分发挥部分要求。
在某些方面电路性能还超过了题目的要求。
但由于时间紧,工作量大,设计电路还存在许多可以改进的地方,比如电路布局、和抗干扰方面还有很大的提升空间,经过改进,相信性能还会有进一步的提升。
本次竞赛极大的锻炼了我们各方面的能力,虽然我们遇到了很多困难和障碍,但在我们组员间团结协作,相互理解和支持,一一解决了很多难道。
我们将继续努力争取更大的进步。
参考文献
(1)陈桂友.单片机原理及应用.机械工业出版社出版2007.08.
(2)陈大钦.电子技术基础实验.高等教育出版社出版2007.05.
(3)戴仙金.51单片机及其C语言程序开发实例.清华大学出版社2008.02.
(4)刘春生,李小波.AD603在信号采集系统中的应用.国外电子元器件.2000.11
附录
附录1总电原理图包括以下各部分:
1.电源电路设计:
2放大电路设计:
3.控制电路部分:
附录2印制电路板图
1.控制电路部分PCB
2.放大电路设计PCB
3.电源电路PCB:
图
(1)
附录3程序清单
#include
#defineucharunsignedchar
#defineuintunsignedint
#include
ucharflag;
externuchargain;
externvoiddisplay_gain();
externvoidad603_controll(void);
externvoidDA_Conver(intDAValue);
externvoidread_v();
voidmain()
{
inti;
lcd_init();
DA_Conver(0);
gain=0;
display_gain();
while
(1)
{
ad603_controll();
//DA_Conver(360);
}
}
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
/****TLC549管脚定义****/
/****TLC549管脚定义****/
sbitCLK=P3^0;//定义时钟信号IO口
sbitDO=P3^1;//定义片选信号IO口
sbitCS=P3^2;
ucharaddata=0;//存放采集到的数据
uintvoltagenum[4];//转换成显示的值
uintvoltage=0;//存放电压扩大100的值
ucharcodedigital[]={"0123456789"};
/****************************/
uintmax1;
uintdate[25];//存放电压采用值
externvoidlcd_write(ucharstart,ucharin_data);
//ucharaddata=0;//存放采集到的数据
//uintvoltagenum[3];//转换成显示的值
//uintvoltage=0;//存放电压扩大100的值
/*ucharcodedigital3[]=//LCD1602的数字显示码表
{//0-9,:
;<=>?
0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,
0x3d,0x3e,0x3f
};*/
/********************************************************************************
**函数名称:
ad_delay
**功能描述:
ad转换延时函数
**输入:
k
**输出:
无
**全局变量:
无
**调用模块:
无
*******************************************************************************/
voidad_delay(uchark)
{
uchari,j;
for(j=0;j{
for(i=0;i<125;i++);
}
}
//实现AD转换
/*******************************************************************************
**函数名称:
ad_change
**功能描述:
电压计算程序
**输入:
无
**输出:
无
**全局变量:
addata
**调用模块:
_nop_
*******************************************************************************/
voidad_change()
{
uchari;
CS=1;//芯片复位
CS=0;
CS=1;
CLK=0;
_nop_();
_nop_();
_nop_();
_nop_();
CS=0;//芯片起始
_nop_();
_nop_();
_nop_();
_nop_();//等待延时
for(i=0;i<8;i++)
{//输入采样转换时钟
CLK=1;
CLK=0;
}
CS=1;//开始转换
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();//等待转换结束
CS=0;//读取转换结果
_nop_();
_nop_();
_nop_();
_nop_();
for(i=0;i<8;i++)
{
CLK=1;
addata<<=1;
if(DO)
{
addata|=0x01;
//addata=addata+1;
}
/*else
addata|=0x00;*/
CLK=0;
}
CS=1;
//returnaddata;
}
/*******************************************************************************
**函数名称:
get_voltage
**功能描述:
电压计算程序
**全局变量:
voltage,addata
*******************************************************************************/
voidget_voltage()
{
voltage=addata*(250.0/255);//计算电压并扩大100倍,500.0是参考电压2.5扩大100倍得到的,参考电压由调节R4得到
//voltage=voltage*3.06453;//根据实际情况调整电压,现在还有一点误差
voltagenum[0]=voltage/1000;
voltagenum[1]=voltage%1000/100;
voltagenum[2]=voltage%100/10;
voltagenum[3]=voltage%10;
//ge=(voltagenum[2]+4)%10;//调精度个位
//shi=(voltagenum[1]+(voltagenum[2]+4)/10)%10;//十位
//bai=(voltagenum[0]+(voltagenum[1]+(voltagenum[2]+4)/10))%10;
//while
(1);
}
/***************************************************
读电压峰峰值函数,各位数值存放在voltage[4]
*****************************************************/
voidread_AD()
{
ad_change();//AD转换
ad_delay(200);
get_voltage();
}
voiddisplay()
{
lcd_write(0,0x80+11);//设置显示位置
//lcd_write(1,'V');
lcd_write(1,digital[voltagenum[0]]);
lcd_write(1,digital[voltagenum[1]]);
lcd_write(1,'.');
lcd_write(1,digital[voltagenum[2]]);
lcd_write(1,digital[voltagenum[3]]);
lcd_write(1,'V');
}
voidread_v()
{
ucharn;
ad_change();//先进行第一次AD转换,以下是用查询比较法来测量波峰值的
ad_delay(200);
get_voltage();
date[0]=voltage;
max1=date[0];
for(n=1;n<25;n++)//为取峰值电压做准备
{
ad_change();//AD转换
ad_delay(200);
get_voltage();
date[n]=voltage;
if(date[n]>max1)
max1=date[n];
}
max1=max1*0.707;
voltagenum[0]=max1/100;
//voltagenum[0]=(uchar)voltagenum[0];//最大值放在max1中
voltagenum[1]=max1%100/10;
//voltagenum[1]=(uchar)voltagenum[1];
voltagenum[2]=max1%10;
//voltagenum[3]=(uchar)voltagenum[3];
lcd_write(0,0x80+11);//显示电压峰值
lcd_write(1,digital[voltagenum[0]]);
lcd_write(1,0x2E);
lc