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.

[参考译文] TMS320F280049C:ePWM 比较事件似乎加载错误/未命中

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

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1557284/tms320f280049c-epwm-compare-events-seem-to-be-incorrectly-loaded-missed

器件型号:TMS320F280049C
主题:SysConfig 中讨论的其他器件

工具/软件:

我们使用以下代码块以 50%的占空比运行 EPWM 以写入周期/比较值:

void PWM_setPeriod (Pwm_Ctrl 结构 v){
//为每个 EPWM 设置周期(链接到 epwm1 周期)
uint32_t OLD = HWREG (EPWM1_TIMER_BASE + HRPWM_O_TBPRDHR);
uint32_t cmpa =(旧版> v.period)? V.period:旧)- pwm_deadidside;

HWREG (EPWM1_TIMER_BASE + HRPWM_O_TBPRDHR)= v.period;
HWREG (EPWM1_TIMER_BASE + HRPWM_O_CMPA)= cmpa;
HWREG (EPWM1_TIMER_BASE + HRPWM_O_CMPB)= PWM_死 区;

EPWM1A 的动作限定器按如下方式进行设置:
HighOnUpDriven.Bits.ZRO = AQ_OFF;
HighOnUpDriven.Bits.PRD = AQ_OFF;
HighOnUpDriven.Bits.CAU = AQ_LOW;
HighOnUpDriven.Bits.cad = AQ_low;
HighOnUpDriven.Bits.CBU = AQ_HIGH;
HighOnUpDriven.Bits.CBD = AQ_LOW;

这镜像 在 EPWM1B 中、以使 CAD 将其设置为高电平、CDB 将其设置为低电平。 这是为了实现我们想要的 50%占空比加上 PWM_DEADTIME 中设置的一些死区 — 设置为 0x40000。
时钟输入为 100MHz、频率范围为 50k 至 250k(因此在 prd 寄存器中低至 200)。


使用的其他 EPWM 同步到 EPWM1。 我们使用 HRPWM 和影子加载、这意味着当 COUNTER = 0 且= prd 时必须加载 CMPA/B、而 prd 只能在 COUNTER = 0 时加载(根据 SysConfig 1.19 GUI 中的警告/错误)。

我的假设是、第一个代码块将捕获写入高于 prd 的 CMPA 事件的任何可能性、无论我们在周期中何时写入该事件、因此我们绝不能错过 CMPA 上部事件 — 但我们确实如此。

有时我们只会错过关断事件、因此 EPWM1A 将正确关断、但降压过程中不会导通 1B、因此我们会错过单个周期。 有时、我们会在上下过程中错过 CMPA 事件、这样 1A 桥臂在整个周期加上下半个周期内有效保持高电平、而 1B 在相同的 3 个半周期内保持低电平(请参阅下图)。

  

我们已经花了几天时间对此进行了研究、我觉得我已经探讨了 sysconfig/我的代码中的大多数可能性、并且没有说明如何从配置角度实现这一点。 任何见解都将不胜感激。

谢谢、
Tom

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

    其他一些事情 — 没有相移(从示波器屏幕截图中可以看到)、可能会错过比较事件、这个代码来自 CLA。 我们还以固定频率在开环中运行控制、然后看不到会发生这种情况;因此假设这与负载本身有关。

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

    您好、Tom、

    因此、了解更多背景信息。

    是否设置了 PHSEN? 当您提到没有相移时、您是否意味着未使用 TBPHS 和 PHSEN = 0?

    假设不涉及 TBPHS、我的最佳做法是在下一个加载事件之前、计数器比较值/TBPRD/AQCTLA/B 值并未全部更新、这会导致操作缺失。

    您能否尝试使用一次性全局加载来确保对所有需要更新的寄存器进行写入、然后将加载选通设置为一起更新所有 PWM 寄存器?

    此致、

    Ryan Ma

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

    您好、Ryan、

    此时、TBPHS 为 0、但相位加载仍处于启用状态、因为我们在工作中的不同点使用它。 我确实想了如果我们设法错过了负载会发生什么情况、我认为这不是您会看到的波形((LHS 照片可能仅是由于在 CTR = PRD 时加载 CMPA > PRD 引起的、而 RHS 照片仅在<xmt-block1> CTR</xmt-block> = 0 时 CMPA > PRD 时产生,我认为从数学角度而言这两种情况都不允许)。 CTR。 增加 PWM_dead死 区的值确实使之更好(更长的时间直到我们发生事件)、但没有解决。

    我还让 ISR 切换一个 GPIO 来查看值何时实际写入、如果 ePWM 三角波底部几乎发生了写入(忘记向上计数)、那么我们错过了一个事件的情况并不一致、因此我认为这不一定与计时不良的写入有关。

    我们 在具有相同固件的同一 PCB 上有 4 个 049C、只有其中一个会出现这种情况、这表明在这里也必须有一些外部因素发挥作用、我不知道这如何影响 ePWM 外设、但这些波形是从 GPIO 获取的。

    我将了解如何实现全局负载 — 粗略检查 SysConfig GUI 中的设置后发现 TBPRDHR 虽然与它不兼容?

    谢谢、

    Tom

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

    您能否将 TBPHS 更新为 1 或 2、这将确保由于每个模块内部的延迟、PWM 模块之间实现完美同步。 否则、PWM 模块及其计数器之间会出现一些错位情况。  

    简而言之。 如果您以 SYSCLK == TBCLK == EPWMCLK 运行 ePWM、则将 TBPHS 设置为+ 2(对于 F28004x、没有 EPWMCLK、因为 EPWMCLK 等于 SYSCLK)、如果以低于 SYSCLK 的速度运行、则将 TBPHS 设置为+ 1。

    如果您仍然看到漏脉冲、您能给一次性全局加载一个镜头吗? SysConfig 警告可能是由于某种情况导致的、在这种情况下、我需要与团队进一步深入研究、以了解不允许全局加载一次性+ TBPRDHR 的特定场景。

    加载事件附近发生全局加载存在一个已知问题、为了确保不会发生这种情况、您可以插入以下代码、在其中写入全局加载一次性锁存器。

    Y–加载事件之前的一些缓冲区

    if (EPWM_getTimeBaseCounterValue (EPWMx_base)> 0 && EPWM_getTimeBaseCounterValue (EPWMx_base)< EPWM_getTimeBasePeriod (EPWMx_base)- y)

       EPWM_setGlobalLoadOneShotLatch (EPWMx_base);   

    };

    此致、

    Ryan Ma

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

    您好、Ryan、

    我尝试使所有 TBPHS 寄存器饱和到>= 2U、但这根本不影响该行为。 在写入 CMPA 和 PRD 的值后、我们还会监控这些值、以查看写入过程中是否出现问题、但始终不会遇到 CMPA 大于 PRD 的情况。 我们增加 PWM_dead死 区以等于 260ns(因此 0xD000 取自周期)、这样我们在一小时测试后没有看到错误。

    我不明白如果 CMPA “从不“高于 PRD(至少在寄存器中)、增加的幅度如何会让问题消失、但似乎是这样。 我不想说问题已解决、因为这绝对是一种解决方法、而不是根本原因的解决方案。

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

    您好、Tom、

    您是否可以通过任何方式发送设置的 EPWM 初始化? 您能否仅向我发送主器件 PWM 配置+一个从器件 PWM 配置导致脉冲丢失?

    我可以尽力查看这里是否能够重现漏脉冲以进一步调试此问题。  

    此致、

    Ryan Ma

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

    Ryan、抱歉响应速度太慢、我们成功地用足够大的 PWM_deadtime 值来解决问题、因此现在优先级列表中没有列出根本原因。 从下周开始、我将休假几周、因此我会在接下来的几周内尝试给您配置 、或者在有更多时间进行调试后、可能在之后。 我希望我们可以暂时解决这个问题、因为这个死区增加并没有说明问题的根本原因。

    谢谢、

    Tom

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

    您好、Tom、

    如果您可以使用测试用例创建新的线程、这样我们就不会让线程打开太长时间、那将会更好。 “你怎么了?

    此致、

    Ryan Ma