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.

[参考译文] TMS320F280023:在两个边沿上应用了 HRPWM 问题(如果在通道 B 上添加了 HR 死区时间、则会出现更多问题)

Guru**** 2393725 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1318311/tms320f280023-problems-with-hrpwm-on-both-edges-applied-and-more-problems-if-hr-deadtime-is-added-on-channel-b

器件型号:TMS320F280023
主题中讨论的其他器件:C2000WARE

您好!  

对于我的应用、我需要在 ePWM1A 上为两个边沿(CMP 和外设值)提供 HRPWM。  

我使用以下代码执行了初始化:

void PWM_init (ePWM_DEVICE PWM、uint32_t TimerPeriod、uint32_t cmpAInit、uint32_t cmpBInit、bool SYNC)
{
EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 0U;//*在 ePWM 内禁用 TBCLK */
EDIS;

PWM->TBPRD = TimerPeriod;
PWM->CMPA.bit.CMPA = cmpAInit;/*初始时将占空比设置为小*/
PWM->CMPB.bit.CMPB = cmpBInit;/*初始时将占空比设置为小*/
PWM->TBPHS.bit.TBPHS = 0U;/*将相位寄存器设置为 PhaseShiftVal */

PWM->TBCTR = 0u;/*将计数器设置为零*/
PWM->TBCTL.bit.CTRMODE = TB_COUNT_UP;/*对称模式*/
PWM->TBCTL.bit.PHSEN = TB_ENABLE;
PWM->TBCTL.bit.PRDLD = TB_shadow;
PWM->TBCTL.bit.HSPCLKDIV = TB_DIV1;/*时钟与 SYSCLKOUT 的比率*/
PWM->TBCTL.bit.CLKDIV = TB_DIV1;/*请确保全速计数*/

PWM->CMPCTL.bit.SHDWAMODE = CC_shadow;
PWM->CMPCTL.bit.LOADAMODE = CC_CTR_PRD;/*选择了 CTR = PRD、因为此时也会加载外设*/

PWM->AQCTLA.bit.ZRO = AQ_SET;  
PWM->AQCTLA.bit.CAU = AQ_CLEAR;/*如果达到 CMP 值,则清除 PWM */

PWM->EPWMSYNCINSEL.bit.SEL = 0x00;

//配置 HRPWM 寄存器
EALLOW;
PWM->HRCNFG.ALL = 0;/* ShadowImage 设置,RE 上的 MEP 控制,Autoconv 被禁用,CTR 上的负载= ZRO,HRPWM 电容器被禁用*/
PWM->HRCNFG.bit.EDGMODE = HR_BEP;/*在两个边沿上启用 MEP 控制*/
PWM->HRCNFG.bit.CTLMODE = HR_CMP;/*开启高分辨率周期控制*/

PWM->HRCNFG.bit.HRLOAD = HR_CTR_Zero_PRD;/*在 CTR = 0且 CTR = TBPRD 上加载*/
PWM->HRCNFG.bit.AUTOCONV = 1;/*启用自动转换*/
PWM->HRPCTL.bit.HRPE = 1;/*打开高分辨率周期控制*/

PWM->TBCTL.bit.PHSEN = 1;

PWM->HRPCTL.bit.TBPHSHRLOADE = 1;

//启用 TBCLKSYNC
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 1;
EDIS;


PWM->DBCTL.bit.out_mode = DB_disable;/*禁用死区模块*/

这样、我会在 ePWM1A 信号上得到抖动。

GPIO0的初始化:

GpioCtrlRegs.GPAPUD.bit.GPIO0 = 1;//禁用 GPIO0上的上拉电阻(EPWM1A)
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1;//将 GPIO0配置为 EPWM1A

当我将  PWM->AQCTLA.bit.ZRO = AQ_SET ;更 改为 PWM->AQCTLA.bit.PRD = AQ_SET ;  

然后抖动消失、但占空比为+ 10ns。

为什么我不能使用第一个命令、在我看来、加载 CTR = ZRO 上的值更有意义。

下一步是在通道 B 上创建具有 HR 死区时间的反相信号。

我进行了以下寄存器设置:

/*死区初始化*/
PWM->DBFED.all = DEAD_TIME_FED_INIT;
PWM->DBFEDHR.all = DEAD_TIME_FED_HR_INIT;
PWM->DBRED.all = DEAD_TIME_RED_INIT;
PWM->DBREDHR.all = DEAD_TIME_RED_HR_INIT;

// PWM->AQSFRC.bit.RLDCSF = 2;//事件计数器加载等于零或计数器等于周期*/
PWM->DBCTL.ALL = 0;/*半周期时钟使能位*/
PWM->DBCTL.bit.HALFCYCLE = 1;/*半周期时钟使能位*/
PWM->DBCTL.bit.IN_MODE = DBA_ALL;/* EPWMxA IN (来自动作限定器)是上升沿和下降沿延迟信号的源*/
PWM->DBCTL.bit.DEDB_MODE = 0;/*上升沿延迟应用于由 S4开关选择的 INA/INB
(模式位)仅在信号路径上。 下降沿延迟应用于
仅由 B 信号路径上的 S5开关(INMODE 位)选择 INA/INB */
PWM->DBCTL.bit.SHDWDBFEDMODE = 1;/*阴影模式。 作为双缓冲器运行*/
PWM->DBCTL.bit.SHDWDBREDMODE = 1;/*阴影模式。 作为双缓冲器运行*/
PWM->DBCTL.bit.LOADREDMODE = 2;/*在计数器= 0或计数器=周期时加载*/
PWM->DBCTL.bit.LOADFEDMODE = 2;/*在计数器= 0或计数器=周期时加载*/

PWM->DBCTL.bit.POLSEL = DB_ACTV_HIC;/*高电平有效互补*/
PWM->DBCTL.bit.out_mode = DB_FULL_ENABLE;/*启用死区模块*/

PWM->HRCNFG2.bit.CTLMODEDBFED = HR_CTR_Zero_PRD;
PWM->HRCNFG2.bit.CTLMODEDBRED = HR_CTR_Zero_PRD;
PWM->HRCNFG2.bit.EDGMODEDB = HR_BEP;/* 11 MEP 对两个边沿(DBREDHR 的上升沿或 DBFEDHR 的下降沿)*/

有了这个、我没有发现 ePWM1A 和 B 无抖动的工作区。将它与双边沿 HRPWM 配合使用是否有任何问题?

提前感谢您的帮助、  

此致

艾琳

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

    尊敬的 Irene:

    查看提供的代码、  

    您可以将 HR 计数器比较影子加载事件更改为在计数器零或周期上。 这是 HR 的某些内部逻辑所必需的。

    是否在未启用 HR 的情况下实现预期的 EPWM 行为? 什么是同步 ePWM? 启用 HR 后、您不应在每个时间段进行同步、例如。 只需要在 PWM 开始时执行一次。  

    除此之外、您是否能够使用上-下计数模式来生成 PWM 信号、而不是使用上-下计数模式? 然后在两个边线上应用边材控制。

    我建议您首先了解我们在 C2000WARE 中提供的可满足您需求的 HRPWM 上下计数示例。

    处于向上计数模式是否有特定的原因?

    此致!

    马瑞安