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:在同步生成时无法在全局影子模式下更新 DBCTL

Guru**** 2574655 points
Other Parts Discussed in Thread: TMDSCNCD28379D

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1568627/tms320f28379d-unable-to-update-dbctl-in-global-shadow-mode-upon-sync-generation

部件号:TMS320F28379D
主题中讨论的其他器件:TMDSCNCD28379D

工具/软件:

您好:

我正在使用 TMDSCNCD28379D 控制卡 我的应用。 我也面临着这个问题 DBCTL 寄存器 中似乎正在更新 立即模式 (而不是已配置的 全局影子到活动模式 )、这也会导致电路运行出现故障。 仅当满足某些 if-else 条件、并且在不需要更新 DBCTL 时生成的 ePWM 信号可以正常运行时、我才会更新影子寄存器。

以下是 ePWM 模块配置:
对于 EPwm1-8、启用 PHSEN、SYNCOSEL = SYNC_IN
SYNCO 由 EXTSYNCIN1 通过 INPUTXBAR5 生成。
GLDMODE = 3(发生同步时的影子到活动加载)、
对于 REGx = CMPA、CMPB、DBCTL、DBRED、DBFED、DBFED、GLDCFG[REGx]= 1
此外、作为预防措施、我还启用了这些寄存器 (DBCTL2、DBCTL、CMPCTL) 的本地影子模式。

SYNCO 生成:
我正在使用 EPwm10 计数器作为基准(其 PHSEN 和同步是 禁用 因为它是基准计数器)。 当 EPwn10[CMPB]达到特定值时、会触发中断。 在 ISR 中、切换与 INPUTXBAR5 链接的 GPIO 以生成 SYNCO。

DBCTL 影子寄存器:
影子寄存器值在优先级低于上述 ISR 的不同 ISR 中更新。 我期望加载发生在上面 随后生成 SYNCO 。 但是、所附的图像似乎表明并非如此。 。 品红色 波形是一个切换的 GPIO 引脚、表示 当代码中的影子寄存器更新时 。 。 蓝 — 绿色 波形为 A DBCTL 位馈送到 DAC 和在示波器上监控。 我们可以看到、在切换 GPIO 后不久、DBCTL 位会改变值、建议使用 立即加载 。 随后的 SYNCEVT 发生得更晚(虚线光标)、这可以通过 PWM 信号职责的变化来证明。

请告诉我是否可以使用这个微控制器配置 DBCTL 以实现正确的全局影子到活动加载。 如需更多信息、请随时咨询。

提前感谢您的观看、
Tharun

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

    您好:

    您能否在运行时检查 CCS 中的 DBCTL 寄存器位字段值、特别是 SHDWDBFEDMODE 和 SHDWDBREDMODE 寄存器? 如果 DBCTL 配置正确、这会让您很好地了解它们。

    器件 TRM 的第 1945 页中还有一条注释: https://www.ti.com/lit/ug/spruhm8k/spruhm8k.pdf、其中指出:

    “在对 DBRED 和 DBFED 寄存器的值进行编程之前、应用软件必须在 DBCTL[SHDWDBREDMODE]和 DBCTL[SHDWDBFEDMODE]中启用影子加载模式。 如果在对 DBRED 和 DBFED 寄存器进行编程后启用了影子寄存器、则 DBRED 和 DBFED 寄存器会加载值 0。“

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

    您好、Stevan、

    感谢您的答复。 我们将在运行时检查 CCS 中的影子模式寄存器位。 但是、配置死区模块的代码如下:

    // Dead Band Module Configuration (DBCTL, DBRED, DBFED)
              EPwm1Regs.DBCTL2.bit.SHDWDBCTLMODE = 1; // shadow mode - not sure if needed for successful global shadow to active loading - taking precaution
              EPwm1Regs.DBCTL2.bit.LOADDBCTLMODE = 0; // shadow to active loading of FED at CTR = 0
    
              EPwm1Regs.DBCTL.bit.HALFCYCLE = 0; // dead-band counters are clocked at TBCLK
              EPwm1Regs.DBCTL.bit.POLSEL = 0; // neither PWM is inverted after RED FED incorporation
    
              EPwm1Regs.DBCTL.bit.SHDWDBREDMODE = 1; // shadow mode - not sure if needed for successful global shadow to active loading - taking precaution
              EPwm1Regs.DBCTL.bit.LOADREDMODE = 0; // shadow to active loading of RED at CTR = 0
              EPwm1Regs.DBCTL.bit.SHDWDBFEDMODE = 1; // shadow mode - not sure if needed for successful global shadow to active loading - taking precaution
              EPwm1Regs.DBCTL.bit.LOADFEDMODE = 0; // shadow to active loading of FED at CTR = 0

    首先、我启用 DBCTL2 中的影子模式位、然后初始化 DBCTL 寄存器位(包括 SHDWREDMODE 和 SHDWFEDMODE)。 这是在 main() 中完成的、并且 DBRED 和 DBFED 寄存器仅在 ISR 中更新、在 main() 被执行后(在 ISR 中)开始。 因此、理论上、我认为该代码符合第 1945 页的 TRM 说明。

    问题是否与 DBCTL2 寄存器有关? 因为我非常确定 DBRED 和 DBFED 仅在全局同步时更新(我将重新确认这一点)。

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

    您好:

    是的、检查 CCS 中的寄存器将阐明它们是否根据需要进行设置。 也许配置 DBCTL 第一个寄存器会有所帮助。 顺便说一下、您是否在软件中使用了全局加载功能?

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

    您好、

    是的、我使用全局加载、配置为在生成同步时执行全局影子到活动加载。 因此、我感到困惑的是、是否需要配置 DBCTL2 和 DBCTL[SHDWREDMODE]寄存器、因为它们用于本地影子到活动加载、对吧?

    另外、通过首先配置 DBCTL、您是指在上述代码片段中在 DBCTL 之后设置 DBCTL2 吗? 我会尝试这种方法、但我的理由是、在根据第 1945 页的注释 TRM 配置寄存器之前应启用影子模式位

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

    尊敬的 Tharun:

    器件 TRM 的第 1945 页有一条关于 DBRED/DBFED 的说明、当使用适用于您的 case 的全局加载支持时:  

    “当 DBRED/DBFED 有效在 DB 计数器计数时加载新的影子值时、新的 DBRED/DBFED 值仅影响下一个 PWMx 边沿、而不影响当前边沿。 当全局影子到活动加载设置为在 CTR = ZERO 时发生时、无法使用死区值零。 同样、当将全局影子到活动加载设置为在 CTR PRD=PRD 时发生时、不能使用 PRD 的死区值。“

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

    尊敬的 Stevan:

    在代码中、我已确保 SYNCEVT 不是在任何 PWM 边沿产生的、而是在 PWM 边沿之间产生的、因此我怀疑这是问题所在。 您认为尽管将 DBCTL 位配置为影子模式、但它仍在立即模式下更新这一事实是什么? 您是否能够运行一个正确配置 DBCTL2 和 DBCTL 的实验、其中 DBCTL、DBRED 和 DBFED 的寄存器值仅在生成 SYNCEVT 时发生变化? 如果您可以共享该代码、这将会非常有帮助。

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

    您好:

    如果使用全局加载、则需要配置一个事件、除非该事件不起作用、否则所有寄存器都会同时更新。 请检查您的寄存器是否正确更新。

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

    Stevan,

    请参阅查询说明、如前所述、我已经配置了一个 SYNCEVT 以进行全局加载(GLDMODE = 3、以及 GLDCTL 和 GLDCFG 寄存器)。 我还需要做些什么吗?
    当生成 SYNCEVT 时、PWM 占空比和相位显然会通过全局加载选通进行更新(如所附的图所示)。 我的具体问题是 DBCTL 寄存器似乎正在立即模式下更新、而不是根据 SYNCEVT 更新。 请帮忙。

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

    尊敬的 Tharun:

    感谢您的澄清。  影子死区寄存器的内容在 DBCTL [LOADREDMODE]和 DBCTL [LOADFEDMODE]寄存器位指定的以下事件之一发生时传输到活动寄存器:

    •CTR = PRD:时基计数器等于周期 (TBCTR = TBPRD)。

    •CTR =零:时基计数器等于零 (TBCTR = 0x00)

    •CTR = PRD 且 CTR = 0

    因此、死区影子模式没有在发生同步事件时发生的选项。 影子模式无法在发生同步事件时完成、因此它只是 表现为立即模式操作。