51单片机采集的AD值的转换程序问题?
AD器件是24位的AD7731,读回来的数据是24位的,分高、中、低三个八位,采集的信号最大值是30mv,假设A,B,C代替采集回来的高,中,低三个八位数据,怎样把ABC...
AD器件是24位的AD7731,读回来的数据是24位的,分高、中、低三个八位,采集的信号最大值是30mv,假设A,B,C代替采集回来的高,中,低三个八位数据,怎样把ABC转换成电压值?这种算法貌似不好做,信号还是毫伏级别的,我开始直接把ABC转换成十进制的数,假设是Data,参考电压2.5V,2^24=16777216,利用公式计算:V=Data*2.5/16777216,这样不就溢出了吗?单片机没法算了啊?请教下高手怎样算?通过了加分的 谢谢了啊 O(∩_∩)O哈哈~
展开
1个回答
展开全部
上次回答了你的问题,难道你上次选择的最佳答案,没有用吗?
--------------------
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毫伏,足以满足一般的要求了。
----
呵呵,计算误差,肯定是没有的,误差,是显示位数不够引起的。
--------------------
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毫伏,足以满足一般的要求了。
----
呵呵,计算误差,肯定是没有的,误差,是显示位数不够引起的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询