TI E2E™ 设计支持论坛将于 5 月 30 日至 6 月 1 日进行维护。如果您在此期间需要技术支持,请联系 TI 的客户支持中心寻求帮助。

该讨论已被锁定。
您不能再向该讨论中发布新回复。如果您有问题可以开始新讨论

[参考译文] LAUNCHXL-F280049C:ePWM 周期加载计数通过 SVM 的 CMPB 失败、死区模式2

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/995530/launchxl-f280049c-epwm-period-load-counts-cmpb-via-svm-fails-dead-band-mode-2

器件型号:LAUNCHXL-F280049C

InstantinFOC SDK V2.01:  

将 ePWM 模块 CMPB 配置为比较加载/直接加载到周期寄存器中的 DN 计数无法将任何值加载到任何已配置发生器的 CMPB 中。

由于 typedef 枚举缺失 epwm.h 或 HW_EPWM.h、因此无法通过 DBCTL[POLSEL]为模式2 ACK/ACL 互补型配置死区发生器(图18-8)  

注意:我尝试在下面添加枚举、但极性位 S2、S3分别为2、3时导致加载馈送模式寄存器位发生变化。 寄存器控制函数调用中存在重叠、因此将(模式/极性)寄存器加载分离为两个函数不会引起混淆。 互补死区模式2的移位/掩码枚举值与模式4不同、因此旧版 C2000固件函数调用无法正常工作、因为它用于模式2死区控制。  从下面的调用中可以设置最近的 DBCTL 寄存器(0x000A)。

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//*****************************************************************************
//
//! Values that can be passed to EPWM_setDeadBandDelayPolarity(),
//! EPWM_setDeadBandDelayMode() as the \e delayMode parameter.
//
//*****************************************************************************
typedef enum
{
EPWM_DB_RED = 1, //!< DB RED (Rising Edge Delay) mode
EPWM_DB_FED = 0, //!< DB FED (Falling Edge Delay) mode
EPWM_DB_AHC = 1, //!< DB mode AH is Complementary
EPWM_DB_ALC = 0 //!< DB mode AL is Complementary
} EPWM_DeadBandDelayMode;
//*****************************************************************************
//
//! Values that can be passed to EPWM_setDeadBandDelayPolarity as the
//! \e polarity parameter.
//
//*****************************************************************************
typedef enum
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

1、当 TRM 中显示 Instaspin SVM 模块代码并声明该代码供设计人员检查时、为什么要将其嵌入 ROM 中?

2.为什么在 ROM 中的 SVM 模块没有通过下面给定的代码加载 CMPB 寄存器的任何计数值?

如何在不配置相对于 SDK InstaSPIN FOC 的死区模式2的情况下通过 ROM 或固件配置对称互补(ePWM-A/B 驱动信号)?

4.为什么使用 C2000寄存器枚举值(epwm.h 等) 与 TRM 图和寄存器布局相关的二进制/十六进制值不一致? 相反、C2000固件开发使设计人员无法在不进入 CCS 调试寄存器视图的情况下使用 TRM 快速查看。   

 

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// setup the Counter-Compare Control Register (CMPCTL)
EPWM_setCounterCompareShadowLoadMode(obj->pwmHandle[cnt],
EPWM_COUNTER_COMPARE_B,
EPWM_COMP_LOAD_ON_CNTR_ZERO);
// setup the Action-Qualifier Output B Register (AQCTLB)
EPWM_setActionQualifierAction(obj->pwmHandle[cnt],
EPWM_AQ_OUTPUT_B,
EPWM_AQ_OUTPUT_HIGH,
EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPB);
//
EPWM_setActionQualifierAction(obj->pwmHandle[cnt],
EPWM_AQ_OUTPUT_B,
EPWM_AQ_OUTPUT_LOW,
EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPB);
// setup the Dead-Band Generator load mode Register (DBCTL)
EPWM_setDeadBandDelayMode(obj->pwmHandle[cnt], EPWM_DB_AHC_RED, true); //EPWM_DB_RED
EPWM_setDeadBandDelayMode(obj->pwmHandle[cnt], EPWM_DB_AHC_FED, true);
// select EPWMA as the input to the dead band generator
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

    epwm.h 存在严重错误、因为它已编码、对于某些模式、无法正确设置 DBCTRL 寄存器位。 模式表 18-9不能进行逻辑感知(红框/s)位 S8必须为1或 S6、S7不能同时考虑。 无论如何、无法为 A/B 通道上的互补高电平输出或 DBCTL=0xB 配置 DB 控制模式2。  

    似乎需要一个更新的调用来设置表18-8中显示的任何一种模式1-7。 否则、所写入的代码不允许 DB 模式2或使用正确的二进制值(0x3)设置 S1、S0。 HWREG 调用无法确定拒绝将 S0设置为0x1的原因或原因。 我们只能为互补的高电平有效输出设置1模式、但代码似乎认为低电平和高电平有效波形(图18-34)可以同时存在、但这是不可能的。  

    模式4死区通常用于梯形换向。 SPV 似乎需要模式2或高电平有效互补信号对来连接每个1/2电桥、如图 x49c TRM 图 18-34 (未显示在下方)  

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

      可以、模式2 DBCTL=0xB、但在 epwm.h DBCTL 写入或位发生变化时、只需修改几个(|=)即可。

      Fullscreen
      1
      2
      3
      // setup the Dead-Band Generator load mode Register (DBCTL)
      EPWM_setDeadBandDelayMode(obj->pwmHandle[cnt], EPWM_DB_AHC_RED, true);//EPWM_DB_RED
      EPWM_setDeadBandDelayMode(obj->pwmHandle[cnt], EPWM_DB_AHC_FED, true);//EPWM_DB_FED
      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

      Fullscreen
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      //*****************************************************************************
      //
      //! Values that can be passed to PWM_setDeadBandDelayPolarity(),
      //! EPWM_setDeadBandDelayMode() S4,S5 as \e delayMode parameter.
      //
      //*****************************************************************************
      typedef enum
      {
      EPWM_DB_RED = 1, //!< DB RED (Rising Edge Delay) mode
      EPWM_DB_FED = 0, //!< DB FED (Falling Edge Delay) mode
      EPWM_DB_AHC_RED = 1, //!< Rising Edge Delay for AH Complementary
      EPWM_DB_AHC_FED = 0, //!< Falling Edge Delay for AH Complementary
      EPWM_DB_MODE_AHC = 1, //!< DB mode2 is AH Complementary
      EPWM_DB_MODE_ALC = 0 //!< DB mode3 is AL Complementary
      } EPWM_DeadBandDelayMode;
      //*****************************************************************************
      //
      //! Values that can be passed to EPWM_setDeadBandDelayPolarity as the
      //! \e polarity parameter.
      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

      • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
        [引用 userid="48581" URL="~/support/microcontrollers/c2000/f/c2000-microcontrollers-forum/995530/launchxl-f280049c-epwm-period-load-counts-cmpb-via-svm-fails-dead-band-generators-mode-2 "]

        1、当 TRM 中显示 Instaspin SVM 模块代码并声明该代码供设计人员检查时、为什么要将其嵌入 ROM 中?

        2.为什么在 ROM 中的 SVM 模块没有通过下面给定的代码加载 CMPB 寄存器的任何计数值?

        如何在不配置相对于 SDK InstaSPIN FOC 的死区模式2的情况下通过 ROM 或固件配置对称互补(ePWM-A/B 驱动信号)?

        [/报价]

        ROM 中仅存储 FAST 估算器代码。 所有其他 FOC 代码包括 SVM、它们是 motorControlSDK 中的开源代码、与器件外设无关。

        您可以在 hal.c 中引用 HAL_setupPWMs()中的代码、将 EPWMA-A 和 B 配置为具有死区的互补输出、因此 CMPB 不用于 PWM。  您可以查看  第18.6章动作限定符(AQ)子模块、了解如何设置 AQCTLA 以控制 PWM 输出。

        • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
          [引用 userid="35051" URL"~/support/microcontrollers/c2000/f/c2000-microcontrollers-forum/995530/launchxl-f280049c-epwm-period-load-counts-cmpb-via-svm-fails-dead-band-generators-mode-2/3678253 #3678253">只有 FAST 估算器代码存储在 ROM 中。 所有其他 FOC 代码包括 SVM、它们是 motorControlSDK 中的开源代码、与器件外设无关。[/quot]

          不完全正确:只有对句柄的调用位于 RAM/FLASH 中、例如 SVM 块二进制编码扇区查找表在 svgen.h 或 svgen.c 中找不到位置 SPV 控制文件中没有实际函数、只处理 ROM 函数。 值通过在编译的符号表中指定的句柄被转换到 ROM。  我真的看不到 CMPA 在任何文件中的加载位置、因为它似乎源自 ROM。 这极大地限制了设计人员控制 ePWM 模块顺序的能力、从而最大限度地提高任何电机的速度扭矩曲线!

          [引用 userid="35051" URL"~/support/microcontrollers/c2000/f/c2000-microcontrollers-forum/995530/launchxl-f280049c-epwm-period-load-counts-cmpb-via-svm-fails-dead-band-generators-mode-2/3678253 #3678253"]您可以查看  第18.6章动作限定符(AQ)子模块,该章介绍如何设置 AQCTLA 以控制 PWM 输出。[/quot]

          发布于上图、SDK V2.01设置了 DBCTL 极性位 S3、S2 0x0。 为了从死区发生器获得高电平有效的互补输出、需要使 ePWM_setDeadBandDelayPolarity (0、2)。  而 ePWM_DB_POLICLE_ACTIVE_HIGH = 0会使 ePWM-A/B 信号 AH 但不是互补的、尤其是由于 CMPB 已禁用图18-34   

          [引用 userid="35051" URL"~/support/microcontrollers/c2000/f/c2000-microcontrollers-forum/995530/launchxl-f280049c-epwm-period-load-counts-cmpb-via-svm-fails-dead-band-generators-mode-2/3678253 #3678253"]因此 CMPB 不用于 PWM[/引用]

          然而、在功率模式期间启用死区模式4会释放能量、模式2死区要好得多、低速振动电机要安静得多。  

          软件如何操作 DBCTL 寄存器、以便仅在特定开关关闭时禁用 RED 或 FED? 并允许 CMPB 通过死区、从而将低侧 MOSFET 切换至接近饱和或(慢速电流衰减)? 在我看来、1/2波电流脉冲将完全终止、这是快速电流衰减的症状。 我们确实为梯形 FOC 传递了 CMPB 周期、并且它在 SPV 上获得了出色的速度。    

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

            Gi 是否有任何特定的 ePWM 配置可供我使用?

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

              你好、Nima、

              报告的问题是、epwh.h 具有几个寄存器、而不是在第二次调用同一函数时写入先前的二进制内容、从而改变了 DBCTL 寄存器控制模式。 该寄存器覆盖需要(|=)、而不是(=)将 HWREG 写入或宽松的先前内容置为有效、请查看上述内容。

              从技术角度讲、死区模式4高电平有效(AH)应该是模式2 (AHC)互补。 还需要为极性/模式函数0x2添加新枚举。 修复了添加新枚举的延迟模式函数调用后、DBCTL 寄存器现在为0x000A (AHC)与0x0003 (AH)。 稍作修正、但在 ePWM 信号 DSP 方面增加了一些改进、使其更加稳健。

              [引用 userid="280106" URL"~/support/microcontrollers/c2000/f/c2000-microcontrollers-forum/995530/launchxl-f280049c-epwm-period-load-counts-cmpb-via-svm-fails-dead-band-generators-mode-2/3679405 #3679405"] GI 是否有任何特定的 ePWM 配置我可以提供帮助?

              关于 CMPB、SDK v2.1 SVM 变换不会像上面代码剪那样将任何值加载到 CMPB 中。 我尝试配置 AHC 非对称 PWM 发生器对、这需要为固定占空比静态加载 CMPB。 还需要更改 DB 模式2 (S4、S5模式)、请参见 TRM 图18-33。 这种类型的非对称 DSP 模式会在典型的梯形 FOC 换向高侧 MOSFET 中产生慢速电流衰减。

               通过 AHC 死区的 ePWM 模块仍在 PWM 完整周期的末尾产生1/2波电流脉冲。 您认为非对称 PWM 会阻止1/2波电流周期的开发、还是其他原因导致了这些周期的开发? 我不是周期直接加载寄存器写入的大粉丝、这是否会导致描述这个1/2波电流脉冲? Yanming 似乎不明白我所描述的是 Instaspin FOC SDK 性能的缺陷。 50%的时间问题与模块配置和其他50%软件有关。  

              红色方框 CH2是1/2波脉冲、会导致电机崩溃进入加速轨迹、永远无法达到额定速度。 此捕捉 CH1代表快速衰减 PWM 模式。 似乎 ePWM 需要接近100%的占空比来生成(慢速衰减)正弦波(红框)。 CH1 PWM 如何产生感应正弦波令人惊叹、但缺少始终如一的正弦电流生成 CH2。 似乎这不是 Instaspin 电机 FOC 和 ePWM 的目的、即使占空比较低、也可以始终产生稳定的正弦电感电流。  

              • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
                [引用 userid="48581" URL"~/support/microcontrollers/c2000/f/c2000-microcontrollers-forum/995530/launchxl-f280049c-epwm-period-load-counts-cmpb-via-svm-fails-dead-band-mode-2/3680085 #3680085">报告的问题是,epwh.h 在第二次调用同一函数时对先前二进制内容的写操作进行了一些寄存器,从而改变了 DBCTL 寄存器控制模式。 该寄存器覆盖需要(|=)而不是(=)声明 HWREG 写入或先前内容松动、请查看上述内容。

                哪些寄存器?

                • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
                  [引用 userid="280106" URL"~/support/microcontrollers/c2000/f/c2000-microcontrollers-forum/995530/launchxl-f280049c-epwm-period-load-counts-cmpb-via-svm-fails-dead-band-mode-2/3680406 #3680406"]哪些寄存器?

                  ePWMx DBCTL 位 S3、S2如文本所述在第二个调用生效时被改写、而不是保留之前的写入。  

                  CMPB 负载问题又如何?

                  我还启用影子模式以基于时间的 PRD 加载零计数。 为3个 PWM 发生器添加了 PWM 周期阴影(零负载)、1/2电桥输出变化很小、但电流周期更强、带宽。 PWM 波 CH1现在具有更低的直流噪声、也许配置全局更新 CMPA 可以进一步改善 DSP。

                  似乎 x49c CCS 调试 GEL 文件缺少 ePWMx 发生器的影子加载寄存器。 很高兴看到影子值在零 PRD 上被影子加载值更新。 奇怪的是、CMPSSx 具有用于 DACAVALA/B 寄存器的影子寄存器、为什么 ePWMx 发生器没有。 无需只回答一个观察结果。

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

                    下面的 BTW 捕获是梯形快速衰减 PWM 的样子。 看到与上面 CH1的相似之处吗?

                      

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

                      对于 CMPB、如果 SDK 代码不更新 CMPB、CMPB 寄存器中的值是多少?

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

                        即使选择了周期加载、也不会对非常高的 CMPA 存储器映射计数进行任何更改。 其他类型的 PWM 存储器映射 CMPA 计数变为零、计数重新开始。 动作限定器在 CMPA 递增和递减计数时输出 A。 周期计数为2500、加载的 CMPA 匹配为1250十进制。

                        Fullscreen
                        1
                        2
                        3
                        4
                        5
                        6
                        7
                        8
                        9
                        10
                        11
                        12
                        13
                        14
                        15
                        /* set comparator control load mode for default shadows CMP-A or B */
                        EPWM_setCounterCompareShadowLoadMode(obj->pwmHandle[cnt],
                        EPWM_COUNTER_COMPARE_A,
                        EPWM_COMP_LOAD_ON_CNTR_PERIOD);
                        // setup the Action-Qualifier Output A Register (AQCTLA)
                        EPWM_setActionQualifierAction(obj->pwmHandle[cnt],
                        EPWM_AQ_OUTPUT_A,
                        EPWM_AQ_OUTPUT_HIGH,
                        EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);
                        EPWM_setActionQualifierAction(obj->pwmHandle[cnt],
                        EPWM_AQ_OUTPUT_A,
                        EPWM_AQ_OUTPUT_LOW,
                        EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);
                        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX