
一.课题名称·································································2
二.设计内容及要求························································2
三.电路设计
1.方案论证与比较·····················································2
2.电路设计的整体框图·················································4
3.各单元电路的原理图、参数计算和元器件选择说明·······················5
四.完整电路及工作原理····················································11
五.组装调试。
(1)使用的主要仪器和仪表;··········································12
(2)调试电路的方法和技巧;··········································13
(3)测试的数据和波形并与设计结果比较分析;··························13
(4)调试中出现的故障、原因及排除方法。······························13
六.实验结论······························································13
七.参考文献······························································14
附录:·····································································14
a)元器件清单························································14
b)参考程序··························································15
一. 课题名称:
可变增益放大器
二.设计内容及要求
(一)、任务
设计制作一个增益可变的交流放大器。
(二)、要求
1.基本部分
(1)放大器增益可在0.5倍、1倍、2倍、3倍四档间巡回切换,切换频率为1Hz;
(2)可以随机对当前增益进行保持,保持时间为5s,保持完后继续巡回状态;
(3)对指定的任意一种增益进行选择和保持(保持时间为5s),保持完后返回巡回状态;
(4)通过数码管显示当前放大电路的放大倍数,用0、1、2、3分别表示0.5、1、2、3倍;
2.发挥部分
(1)对于不同的输入信号自动变换增益:
a.输入信号峰值为0—1V,增益为3;
b.输入信号峰值为1—2V,增益为2;
c.输入信号峰值为2—3V,增益为1;
d.输入信号峰值为3V以上,增益为0.5;
(2)通过数码管显示当前放大电路的放大倍数,用0、1、2、3分别表示0.5、1、2、3倍。
三.电路设计
1. 方案论证、比较与设计
分析题目内容及要求可知,电路基本构成如下图1所示:
图1
(1).电路可采用同向比例放大器实现对输入信号进行放大。控制同项比例放大电路的反馈电阻实现放大器增益的变换。
(2).想实现反馈电阻的自动变换,需要使用模拟开关进行控制。而要想实现电路的自动切换,有两种方法:
1.使用多弦震荡器输出脉冲进行控制。
2.使用单片机进行控制。
(3).为了对一种增益进行选择和保持,可以
1.单稳态触发器来实现电路这一功能。
2.用单片机编程实现。
(4).控制模拟开关。
1.通过计数器计数来。
2.单片机编程实现。
(5).实现显示这一功能,
1.需的加一个全加器和译码器驱动数码管,实现增益档位的显示。
2.单片机编程控制数码管显示。
由以上分析可得两种设计方案:
方案一:完全由基本的组合电路构成。通过各种集成器件按照要求可以构成交流放大器,这种方案成本低,通过各个模块连接组成,不需要复杂的编程,较易实现。但需要大量的器件,不易更改,移植性差。
方案二: 由单片机和一些外围器件构成。这种方案选用的器件比较少,便于移植.更改和升级。更具智能性。但需要考虑编程。
综合比较方案一和方案二,考虑到创新性和发展性,以及性能的实现和优劣,还有实际操作需要用面包板连接,为减少失误应尽量选用较少的器件等各种因素,应选用方案二。
2.整体框图如下图2、3所示:
基本部分
图2
发挥部分
图3
3.各单元电路的原理图、参数计算和元器件选择说明。
(一)基本部分
输入部分:
输入信号接反向电压跟随器,输出接电压增益部分。一方面使增益输出与输入同向,另一方面隔离输入信号防止干扰。本电路中放大器均选用LM324,因为LM324比较通用,且本实验中使用较多的运放,LM324是4运放放大器,可以减少器件。如下图4:
图4
双4选1模拟开关电路:
这个电路由CD4052实现,CD4052是一个双4选1的模拟开关集成芯片。通过控制模拟开关选择不同的输出口。此部分电路图如下图5所示:
图5
放大器及反馈电阻网络:
负反馈放大电路的放大倍数Av=-Rf/R.本电路通过控制模拟开关CD4052选择端A﹑B,选择不同的反馈电阻,使输入的信号经选择后输出到反馈网络进行各增益放大,输出相应的信号,则有:
根据要求放大器增益可在0.5倍、1倍、2倍、3倍四档间巡回切换,
因此:
若输入端接10K电阻
当控制端A和B为不同数值时,电路的几种工作状态:
1.当A=0,B=0时,即Y与Y0接通,即此时的增益为0.5倍。因此接5K的反馈电阻。
2.当A=1,B=0时,即Y与Y1接通,即此时的增益为1倍。因此接10K的反馈电阻。
3.当A=0,B=1时,即Y与Y2接通,即此时的增益为2倍。因此接20K的反馈电阻。
4.当A=1,B=1时,即Y与Y3接通,即此时的增益为3倍。因此接30K的反馈电阻。
电路如下图6所示:
图6
主控制部分:
为了了完成题目要求
(2)可以随机对当前增益进行保持,保持时间为5s,保持完后继续巡回状态;
(3)对指定的任意一种增益进行选择和保持(保持时间为5s),保持完后返回巡回状态;
(4)通过数码管显示当前放大电路的放大倍数,用0、1、2、3分别表示0.5、1、2、3倍;
选用单片机作为主控制单元,通过软件编程实现以上各功能。
对于(2)和(3),利用不同的按键,中断循环显示,通过接收中断和不同的按键实现随即和任意一种增益的5s保持,通过IO口控制数码管显示。电路如下图7所示:
图7
(二)发挥部分
峰值检测电路:
发挥部分要求(1)对于不同的输入信号自动变换增益:
a.输入信号峰值为0—1V,增益为3;
b.输入信号峰值为1—2V,增益为2;
c.输入信号峰值为2—3V,增益为1;
d.输入信号峰值为3V以上,增益为0.5;
因此,必须知道输入信号的峰值,以便选择不同的增益,因此需要设计峰值检测电路。通过运算放大器、二极管和电阻、电容设计了如图8所示的峰值检测电路。
图8
经过仿真可得输入波形与输出峰值如下图9所示:
图9
可见,本电路完全实现了峰值检测功能。
比较电压实现部分:
为了比较输入信号的峰值范围0—1V、1—2V、2—3V及3V以上,需要有参考电压和峰值进行比较,通过电压比较器LM324获得峰值电压的范围。因此选用电阻对5V电压进行分压,以获得1V、2V、3V的电压。因此分压电阻应为2:1:1:1。可以选用20K、10K、10K、10K的电阻。具体电路如图10所示:
图10
主控制部分:
选用单片机作为主控部分,通过IO口P0.0、P0.1、P0.2获知电压的范围,然后A、B控制CD4052选择增益倍数。通过控制数码管显示。电路如下图11所示:
图11
四. 完整电路及工作原理
基本部分
图12
工作原理:
输入信号先经反向器,产生与输入反向的信号,然后连接反向比例放大器。在没有进行按键操作时,单片机控制CD4052的选择控制端口A、B,以1s的时间间隔选择不同的反馈电阻,从而使放大器增益可在0.5倍、1倍、2倍、3倍四档间巡回切换,同时使数码管显示当前的放大倍数。当有按键按下时,单片机根据不同的按键通过控制A、B端口随机对当前增益进行保持和对指定的任意一种增益进行选择和保持(时间间隔5s)。并同时通过数码管显示。从而实现基本部分的要求。
发挥部分
图13
工作原理:
输入信号一方面经反相器、同向比例放大器到达输出端。另一方面经峰值检测电路,得到信号的峰值,然后经电压比较器获取峰值电压的范围。单片机获取比较后的结果判断增益倍数经P3.0、P3.1控制CD4052选择相应的反馈电阻。同时通过数码管显示。
五.组装调试
(1)使用的主要仪器和仪表
计算机:1台; 面包板:1块; 双路直流稳压电源:1台;
示波器:1台; 数字万用表:1台; 51单片机实验箱。
(2)调试电路的方法和技巧
使用面包板连接电路,拿到面包板后首先将电源、地在面包板上连通。然后根据电路图在心中确立整体结构和布局。然后依次先将主要集成芯片插入,连接好电源和地。然后再连接外围器件。特别要注意要分模块连接,一个模块一个模块的连接。连接完一个模块后用万用表、示波器等测试其功能,看是否正确。如果不正确,仔细检查,同时用万用表进行测试,直到调整好这一步分为止。各模块都完好以后,连好电路,进行整体测试,如果有错误,再进行调整,直到成功为止。
(3)测试的数据和波形并与设计结果比较分析
在连接电路的过程中和完成后都需要不断测试数据和波形并与理论结果进行比较。如:
观察输入信号和经反相器的信号进行比较。
手动选择CD4052的A、B端,观察输入波形和放大后的波形是否满足增益要求。
比较电压实现部分,用万用表检测是否得到3V、2V、1V的电压以及比较后的结果。
峰值检测部分,用示波器观察输入信号和检测到的峰值,看是否正确。
(4)调试中出现的故障、原因及排除方法
由于使用面包板在调试中出现了许多的故障。
输入信号经反相器后,波形失真。经过仔细检查发现是连接过程中将放大器的正向、反向及输出口弄混了。经调整连接,发现还是失真。
仔细观察电路图和连接的面包板发现LM324的负向端接了地,试着接到-5V,发现波形恢复正常了。
连好放大器及反馈电阻网络后,发现放大后的波形与输入的波形增益倍数误差较大。调整反馈电阻,不断观察波形。直到波形达到要求。
下载完程序后,用单片机的IO口连接电路的各部分,发现按键不起作用,仔细检查发现将P3口的三根引线弄混了。调整后仍不行。
经过进一步的分析观察,发现P1.6的引线没有连接。
还有引线插错、插空和连接不好等故障,经不断修正最后得到理想的结果。
六.实验结论
通过本次实验,很好的实现了可变增益放大器设计。实验结果良好,各项指标均达到要求。利用单片机实现控制功能,简便、快捷,能很好的完成各项功能。
七.参考文献
逻辑与数字系统设计
数字电子技术基础 阎石主编
模拟电子技术基础 童诗白主编
MCS-51单片机原理、系统设计与应用 万福君主编
单片机C语言程序设计实训100例 彭伟 编著
Internet等
附录:
a).元器件清单
电阻:1K 3
5k 4
10k 10
20k 3
30k 2
1M 1
LM324 4
4052 1
4007 2
51单片机最小系统
b). 参考程序
基本部分
/*******************************************************/
/*基本部分电路
/*晶振:12MHZ
/*
/*******************************************************/
#include #define HI ((65536 - 50000) / 256) #define LO ((65536 - 50000) % 256) #define M 20 #define uchar unsigned char #define uint unsigned int void timeinit(); void exinit(); void display(); void getkey(); uchar table[]={0x3f,0x06,0x5b,0x4f}; //共阴0-3 unsigned char key_buf[] = {0x3e,0x3d,0x3b,0x37,0x2f}; //键盘配对值 uchar count,count1,value; main() { timeinit(); exinit(); P2=0X0FF; P1=0x0c0; while(1) { display(); P3=0X0FC|value; //P3.0、P3.1口做输出部分,与模拟电路相连 } } /*************************************************************/ void display() { P2=table[value]; //P0口做数码管显示 //P1=table[value]; } /*************************************************************/ void timeinit() //定时计数器初始化 { TMOD=0X11; TH0=HI; TL0=LO; TH1=HI; TL1=LO; EA=1; ET0=1; ET1=1; TR0=1; } /*************************************************************/ void exinit() //外部中断0初始化 { IT0=0; EA=1; EX0=1; } /*************************************************************/ /*延时子程序*/ void keydelay(unsigned int time) { unsigned int j = 0; //j的类型不能改成unsigned char,否则不稳定 for(;time>0;time--) for(j=0;j<125;j++); } /*************************************************************/ void getkey(void) { unsigned char k1 ,k2, i ; P1 = 0xc0; keydelay(10); //延时消抖 if (P1 != 0xc0) { k1 = P1; //列扫描 //keydelay(10); if (P1 == k1) { P1 = 0x3f; //行扫描 k2 = P1; for (i = 0 ; i <4 ; i++) { keydelay(1); if (key_buf[i] == k2) //必须使用外部变量a,否则无法配对,key值不变 {value=i;} } } } P1 =0xc0; } /*************************************************************/ void op_time0() interrupt 1 //定时0,定时1秒,巡回显示 { TR0=0; TH0=HI; TL0=LO; TR0=1; count++; if(count==M) {count=0; value++; if(value==4) value=0; } } /*************************************************************/ void op_time1() interrupt 3 //定时1,定时5s { TR1=0; TH1=HI; TL1=LO; TR1=1; count1++; if(count1==100) {count1=0; TR1=0; TR0=1;} } /*************************************************************/ void op_key() interrupt 0 //外部中断0,打开定时1,定时5s { EX0=0; TR0=0; getkey(); TR1=1; EX0=1; } /*加外围器件的键盘 void getkey() { switch(P2) {case 0x0fe: value=0;break; case 0x0fd: value=1;break; case 0x0fb: value=2;break; case 0x0f7: value=3;break; case 0x0ef: break;} }*/ /* 外部中断去除干扰 key=0xff; for(i=0;i<5;i++); switch(key) {case 0: value=0;TR0=0;TR1=1;break; case 1: value=1;TR0=0;TR1=1;break; case 2: value=2;TR0=0;TR1=1;break; case 3: value=3;TR0=0;TR1=1;break; case 4: TR0=0;TR1=1;break; }*/ 发挥部分 #include #define uchar unsigned char #define uint unsigned int uchar table[]={0x3f,0x06,0x5b,0x4f}; //共阴0-3 uchar k1,value; main() { //P0=0X00; while(1) { P0=0X0FF; k1=P0; switch(k1) { case 0x0ff: value=0;break; case 0x0fb: value=1;break; case 0x0f9: value=2;break; case 0x0f8: value=3;break; } P2=table[value]; P3=0X0FC|value; } }
