1楼:寻觅_理想
voltage=ad_data*vref/16777216voltage为电压值
ad_data为ad芯片的采集离散数值
vref为你的基准电压
16777216为2^24,
2楼:做而论道
通常是0-5v,对应于0-11111......1111(24位二进制)
那么1v就是:3355443(十进制)。
用读回来的值ad_data除以3355443,得到的整数部分就是0~5,即为电压的整数部分。
把ad_data除以3355443的余数,再除以0.1v所对应的数值(请自己算一下),取整数将得到0~9,即为电压的第一位小数。
……取多少位小数,就计算多少次。
3楼:匿名用户
要理解的话不难,模拟也就是0-5v对吧,然后它用数字来表示,也就是0-5v对应于0-11111......1111(24位)
所以算的时候,5/2的24次方=每个代表的电压数然后再乘以你得到的数,就是你的电压数。
不同的ad对应不一样,但道理是一样的。不知道你明白不
单片机ad采集回来的数值如何能显示为对应的电压值?
4楼:墨汁诺
voltage=ad_data*vref/16777216。
voltage为电压值:ad_data为ad芯片的采集离散数值。
vref为基准电压:16777216为2^24。
比如是2.5v,adc转换的电压就是2.5/65535 *nadc(v)。
nadc就是采集的adc的值,也就是说,adc的量程为0~2.5v,最小分辨率为2.5/65535=38uv。
vref就是ad的参考电压,比如要转换5v的电压~ vref=10v, gnd=0v
那么输出的ad结果就是32768(65536的一半),而如果vref=5v,gnd=0v
那么输出的ad结果就是65536。
5楼:匿名用户
和你ad的参考电压有关,电压都是相对的
ad有gnd和vref两个电压
最后得出的电压就是:
(vref-gnd)*(result/65536)+gnd就是把vref到gnd分成了65536个,得出的值在其中
6楼:追悔七年
首先你要知道ad的精度,0到65535的值那就是16位的adc.然后要知道adc的参考电压是多少,比如是2.5v,这样,adc转换的电压就是2.
5/65535 *nadc(v).nadc就是采集的adc的值.也就是说,adc的量程为0~2.
5v,最小分辨率为2.5/65535=38uv.
7楼:匿名用户
用你采集到的电压值除以65536,再乘以你ad的参考电压,就是你所测的电压值
51单片机采集的ad值的转换程序问题?
8楼:做而论道
上次回答了你的问题,难道你上次选择的最佳答案,没有用吗?
--------------------
0~2.5v,对应于ad_data = 0~11111......1111(24位二进制内);
那么1v就是:6710886(十进容制)。
用24位值ad_data除以6710886,得到的整数部分就是0~5,即为电压的整数部分。
再把刚才除得的余数,再除以10,取整数将得到0~9,即为电压的第一位小数;
余数,再除以10,取整数将得到0~9,即为电压的第二位小数;
……想要取多少位小数,就计算多少次。
----
这种算法,既不会溢出,也没有计算误差,我已经用过多年;
呵呵,但是过去都是处理16位数的数值。
楼主现在使用24位的,分辨率达到了0.15微伏,估计 也没有什么用处。
不如舍弃低8位,只用高、中8位,按照16数进行数据处理,精度也可以达到0.038毫伏,足以满足一般的要求了。
----
呵呵,计算误差,肯定是没有的,误差,是显示位数不够引起的。
9楼:匿名用户
使用你这种bai算法的话,用长整形long就不du会溢出了zhi。在c51里面,int占两个字节,dao
这里确实会
回溢出;而long占四个字节,范围可答以到2147483647,这里不会溢出。
另外你要考虑浮点型和整形的转换问题。其实如果数据不是很多组的话,我推荐直接用float型进行运算,更方便,也不会溢出:
v=data/(16777216.0/2.5);
试试吧,要是还有问题说明有可能是你之前“把abc转换成十进制的数”那里错了
---------------------------
四楼做而论道说的多好。。要显示的话用他的思路就好,可以写一个ftoa函数封装起来,这样用着更方便
没误差是不可能的,下面的方法可以试一下:
(假设采集的值从高到低为a,b,c三个字节)
long data=0;
double v=0.0;
data|=a;
data<<=8;
data|=b;
data<<=8;
data|=c;
v=data/(16777216.0/2.5);
10楼:匿名用户
强制转换~~~
double v;
v=((double)data)*2.5/16777216;
11楼:蓝色水桶
你是要对采集的信号进行处理,还是输出啊,怎么会出现数字信号又转换成电压信号,这不是d/a的活吗,你所说的溢出那是你的算法不对,你的单片机是几位的啊,8位吗,建议你好好查查d/a转换资料
51单片机,怎么把通过ad转换器采集到的数据(电压值)通过单片机的串口输出?
12楼:天平数字万用表
看看我这个 adc0808测电压然后串口发送,另一边数码管显示
13楼:匿名用户
ad芯片不一样,程序也是不一样的。
14楼:匿名用户
你可以看看别人的程序,