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:相移时 PWM 信号缺失

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1294864/tms320f28379d-pwm-singnal-missing-when-phase-shifting

器件型号:TMS320F28379D

你(们)好。

我将 F28379D 控制器用于我的应用、以控制两个全桥转换器。 其中、我将使用4个 ePWM。 Im 将 EPWM1保持为主站、这将 在 EPWM_SYNC_OUT_PULSE_ON_COUNTER_ZERO 时生成 SYNCOUT 事件。 我面临的问题是(仅关注 EPWM3)、当我将 EPWM3 的 TBPHS 中的相移值从0更改为1时、它丢失了一个完整周期的脉冲。 我尝试了许多不同的值、发现只有当我从0移位到其他值时才会发生。 我已经阅读过一些 E2E 论坛和 TRM、但没有为此找到合适的解决方案。 下面给出了我在 EPWM3中使用的配置、请看一下。 请向我提供解决方案、原因和 解决方法。 谢谢

EPWM3:

//
//设置 TBCLK
//
ePWM_setTimeEPWM3_BASEPeriod (EPWM3_BASE、EPWM_TIMER_TBPRD-1);
EPWM_setPhaseShift (EPWM3_BASE、0u);
EPWM_setTimeEPWM3_BASECounter (EPWM3_base、0U);

//
//设置比较值
//
EPWM_setCounterCompareValue (EPWM3_base、
epwm_counter_compare_A、
(EPWM_TIMER_TBPRD/2)-1);
EPWM_setCounterCompareValue (EPWM3_base、
epwm_counter_compare_B、
(EPWM_TIMER_TBPRD/2)-1);


//
//设置计数器模式
//
EPWM_setTimeEPWM3_BASECounterMode (EPWM3_BASE、EPWM_COUNTER_MODE_UP);
EPWM_disablePhaseShiftLoad (EPWM3_base);
EPWM_setClockPrescaler (EPWM3_BASE、
epwm_clock_divider 1、
EPWM_HSCLOCK_DIVIDER_1);

//
//设置隐藏
//
EPWM_setCounterCompareLoadLoadLoadMode (EPWM3_base、
epwm_counter_compare_A、
EPWM_COMP_LOAD_ON_CNTR_ZERO);
EPWM_setCounterCompareLoadLoadLoadMode (EPWM3_base、
epwm_counter_compare_B、
EPWM_COMP_LOAD_ON_CNTR_ZERO);


EPWM_setDeadBandControlShadowLoadMode (EPWM3_BASE、EPWM_DB_LOAD_ON_CNTR_ZERO);

//
//设置操作
//
EPWM_setActionQualifierAction (EPWM3_BASE、
ePWM_AQ_OUTPUT_A、
ePWM_AQ_OUTPUT_HIGH、
ePWM_AQ_OUTPUT_ON_TIMEEPWM3_BASE_ZERO);
EPWM_setActionQualifierAction (EPWM3_BASE、
ePWM_AQ_OUTPUT_B、
ePWM_AQ_OUTPUT_HIGH、
ePWM_AQ_OUTPUT_ON_TIMEEPWM3_BASE_ZERO);
EPWM_setActionQualifierAction (EPWM3_BASE、
ePWM_AQ_OUTPUT_A、
ePWM_AQ_OUTPUT_LOW、
ePWM_AQ_OUTPUT_ON_TIMEEPWM3_BASE_UP_CMPA);
EPWM_setActionQualifierAction (EPWM3_BASE、
ePWM_AQ_OUTPUT_B、
ePWM_AQ_OUTPUT_LOW、
ePWM_AQ_OUTPUT_ON_TIMEEPWM3_BASE_UP_CMPB);

//
// ePWM1 SYNCO 在 CTR =0时生成
//
EPWM_setSyncOutPulseMode (EPWM1_BASE、EPWM_SYNC_OUT_PULSE_ON_COUNTER_ZERO);

在这里、我附加了丢失脉冲事件。 黄色- EPWM3A、绿色- EPWM3B 均为完整信号。  

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

    尊敬的 Kardwick:

    何时将 TBPHS 值更新为1? 我还看到您正在 初始化时为 EPWM3禁用相移负载。 您应该确保启用相移加载以实现相移、您是否 在 ISR 中更改了此设置、其中更新了 TBPHS?  

    此致、

    艾里森

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

    您好、感谢您的快速响应。

    实际上、我将通过调试模式通过直接更改 TBPHS 寄存器值来更改相移。 最初、它保持零相运行。 一旦我将其值更改为1、它就会错过一次脉冲周期、然后恢复正常情况。 我将首先禁用、然后在配置外设后在 EPWM3上启用启用启用相位加载功能。  e2e.ti.com/.../7077.Epwm.c 我要附加我使用过的配置文件。  

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

    尊敬的 Kardwick:

    感谢您分享您的.c 代码;我看到您现在也在使用 HRPWM。     在实施 HR  死区模块时、似乎是将 EPWM 模块设置为向上计数、对吗? 器件 TRM  第 15.14.1.6节"死区高分辨率操作 "中有一条注释指出:"在向上计数模式下、死区模块在启用任何高分辨率模式时不可用。" 因此、如果不这样做、我建议在此应用中切换到向上向下计数模式。 在第 15.7.2节"死区子模块"其他运行模式 "中还有另一条说明、指出"高分辨率死区 RED 和 FED 需要半周期计时模式(DBCTL[HALFCYCLE ]= 1)"、因此请也进行研究。  如果您要 使用向上向下计数、还应确保  在使用 HR 时基周期控制时、CMPA/B 必须在"TBCTR = 0或 PRD"时启用影子加载。  

    如果 到目前为止我对您的程序有误解 、或者您需要在此澄清、请告诉我。

    此致、

    艾里森

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

    您好、感谢您的回复。
      我已在代码中配置为 HRPWM、但我不使用任何 HRPWM 功能。 但是、这次我已经从代码中禁用了所有 HRPWM、并检查了 PWM。 但是、这次我也遇到了同样的问题。 我的观察结果是、在调试器模式下执行时。 当我将 TBPHS 从较高的值更改为较低的值时、可以观察到缺少脉冲、二者的差值为(High_value - Low_Value)。 我分享了一些与改变不同值的相移有关的图片。 您能不能检查我做错了什么并建议一种正确的做法吗? 我已经随附了新的.C code.e2e.ti.com/.../8780.Epwm.c

    注意:PWM 的时间周期为10us。 占空比为50%(5uS)。 黄色- PWM3A、绿色- PWM3B
    1. TBPHS 中的相移值从999更改为1

     

    2. TBPHS 中的相移值从999更改为750

    3. TBPHS 中的相移值:从750更改为1

      

    4. TBPHS 中的相移值:从900更改为800

    谢谢。

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

    尊敬的 Kardwick:

    有时、由于事件的顺序以及您切换到的 TBPHS 值、可能会发生缺少脉冲和较长的高电平脉冲、这可能会导致缺少操作限定符。 以下是另一个主题上发生这种情况的简要说明: https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1185529/tms320f280049c-the-first-period-of-the-output-waveform-is-abnormal-after-the-pwm-phase-shift-value-changes-from-0-to-non-0?tisearch=e2e-sitesearch&keymatch=missing%2525252520pulse%2525252520phase%2525252520shift#

    由于处于向上计数模式、 请记住 CTR = PRD 和 CTR = 0也同时出现。 在我列出的其他线程的解释中、您会注意到预期会出现此脉冲行为 (另外、更难判断  这里是否确实有问题、因为您要在调试器模式期间直接在寄存器中更改 TBPHS 值、并且我们不知道事件流程中何时确切地实现了 TBPHS 值、而不是在 某个固定时间更新该值)。  

    您是否尝试在某个固定/已知时间/ISR 更新 TBPHS 值并且仍然发现问题发生? 或者是否仅当您在调试模式下手动更改 TBPHS 值时?

    此致、

    艾里森

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

    您好、很抱歉耽误您的时间。 感谢您的建议。 我已经完成了您共享的线程。 现在、在比较事件期间、我设法对丢失的脉冲采取了措施。 但是、在测试代码时、我发现了另一个问题。 这不是预期的,我也不知道为什么会发生。

    在我的代码中、我使用向上向下双向计数模式、周期为500。 我比较了 CMPA = CMPB = 250等事件。 AQ 事件为、向上 CMPA 时为 PWM4A 高电平、向下 CMPB 时为 PWM4A 低电平。 默认情况下、它在同步后进行倒计数。 我面临的问题是、当我将 TBPHS 值从499更改为500时、我面临相同的缺失脉冲。 我不知道是什么导致信号不变为低电平、PWMA 信号在一个完整周期中为高电平。 我还附上了我的代码和示波器图像的快照。 您能否找到问题、以及为什么会发生这种奇怪的事情。 Thankse2e.ti.com/.../EPWM-FirmWare-Source-File.cImage 显示了从499到500的相位转换期间的 PWM4A。

    我已经完成了另外一项检查、即我已经为 DOWN_CMPB 事件启用了 PWM-ISR。 在 ISR 中、我要切换一个 GPIO。 我发现、在丢失脉冲时、ISR 事件也不会生成。 我附上了示波器图像。 黄色信号为 EPWM4A (缺少脉冲)、绿色信号为发生 DOWN_CMPB 事件时的 GPIO 切换。 我在附件中绘制了一些有关相移的理解的图片、如果我弄错了、请修正我。 请尽快验证并提供此问题的解决方案。 谢谢

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

    Karthik、您好、

    很高兴您能够查看主题帖并解决问题的第一部分!

    在我们深入讨论这个问题之前、 我再次想问您在测试时是否使用了 HR 设置(我知道、您刚才说过不使用)。 最好在没有启用 HR 的情况下对其进行测试,以验证它不仅仅是 HR 配置问题。

    您的理解对我来说似乎是正确的。 但我想知道这是否与同步的时序以及 可能生成 缺失的 AQ 的特定值有关。 当 TBPHS=500时、对于所有同步事件、是否会出现这个缺少的 AQ? 如果您将 TBPHS 设置为任何其他值、您会看到相同的行为吗? 您确切地在何时发出同步事件? 和系统背景-在您的应用中为什么需要500相移吗?

    此致、

    艾里森