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.

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

Guru**** 2527260 points


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

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)。

//*****************************************************************************
//
//! 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
{
    EPWM_DB_POLARITY_ACTIVE_HIGH = 0, //!< DB polarity is not inverted
    EPWM_DB_POLARITY_ACTIVE_LOW  = 1,  //!< DB polarity is inverted
	EPWM_DB_POLARITY_ACTIVE_HIGH_COMPLMNT = 2, //!< DB polarity is High Complementary
	EPWM_DB_POLARITY_ACTIVE_LOW_COMPLMNT = 1 //!< DB polarity is Low Complementary

} EPWM_DeadBandPolarity;

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 快速查看。   

 

        // 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
        EPWM_setRisingEdgeDeadBandDelayInput(obj->pwmHandle[cnt],
                                             EPWM_DB_INPUT_EPWMA);

        // setup DBCTRL mode/polarity for H/L symmetric complementary dead band.
        EPWM_setDeadBandDelayPolarity(obj->pwmHandle[cnt],
                                      EPWM_DB_AHC,
                                      EPWM_DB_POLARITY_ACTIVE_HIGH_COMPLMNT);

        // setup the Dead-Band Rising Edge Delay Register (DBRED)
        EPWM_setRisingEdgeDelayCount(obj->pwmHandle[cnt], HAL_PWM_DBRED_CNT);

        // setup the Dead-Band Falling Edge Delay Register (DBFED)
        EPWM_setFallingEdgeDelayCount(obj->pwmHandle[cnt], HAL_PWM_DBFED_CNT);

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

    该工具只是在 CMPA 和 CMPAHR 之间执行一个操作。

    CMPA = CMPA << 16 | CMPAHR

    因此、如果您将 CMPA 设置为0x20

    CMPAHR 设为0x00

    组合后 CMPA = 0x2000

    CMPA 的实际值仍然为0x20  

    HR 计算决定了小数部分。

    NIMA

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

    在 CMPA 匹配后、CCSM 复位似乎无法生效、在 TB 达到非常高的值之前、不会重新加载 CCSM 计数。

    这将解释困扰 SVM 电流生成的毫秒级空隙。 高侧 PWM 170ms 的空隙正在将直流逆变器的功率降低近45%、并且无法达到电机最高速度。 缺少 PWM 周期 CH1/CH2捕获无效、似乎与硬件相关、而不是与软件相关。 迁移至 SVM 的整个概念是提高速度、减少振动并生成无1/2波峰值的正弦电流。

    有趣的是、当 CCSM 设置为零计数重新加载与周期之间的关系时、1/2波脉冲的一侧消失、峰值相电流上升。 同样、170ms 高侧空隙减少了75-100ms CH1/CH2捕获。 这些区域不应是空洞的、而应是脉宽控制的速度角。

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

    您的 CTR==CMPA 匹配未发生?

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

    在二进制计数器领域中、匹配可能不会阻止 TBCTR 溢出。 100%占空比170ms 的无效值似乎表示 CCSM 未在低15:0二进制计数时复位、而是 CCSM 计数器链的高阶31:16屏蔽值。  

    不要问我、通过 CCSM 实现31:16的更高计数是怎样的。 但是、CCS 调试存储器映射值显示 CMPA 匹配计数超过 TBPRD。 对于计数>TBPRD、CCSM 应按 TB 匹配重置、但似乎允许 CMPA 屏蔽匹配的溢出计数。

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

    如果您将 CMPA 设置为高于 TBPRD、该操作将始终被跳过。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 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/3689207 #3689207"]如果您将 CMPA 设置为高于 TBPRD,则始终会跳过该操作。

    如果 TBCTR >TBPRD 匹配会锁存 CMPA 的输入多路信号分离器、则不处于向上/向下计数模式。 我们需要更详细地了解 CMPA/B 如何通过 TBCTR 总线实际实现匹配。 请注意、在我看来、32位寄存器是源自24位 CCSM 23:0总线的 TBCTR。 这个高电平值似乎确认了 CCSM 在 CTR = TBPRD 时不会被复位、匹配计数被多路复用锁存到更高阶的位31:16计数事件。 似乎也表示尽管 HRE 位被禁用被忽略、并且 CCSM 计数仍然超过16位。

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

    如果未启用 HR 模式、则当粗略 CMPA = CTR 或粗略 PRD= CTR 时、操作生效

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 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/3689587 #3689587"]粗调 CMPA =CTR 或粗调 PRD=CTR[/QUERP]时,操作将生效

    遗憾的是、CCS 调试显示 CCSM 未复位、CTR 值在高序字匹配发生后超过 PRD。 我的观点是、当 CTR > PRD 时会出现 CMPA 匹配、但仍然成功地锁存 CMPA 的输入多路信号分离器。

    对于 CMPA (31:16)匹配允许 CTR > PRD 值的原因、没有逻辑解释。 如果 PRD=CTR、匹配计数值不应简单地通过 CMPA 寄存器的 int32t 视图增加。 CMPA 寄存器计数值应保持相同的 Int16或 Int32视图、但它不会!

    与任何计数器链一样、如果您选择忽略高阶输出、计数值将会减少。 大多数计数器链都有一个输入、用于清除/复位匹配计数值上的锁存/未锁存输出并阻止计数器溢出。 在这种情况下、CCSM 只是溢出、直到发生下一个影子加载事件。

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

    您可以在一小段代码上尝试此操作吗? 设置 ePWM、将 CMPA 设置为高于 PRD、以查看是否发生了该操作?

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

    那么、您建议的 CCS 调试没有在 CMPA 寄存器中显示正确的 TBCTR 值? 我只是想报告 CMPA 匹配计数方面的感知问题、您是否看到 TI 实验室中也发生了同样的情况?

    重点是 CMPA 匹配计数似乎成功、但 CTR 值大于 PRD、即使 CCSM 复位功能正常也是如此。 TI 生产运行的芯片设计与 TRM 和数据表披露有何不同、这是合乎逻辑的? x49c MCU 是在该大流行病发生之前发布的、因此这不是 TRM 数字与器件版本不一致的原因。

    对 CCSM 定时器总线的描述是位于位(15:0)、而不是 CMPA (31:16)对于芯片中的地面运行情况有疑问。 尤其是当 EPWM1、2、3A 输出在 PWM 时序中存在巨大的空隙并且提供了示波器捕获时。

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

    ePWM 寄存器在 CCS 上以10Hz 的频率读取。 我认为他们没有像你认为的那样反映他们。 您需要暂停器件以查看这些值。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="280106" URL"~/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/3690695 #3690695"]您需要暂停器件以查看值。

    通过 TM4C1294 120MHz MCU 进行实时 XDS110v2采样时、Turtle Slow XDS100需要暂停。 谁能知道任何 XTAL 速度、x49c 原理图中没有这两者的标签。  

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

    在 CCS 视图中、对于 CCS GUI (显示屏)和从 MCU 读取的值之间的通信、所有内容都以10Hz 的频率显示。

    NIMA

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="280106" URL"~/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/3692025 #3692025"]所有内容均以10Hz 的频率显示。

    然而、当暂停时、不应限制 CCS 调试"有礼貌的芯片实时模式"来通过 XDS110v2实时查看寄存器?

    HALT 计数81920000 (有符号整型) TBCTR (CMPA 31:16)和 CMPA 寄存器(1250十进制)匹配计数。 哪一个是真正的匹配计数,世界可能永远不知道 。

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

    一旦暂停、如果 ePWM 不处于自由运行模式、则寄存器应该是准确的。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="280106" URL"~/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/3692843 #3692843"]这些寄存器应该是准确的。

    关键字是(应该是)。 只有在 Int16位寄存器视图上、HALT 值 CMPA 同意 TBCTR。 然而、CMPA 是一个24位寄存器、在总线上没有显示存在八路数据总线锁存器或收发器。 导致进入 CMPx 寄存器的定时器子模块数据路径的可疑绘图会引起绝对的怀疑、尤其是在图形之间共享的信息发生冲突时。   

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

    请忽略您在 GUI 中看到的24位。 它仅显示所有位。 这些位实际上不展示24位寄存器。 16位和8 HR 位具有完全不同的含义、场景后面会进行计算。 16位值应该并且始终匹配。

    NIMA

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="280106" URL"~/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/3693384 #369334"] 16位值应该始终匹配。

    我想我们只需要在信仰上实现飞跃、匹配确实与 TBCTR 15:0计数相对应、而不是31:16 TBCTR 计数。 接受和相信 CMPAA/B 寄存器是否针对23:0 CMPAHR 布局了15:0 +8会容易得多。

    GUI 寄存器布局要求工程师对典型的计数器链原理进行折优惠、从而评估独立的4-8位串行计数器链。 发生8位递增计数(0x00 - 0xFF)并进位到离散计数器器件的下一个字位置。