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.

[参考译文] TMS320F28069:ECAP 问题

Guru**** 2540460 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1009089/tms320f28069-ecap-issues

器件型号:TMS320F28069
主题中讨论的其他器件:C2000WARE

各位专家、您好!

我的客户使用 eCAP 模块来捕获霍尔脉冲宽度。   三个霍尔信号连接到三个 eCAP 模块。 他需要在霍尔信号的上升沿和下降沿进入中断、并在中断中的跃点边缘接近之前获得时间宽度、如下图所示。

在测试过程中、他发现当为 霍尔信号捕获两个边沿并打开其相应的中断时、只会触发第一个中断。 第二个中断既不被触发也不被捕捉、请帮助确认这是一个配置问题还是 eCAP 模块特性?

      ECap1Regs.ECCTL1.bit.CAP1POL=0    ;      

           ECap1Regs.ECCTL1.bit.CAP2POL=1    ;      

           ECap1Regs.ECEINT.BIT.CEVT1       = 1;      

           ECap1Regs.ECEINT.BIT.CEVT2            = 1;     

2.他需要捕获三个霍尔传感器中任意两个的异或之间的边沿间隔、如下图中的 T1~T6所示。

当前的做法是使用 eCAP1~eCAP3的 SyncIn 和 SyncOut、并将三个 ECAP 的中断条目设置为相同。 当进入中断时、使用 ECap1Regs.ECCTL2.bit.SWSYNC=1;

强制 TSCTR 寄存器同步三个 eCAP、由于出现问题1、折衷方案是将中断中的 ECap1Regs.ECCTL1.bit.CAP1POL 值反相、使硬件响应下一个边沿触发。

由于需要进行软件操作、因此这种方法可能具有不准确的捕获时间。

问题是:

是否有更好的方法来实现:三个霍尔连接到三个 eCAP、并且 eCAP1~eCAP3信号的 XOR 之后的任何边沿都可以进入中断、并捕获 XOR 到达该边沿的最后一个边沿的时间?

我上传以下代码并期待您的回复。 谢谢!

e2e.ti.com/.../eCap.c

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

    您好!

    C2000ware SDK 中有一个配置 eCAP 的示例。 请看一下这个。

    C:/ti/c2000/C2000Ware_3_04_00_00/device_support/f2806x/examples/c28/ecap_capture_pwm

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

    您好!

    他使用演示作为参考、但问题仍然存在。 请帮您回答问题吗? 提前感谢您。

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

    Angela、

    他是否能够运行示例、或者在运行示例中遇到问题? 该示例说明了如何设置 ISR。 有关脉冲宽度的计算、请参阅 TRM 第6.6.2节。

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

    您好、Santosh、

    我认为演示没有问题。 但我看到客户的代码与演示代码之间存在一些差异。  

    ECap1Regs.CTRPHS = 0xFFFFFFFF - ECAP_INIT_PHASESHupLIFT;

    ECap1Regs.ECCTL1.bit.prescale = 0;

    您能否查看代码以找出配置是否正确?

    非常感谢!

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

    Angela、

    我查看了代码、没有发现任何问题。 您能让他将 ISR 分为三个不同的功能吗?

     他是否检查了 eCAP2和 eCAP3的信号?

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

    您好、Santosh、

    您是要他们将 ECAP_ISR (void)分为 eCAP1_ISR (void)、 ecap2_ISR (void)、 ecap3_ISR (void)吗?

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

    c2000ware 中的例程为 eCAP1启用 CEVT4中断。  但是、它们需要的是 、它们可以触发 CEVT1和 CETV2中断、结果是只能触发 CEVT1中断、不能触发 CEVT2。

    它们仅测试了 eCAP1。  由于 eCAP1无法实现这种效果、因此未对 eCAP2和 eCAP3执行相同的测试。

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

    Angela、

    我建议首先再次查看示例并浏览 TRM/eCAP 部分。

    对于一个信号、可以使用 eCAP1、eCAP1_ISR 可以读取计数器、最多可读取 CEVT1、CEVT2、CEVT3、CEVT4。 因此、对于每个 CEVT、我们不需要单独的 ISR。

    https://www.ti.com/lit/pdf/spruh18

    例如、请参阅第6.6.2节、然后您可以从 C2000ware 中打开示例、并检查如何将其配置为捕获全部四个 CEVT 事件。

    以该示例为基础、并相应地修改客户代码。