论坛风格切换切换到宽版
  • 4211阅读
  • 11回复

关于数据处理 浮点和长整型 [复制链接]

上一主题 下一主题
离线张雄
 
发帖
85
只看楼主 倒序阅读 0楼 发表于: 2009-07-07
关于数据处理 浮点和长整型

现在由adc芯片得到的数据为长整型,我想来标定此数据,利用砝码来标定,要求精确到0.1g 。 首先读出没有放置砝码时候的数据data1(长整型),然后读出放置砝码后的数据data2(长整型),已知砝码标准克数为a。计算得到每0.1g的数字量为data3(长整型),data3=(data2-data1)/(10a),标定完成。在系统动态运行过程中的动态数据为data4(长整型), 由此最后结果为长整型 result=(data4-data1)/data3       请教这样的处理为何我最后的结果老是不对呢??? 谢谢高手指点
离线BG4UVR
发帖
11288
只看该作者 1楼 发表于: 2009-07-07
基本两种可能,一是数据在计算中,不小心存在了错误。
二是传感存在非线性误差,需要软件修正。
离线BG2IVR
发帖
243
只看该作者 2楼 发表于: 2009-07-07
同意楼上的看法
1.检查传感器是否非线性
2.单片机做这种运算如果编译器做得不好很容易出问题。请仿真检查是否程序计算错误

另外,请举出实际数值,以方便大家帮你查找问题
离线BD6KF
发帖
1126
只看该作者 3楼 发表于: 2009-07-07
[quote=张雄]关于数据处理 浮点和长整型

现在由adc芯片得到的数据为长整型,我想来标定此数据,利用砝码来标定,要求精确到0.1g 。 首先读出没有放置砝码时候的数据data1(长整型),然后读出放置砝码后的数据data2(长整型),已知砝码标准克数为a。计算得到每0.1g的数字量为data3(长整型),data3=(data2-data1)/(10a),标定完成。在系统动态运行过程中的动态数据为data4(长整型), 由此最后结果为长整型 result=(data4-data1)/data3       请教这样的处理为何我最后的结果老是不对呢??? 谢谢高手指点[/quote]
楼主要做电子天平吗?
离线BD6KF
发帖
1126
只看该作者 4楼 发表于: 2009-07-07
'
基本两种可能,一是数据在计算中,不小心存在了错误。
二是传感存在非线性误差,需要软件修正。
'
是啊,是啊
离线张雄
发帖
85
只看该作者 5楼 发表于: 2009-07-07
现在不是数据线性的问题,是数据处理的问题,长整型数据相除的时数据是如何存储的?
离线张雄
发帖
85
只看该作者 6楼 发表于: 2009-07-07
请问楼上朋友能传授一点数据处理的经验吗?
离线bd7qw
发帖
2371
只看该作者 7楼 发表于: 2009-07-07
51我是汇编处理的,没我什么事,帮楼主顶
离线BG2IVR
发帖
243
只看该作者 8楼 发表于: 2009-07-07
首先,你最好说明你用的是什么单片机,什么编译器

其次,我建议你讲数据扩大然后再计算,把运算结果变成整数

比如

5 / 50 = 0.1

变成

(5*10) / 50 = 1
离线汤圆
发帖
1157
只看该作者 9楼 发表于: 2009-07-07
采用移位办法 乘除效率很低 尤其51核
离线张雄
发帖
85
只看该作者 10楼 发表于: 2009-07-07
我采用的是c8051f506单片机,应该是51的内核吧,编译器用的keil 2.4的。由adc产生的数据都是长整型的,然后最后要求精确到0.1g,如何处理比较快,而且比较精确?
离线BD6KF
发帖
1126
只看该作者 11楼 发表于: 2009-07-07
[quote=张雄]我采用的是c8051f506单片机,应该是51的内核吧,编译器用的keil 2.4的。由adc产生的数据都是长整型的,然后最后要求精确到0.1g,如何处理比较快,而且比较精确?[/quote]
一搬的重量测量电路,都要求不能快。数据的速率只有十几hz,快和慢都是相对的,单片机处理这些问题还是有大较大的余量的,数据长短都可以精确,看你怎么算啦。