目前在我们驱动的AO及AI功能中,Scale中的最大LSB取值有问题,公式是这样的:(USHORT) (max_count * (output_value - min_volt) / (max_volt - min_volt)),拿PCI-1741U来说,其max_count目前的取值是65535,其实正确取值应该是65536,虽然硬件上D/A转换器只有16位,无法输出真正的65536,可是在公式中max_count起着量程最大份数的角色,就是说虽然满量程是从0~65535,而实际的分数应该是65536。
如果按我们目前的做法,将max_count定为65535就会出现很微小的问题,举个例子,量程范围+/-5V,输出0V,由于0V是+/-5V的中间值,因此自然会计算得出65535的一半,即32767.5,但这不是我们希望得到的,因为向硬件中写入的值只能是整型,所以浮点数被取整得到32767,在PCI-1741U的实际测试中发现以32767(即7FFFH)为输出值,测得的结果是-0.005V,现在我们打算采用65536作为max_count的值再试一试,经过公式计算得出的结果是一个整型32768(即8000H,比之前多了一个LSB),结果发现输出测得的结果是-0.004V,更接近0V!(比之前精确了0.001V)。
虽然只有0.001V,但是在一些工业现场中,这个误差已经不算小了,目前我们所有linux驱动中的AI、AO都需要对此问题进行修改。
注:还要注意在输出值为满量程的时候,要判断最终计算结果,避免溢出。
Scale计算公式 - 关于电压值与二进制数值间的转换
原创
©著作权归作者所有:来自51CTO博客作者lion3875的原创作品,如需转载,请与作者联系,否则将追究法律责任
上一篇:测频功能返回的第一笔数据不准确
下一篇:PCI-1761驱动程序
![](https://ucenter.51cto.com/images/noavatar_middle.gif)
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
PSoc™62开发板之ADC读取电压
ADC读取可调电位器电压值
Infineon RT-Thread PSoc™62 ADC OLED -
rgb转化为lab pytorch rgb转化为灰度值
从RGB色转为灰度色算法(转) 一、基础 对于彩色转灰度,有一个很著名的心理学公式:
rgb转化为lab pytorch runtime 操作系统 灰度 位图