主题中讨论的其他器件:INA229
我们在连续转换模式(MODE = 0xF)下使用 INA229。
警报被锁存(ALATCH = 1)以确保 MCU 不会错过故障条件。
我们还将使用警报的平均值(SLOWALERT = 1)、尽管问题在没有的情况下是可重现的。
当 ALERT 引脚被拉低时、MCU 进入一个环路、在这个环路中、它读取 DIAG_ALRT 寄存器、直到 BUSUL 位被清除。 由于我们使用锁存警报、读取 DIAG_ALRT 会清除 BUSUL 位、这是预期的、因此我们还必须检查 CNVRF 位是否已设置、否则我们可能只是从之前的读取中读取已清除位。
但是、经过几次迭代或读取 DIAG_ALRT 寄存器后、尽管 VBUS 仍处于下限状态、但我们读取 CNVRF = 1和 BUSUL = 0。
我的假设是在每次转换完成后设置锁存警报、实际上是这样吗?
2.如果1.正确,是否有一个 CNVRF 被置位但尚未计算 BUSUL 的周期,此时读取寄存器将返回不一致的数据?
请注意、禁用锁存警报可解决此问题、但这在我们的应用中不是一个好的解决方案、因为 MCU 没有针对 ALERT 引脚的中断、并且可能会错过短时间的故障条件。