51单片机中用ADC0804模数转换电子线路的一个问题 100

我看了数字电路的书,上面有这么一段说明看不懂:ADC0804的零点无需调整。满刻度调整时,先给输入端加入电压VIN+,使满刻度所对应的电压值Vin+=Vmax-[1.5*... 我看了数字电路的书,上面有这么一段说明看不懂:
ADC0804的零点无需调整。满刻度调整时,先给输入端加入电压VIN+,使满刻度所对应的电压值 Vin+=Vmax-[1.5*(Vmax-Vmin)/256]
其中Vmax是输入电压的最大值,Vmin是输入电压的最小值。当输入电压与VIN+值相当时,调整VREF/2端电压值是输出码为FEH或FFH。
参考电压的调节
在使用A/D转换器时,为保证其转换精度,要求输入电压满量程使用,如输入电压动态范围较小,则可调节参考电压VREF,以保证小信号输入时ADC0804芯片8位的转换精度。

那个公式中的Vin+、Vmax、Vmin、Vref这几个值各代表什么意思?用通俗一点的方法来说。还有那个公式的应用能举一个实例吗?
展开
 我来答
生活如歌_
2012-03-15 · TA获得超过1.5万个赞
知道大有可为答主
回答量:7398
采纳率:78%
帮助的人:2123万
展开全部
Vin+:输入模拟量电压值,0-5V
Vmax:输入模拟量电压最大值,一般是+5V
Vmin:输入模拟量电压最小值,一般是0V
Vref:参考电压,一般是2.5V、

////////////////////////////////////////////////////////////////////////
//名称:单片机控制ADC0804模数转换实现电压测量(0~5V)
//作者:飞星科技 http://hi.baidu.com/saishm
//芯片:AT89S52
//晶振:12M
//编译器:伟福6000
//日期:2007-08-23
////////////////////////////////////////////////////////////////////////
//控制口定义//////////////////////
#include<reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define ad0_7 P0 //AD数据口
sbit cs=P1^0; //芯片选择信号,控制芯片的启动和结果读取,低电平有效
sbit rd=P1^1; //读数据控制,低电平有效
sbit wr=P1^2; //AD转换起动控制,上升沿有效
sbit intr=P1^3; //AD转换结束输出低电平
uchar led[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//5ms延时子程序/////////////////
void delay(uint i)
{ uint j;
for(;i>0;i--)
for(j=0;j<410;j++);
}
//启动AD转换子程序//////////////////////////////////////////////////////////
void start_ad(void)
{ cs=0; //允许进行A/D转换
wr=0;_nop_();wr=1; //WR由低变高时,AD开始转换
while(intr); //查询转换结束产生INTR 信号(低电平有效)
cs=1; //停止AD转换
}
//读A/D数据子程序///////////////////////////////////////
read_ad()
{ uint ad_data;
ad0_7=0xff;
cs=0; //允许读
rd=0; //读取转换数据结果数据结果
_nop_();
ad_data=ad0_7; //把数据存到ad_data中
rd=1;cs=1; //停止A/D读取
return(ad_data);
}
//数据处理与显示子程序//////////////////////////////////////
//说明:当输入电压为5V时,A/D输出为FFH,即输入电压=AD数据*(5/255)=AD数据/(255/5)=AD数据/51
// 用四位数码管进行显示,数码管的A~H接于P3口,公共端从最低位是P2.0,最高位是P2.3
void data_shout(uint ad_data)
{ uint a=50,one,two,three,four;
four=ad_data/51; //第四位数码管(最高位)
three=ad_data%51*10/51; //第三位数码管
two=ad_data%51*10%51*10/51; //第二位数码管
one=ad_data%51*10%51*10%51*10/51; //第一位数码管(最低位)
while(a--)
{ P3=led[one];
P2=0xfe;
delay(1);
P3=led[two];
P2=0xfd;
delay(1);
P3=led[three];
P2=0xfb;
delay(1);
P3=led[four]-0x80; //显示小数点
P2=0xf7;
delay(1);
}
}
int main(void)
{ while(1)
{ start_ad(); //启动AD
data_shout(read_ad()); //读AD数据并显示
}
}
更多追问追答
追问
Vin+=Vmax-[1.5*(Vmax-Vmin)/256]
那这个公式不就没有意义了吗?ADC0804最小输入电压和最大输入电压不都是0-5V吗?也就是说
Vin+就是5-[1.5*(5-0)/256]=4.97V了,那还要这个计算公式做什么啊?
另:如果输入的模拟量是0-3V,那么如果想满量程使用的话,是不是要将Vref调为1.5V这样?
求解答。
追答
Vin+=Vmax-[1.5*(Vmax-Vmin)/256]
Vin+就是5-[1.5*(5-0)/256]=4.97V
这个公式是在调试电位器时,调量程(整定)时用的。
如果0-3V就改VREF好了。
http://bbs.ednchina.com/BLOG_ARTICLE_125070.HTM
http://www.51c51.com/TEST/XL1000/xl1000613.htm
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式