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.

[参考译文] TMS320F28379D:eQEP 问题

Guru**** 2524550 points
Other Parts Discussed in Thread: TMS320F28379D

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/772193/tms320f28379d-problem-with-eqep

器件型号:TMS320F28379D

大家好、

我尝试运行 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

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Martin:

    是的,你说对了,位置计数器在索引期间的方向变化上被错误地重置时会出现一些问题。 这是一个已知问题、已在器件勘误表中捕获。 请参阅下面的详细说明和解决方法。

    此问题将在下一版本中解决。 如果您有任何其他问题、请告诉我。

    此致

    Himanshu

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Himanshu、

    我是负责此客户的 FAE。 遗憾的是、客户的应用需要 Index Pulse。 是否有替代解决方法? 这将通过下一版本的驱动程序库来解决、还是硅问题? 下一个驱动程序版本计划在何时发布?

    此致

    Mihir Gupta

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢 Himanshu 提供的这些信息。

    不使用 PCRm=0的权变措施没有真正的帮助、因为在通过索引时我不再收到中断(可能这种行为也是一个错误)。

    认为我们必须等待下一修订版中的修复

    再次感谢、Martin