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.

[参考译文] TMS320F2800157-Q1:未获得正确的 PWM 捕获计数

Guru**** 2553260 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1224523/tms320f2800157-q1-not-getting-correct-pwm-capture-count

器件型号:TMS320F2800157-Q1

您好!

当其中一个 DCAEVT1出现时、我想要捕获计数器的值。 DCAEVT1在一个周期内发生两次(每个向上方向和向下方向(我在向上向下模式中使用 PWM 模式)。

现在我将在其中一个计时器 ISR 中读取 DCCAP 寄存器、该计时器 ISR 与 PWM 计数器异步。 为了仅在 DCAEVT1向上方向发生时获取捕获计数、仅当 EPwm1Regs.TBSTS.bit.CTRDIR = 0时、我将读取寄存器、另一种配置如下。


EPwm1Regs.DCCAPCTL.bit.SHDWMODE = 0;
EPwm1Regs.DCCAPCTL.bit.CAPMODE = 0;

现在、根据我的理解、如果 EPwm1Regs.DCFCTL.bit.PULSESEL = 0、捕获寄存器将在 COUNTER =PRD 时更新、因此为计数器处于向上方向时发生的事件提供计数值。 但在这种情况下、它提供了一些与计数器处于递减方向时相对应的时间计数。

虽然如果 EPwm1Regs.DCFCTL.bit.PULSESEL = 1、但它给出了正确的结果、不知道当它在 CTR=Zero 处更新时是如何提供与计数 器向下计数方向相对应的计数值   

实际上、根据要求、我需要使用  EPwm1Regs.DCFCTL.bit.PULSESEL = 2、在这种配置下、它 并不总是捕获  与向上方向对应的计数值。

请告诉我需要使用哪种配置、以便仅在向上方向捕获计数。

谢谢你。

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

    您好、Jay、

    这里发生的事情是有点误解 PULSESEL 是如何工作的。 观察 DCCAPCTL.CAPMODE 寄存器字段说明:

    请注意我突出显示的内容。

    除非我错了、否则 PULDESEL 会选择哪个信号会将锁存器复位-只要发生直流事件、就会发生实际的捕捉事件。

    为了在计数器递增计数时捕获 DCEVT、设置 PULSESEL= 1。  通过此设置、DCCAP 在 CTR=ZRO 后首次发生数字比较事件时更新、这也是在计数器递增计数时。

    此致、
    Jason Osborn

    注意:此帖子的要点以粗体显示。

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

    是的、您所说的可能是真的。 但是、由于其他相关性、我 必须使用 *** = 2。 是否有办法可以通过  PULSESEL = 2配置实现向上捕获(和上述其他条件)?

    如果您能告诉我有关这种情况、那将非常好。

    谢谢你。

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

    您好、Jay、

    不幸的是、要做您所寻找的事情、我认为唯一的方法是确保您只在向上计数模式下的第一个 DCEVT 之后检索 DCCAP 的值。 这可以相对简单地通过设置数字比较事件来触发一个中断来实现、在每个备用的触发器中存储 DCCAP 的当前值。 或者、如果不可以中断、我不相信有办法做到这一点、除非测试计数方向和 TZFLG[DCxEVTY]寄存器(每次需要保存 DCCAP 的内容时、都必须用 TZCLR[DCxEVT1]手动清零)。

    此致、

    Jason Osborn

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

    感谢 Jason 证明方法使用中断.

    但是、由于一些限制和软件架构、我正在寻找不使用中断且配置 PULSESEL = 2的方法。  

    此致、

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

    您好、Jay、

    不幸的是,据我所知,如果我上一篇文章中建议的两种方法都对你有用,那么就没有其他方法可以实现这种行为。

    此致、

    Jason Osborn