可控放大器综合设计报告.docx
《可控放大器综合设计报告.docx》由会员分享,可在线阅读,更多相关《可控放大器综合设计报告.docx(20页珍藏版)》请在冰豆网上搜索。
可控放大器综合设计报告
课程设计报告书
可控放大器
目录
一、任务及要求2
1.1任务2
1.2要求2
1.3说明2
二、题目分析3
2.1放大部分方案论证3
2.2滤波部分方案论证3
三、系统设计4
四、硬件设计4
4.1MCU模块4
4.2程控放大模块5
4.2.1第一级放大6
4.2.2第二级放大7
4.2.3第三级放大10
4.2.4继电器控制10
4.2.5DAC控制10
4.3滤波模块11
五、调试数据12
六、总结13
七、程序附件13
一、任务及要求
1.1任务
设计并制作一个可控放大器,其组成框图如图所示。
放大器的增益可设置;低通滤波器(或高通滤波器)的截止频率可设置。
1.2要求
(1)放大器电压增益为60dB,输入正弦信号电压振幅为10mV,增益10dB步进可调,通频带为100Hz~100kHz,电压增益误差不大于5%。
(40分)
(2)滤波器为低通滤波器(或高通滤波器),其-3dB截止频率fc在1kHz~21kHz范围内可调,调节的频率步进为10kHz,2fc处(或高通0.5fc处)放大器与滤波器的总电压增益不大于30dB,RL=1kW。
截止频率的误差不大于5%。
(20分)
(3)有设置参数显示功能和良好的人机界面。
(20分)
(4)调节的频率步进调整为1kHz。
(20分)
1.3说明
(1)正弦输入信号由信号源提供,放大器输出端应留测试端子。
(2)设计报告正文应包括系统总体框图、核心电路原理图和主要的测试结果。
完整的电路原理图、重要的源程序和完整的测试结果可用附件给出。
二、题目分析
2.1放大部分方案论证:
方案一:
采用宽带放大器级联的方式,通过模拟开关控制反馈电阻从而实现放大程控。
但由于温度、电源灯漂移将引起分压比变化,因此采用这种方案难以实现系统增益的精确控制和稳定性。
方案二:
采用可编程放大器的思想,将交流输入信号作为高速D/A转换器的基准电压,该D/A转换器可视为一个程控衰减器。
理论上讲,只要D/A转换器的速度够快、精度够高就可以实现宽范围的精密增益调节。
但控制的数字量和最后的增益不是线性关系而是指数关系,导致增益调节不均匀,精度降低。
方案三:
采用控制电压与增益成线性关系的可编程增益放大FGA实现增益控制,电压控制增益便于单片机控制,同时可减少噪声和干扰。
采用可变增益放大器AD603作为增益控制,AD是一款低噪声,精密控制的可变增益放大器,温度稳定性高,其增益与控制成线性关系,因此便于使用D/A转换器输出电压控制放大器增益。
综上所述,系统的放大部分采用方案三。
2.2滤波部分方案论证
方案一:
采用传统的分立元件组成无源滤波器,但存在诸如带内不平坦,频带范围窄,阶数少,结构复杂等缺点。
方案二:
采用运算放大器构成有源滤波器。
这种滤波器设计过程比较简单,但存在截止频率调节范围的局限性,难以实现高精度截止频率调节。
方案三:
采用可编程的4阶开关电容滤波器MAX264。
该器件集成滤波器所需的电阻电容,无需外接器件,其中心频率、Q值及工作模式都可通过引脚编程设置进行控制,但其控制较复杂,切需要多个I/O口进行设置。
方案四:
采用八阶低通椭圆型、开关电容滤波器MAX297,它是采用输入时钟频率控制输出转角频率的方式来实现对模拟信号和数字信号的滤波,比值为50:
1。
外围电路简单,滤波阶数高,价钱相比于MAX262更便宜。
综上所述,综合各方面因素,方案一、二、三都有其固有的局限性,因此滤波部分采用方案四。
三、系统设计
系统的放大部分电路由三级运放组成,单片机通过DAC控制放大部分的放大倍数,以实现对输入电压的程控放大,放大后的信号再输入滤波部分电路,滤波过后进行输出,滤波部分的通频带也是由单片机控制,放大部分的增益及滤波部分允许通过的频率通过1602液晶进行显示。
系统的结构框图如下:
输入
滤波输出
放大部分输出
图1可控放大器方框图
四、硬件设计
本系统硬分由MCU模块(STC12C5A60S2)、程控放大模块(OP27+AD603)、
滤波模块(MAX297)三个模块组成。
4.1MCU模块
本系统MCU采用STC12C5A40S2,是宏晶科技的单时钟/机器周期(1t)的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。
内部集成max810专用复位电路,2路pwm,8路高速10位a/d转换(250k/s),针对电机控制,强干扰场合。
引脚图如下:
图2STC12C5A40S2引脚图
本系统中,通过单片机按键控制DAC电压输出,以改变AD603的放大倍数,另外,MCU的晶振采用24M晶振,通过单片按键控制P3.4引脚的方波输出的频率,从而实现对滤波部分的通频带的控制。
4.2程控放大模块
根据题目要求,我们设计三级放大,其中第一级和第三级为固定的正向放大,增益为一固定值20DB,用两片OP27实现,中间一级的放大用AD603完成。
因为AD603在5、7脚相连的情况下增益范围是-10DB至30DB,与前后级组合可以达到题目10DB-60DB的要求。
当需要10DB-50DB时,通过继电器控制第二级的AD603的输出为放大输出,当需要60DB时,控制第三级的输出为最终输出,其中继电器通过单片机给高低电平来控制。
放大部分的电路图如下:
图3放大部分电路
4.2.1第一级放大
第一级别放大芯片采用OP27,OP27是一款低噪声、精密运算放大器,
OP27精密运算放大器兼有OP07的低失调电压和漂移特性与高速、低噪声特性。
失调电压低至25µV,最大漂移为0.6µV/°C,因而该器件是精密仪器仪表应用的理想之选。
OP27引脚图如下:
图4OP27引脚图
本设计中,第一级放大的反馈电阻选用了滑动变阻器,这样通过调节电阻来控制第一级的放大增益为20DB。
电路图如下:
图5第一级放大电路
4.2.2第二级放大
第二级放大采用AD603,AD是美国AD公司继AD600后推出的宽频带
低噪声、低畸变、高增益精度的压控VGA芯片。
可用于RF/IF系统中的AGC电路、视频增益控制、A/D范围扩展和信号测量等系统中。
(1) AD603的引脚排列
图6OP27引脚图
(2)AD603内部结构及原理
AD603内部结构图如图2所示。
AD603由一个可通过外部反馈电路设置固定增益GF(31.07~51.07)的放大器、0~-42.14dB的宽带压控精密无源衰减器和40dB/V的线性增益控制电路构成。
图7AD603内部结构图
图8AD603内部结构简化图
(3)AD603的增益,可设置位三种形式。
模式一:
将VOUT与FDBK短路,即为宽频带模式(90MHz宽频带),AD603的增益设置为-11.07dB~+31.07dB.
模式二:
VOUT与FDBK之间外接一个电阻REXT,FDBK与COMN端之间接一个5.6uF的电容频率补偿。
根据放大器的增益关系式,选取合适的REXT,可获得所需要的模式一与模式三之间的增益值。
当REXT=2.15千欧时,增益范围为-1~+41dB。
模式三:
VOUT与FDBK之间开路,FDBK对COMN连接一个18uF的电容用于扩展频率响应,该模式为高增益模式,其增益范围为+8.92~+51.07dB,带宽为9MHz.
本次设计中AD603采用模式一,增益计算公式如下:
G(DB)=40V+10
因此我们设计了如下部分,其中V为差分输入电压(即控制端1脚及2脚的电压差)。
其中控制端2脚通过LM317提供稳压电平约1.5V左右,通过DA芯片给另一控制端1脚不同的电压,从而来达到控制AD603增益的目的。
第二级放大电路图如下所示:
图9第二级放大电路
4.2.3第三级放大
第三级放大和第一类似。
4.2.4继电器控制
这里通过控制继电器来控制是从第二级还是第三级放大输出放大信号。
图10继电器控制电路
4.2.5DAC控制
由于我的单片机开发板上的8位DAC不能满足本次设计的要求,所以
外用了10位DACTLC5615,这部分电路设计在放大部分,相应的引脚通过杜邦线与单片机IO口相连。
图11DAC控制电路
4.3滤波模块
滤波模块的芯片选用MAX297,MAX297是8阶开关电容式低通椭圆滤波器,其滚降速度快,从通频带到阻带的过渡带很窄。
这种开关电容滤波器是由带有求和和换算功能的开关电容积分器对一梯形无源滤波器网络进行模拟构成的。
该器件时钟频率与通带之比为50:
1,改变其时钟频率,其通频带可从0.1Hz变化到50kHz,完全满足题目的设计要求。
使用MAX297时,当信号频率和采样频率同频,且相位合适时,开关电容组在电容上各次采到相同的幅度为信号幅值的信号,相当于输入信号为直流的情况。
因此在采样电容上产生一个直流信号,使滤波器输出一个直流电平。
同理,当信号频率为采样频率的整数倍时,也会出现相同的现象。
要去除这种现象,须限制输入信号的范围,使之小于开关电容滤波器的采样频率(时钟频率)。
所以在使用MAX297时,在其前面,要增加模拟低通滤波器,把采样频率及其以上的高频信号有效地排除。
在其后面,也要增加低通滤波器,滤去信号的高频分量,使波形更加平滑。
图12MAX297引脚图
图13滤波部分电路
五、调试数据
(1)程控放大部分
增益
理论值(mV)
实测值(mV)
误差(*100%)
10DB
31.6
31.5
0.32
20DB
100
100.3
0.30
30DB
316
315
0.33
40DB
1000
998
0.20
50DB
3160
3155
0.16
60DB
10000
9982
0.18
(2)通频带
下截止频率理论值(Hz)
实测值(Hz)
误差(*100%)
<100
45
上截止频率理论值(KHz)
实测值(KHz)
误差(*100%)
>100
86
14
(3)程控滤波部分
截止频率理论值(KHz)
实测值(KHz)
误差(*100%)
10
10
0
20
20.3
1.5
六、总结
在这次课程设计,自己花了不少的时间的精力,从开始的查阅资料,到方案比较,到画图,再到后面对的软件调试、硬件调试,每一步都遇到一些意想不到的问题,同时暴露出自身专业知识的不足,而在一个个解决这些问题的过程中能够学到一些课本上没有或是理论课上没有掌握好的知识。
整个过程下来,自己在电路设计、硬件的调试、软件调试方面的能力都得到了很大的锻炼,总的来说,这次课程设计让自己获益匪浅。
七、程序附件
/**************************************************
DAC输出可控制电压
其中按P1.3为电压加0.0031V
按P1.2为电压减0.003V
***************************************************/
/*头文件*/
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
#defineNop()_nop_()
#define_Nop()_nop_()
sbitTL5615_DAT=P0^0;
sbitTL5615_CLK=P0^1;/*定义DAC控制端口*/
sbitTL5615_CS=P0^2;
sbitctrl=P0^4;
//---------------------------------------------
sbitlcd_rs_port=P2^4;/*定义LCD控制端口*/
sbitlcd_rw_port=P2^3;
sbitlcd_en_port=P2^2;
#definelcd_data_portP1
//---------------------------------------------
sbitVol_upkey=P3^2;
sbitVol_downkey=P3^3;
sbitFreq_upkey=P3^0;
sbitFreq_downkey=P3^1;
//sbitled_en_port=P2^5;
//sbitsled_en_port=P3^6;
//sbitDS1302_en_port=P2^2;
//---------------------------------------------
sbitP20=P2^0;//定义锁存使能端口段锁存
sbitP21=P2^1;//位锁存
sbitP35=P3^5;//这是为了关闭开发板上的点阵实际应用去掉
sfrAUXR=0x8e;//Auxiliaryregister
sfrWAKE_CLKO=0x8f;//wakeupandclockoutputcontrolregister
sbitT0CLKO=P3^4;//timer0clockoutputpin
///////////////////////////////////////////////////////
/*1MS为单位的延时程序*/
voiddelay_1ms(unsignedcharx)
{
unsignedchara,b;
while(x--)
{for(b=133;b>0;b--)
for(a=6;a>0;a--);
}
}
voidlcd_busy_wait()/*LCD1602忙等待*/
{
lcd_rs_port=0;
lcd_rw_port=1;
lcd_en_port=1;
lcd_data_port=0xff;
_Nop();
_Nop();
while(lcd_data_port&0x80);
lcd_en_port=0;
}
voidlcd_command_write(ucharcommand)/*LCD1602命令字写入*/
{
lcd_busy_wait();
lcd_rs_port=0;
lcd_rw_port=0;
lcd_en_port=0;
lcd_data_port=command;
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
lcd_en_port=1;
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
lcd_en_port=0;
}
voidlcd_system_reset()/*LCD1602初始化*/
{
delay_1ms(20);
lcd_command_write(0x38);
delay_1ms(100);
lcd_command_write(0x38);
delay_1ms(50);
lcd_command_write(0x38);
delay_1ms(10);
lcd_command_write(0x08);
lcd_command_write(0x01);
lcd_command_write(0x06);
lcd_command_write(0x0c);
}
voidlcd_char_write(ucharx_pos,y_pos,lcd_dat)/*LCD1602字符写入*/
{
x_pos&=0x0f;/*X位置范围0~15*/
y_pos&=0x01;/*Y位置范围0~1*/
if(y_pos==1)x_pos+=0x40;
x_pos+=0x80;
lcd_command_write(x_pos);
lcd_busy_wait();
lcd_rs_port=1;
lcd_rw_port=0;
lcd_en_port=0;
lcd_data_port=lcd_dat;
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
lcd_en_port=1;
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
lcd_en_port=0;
}
voidTLC5615_SEND(unsignedintda)
{
unsignedchari;
TL5615_CLK=0;
TL5615_CS=0;
for(i=0;i<12;i++){
if((da&0x200)!
=0)TL5615_DAT=1;
elseTL5615_DAT=0;
Nop();
TL5615_CLK=1;
Nop();
Nop();
TL5615_CLK=0;
da=(da<<1);/*左移一位*/
}
TL5615_CS=1;
}
unsignedintVolage_to_TL5615da(unsignedintVolage)
{
/*将电压转换为TL5615的输出数据*/
/*da输入格式:
比如要输入3.742V,则输入值为3742,最高值不超过5000*/
/*转换公式da=V/(2*Vref)*1024备注:
Vref为2.5V,则da=V/5*1024*/
unsignedintda;
floattt;
tt=Volage*0.001/5*1024;
da=tt+0.5;/*对结果进行4舍5入*/
returnda;
}
ucharmun_to_char[]={"0123456789"};
voidmain()
{
uintaa[]={10,20,30,40,50,60};
uintbb[]={1260,1520,1757,2000,1757,2000};
uintxx[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21};
uchari;
uintm=0;
uintq=0;
intFreq_init;
ucharvolage_table[]={"Gain:
DB"};
ucharfreq_table[]={"Freq:
kHz"};
lcd_system_reset();
P1=0x00;//这是为了关闭开发板上的数码管实际应用去掉
P20=0;//这是为了关闭开发板上的数码管实际应用去掉
P21=0;//这是为了关闭开发板上的数码管实际应用去掉
P35=0;//这是为了关闭开发板上的点阵实际应用去掉
//P1=0xFF;//P1口置1
lcd_data_port=0xff;/*释放数据控制端口*/
//led_en_port=0;/*关闭发光二极管显示*/
//sled_en_port=0;/*关闭数码管显示*/
//DS1302_en_port=0;/*关闭时钟选片脚,防止干扰DAC通讯*/
AUXR=0x80;//timer0workin1Tmode
TMOD=0x02;//settimer0asmode2(8-bitauto-reload)
Freq_init=(int)256-24000000/2/50000;
TL0=Freq_init;//initialtimer0
TH0=Freq_init;//initialtimer0
for(i=0;i<13;i++)lcd_char_write(i,0,volage_table[i]);/*输出上行字符到LCD屏上,显示电压标题*/
for(i=0;i<14;i++)lcd_char_write(i,1,freq_table[i]);
lcd_char_write(8,1,mun_to_char[0]);
lcd_char_write(9,1,mun_to_char[1]);
while
(1){
TR0=1;
WAKE_CLKO=0x01;//enabletimer0clockoutput
if(Vol_upkey==0){
delay_1ms(500);/*延时去抖动*/
if((Vol_upkey==0)&&(m<5))m++;/*按键按下并且电压小于5V电压才加1MV*/
}
if(Vol_downkey==0){
delay_1ms(500);/*延时去抖动*/
if((Vol_downkey==0)&&(m>0))/*按键按下并且电压大于0V电压才减1MV*/
m--;
}
if(m==4||m==5)ctrl=1;
elsectrl=0;
if(Freq_upkey==0){
delay_1ms(500);/*延时去抖动*/
if((Freq_upkey==0)&&(q<20))/*按键按下并且电压小于5V电压才加1MV*/
q++;
//TR0=1;//timer0stoprunning
}
if(Freq_downkey==0){
delay_1ms(500);/*延时去抖动*/
if((Freq_downkey==0)&&(q>0))/*按键按下并且电压大于0V电压才减1MV*/
q--;
//TR0=1;//timer0stoprunning
}
TLC5615_SEND(Volage_to_TL5615da(bb[m]));/*输出电压*/
lcd_char_write(8,0,mun_to_char[aa[m]/10]);
lcd_char_write(9,0,mun_to_char[aa[m]%10]);
lcd_char_write(8,1,mun_to_char[xx[q]/10]);
lcd_char_write(9,1,mun_to_char[xx[q]%10]);
//if(TR0=0)
Freq_init=(int)256-24000000/2/((q+1)*50000);
TL0=Freq_init;