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.

[参考译文] TMS320F280025:为什么无论 CMPSS1输出是什么、ePWM 都会跳变?

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1503641/tms320f280025-why-are-epwms-tripped-no-matter-what-cmpss1-output

器件型号:TMS320F280025

工具/软件:

我实现了一个简单的功能: 使用 CMPSS1.LOW_COMPARIER 将外部电压与内部阈值电压 进行比较-内部阈值电压通过 CMPSS1的内部 DAC 生成(例如设置为1500)。  当 外部电压低于 内部阈值电压(例如1500)时、CMPSS1.CTRIPL 会触发所有 ePWM。

  • 我确保 CMPSS1.LOW_COMPARIER 配置正确;我们通过以下实验进行了验证:
    • 当 外部电 压低于 内部阈值电压(例如1500)时、CMPSS1regs.COMPSTS.COMPLSTS = 1   --这是正确的
    • 当 外部电压 高于 内部阈值电压(例如1500)时、CMPSS1regs.COMPSTS.COMPLSTS = 0   --这是正确的

  • CMPSS1.low_compiler.CTRIPL 用于通过以下线路使 ePWM 跳变、从而通过 ePWM X-BAR 连接到 TRIP10:

           

            XBAR_setEPWMMuxConfig (XBAR_TRIP10、XBAR_EPWM_MUX01_CMPSS1_CTRIPL);
            XBAR_enableEPWMMux (XBAR_TRIP10、XBAR_MUX01);

  • 奇怪的是:
    • 如果我注释掉 上面的" XBAR_enableEPWMMux (XBAR_TRIP10、XBAR_MUX01)"行以断开 XBAR、EPWM 正常工作且未跳变-这是正确的
    • 如果我  在上面重新添加线路" XBAR_enableEPWMMux (XBAR_TRIP10、XBAR_MUX01)"以连接 XBAR、无论 外部电 压低于或高于 内部阈值电压(例如1500)、即:无论  CMPSS1regs.COMPSTS.COMPLSTS 是1 还是  =0、 ePWM 都会立即跳闸

但只有一个 显式跳闸源可通过实现:

    XBP_setEPWMMuxConfig (XBAR_TRIP10、XBAR_EPWM_MUX01_CMPSS1_CTRIPL)  ;

为什么无论 CMPSS1输出是什么、ePWM 都跳变?   为什么不管  外部电 压低于或高于 内部阈值电压(例如1500)、ePWM 都跳闸、例如:无论   CMPSS1regs.COMPSTS.COMPLSTS 是1 还是  =0?

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

    我甚至将 CMPSS1的内部 DAC 设置为1 (最低数字)、以确保 外部电压 肯定高于 内部阈值电压(1)、但 ePWM 仍会跳变

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

    有人可以建议如何诊断此问题吗?  谢谢

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

    您好:

    CMPSS 和 XBAR 的配置似乎正确。 您能分享一下 数字比较事件子模块的配置吗? 请参阅 TRM 中的图17-50、了解 ePWM X-BAR 如何连接到 TripZone 子模块、以查看数字比较事件子模块的方框图。  

    根据 TZDCSEL 寄存器选择的 DCAH/DCAL 和 DCBH/DCBL 信号的组合生成数字比较 DCAEVT1/2或 DCBEVT1/2事件。 使用 DCTRIPSEL 寄存器选择为 DCAH/DCAL 和 DCBH/DCBL 信号提供源的信号、可以是跳闸区输入引脚或模拟比较器 CMPSSx 信号、就像在本例中那样。

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

    尊敬的 Stevan:

     

    感谢您的关注!  请参阅下面的数字比较模块配置(以 EPWM3为例):

      

    • TRIPIN10 -> DCAH:  

     

       EPWM_enableDigitalCompareTripCombinationInput (EPWM3_base、                                                  

                                                     EPWM_DC_Combination_TRIPIN10、

                                                     EPWM_DC_TYPE_DCAH);

      

    • 使用"DCAH ->DCAEVT1"触发 ePWM:

     

       EPWM_setTripZoneDigitalCompareEventCondition (EPWM3_base、

                                                    EPWM_TZ_DC_OUTPUT_A1

                                                    EPWM_TZ_EVENT_DCXH_HIGH);

       ePWM_setTripZoneAction (EPWM3_BASE、ePWM_TZ_ACTION_EVENT_TZAePWM_TZ_ACTION_LOW);

    EPWM_setTripZoneAction (EPWM3_BASE、EPWM_TZ_ACTION_EVENT_TZBEPWM_TZ_ACTION_LOW);

       EPWM_enableTripZoneSignals (EPWM3_BASE、

                                  EPWM_TZ_SIGNAL_DCAEVT1);

       EPWM_setDigitalCompareEventSource (EPWM3_base、

                                         EPWM_DC_MODULE_A

                                         EPWM_DC_EVENT_1

                                         EPWM_DC_EVENT_SOURCE_ORIG_SIGNAL);

     

     =======================================

     

    一些有助于诊断的重要信息:

     

    在同一个项目中、我还使用 CMPSS3.LOW_COMPARIER 将外部电压与内部阈值电压进行比较来实现非常相似的功能- 通过 CMPSS3的内部 DAC 生成内部阈值电压(例如设置为1500)。  当 外部电压高于 内部阈值电压(例如1500)时、CMPSS3.CTRIPL 会触发所有 ePWM。

     

    上面的 CMPSS3实现与 CMPSS1实现几乎相同: CMPSS1和 CMPSS3输出都连接到 TRIPIN10 –与 CMPSS1非常相似、CMPSS3.low_compiler.CTRIPL 用于通过以下线路跳闸 ePWM、通过 ePWM X-BAR 连接到 TRIP10:

     

       XBP_setEPWMMuxConfig (XBAR_TRIP10、XBAR_EPWM_MUX05_CMPSS3_CTRLIPL );

    XBAR_enableEPWMMux (XBAR_TRIP10、XBAR_MUX05);

     

    如果我注释掉整个 CMPSS1实现、CMPSS3实现按预期正常工作: 只有当 外部电压 高于 CMPSS3的内部阈值电压时、才会跳变 ePWM

     

    但是、如果我注释掉整个 CMPSS3实现、CMPSS1实现就像前面所述的那样工作不正确: 无论 外部电 压低于或高于 内部阈值电压(例如1500)、即:无论  CMPSS1regs.COMPSTS.COMPLSTS 是1 还是  =0、 ePWM 都会立即跳变

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

    尊敬的 Stevan:

    您能否告知我应该如何根据提供的信息进行后续诊断?

    谢谢、

    Quentin

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

    您好:

    那么、CMPSS3配置是否正常工作? CMPSS3的 CMPSS1配置是否完全相同? 如果为 CMPSS1使用不同的跳闸信号、会发生什么情况

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

    尊敬的 Stevan:

    很抱歉、我晚回复了您、因为我没有收到关于您上次更新的电子邮件通知。

    CMPSS1配置 与 CMPSS3完全相同。  

    • CMPSS1输出通过以下代码连接到 TRIPIN10:

                XBAR_setEPWMMuxConfig (XBAR_TRIP10、XBAR_EPWM_MUX01_CMPSS1_CTRIPL);
                XBAR_enableEPWMMux (XBAR_TRIP10、XBAR_MUX01);

    • CMPSS3输出通过以下代码连接到 TRIPIN10:  

    XBP_setEPWMMuxConfig (XBAR_TRIP10、XBAR_EPWM_MUX05_CMPSS3_CTRLIPL  );

    XBAR_enableEPWMMux (XBAR_TRIP10、XBAR_MUX05);

    CMPSS3工作正常。   CMPSS1工作不正常!   这是奇怪的部分!

    • 如果我  在上面重新添加线路" XBAR_enableEPWMMux (XBAR_TRIP10、XBAR_MUX01)"以连接 XBAR   、无论外部电压低于或高于内部阈值电压(例如1500)、即:        无论 CMPSS1regs.COMPSTS.COMPLSTS = 1还是=0、ePWM 都会立即跳变;为什么 CMPSS1输出跳变都导致 ePWM 跳变?   为什么不管  外部电 压低于或高于 内部阈值电压(例如1500)、ePWM 都跳闸、例如:无论  CMPSS1regs.COMPSTS.COMPLSTS 是1 还是  =0?

    它感觉像 XBAR_MUX01将  XBAR_EPWM_MUX05_CMPSS3_CTRLIP 与 TRIP10连接起来、至少这种感觉是这样的

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

    遗憾的是、我们不能 为 CMPSS1使用不同的跳闸信号。 我们必须坚持 TRIP10、并出于某种原因解决此问题。

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

    您好:

    它不起作用的最可能原因是您为两个不同的 CMPSS 模块选择了相同的跳闸信号。 所以当您注释掉 CMPSS1时、CMPSS3工作正常。 根据 TRM (图17-50)、当使用 EPWMBAR 时、您可以从 TRIP4到 TRIP12选择任何跳闸信号。 您不限于 TRIP10。

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

    尊敬的 Stevan:

    我不认为这就是原因、因为多个 CMPSS 可以连接到同一个跳闸信号--我已经做过很多次了。

    我已经尝试过以下    方法:在同一设计中、我以相同的方式配置了4个 CMPSS、CMPSS4、CMPSS2、CMPSS3、CMPSS1、它们都通过以下代码连接到 TRIP10:

    CMPSS4:

     XBP_setEPWMMuxConfig (XBAR_TRIP10、XBAR_EPWM_MUX07_CMPSS4_CTRLIPL);
    XBAR_enableEPWMMux (XBAR_TRIP10、XBAR_MUX07);

     

    CMPSS2:

    XBAR_setEPWMMuxConfig (XBAR_TRIP10、XBAR_EPWM_MUX03_CMPSS2_CTRIPL);
    XBAR_enableEPWMMux (XBAR_TRIP10、XBAR_MUX03);

    CMPSS3:

    XBP_setEPWMMuxConfig (XBAR_TRIP10、XBAR_EPWM_MUX05_CMPSS3_CTRLIPL);
    XBAR_enableEPWMMux (XBAR_TRIP10、XBAR_MUX05);

    CMPSS1:

    XBAR_setEPWMMuxConfig (XBAR_TRIP10、XBAR_EPWM_MUX01_CMPSS1_CTRIPL);
    XBAR_enableEPWMMux (XBAR_TRIP10、XBAR_MUX01);

    只要我注释 CMPSS1、CMPSS4  和 CMPSS2和 CMPSS3都按预期正常工作:只有当外部电压大于内部 DAC 设置时、才会跳闸 ePWM。

    CMPSS1是唯一有问题的函数。

    还有其他原因。 请建议如何诊断。

    谢谢、

    Quentin

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

    Stevan 提到最好配置来自 XBar 多路复用器的 CMPSSx 多个或组合或运算跳闸信号、以通过 MDAC 输入触发 PWM 动作限定器。 或门似乎增加了对误跳变 PWM 动作限定器的保护。 这样、您可以通过检查 CMPSSx 状态和锁存事件 CCS 调试寄存器选项卡来了解哪个相位导致问题(如果有)。  

    如果通过低侧分流器监测交流正弦波、则可以对输出 CMPSS DACVAL-L 进行反相测试。 设置 DACVLA-H/L 计数2048并记住在 DAC 负输入端和双向电流传感器上2048个计数=+1.65vdc。 正弦波的负半部分会产生计数、例如2048 (min)至0 (Max)负正弦波峰值电流跳闸点。 若要设置两个 OVC 限值从4096中减去两个 OVC 跳闸故障计数、若要设置 DACVAL-H/L 跳闸点、需要执行2048至4096次正跳闸。

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

    非常感谢您的答复! 但我有点困惑,不明白。 请您详细说明一下我应该如何进一步诊断此问题的更详细和具体的步骤。

    Quentin

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

    尊敬的 Quentin:

    您可以查看通用电机控制 SDK、通过工具栏中的 CCS Resource Explorer 下载工程。 SDK 文档文件夹 PDF 迁移部分示例如何为三相跳闸区配置 x25c 两个 CMPSS 模块。 其他一些 TI MCU 类具有3个 CMPSS 模块。 UMCSDK v5.03项目驱动 BLDC 霍尔传感器(梯形波)、FOC 还通过编码器位置感应控制正弦波相电流。

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

    谢谢、但我相信我已经非常熟悉多种 CMPSS 配置-- 多年来我已经多次这样做了。

    我只遇到了这个奇怪的问题与这个特定的情况。 请建议如何专门诊断此问题。

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

    您可以尝试校准疑似出现的 CMPSSx 并假定错误设置 Tz、而不应该? 无论如何、如果您在一段时间内尚未查看 x25 TRM、则多路复用器会解码或 EPWM XBar 表。 不要惊讶什么似乎在同一时间正常工作停止工作、 在 POR 后、任何单个 CMPSSx 状态显示锁存设置、这很可能是归咎于错误配置。

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

    我不明白。

    我认为 CMPSS1配置不正确。 原因如下:

    1.  4 CMPSS、CMPSS4和 CMPSS2、CMPSS3和 CMPSS1 通过调用完全相同的函数调用进行相同的配置(包括跳闸配置)、并且它们都连接到 TRIP10。   CMPSS1是唯一有问题的函数。
    2. 我确保 CMPSS1.LOW_COMPARIER 配置正确;我们通过以下实验进行了验证:
    • 当 外部电 压低于 内部阈值电压(例如1500)时、CMPSS1regs.COMPSTS.COMPLSTS = 1   --这是正确的
    • 当 外部电压 高于 内部阈值电压(例如1500)时、CMPSS1regs.COMPSTS.COMPLSTS = 0   --这是正确的

    请建议如何专门诊断此问题。

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

    也许 选择另一个 CMPSSx 进行实验。

    您可以 添加以下清除锁存代码截图底部 PWM 故障并设置 hal.c 它会清除 CMPSSx 设置锁存器。 也许进入 CCS debug 会清除锁存状态寄存器视图、对于任何已设置的 LatchCLR 位输入0、持续刷新。 除非将 DAC 输出配置为设置1500个、否则比较器输入未去抖很容易触发为误触发。  

    EALLOW;
    // SW Reset comparator digital filter output H/L latch status
    while(HWREGH(obj->cmpssHandle[cnt] + CMPSS_O_COMPSTS) &= CMPSS_COMPSTS_COMPHLATCH)
    {
        CMPSS_clearFilterLatchHigh(obj->cmpssHandle[cnt]);
        //DEVICE_DELAY_US(1);
    }
    
    // SW Reset comparator digital filter output H/L latch status
    while(HWREGH(obj->cmpssHandle[cnt] + CMPSS_O_COMPSTS) &= CMPSS_COMPSTS_COMPLLATCH)
    {
        CMPSS_clearFilterLatchLow(obj->cmpssHandle[cnt]);
        //DEVICE_DELAY_US(1);
    }
    EDIS;
    
    // Clear any spurious interrupt faults
    EPWM_clearTripZoneFlag(obj->pwmHandle[cnt], HAL_TZFLAG_INTERRUPT_ALL);
    

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