主题中讨论的其他器件:SysConfig
工具与软件:
我需要知道何时会遇到 QEI 的 ABZ 输入的零(索引)脉冲。 我可以将 SysConfig 设置为在发生零事件时生成中断、但该中断可能在零脉冲或计数器计数为零时发生。 我需要知道我的伺服系统的绝对位置、一个伪零或不知道何时绝对确定零是一个显示停止。 我是否有方法可以将零脉冲与计数器=零条件隔离?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具与软件:
我需要知道何时会遇到 QEI 的 ABZ 输入的零(索引)脉冲。 我可以将 SysConfig 设置为在发生零事件时生成中断、但该中断可能在零脉冲或计数器计数为零时发生。 我需要知道我的伺服系统的绝对位置、一个伪零或不知道何时绝对确定零是一个显示停止。 我是否有方法可以将零脉冲与计数器=零条件隔离?
可能我错过了该值、但我看到无法在启动时将计数器值预加载到某个值。 似乎从加载值或零开始、很难判断。 在这种情况下、加载值是计数器在递减到零时绕回或在递增到零时绕回的值。 因此、LOAD 值定义了位置测量中的位数。 如果我的表达式正确、那么最初无法使计数器的值远离零、因为加载值基本上为-1。 我通过将零脉冲绑定为高电平禁用了零脉冲、但仍然获得零事件中断、因此我关于在计数器经过零时获得中断的观察结果是正确的。
注意: 在本例中、计数器为16位、并且我正在使用全部16位、因此不可能得到超出工作范围的值。 如果不能确定起始点、则无法保证在计数器由于无法检测到 SW 中的变化而不能足够接近零时会遇到零指数。 如果精确的绝对定位至关重要、那么即使是几位误差也可能很大。 因此我看不到该解决方案的 SW 解决方案。 当然、一旦遇到零脉冲、位置就正确、但不知道何时遇到零脉冲、系统就可能会锁定到错误的位置、认为它遇到了零指数。
除了零索引输入之外、是否有办法"知道"零索引已经遇到并且没有将其连接到单独的 GPIO?
尊敬的 Martin:
您可以写入计时器的 CCTR 寄存器并设置计数器值、然后启动计时器。 例如、如果您希望电机在全旋转中以3600增量递增、则可以将初始负载设置为7202、将计时器计数设置为3601。 这样、在您的初始条件下、在首次接收零脉冲之前、您不会意外进入负载或零。 然后、您可以使用影子加载来加载实际的3600加载值、并让零脉冲对计时器进行归零。
其 driverlib 函数为 DL_Timer_setTimerCount (GPTIME_Regs * gptimer、uint32_t value);
当然、这只是处理该问题的一种方法、您的特定系统可能需要进行不同的调整、或者您知道系统所需的更好限制。