- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
自动增益控制(AGC)放大器实现方案
自动增益控制(AGC)放大器实现方案
系统框图
程控放大器
外部检测
电压检测
电源模块
输入信号
输出信号
MCU
二、硬件部分
系统总电路图
电源分压
题目要求使用5V单电源供电,此处使用10k欧姆电阻串联分压得到2.5V电压,并且通过电压射随器,稳定电压。
串联分压部分
程控放大器部分
增益可控放大器
(1)电路连接如图。J1接单片机的I/O口作为控制信号输入。
(2)DAC7811此处作为程控电阻使用,与TLC085共同起到增益可控放大作用。
DAC作为程控电阻器的原理:
DAC7811的核心是一个R-2R网络,当两个输出端分别接放大器输入端和地时,由于运放的“虚地”,可以看做两条输出线都接地,因此可以算出电阻网络总电阻为R。则流经的总电流Itotal=VREFR
12个选通开关由MSP430的SPI协议控制
Code=211a11+210a10+…+20a0
Iout1=12I?a11+122I?a10+…+1212I?a0=211a11+210a10+…+20a0212I=Code4096I
Rout1=VREFIout1=VREFCode4096I=R4096Code
若RFB=R
Vout=-VINR4096CodeR=-VIN4096Code
因此通过单片机输出不同的控制字code的值就可以实现控制增益的目的。
(3)由于运放的输出被抬高了2.5V,因此输出需要经过电容耦合滤除直流分量。
PWM波低通滤波部分
PWM波低通滤波
电路构成简单RC低通滤波器,将输出的PWM波转换为直流电压供外部检测用。输出电压的大小与PWM波的占空比成近似线性关系。
实际电路图:
软件部分
程序代码:
#includereg52.h
#includeintrins.h
#define uchar unsigned char
#define uint unsigned int
uchar a,T0_time;
uint temp,adval,adval_t,vref_t,dac_code,D;
float vref_s;
sbit adwr=P3^6;
sbit adrd=P3^7;
sbit sync=P0^0;
sbit sclk=P0^1;
sbit sdin=P0^2;
sbit pwm=P2^0;
//定时器初始化函数
void T0_init()
{
TMOD=0x11;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
ET0=1;
TR0=1;
}
//微妙级延时
void delayus(uint us)
{
uint i;
while(us--)
{
for(i=8;i0;i--)
;
}
}
//毫秒延时函数
void delayms(uint xms)
{
uint i,j;
for(i=xms;i0;i--)
for(j=110;j0;j--);
}
//AD启动函数
void start_ad()
{
adwr=1;
_nop_();
adwr=0;
_nop_();
adwr=1;
}
//AD读取函数
uchar get_ad()
{
P1=0xff;
adrd=1;
_nop_();
adrd=0;
_nop_();
adval=P1;
adrd=1;
return adval;
}
//CODE处理函数
void d_vout()
{
if(advalvref_t)
dac_code++;
else
dac_code--;
D=4096/dac_code/10;//占空比
}
//DAC控制函数
void dac_spi(uint dac_code)
{
uchar n;
sync=0;
sclk=1;
for(n=0;n16;n++)
{
sclk=1;
dac_code=dac_code1;
sdin=CY;
sclk=0;
}
sdin=1;
sync=1;
sclk=0;
delayus(10);
}
//主函数
void main()
{
uchar ad_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(a0)
{
for(ad_n=0;ad_n20;ad_n++)
文档评论(0)