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.

[参考译文] TMS320F28P650DK:我的 UMCL 项目中 ePwm1、ePwm2和 ePwm3的 TZOSTFLG 事件

Guru**** 2540720 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1333159/tms320f28p650dk-tzostflg-events-on-epwm1-epwm2-and-epwm3-in-my-umcl-project

器件型号:TMS320F28P650DK

您好!

我将使用 f28p65x controlCARD 和通用电机控制实验室项目基于 DRV8353S 测试我们的电机电源板。 当我在1级运行调试会话(我的电机未连接到电源板)时、motorVars_M1.moduleOverCurrent 在将 motorVars_M1.flagEnableRunAndIdentify 设置为1后设置为1。

在用于逆变器的3个 PWM I 中的每一个上都有一个一次性跳闸区域事件(EPwm1Regs.TZFLG.OST、EPwm1Regs.TZFLG.OST 和 EPwm1Regs.TZFLG.OST 都设置为1)。

drvicVars_M1.statRegs00.bit.FAULT=0、DRV8353S_nFAULT 引脚在示波器上保持在3.3V、并且示波器上的 I_U、I_V 和 I_W 信号也没有任何尖峰。

请您对导致这些事件的原因有任何了解吗?

此致、

大卫

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

    尊敬的 David:

    Unknown 说:
    drvicVars_M1.statRegs00.bit.FAULT=0、DRV8353S_nFAULT 引脚在示波器上保持3.3V、并且我在示波器上的 I_U、I_V 和 I_W 信号也没有任何尖峰

    您是否检查了 CMPSS 状态寄存器以确保没有锁存、只是为了完全排除这种可能性? 示波器可能会滤除一些短尖峰、但这种情况不太可能发生。

    此致!

    凯文

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

    尊敬的 Kevin:

    非常感谢您的回复。

    这些都不会被锁存:

    我的 ADC 任务如下:

    我在 hal.h 中的设置:

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

    尊敬的 Kevin:

    我在 EPwm1、EPwm2和 EPwm3上仍然有这项 TZOSTFLG 活动。

    我明白,有各种可能的来源,这旗:

     - MTR1_XBAR_Input1上的事件(已在我的项目中链接至 DRV8353S_nFAULT,示波器上没有下降沿 TRIG )

     - CmpssxRegs.COMPSTS.COMPyLATCH (在 cmpss6、cmpss2和 cmpss5上未检测到锁存,链接到 I_U、I_V 和 I_W,在我的示波器上的这三个信号上没有波纹和尖峰)

    单次触发跳匣区域标志事件是否有任何其他可能的来源?

    此致、

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

    很抱歉在这里和通过电子邮件回复的延迟,我不幸生病了。

    以下是可以设置 moduleOverCurrent 故障标志的代码:

    任何 ePWM 一次性跳闸以及数字比较事件1或事件2。 根据代码、翻转这3个标志中的任何一个都可以设置此标志、 其他任何东西都无法设置。

    下面是我将要介绍的快速流程图:

    • 数字比较子系统由 EPWM XBAR 馈送7:
    • 直流跳闸逻辑可确保在 EPWM XBAR 7变为高电平时、EPWM 会强制所有输出为低电平。  EPWM XBAR 7是相关 CMPSS 模块的输出、我们之前已经讨论过:
    • DCAEVT1是数字比较机制、用于馈送到 TZ 的一次性逻辑;DCAEVT2是数字比较机制、用于馈送到 TZ 的逐周期逻辑、如我的第一个流程图所示。
      • 请注意、虽然图1表示正在使用 DCAEVT2、但根据配置代码、DCAEVT2并不是实际配置、并且应该永远无法触发。 这不应该是问题的原因、但如果您想验证这一点、可以从上面删除"| EPWM_TZ_FLAG_DCAEVT2"。

    OST 是所有启用的 TZx 信号的逻辑或。

    这意味着输入 XBAR 输入1是 唯一 可导致 EPWM OST 标志的信号。

    • MTR1_PM_nFAULT_GPIO 是连接到逆变器 nFAULT 信号输出的 MCU 的数字输出端(该注释应显示为 TZ1)。

    最后、 HAL_disablePWM ()函数调用 ePWM_forceTripZoneEvent ([ePWM base]、ePWM_TZ_FORCE_EVENT_OST )。 以下是只能调用 HAL_disablePWM ()函数的次数:

    • 进行了采样和过采样。
    • 如果电机识别期间 FAST 估算器中出现错误、
      • 需要说明的是、我已在 FAST 估算器的源代码中验证过、这只能在 FAST 电机识别例程期间使用。
    • 当设置了 BRAKE_ENABLE 预定义并且其他事件导致电机进入制动状态时。

    调试想法:

    1. 在跳闸期间、以下寄存器的完整内容是什么?
      1. ePWM 寄存器 TZFLG
      2. ePWM 寄存器 TZCBCFLG
      3. ePWM 寄存器 TZOSTFLG

    2. 更改以下强制跳闸机构:
      1. 每次 出现 EPWM_FORCETripZoneEvent 时、将"EPWM_TZ_FORCE_EVENT_OST"更改为"EPWM_TZ_FORCE_EVENT_DCBEVT1"
        1. HAL_setupPWM ()
        2. HAL_disablePWM ()
      2. 完成此操作后、再次检查上面列出的 EPWM 寄存器-这意味着它仍会停止电机、但它应该设置不同的标志、从而可以更轻松地调试问题。

    3. 请注意:  默认情况下不会清除 ePWM 寄存器 TZCBCFLG 和 TZOSTFLG。 我建议在首次启用电机之前手动将其清零。 或者,如果您不想在寄存器中手动执行此操作,请在 返回前将以下代码添加到 HAL_clearMtrFaultStatus ()函数的末尾:

      #define CLR_FLG_ALL_DEBUG_CBC (EPWM_TZ_CBC_FLAG_1 | EPWM_TZ_CBC_FLAG_2 | EPWM_TZ_CBC_FLAG_3 | EPWM_TZ_CBC_FLAG_4 | EPWM_TZ_CBC_FLAG_5 | EPWM_TZ_CBC_FLAG_6 | EPWM_TZ_CBC_FLAG_DCAEVT2 | EPWM_TZ_CBC_FLAG_DCBEVT2)

      #define CLR_FLG_ALL_DEBUG_OST (EPWM_TZ_OST_FLAG_OST1 | EPWM_TZ_OST_FLAG_OST2 | EPWM_TZ_OST_FLAG_OST3 | EPWM_TZ_OST_FLAG_OST4 | EPWM_TZ_OST_FLAG_OST5 | EPWM_TZ_OST_FLAG_OST6 | EPWM_TZ_OST_FLAG_DCAEVT1 | EPWM_TZ_OST_FLAG_DCBEVT1)

      EPWM_clearCycleByCycleTripZoneFlag(obj->pwmHandle[0], CLR_FLG_ALL_DEBUG_CBC);
      EPWM_clearCycleByCycleTripZoneFlag(obj->pwmHandle[1], CLR_FLG_ALL_DEBUG_CBC);
      EPWM_clearCycleByCycleTripZoneFlag(obj->pwmHandle[2], CLR_FLG_ALL_DEBUG_CBC);

      EPWM_clearOneShotTripZoneFlag(obj->pwmHandle[0], CLR_FLG_ALL_DEBUG_OST);
      EPWM_clearOneShotTripZoneFlag(obj->pwmHandle[1], CLR_FLG_ALL_DEBUG_OST);
      EPWM_clearOneShotTripZoneFlag(obj->pwmHandle[2], CLR_FLG_ALL_DEBUG_OST);

    此致、
    杰森·奥斯博尔恩

    所有代码的映像都来自通用电机控制实验。 所有其他图像均来自 TMS320F28P65x TRM。