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.
尊敬的 TI 支持人员:
我已经将一个 eCAP 模块设置为单次模式来捕捉三个事件:
EVT1:上升、复位计数器
EVT2:下降、不复位计数器
EVT3:上升、复位计数器
连接到 eCAP 输入的脉冲序列的频率为100kHz (由 ePWM 生成)。 软件正在通过由 ePWM 触发的 ISR 以10kHz 的频率重新布防模块。
由于 EVT3和重新布防之间需要相当长的时间、因此我希望 EVT1捕获值较大(因为在 EVT3之后 Mod4计数器停止时、可能计数器会保持运行)。 不过、奇怪的是、EVT1和 EVT3的捕获值是相同的:1999 (SYSCLK = 200MHz 时)。 因此、这看起来是我希望从连续模式而不是单次操作中获得的行为。 我删除了周期性 ECCTL2.bit.rearm = 1语句、并确认 EVT3标志不再置位、从而验证我是否确实正在运行单次触发操作。
我的结论是我不能正确理解 eCAP 的操作-因此、我们希望能有更多的见解。
初始化代码(与"ECAP_Capture_PWM_Xbar_cpu01"示例几乎相同):
ECap1Regs.ECEINT.ALL = 0x0000;//禁用中断
ECap1Regs.ECCLR.ALL = 0xFFFF;//清除标志
ECap1Regs.ECCTL1.bit.CAPLDEN = 0; //禁用 CAP1-CAP4寄存器加载
ECap1Regs.ECCTL2.bit.TSCTRSTOP = 0; //停止计数器
ECap1Regs.ECCTL2.bit.CONT_ONESHT = 1;
ECap1Regs.ECCTL2.bit.STOP_Wrap = 2;//何时停止
ECap1Regs.ECCTL1.bit.CAP1POL = 0;//上升
ECap1Regs.ECCTL1.bit.CAP2POL = 1;//下降
ECap1Regs.ECCTL1.bit.CAP3POL = 0;//上升
ECap1Regs.ECCTL1.bit.CTRST1 = 1;//复位计数器
ECap1Regs.ECCTL1.bit.CTRST2 = 0;//不要复位计数器
ECap1Regs.ECCTL1.bit.CTRST3 = 1;//复位计数器
ECap1Regs.ECCTL2.bit.SYNCI_EN = 0; //禁用同步输入
ECap1Regs.ECCTL2.bit.SYNCO_SEL = 0; //传递
ECap1Regs.ECCTL1.bit.CAPLDEN = 1;//启用单元
ECap1Regs.ECCTL2.bit.TSCTRSTOP = 1;//开始计数器
ECap1Regs.ECCTL2.bit.rearm = 1;// ARM 单次触发
ECap1Regs.ECCTL1.bit.CAPLDEN = 1;//启用单元
您好、
除非您要同步 EPWM 和 ECAP 模块、否则 EVT1没有合适的参考点、因为您主要测量从软件中启动 ECAP 计数器(使用 TSCTRSTOP 或使用重新布防重新布防)到第一个上升沿进入的时间。 此外、无论您是否重新布防、都应在第一次布防时设置 EVT3。
Frank -感谢您的回答!
但是、您如何解释我确实获得了 EVT1和 EVT3的恒定且相同的捕获值? 请注意、EVT2正按照预期的占空比发生变化。
此致、
心搏
心搏、
您能否画出 ePWM 波形的外观?
它只是一个具有固定周期和占空比的正常方波。 由 ePWM 外设产生。
但只需重申一下:EVT1和 EVT3都报告了方波的实际周期(1999年)、而 EVT2正确地报告了占空比(例如、占空比为50%时为999)。
方波为100kHz、但我仅在10kHz 重新布设。
因此、我希望 EVT1返回比周期大得多的值、但情况并非如此、这就是我要解决的问题。
谢谢、Beat
好的。 我唯一能想到的是、您的10kHz ePWM 会生成同步信号、该信号将 ECAP 计数器复位(将阶段0加载到计数器中)。 您的 ISR 实际上不是10kHz。 您的已验证过这一点吗? 需要您做一些事情来帮助了解正在发生的情况:
在10kHz ISR 中、在重新 ARM 之前和之后读取 TSCTR。
2.请提供完整的 ECAP 和 ePWM 配置代码。
弗兰克、
上述所有 ECAP 配置代码均已发布。 至于 ePWM、我可以排除那里的任何交互、因为当我保持 ePWM 禁用并测量外部信号时、问题不变。
我稍微重新配置了测试、以便进一步了解 TSCTR 和 ECFLAG 值。 我仍在以10kHz 的频率轮询 eCAP、但现在我让它在50%占空比下测量500Hz 的信号。 捕获寄存器的读数如下:
EVT1 = 399999
EVT2 = 200000
EVT3 = 399999
我现在将重新布防延迟5毫秒、这样我们就可以看到在单次操作可能停止后正在发生什么情况。 结果如下图所示。 如您所见、标记 CEVT1、CEVT2和 CEVT3正在连续设置。 这些标志保持置位状态、直到代码清除它们、然后再重新布防。 但是、您还可以看到 TSCTR 在重新布防之前被复位、这表明外设实际上并不是在单次触发模式下运行、而是对事件做出反应。
我的初始化命令序列可能有问题?
此致、
心搏、
好的。 您所看到的内容不是预期的。 请给我几天时间在当地重复您的问题、我会再给您回复。
您好、
我深入了解了您的问题、并能够再现您看到的内容。 因此、您看到的实际上是 ECAP 在单次模式下的工作方式;在这方面、文档不是很清楚。 我将提交一个 TT 以澄清文档。
所发生的情况是、在单次触发模式下、禁用初始捕获后的进一步寄存器写入、ECAP 仍在后台捕获。
本质上、单次触发模式和连续模式之间的唯一区别是、对于单次触发模式、ECAP 仍在后台进行捕获、如连续模式、但新的捕获在没有重新布设的情况下不会加载到捕获寄存器中。
如果解释不清楚,请告诉我们。
您好、
对此还有疑问吗?
您好、Frank、
非常感谢您花时间进行调查和澄清。
此致、
心搏
没问题。 如果您再看到意外行为、请告知我们。