19位ADC,16位输出

时间:2018-02-18 01:45:28

标签: math embedded sensor

https://www.melexis.com/en/documents/documentation/application-notes/application-note-mlx90393-getting-started-guide

我有上述磁力计,我很难理解16位输出背景下19位ADC的有效范围。分辨率2和3(参见第17页)只是在分辨率0和1中可用的相同采样数据上的较小窗口,还是需要将16位输出移位相应的位数才能找到其全部值? enter image description here 我想我已经理解了灵敏度只是无法弄清楚如何从数字滤波器构造#s,然后将它转换成3个分辨率中的每个分辨率的实际单位(在这种情况下为mGauss)。

2 个答案:

答案 0 :(得分:0)

如上所述,分辨率为19位。所以内部你有一个19位的值。但是传感器的输出只有16位,所以你必须选择你感兴趣的16位而忘记其他位。

使用分辨率2,3,您将获得一个不同比例的值。例如,在分辨率2处,您丢弃两个最低有效位。这意味着该值的刻度与您在0刻度中读取的值相比为4倍。如果传感器返回1,那么它的1 <&lt;&lt;&lt; 2 = 4。

因此,无论您使用的是什么单位,都必须注意调整值(例如,如果您的分辨率忽略这么小的值,则将值移到左侧并使用零填充)。

答案 1 :(得分:0)

将16位值移位任意数量的位将不会添加任何信息,它只会缩放值 - 不必要。

19位内部代表与您无关;这只是一个实现细节 - 您只需要关注灵敏度和范围,并选择最适合您应用的分辨率模式和增益值。

除非您的应用将传感器放置在温度受控的环境中,否则在任何情况下都可能忽略分辨率模式2和3。

表格中描述的范围和类型的方式可能有些混乱,但在文中并未澄清。对于无符号值,传感器值需要转置为有符号值:

int16_t sensor_value = (int16_t)((int32_t)sensor_value_adc - 0x8000) ;

考虑到分辨率和增益(以及灵敏度)的选择,mGauss中的输出是:

double mgauss = sensor_value * sensor_sensitivity_uT * 10.0 ;  // 1 uT = 10mG