大家好、
我尝试运行 TMS320F28379D 的 eQEP 并将 CCS 与 F2837xD 驱动程序库 v3.05结合使用
在 eQEP 初始化之后、我在无限循环中使用"eQEP_getPosion"来检查位置。 此外、我将使用 eQEP 的中断处理程序触发器、通过"eQEP_getIndexPositionLatch"检查位置锁存器。
启动后、我向前移动编码器并得到以下结果:
POS:0 {向前推进}
位置:1.
位置:2.
(笑声)
(笑声)
位置:39998
位置:3999
*IRQ* (获取位置锁存器3999)
POS:0
位置:1.
位置:2.
(笑声)
(笑声)
位置:39998
位置:3999
*IRQ* (获取位置锁存器3999)
POS:0
位置:1.
位置:2.
(笑声)
(笑声)
这看起来很好。 再次启动但向后移动编码器后、我得到:
POS:2 {向后移动}
位置:1.
POS:0
*IRQ* (获取位置锁存0)
位置:3999
位置:39998
(笑声)
(笑声)
位置:2.
位置:1.
POS:0
*IRQ* (获取位置锁存0)
位置:3999
位置:39998
(笑声)
(笑声)
看起来也很棒。 只要我沿相同的方向移动编码器、一切看起来都很好。
但现在问题是:当我以不同的方向传递索引时、我会遇到一个问题:
位置:3995 {向前推进}
位置:3996
位置:3997
位置:39998
位置:3999
*IRQ* (获取位置锁存器3999)
POS:0
位置:1.
位置:2.
POS:3 {现在向后移动}
位置:2.
位置:1.
POS:0
位置:3999
位置:39998
位置:3997
位置:3996
* IRQ* (获取位置锁存器3996和 eQEP_INT_POS_CNT_ERROR)
位置:3999
位置:39998
位置:3997
位置:3996 {向前迈进 agian}
位置:3997
位置:39998
位置:3999
POS:0
位置:1.
位置:2.
* IRQ* (获取位置锁存器2和 eQEP_INT_POS_CNT_ERROR)
POS:0
位置:1.
位置:2.
位置:3.
(笑声)
当仍向前移动并在360度后再次传递索引时、一切都正常:增殖器。
(笑声)
位置:39998
位置:3999
*IRQ* (获取位置锁存器3999)
POS:0
位置:1.
位置:2.
(笑声)
(笑声)
索引中断在改变方向后很晚才出现、我不知道原因。 大多数情况下、索引中断为3
时钟周期太晚、有时为2时钟、有时高达7时钟。
为了检查我是否存在一些硬件问题、我将/A/B/I 引脚配置为正常输入引脚并打印出何时发生的情况
移动编码器:
A B I
----
0 0 0 0
1 0 0
1 1 0
0 0 1
1 0 0
1 1 0
0 1 0
0 0 0 0
即使我更改方向、该图案也不会改变。
这是我的初始化代码(基于来自驱动程序库的示例):
SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_EQEP3); GPIO_setPadConfig (6、GPIO_PIN_TYPE_STD); GPIO_setPadConfig (7、GPIO_PIN_TYPE_STD); GPIO_setPadConfig (9、GPIO_PIN_TYPE_STD); GPIO_setPinConfig (GPIO_6_EQEP3A); GPIO_setPinConfig (GPIO_7_EQEP3B); GPIO_setPinConfig (GPIO_9_EQEP3I); interrupt_register (INT_EQEP3、&index_interrupt_handler); Interrupt_enable (INT_EQEP3); eQEP_setDecoderConfig (EQEP3_base、(eQEP_CONFIG_1X_RESULTION |eQEP_CONFIG_Quad_SWAP));eQEP_RESPON_RESPON_EMEP_RESPONSITION |eQEP_RESPON_RESPON_MOECTION |eQEP_MODE_RESPON_RESPON_MODE_RESPON_RESPON_EMEP_RESPON_RESPON_RESPON_RESPON_MOECTION | eQEP 编码器_MAX_TICKs - 1); eQEP_enableUnitTimer (EQEP3_base、(f2837x:::系统::get_cpu_clock_speed ()/ 100)); eQEP_setLatchMode (EQEP3_base、eQEP_LATCH_UNIT_TIME_OUT); eQEP_enableInterrupt (EQEP3_base、eQEP_INT_index_EVNT_LATCH | eQEP_INT_UNDERFLOW | eQEP_INT_OVERflow | eQEP_INT_POS_CNT_ERROR | eQEP_INT_PHASE_ERROR); eQEP_ENCE_LEVITH (EQEP3_BASE_EQEP_32、 eQEP_CAPTURE_ECT_LET_EQEP_EQEP_LET_LET_EQEP_EQEP_CEDUNIT) eQEP_enableCapture (EQEP3_base);
我还使用相同的结果测试了锁存模式 eQEP_LATCH_RISE_INDEX 和 eQEP_LATCH_FALLING_INDEX。
如果有任何帮助、我们将不胜感激、
Martin