51单片机AD转换后的值
时间:10-02
整理:3721RD
点击:
用TL549 AD芯片来处理。它是8位的芯片。
uint ad_549() //TLC549处理
{
uchar i;
uint data_ad = 0;
cs = 1; //初始化,启动
sclk = 0;
cs = 0;
_nop_();
for(i = 0;i < 8;i++) //读取采集数据,读取的是上一次采集数据
{
sclk = 1;
if(data_temp)data_ad |= 0x01;
sclk = 0;
data_ad = data_ad << 1;
}
cs = 1;
data_ad = data_ad * (500/ 256);
return(data_ad);
}
为什么转换后的值要 * (500/ 256),这部分该怎么理解? 谁能说下
uint ad_549() //TLC549处理
{
uchar i;
uint data_ad = 0;
cs = 1; //初始化,启动
sclk = 0;
cs = 0;
_nop_();
for(i = 0;i < 8;i++) //读取采集数据,读取的是上一次采集数据
{
sclk = 1;
if(data_temp)data_ad |= 0x01;
sclk = 0;
data_ad = data_ad << 1;
}
cs = 1;
data_ad = data_ad * (500/ 256);
return(data_ad);
}
为什么转换后的值要 * (500/ 256),这部分该怎么理解? 谁能说下
应该是数值补偿
500应该是5v电压放大100倍,256是8位数据的分辨率
由于看不到电路,也不知道是用于测量什么的,一般是ADC值与物理值的一个比例关系。
将测量 值与计算结果对比一下就明白了。
500应该是5v电压放大100倍,256是8位数据的分辨率,256应改为255
模拟量 = 基准电压×AD值 /255 ( 8位A/D)
模拟量 = 基准电压×AD值 /1023 ( 10位A/D)
模拟量 = 基准电压×AD值 /4095 ( 12位A/D)
这里应该是为了方便显示,可以理解为转换后的电压=AD值*(5/256)*100,5/256是满值5伏电压进行转换的AD值的每一个二进制位的电压值,最后乘以100是因为程序里用了整形变量存储电压值,这样就存不了小数,所以乘以100,就可以有2位小数了 。
按照电压基准和分辨率位数进行换算
.
话说,为什么STC自带10位ADC不用,要外接8位ADC
