您好!
我在使用 ScanIF 进行旋转检测时遇到 TCI 问题。 我使用测试周期来注入7个模拟信号的附加测试、并检查信号是否处于预期边界内。 要使用比较器计算信号的数字值、我使用简单的二进制搜索算法:
//[...] if ((SIFCTL2 & 0x0001)!= 0) dac1_value += delta; 否则 dac1_value = delta; SIFDACR6 = dac1_value; if ((SIFCTL2 & 0x0002)!= 0) dac2_value += delta; 否则 dac2_value = dac1_value; = dac2_delta = dAC2或 dac2 = dac1; 如果 dac2 = dac2 = dac1 或 dac1、 则 dac2 = dac1或 dac2 = dac1
遗憾的是、在校准过程中、我从 PSM 获得额外的中断、这些中断会生成错误的旋转计数。 如果我对这两行进行注释、一切正常:
//SIFDACR6 = dac1_value;
//SIFDACR7 = dac2_value;
上图显示了正常运行期间7个 TCI、无需修改 SIFDAC6/7。 DBG0 -来自 ScanIF 的中断处理程序。 扫描中断处理程序(SIIFG1)的 DGB1结束。
上图显示了在7个测试周期内修改 SIFDAC6/7时 PSM 的额外计数周期。 这些附加周期在随机扫描结束中断处(图片仅显示示例)。
DBG2显示了 SIFIFG3中断的处理程序。 当 SIFDEBUG 设置为0x0001 (检查当前 PSM 状态)与 PRV 不同时、切换 DBG3。 这意味着 PSM 检测到真正的转弯、不仅会生成错误中断。 在整个过程中、线圈未阻尼、并且处于稳定状态。 因此、不应在 PSM 中进行状态更改。
我使用通道0和1来实现正常运行、并且在 INIT 上将 SIFDAC0/1/2/3设置为恒定值、并且在整个校准过程中不会改变。
我怎么做了?
此致 Maciek