我正在使用ADS1118读取四个独立模拟输入。 微控制器以循环方式读取每个通道(加温度)。 要使其显式,以下是SPI事务:
- 将config设置为“CH1”
- 从CH1读取转换结果,将config设置为Read CH2
- 从CH2读取转换结果,将config设置为读取ch3
- 从ch3读取转换结果,将config设置为读取CH4
- 从CH4读取转换结果,将CONFIG设置为读取温度
- 读取温度结果,将CONFIG设置为CH1
然后重复步骤2-6。 这通常有效并产生良好的结果。 但是,我注意到了我最初认为的噪音。 经进一步调查后,噪音很正常。 有时,数据流中的所有通道都被一个通道偏移。 请参阅下面的数据表以了解发生的情况示例。
Temp,Ch1,Ch2,Ch3,CH4 25 1 2 3 4 25 1 2 3 4 25 1 2 3 4 4 25 1 2 3 25 1 2 3 4 25 1 2 3 4
但是,有时它更微妙,如以下内容:
Temp,Ch1,Ch2,Ch3,CH4 25 1 2 3 4 25 1 2 3 4 25 1 2 3 4 25 1 1 2 4 25 1 2 3 4 25 1 2 3 4
我已经执行了多次检查,以验证这不是我的端的代码问题。虽然我不会完全低估软件错误的可能性,但这确实看起来像是UC和ADC之间的计时问题。
另一个线程中的某个人有类似问题: e2e.ti.com/.../46.7305万
在该线程中,建议最大采样时间应为 2*(1/data rate)。 我独立得出了同样的结论,但不幸的是,这是无效的。 即使以50Hz的速率从ADS1118读取数据并将ADC上的数据速率设置为860SPS,我也发现错误仍会继续发生,只是频率较低。 如果使用860SPS以低于10Hz的频率读取数据,则不会出现错误。
该线程还建议使用单激发模式而不是连续模式。 我尝试过这两种模式,在两种模式下都看到类似的错误率。
我已从16位事务更改为32位事务,以验证配置寄存器是否与我的预期命令匹配。 它没有以任何方式改变结果。
还进行了更新,以单次读取模式读取每个通道2x,希望仅在第一次读取时出现错误。 仍然会看到偶尔出现的错误(尽管这确实会产生较低的错误率)。
mux是否有切换时间? 它未在数据表中列出。 在所有通道中循环使用是否有任何其他提示或最佳实践?