自动增益控制(AGC)放大器实现方案_第1页
自动增益控制(AGC)放大器实现方案_第2页
自动增益控制(AGC)放大器实现方案_第3页
自动增益控制(AGC)放大器实现方案_第4页
自动增益控制(AGC)放大器实现方案_第5页
全文预览已结束

下载本文档

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

文档简介

自动增益控制(AGC)放大器实现方案系统框图程控放大器程控放大器外部检测电压检测电源模块输入信号输出信号MCU二、硬件部分系统总电路图电源分压题目要求使用5V单电源供电,此处使用10k欧姆电阻串联分压得到2.5V电压,并且通过电压射随器,稳定电压。串联分压部分程控放大器部分增益可控放大器(1)电路连接如图。J1接单片机的I/O口作为控制信号输入。(2)DAC7811此处作为程控电阻使用,与TLC085共同起到增益可控放大作用。DAC作为程控电阻器的原理:DAC7811的核心是一个R-2R网络,当两个输出端分别接放大器输入端和地时,由于运放的“虚地”,可以看做两条输出线都接地,因此可以算出电阻网络总电阻为R。则流经的总电流I12个选通开关由MSP430的SPI协议控制Code=IR若RV因此通过单片机输出不同的控制字code的值就可以实现控制增益的目的。(3)由于运放的输出被抬高了2.5V,因此输出需要经过电容耦合滤除直流分量。PWM波低通滤波部分PWM波低通滤波电路构成简单RC低通滤波器,将输出的PWM波转换为直流电压供外部检测用。输出电压的大小与PWM波的占空比成近似线性关系。实际电路图:软件部分程序代码:#include<reg52.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedintuchara,T0_time;uinttemp,adval,adval_t,vref_t,dac_code,D;floatvref_s;sbitadwr=P3^6;sbitadrd=P3^7;sbitsync=P0^0;sbitsclk=P0^1;sbitsdin=P0^2;sbitpwm=P2^0;//定时器初始化函数voidT0_init(){ TMOD=0x11; TH0=(65536-45872)/256; TL0=(65536-45872)%256; EA=1; ET0=1; TR0=1;}//微妙级延时voiddelayus(uintus){ uinti; while(us--) { for(i=8;i>0;i--) ; }}//毫秒延时函数voiddelayms(uintxms){ uinti,j; for(i=xms;i>0;i--) for(j=110;j>0;j--);}//AD启动函数voidstart_ad(){ adwr=1; _nop_(); adwr=0; _nop_(); adwr=1;}//AD读取函数ucharget_ad(){ P1=0xff; adrd=1; _nop_(); adrd=0; _nop_(); adval=P1; adrd=1; returnadval;}//CODE处理函数voidd_vout(){ if(adval>vref_t) dac_code++; else dac_code--; D=4096/dac_code/10;//占空比}//DAC控制函数voiddac_spi(uintdac_code){ ucharn; sync=0; sclk=1; for(n=0;n<16;n++) { sclk=1; dac_code=dac_code<<1; sdin=CY; sclk=0; } sdin=1; sync=1; sclk=0; delayus(10);}//主函数voidmain(){ ucharad_n; T0_init(); vref_s=0.5; dac_code=0x0029; pwm=0; vref_t=(int)(vref_s/5.0*256.0); D=10; while(1) { pwm=~pwm;//PWM波产生部分 if(pwm==0) a=10-D; else a=D; while(a>0) { for(ad_n=0;ad_n<20;ad_n++)//AD转换、检测部分 { start_ad(); delayms(10); temp=get_ad(); if(temp>=adval_t) adval_t=temp; } dac_spi(dac_code);//输出code值给DAC7811 delayus(5); a--; } }}//定时器0中断函数voidT0_time_interrupt()interrupt1{ TH0=(65536-45872)/256; TL0=(65536-45872)%256; T0_time++; if(T0_time>=5) { T0_time=0; /*每100ms*/ adval=adval_t;/*取出幅值*/ d_vout();/*进行处理*/ adval_t=0; }}程序设计思路:——Adval_t为检测电压的暂存值;adval为取得的幅值,将其与设定值相比较——程序设计为取输出电压的幅值进行处理。函数的检测部分,在多个周期的多个点处进行抽样,得到比前一次抽样大的值则给adval_t赋新值,直到中断100ms中断产生则将最后取得的最大值赋给adval进行处理,数据处理的函数为d_vout()——得到输出电压幅值后,将adval与设定电压幅值相比较(vref_t为转化后的值,与adval直接比较),若adval>vref_t,说明输出电压幅值应该减小,增益应该减小,相应dac_code应该增大——da

温馨提示

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

评论

0/150

提交评论