基于单片机的宽带放大器设计论文论文.doc_第1页
基于单片机的宽带放大器设计论文论文.doc_第2页
基于单片机的宽带放大器设计论文论文.doc_第3页
基于单片机的宽带放大器设计论文论文.doc_第4页
基于单片机的宽带放大器设计论文论文.doc_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

设计题目:宽带直流放大器24摘要:本设计基于at89s52单片机作为主控器,由ad603作为放大器的宽带直流放大器。本电路由级联两片ad603放大电路、增益控制电路、液晶1602显示电路及4*4矩阵键盘处理电路、测量电路和电源电路等部分组成。在电路的设计过程中,力求硬件电路简单,充分发挥软件编程方便灵活的特点,并最大限度挖掘单片机的资源,来满足系统设计要求。本电路具有宽带数字程控功能,运用程序采样测出峰值电压,然后用公式算出有效值并通过液晶显示,并运用电容去耦、屏蔽线作为输入输出信号线和金属体屏蔽高频放大电路等降噪声、抗干扰措施,使电路输出信号波形清晰、稳定。本电路具有设计简单,功耗低,成本小等特点。关键字:宽带直流放大 数字程控 ad603 屏蔽 抗干扰目 录1.设计任务与要求11.1设计任务11.2要求12.方案论证与比较12.1总体设计方案12.2主控芯片的比较与选择12.3 显示模块比较与选择22.4 放大器电路比较与选择23.理论分析与计算33.1带宽增益积33.2通频带内增益起伏控制33.3线性相位33.4抑制直流零点漂移43.5放大器稳定性44.电路与程序设计44.1系统的硬件设计44.2 系统软件设计:5软件设计框图如下55.测试方案与测试结果55.1测试仪器55.2测试数据66.设计总结6参考文献6附录61.设计任务与要求1.1设计任务设计并制作一个宽带直流放大器及所用的直流稳压电源。1.2要求1.2.1基本要求(1)电压增益av40db,输入电压有效值vi20mv。av可在040db范围内手动连续调节。(2)最大输出电压正弦波有效值vo2v,输出信号波形无明显失真。(3)3db通频带05mhz;在04mhz通频带内增益起伏1db。 (4)放大器的输入电阻50w,负载电阻(502)w。(5)设计并制作满足放大器要求所用的直流稳压电源。1.22发挥部分(1)最大电压增益av60db,输入电压有效值vi10 mv。(2)在av60db时,输出端噪声电压的峰峰值vonpp0.3v。(3)3db通频带010mhz;在09mhz通频带内增益起伏1db。(4)最大输出电压正弦波有效值vo10v,输出信号波形无明显失真。 (5)进一步降低输入电压提高放大器的电压增益。(6)电压增益av可预置并显示,预置范围为060db,步距为5db(也可以连续调节);放大器的带宽可预置并显示(至少5mhz、 10mhz 两点)。(7)降低放大器的制作成本,提高电源效率。(8)其他(例如改善放大器性能的其它措施等)。2.方案论证与比较2.1总体设计方案分析题目要求,我们将本设计分为:放大电路及输入输出电路、增益控制、键盘显示及处理、测量和稳压电源五大功能模块 输入电路主放大电路键盘显示和处理模块增益控制电路输出电路测量电路稳压电源220vv2.2主控芯片的比较与选择方案一:采用8031作为控制核心,以使用最为普遍的器件adc0809作模数转换可以实现模数转换,但所需的i/o口较多。此方案简易可行,器件的价格便宜,但8031内部没有程序存储器,需要扩展,增加了电路的复杂性同时也增加了成本,不能满足高性价比的要求。方案二:采用凌阳spce061a单片机。它中断资源丰富,而且内置了在线仿真、编程接口,可方便地实现在线调试。但其程序编写较难,且性价比不够高。方案三:采用at89s52作为电路的控制核心,使用8位的i2c总线式的模数转换器进行数据转换。而且at89s52单片机是一种低功耗、高性能cmos 8位微控制器,具有8k 在系统可编程flash 存储器。另外,at89s52 可降至0hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,cpu停止工作,允许ram、定时器/计数器、串口、中断继续工作。掉电保护方式下,ram内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止;可实现液晶显示和键盘设定等多种功能。此方案电路简单并且可以满足题目的各项要求的精度,所以选择方案三。2.3 显示模块比较与选择方案一:采用数码管显示位数太少,布线麻烦,管脚多,则占用相应的i/o口也多;方案二:采用液晶显示位数多,使用方便,2行每行16个字符。自带字符库、带背光,经典的液晶显示器件通过液晶屏显示你想要的信息,比发光二极管、数码管等显示更漂亮,更专业化,所以选择液晶。2.4 放大器电路比较与选择 方案一:简单的放大电路可由分立元件搭接完成。此方案元器件成本低,易于购置。但是要满足增益60db的要求,需采用多级放大电路实现,这样便大量采用三极管等分立元件,这样电路比较复杂,工作点难于调整,调试难度太大,周期很长,尤其是短时间内手工制作难以保证可靠性及指标,故不采用此方案。 方案二:为了实现最大电压增益av60db,输入电压有效值vi10 mv的要求,采用可调增益集成运放设计,如运放ad603,它由无源输入衰减器、增益控制界面和固定增益放大器三部分组成(如图(1)所示)。图中加在梯型网络输入端 (vinp) 的信号经衰减后,由固定增益放大器输出,衰减量是由加在增益控制接口的电压决定。增益的调整与其自身电压值无关 , 而仅与其差值 v 有关 , 由于控制电压gpos/gneg端的输入电阻高达 50m,因而输入电流很小, 致使片内控制电路对提供增益控制电压的外电路影响减小。以上特点很适合构成程控增益放大器。此方案优势是电路集成度高,容易实现,控制方便、易于数字化用单片机处理,指标和可靠性容易得到保证,故采用此方案。3.理论分析与计算3.1带宽增益积为实现60db放大能力,本设计采取两级ad603级联和后级放大电路的增益分配方式。依据资料,ad603单级采用的是增益为-1db42db、带宽在9mhz-90mhz之间的工作方式,其每级增益为: gad603(db)=40vg+20 (式3.1-1) 式中,vg为ad603的增益控制电压,是一脚和二脚的压差,范围为-0.50v0.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)所示即为本系统原理框图:级联两片压控对数放大器 ad603a/dat89s52软件峰值有效值检测d/a电源电路220vv显示键盘输入输出具体电路见附录4.2 系统软件设计: 软件设计框图如下:5.测试方案与测试结果5.1测试仪器双踪示波器 ca9020 信号发生器 ca1460-02数字万用表 vc890d5.2测试数据测试方案、结果与结果分析(1)最大增益 g=20lg(vo/vi) ,在固定频率下测试得。 数据如表中: vip-p(mv)581012141618vop-p(v)2.003.003.754.405.005.756.55gm( db )52.451.4851.4851.2851.0651.1151.22结果分析,本系统最大增益达到51.43,大于基本要求的40db,并且输入的信号有效值远小于20mv(2)输出有效值及幅频特性第一组:f(hz)501k50k100k500k1m2m3m5m8m10m12mvip-p(mv)181818181818181818181818vop-p(v)6.45 6.456.506.506.206.005.585.585.565.455.045.00vo2.282.282.282.282.192.121.971.971.951.91.761.70g(db)51.0851.0851.1551.1550.7450.4649.8349.8349.8049.6248.9448.87上面的那个表格是我们在最大ad603最大增益波形无明显失真的情况下测量出来的数据,可以得出最大输出正弦波有效值vo=2.30v,大于基本要求的大于2v.。幅频特性从0hz到12m,都是比较平稳的,但是从8mhz开始出现失真,并且增益明显下降。该系统有大于12mhz的带宽,满足题目要求。(3)放大器输入电阻、负载电阻测量 测量方法:使用万用表直接测量得出结果是输入电阻为100 ,负载电阻为50,满足放大器的输入电阻50w,负载电阻(502)w的要求。 本设计 信号源vvivo(4) 增益步进测试 测试电路如下图所示:g设( db )0510152025303540vi(mv)181818181818181818v0(v)0.0160.0340.060.100.190.3150.591.402.20g测-1.025.2410.4614.8920.4724.863035.2341.74|g测 -g设|1.020.240.460.110.470.1400.230.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.控制电路部分pcb2.放大电路设计pcb3.电源电路pcb:图(1)附录3 程序清单#include #define uchar unsigned char#define uint unsigned int#includeuchar flag;extern uchar gain;extern void display_gain();extern void ad603_controll(void);extern void da_conver(int davalue);extern void read_v();void main() int i; lcd_init(); da_conver(0); gain=0; display_gain(); while(1) ad603_controll( ); / da_conver(360); #include #include #define uchar unsigned char#define uint unsigned int/*tlc549管脚定义*/ /*tlc549管脚定义*/ sbit clk=p30; /定义时钟信号io口 sbit do=p31;/定义片选信号io口sbit cs=p32;uchar addata=0; /存放采集到的数据uint voltagenum4; /转换成显示的值uint voltage=0; /存放电压扩大100的值uchar code digital=0123456789; /*/uint max1;uint date25; /存放电压采用值extern void lcd_write(uchar start, uchar in_data) ;/uchar addata=0; /存放采集到的数据/uint voltagenum3; /转换成显示的值/uint voltage=0; /存放电压扩大100的值 /*uchar code digital3= /lcd1602的数字显示码表 /0-9, : ; ? 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c, 0x3d,0x3e,0x3f ; */* 函数名称:ad_delay* 功能描述:ad转换延时函数* 输入:k* 输出:无* 全局变量:无* 调用模块:无*/void ad_delay(uchar k) uchar i,j; for(j=0;jk;j+) for(i=0;i125;i+); /实现ad转换/* 函数名称:ad_change* 功能描述:电压计算程序* 输入:无* 输出:无* 全局变量:addata* 调用模块:_nop_*/void ad_change() uchar i; cs=1; /芯片复位 cs=0; cs=1; clk=0; _nop_();_nop_();_nop_();_nop_(); cs=0; /芯片起始 _nop_();_nop_();_nop_();_nop_(); /等待延时 for(i=0;i8;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;i8;i+) clk=1; addata=1; if(do) addata|=0x01; /addata=addata+1; /*else addata|=0x00;*/ clk=0; cs=1;/return addata;/* 函数名称:get_voltage* 功能描述:电压计算程序* 全局变量:voltage,addata*/void get_voltage() voltage=addata*(250.0/255); /计算电压并扩大100倍,500.0是参考电压2.5扩大100倍得到的,参考电压由调节r4得到 /voltage=voltage*3.06453; /根据实际情况调整电压,现在还有一点误差 voltagenum0=voltage/1000; voltagenum1=voltage%1000/100; voltagenum2=voltage%100/10;voltagenum3=voltage%10; /ge=(voltagenum2+4)%10;/调精度个位/shi=(voltagenum1+(voltagenum2+4)/10)%10; /十位/bai=(voltagenum0+(voltagenum1+(voltagenum2+4)/10)%10;/while(1);/* 读电压峰峰值函数,各位数值存放在voltage4 */ void read_ad() ad_change(); /ad转换 ad_delay(200); get_voltage(); void display() lcd_write(0,0x80+11);/设置显示位置/lcd_write(1,v); lcd_write(1,digitalvoltagenum0);lcd_write(1,digitalvoltagenum1);lcd_write(1,.);lcd_write(1,digitalvoltagenum2);lcd_write(1,digitalvoltagenum3);lcd_write(1,v); void read_v() uchar n; ad_change(); /先进行第一次ad转换,以下是用查询比较法来测量波峰值的 ad_delay(200); get_voltage(); date0=voltage; max1=date0; for(n=1;nmax1) max1=daten; max1=max1*0.707; voltagenum0=max1/100; /voltagenum0=(uchar)voltagenum0; /最大值放在max1中 voltagenum1=max1%100/10; / voltagenum1=(uchar)voltagenum1; voltagenum2=max1%10; /voltagenum3=(uchar)voltagenum3; lcd_write(0,0x80+11); /显示电压峰值 lcd_write(1,digitalvoltagenum0); lcd_write(1,0x2e); lcd_write(1,digitalvoltagenum1); lcd_write(1,digitalvoltagenum2); lcd_write(1,0x56); #include void da_conver(int davalue) uchar i; davalue = 6; c_s = 0; / 片选da芯片 c_k = 0; / 在以下12个时钟周期内,每当在上升沿的 / 数据被锁存,形成da输出。在前10个时钟 for(i = 0; i 12; i+) / 内输入的是10位da数据,后两个时钟周期 / 为填充字节。 din = (bit)(davalue & 0x8000); / c_k = 1; / davalue = 1; / c_k = 0; c_s = 1; / cs的上升沿和下降沿只有在clk为低的时候 c_k = 0; / 才有效 #include /uchar code b = 0123456789abcdef;/uchar code ircode = 0123456789abcdef;/* 5us 延时子程序*/void delaynop() _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); /* 延时子程序*/void delay(uint ms) uchar t; while(ms-) for(t = 0; t 120; t+); /* 检查lcd忙状态 * lcd_busy为1时,忙,等待。 * lcd-busy为0时,闲,可写指令与数据 */ bit lcd_busy() bit result; lcd_rs = 0; lcd_rw = 1; lcd_en = 1; delaynop(); result = (bit)(p2&0x80); lcd_en = 0; return(result); /* * 写指令或数据* start=0, 写入命令; start=1, 写入数据*/void lcd_write(uchar start, uchar in_data) uchar hdata,ldata;/while(lcd_busy(); hdata=in_data&0xf0; /取高四位 ldata=(in_data0;i-) for (j=0;j1140;j+); /* 设定显示位置 */void lcd_pos(uchar pos) lcd_write(0,pos=pos+0x80); /数据指针=80+地址变量/* 在特定的位置写一个字符 in_data为要写的数据字符 pos为指定位置 pos=0时在第一行第一个位置写, pos=0x40时在第二行第一个位置写 */void lcd_wr_char(uchar in_data,uchar pos) lcd_pos(pos); lcd_write(1, in_data);#include #define v_tlc5615 5.0 extern void da_conver(int davalue); extern void read_v(); int g1=0;/令初始增益为0db int gain; uchar flag0,flag1,flag2,cw;void display_gain() uchar temp; /if(gain55) cw=1; lcd_init(); lcd_write(0,0x80+0x40);/设置显示位置 lcd_write(1,e); lcd_write(1,r); lcd_write(1,r); lcd_write(1,o); lcd_write(1,r); lcd_write(1,!); lcd_write(1, ); lcd_write(1, ); lcd_write(1, ); else lcd_write(0,0x80+0x40);/设置显示位置 lcd_write(1,g); lcd_write(1,a); lcd_write(1,i); lcd_write(1,n); lcd_write(1,:); lcd_write(1,digitaltemp/10); lcd_write(1,digitaltemp%10); lcd_write(1,d); lcd_write(1,b); void ad603_controll(void) uchar g,i=6; uchar numb,temp1; uchar temp4;/存储输入的数值 numb=key_scan(); if(numb=11) /qd=0; ad_delay(5); if(numb=11) lcd_write(0,0x80); lcd_wr_char(i,0); lcd_wr_char(n,1); lcd_wr_char(p,2); lcd_wr_char(u,3); lcd_wr_char(t,4); lcd_wr_char(:,5); while(i8)/接受两位数值的输入 p1=0x0f; g=p1&0x0f; while(g=0x0f) g=p1&0x0f; numb=key_scan(); /返回键值 tempi-6=numb; lcd_wr_char(digitalnumb,i+); /在相应的位置显示输入的数值 gain=temp0*10+temp1; gain=gain+5; flag0=1; if(numb=12) /增益步进加 /qd=0; if(gain40) gain-=1;elsegain-=5; /gain-=5;flag2=1;g1=(int)(gain+20)/40.0*1023)/v_tlc5615);da_conver(g1);display_gain(); if(numb=14)/确定输入数据 / qd=1;if(flag0|flag1|flag2) flag0=0; flag1=0; flag2=0; g1=(int)(gain+20)/40.0*1023)/v_tlc5615); da_conver(g1); display_gain(); /if(cw=0) / read_v(); /检测峰值 if(numb=15) /初始化增益 cw=0; lcd_init();da_conver(0);gain=0; display_gain(); #include/sbit a1=p20;/sbit a2=p21;/sbit a3=p22;/sbi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论