我们在其中一个设计中采用了 ADS8686 16通道 ADC。 大多数情况下、ADC 正确读取整个通道序列。 但是、有时它似乎只读取一个序列、并重复该序列读取、而不是读取所有通道。 我不确定是什么导致了这种情况、也不确定如何可靠地重现这种情况。 但是、一旦开始重复中的 seq0读数、就会保持该模式。
背景:
模拟 VDD=5 VDC、数字 VDD=3.3 VDC、随附原理图。
OUT HW 已将 ADS8686配置为在串行 SPI、单线模式下运行。 该芯片在加电时经历了长时间复位。 我们运行 SPI 总线@ 4MHz、并且能够对配置寄存器进行编程、使其以软件配置的5个序列运行、这些序列在突发模式下使用一个 CONVST 回读。 我已通过读回所有已编程寄存器并确认读回的值与编程值匹配来确认序列配置是否正确。 即使 ADC 读数不佳、配置寄存器的内容也会保持正确。 在初始配置后、我们绝不会重置芯片。 在初始 ADC 配置结束时、我们对10个 ADC 通道的整个序列执行虚拟 ADC 读取、并确认数据读取正确。 我们可以告诉这一点、因为 Ch4A 被编程为始终输出0xAAAA、当读数良好时、该通道的读数为预期的0xAAAA。 我有(请参阅随附的 SPI 时序屏幕截图。 BTW:进入 ADS8686的 CLK 信号实际上与 Saleae 屏幕截图中显示的信号相反。)
初始化后、后续 ADC 读数也会产生预期结果。 然而、经过一段时间且由于未知原因、ADS8686开始返回1个序列值的数据、在读取期间重复5次。 实际上、即使是一个序列数据也似乎非常接近 CH_B0重复的 CH_A0数据以及随后的 CH_Ax 和 CH_BX 值。 (当考虑 CH_AS 和 CH_B 具有的不同范围时。) 我已确认,当 ADC 读数错误(重复 CH A0)时,SPI 读数和 CONVST,示波器上的忙时计时与正常读数情况相同。 数据内容是垃圾。
我的 ADC 初始化和 readADC 函数都已附加。
我们还发现,如果我们生成两个连续的 CONVST 脉冲并等待忙线指示“转换完成”,那么我们的间歇性读取问题频率就更难重现。 但我们不知道为什么,也不能确定这是我们问题的真正解决方案。
感谢你的帮助、
Fred
e2e.ti.com/.../ADS8686.pdfe2e.ti.com/.../ADS8686_5F00_Timing.pdf