单片机AD数据处理怎么精确到小数点后几位?

单片机AD数据处理怎么精确到小数点后几位?,第1张

不要用浮点运算,计算出一个系数后直接用整型运算,这样比较省时间。在计算时先乘后除,精度不够最好乘一个系数再除。比如把1V乘以1000变成1000mV,但是注意不要溢出,也就是运算过程中数据长度和精度权衡一下。最后只需在显示时做一些处理就行了

比如说5V参考电压,10位AD,读AD转换值为m,则所测电压为X=5m/1024V,处理时可以这样:X=m*(5000/1024)=m*(625/128)(mV),如果以V为单位显示,那显示的时候再加一个小数点就行了。如果不需要显示,在以后的运算中根据精度需要做适当的变换就可以了

MOV R0, #40H四个数据的起始地址

MOV R2, #4

MOV R3, #0四个数据的和

MOV R4, #0

A_LOOP:

MOV A, R3

ADD A, @R0 加数据低字节

MOV R3, A

INC R0

MOV A, R4

ADDC A, @R0 加数据高字节

MOV R4, A

INC R0

DJNZ R2, A_LOOP

-------------------------下面除以4,右移两位即可

CLR C

MOV A, R4

RRC A 先移高八位

MOV R4, A

MOV A, R3

RRC A 后移低八位

MOV R3, A

CLR C 再移动一次

MOV A, R4

RRC A

MOV R4, A

MOV A, R3

RRC A

MOV R3, A

结果在 R4R3。

END

找出最大、最小,要比较双字节的数据。

全部循环一遍,所花费的时间,就太多了。

特别是多字节的数据,特费时间。

不如,利用这些时间,多采样几个数据,累加后,取平均值。

用向右移位,代替除法,特别方便。

那么,采样数据的个数,宜取:4、8、16。

个数再多,好像也没有必要了。

10位和12位代表的意思是指其的二进制数的位数

10、12代表的是其分辨率位1/{(2的n次方)-1},如果是10位的话就是1/{(2的10次方)-1}=1/1023约等于0.001,位数也高,精度也高,进而误差越小。

两者的计算关系:

“位数”是A/D转换器的数学表达力(分辨力),就是输出的最小变化量其实是模拟量的离散值,在二进制系统中,它是满度量程的1/(2^x),式中的x为位数,与精度相关,但不等于精度。

实际用途中的“精度”是个综合性指标,需要考虑非线性度、偏移、温漂、倍率漂移等器件特性以及搭成的电路外部电气特性指标,这些都对电路的精度有直接影响,要综合考虑。

AD转换是把连续量的模拟量转换为不连续的数字量,数字量的位数直接表达了取样时的精度,严格说只能是接近实际数的一个近似数,位数越多精度越高,好比一把普通尺和一把千分尺,两者的计算关系(应该是换算关系)就是把通过传感器测量所得的实数(电压、电流、角度、位移、温度等等的标量)变换为便于计算机处理的二进制数。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9956613.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-03
下一篇2023-05-03

发表评论

登录后才能评论

评论列表(0条)

    保存