工具/软件:
我尝试在启用 HR 的情况下创建 2 个 PWM(周期,占空比和死区)、并同步它们、以便可以在它们之间添加一个相位。
问题是当我尝试在同步时将值设置为 TBPRDHR 时、PWM 会出现抖动。 如果我将 TBPRDHR 设置为 0、或禁用两者之间的同步、则抖动会消失。
这个意义上是否存在一些限制、或者我是否遗漏了其他内容?
PWM->HRCNFG.ALL = 0x0;//复位 HRCNFG 寄存器
PWM->HRCNFG.bit.EDGMODE = HR_BEP;//在两个边沿上进行 MEP 控制。
PWM->HRCNFG.bit.CTLMODE = HR_CMP;// CMPAHR 和 TBPRDHR HR 控制。
PWM->HRCNFG.bit.HRLOAD = HR_CTR_ZERO_PRD;// CTR 上的 LOAD = 0
PWM->HRCNFG.bit.EDGEMODEB = HR_BEP;//在两个边沿上进行 MEP 控制。
PWM->HRCNFG.bit.CTLMODEB = HR_CMP;// CMPAHR 和 TBPRDHR HR 控制。
PWM->HRCNFG.bit.HRLOADB = HR_CTR_ZERO_PRD;// CTR 上的负载= 0
PWM->HRCNFG.bit.AUTOCONV = 1;//启用 HR 周期的自动转换
PWM->HRPCTL.bit.TBPHSHRLOADE = 1;//启用 TBPHSHR 同步(更新计数 HR 控制时需要)
PWM->HRPCTL.bit.HRPE = 1;//开启高分辨率周期控制。
PWM->TBCTL.BIT.SWFSYNC = 1;
PWM->CMPA.bit.CMPAHR =(1 << 8);
PWM->CMPB.bit.CMPBHR =(1 << 8);
PWM->DBCTL.BIT.IN_MODE = DBA_ALL;
PWM->DBCTL.BIT.SHDWDBREDMODE = 1;
PWM->DBCTL.BIT.SHDWDBFEDMODE = 1;
PWM->DBCTL.BIT.LOADREDMODE = 2;//加载计数器=0
PWM->DBCTL.BIT.LOADFEDMODE = 2;//加载计数器=0
PWM->DBCTL.BIT.DEDB_MODE = 0x0;
PWM->DBCTL.BIT.HALFRECYCLE = 1;
PWM->DBCTL.BIT.POLSEL = 0x2;
PWM->DBCTL.BIT.OUT_MODE = DB_FULL_ENABLE;
PWM->DBCTL.BIT.OUTSWAP = 0x0;
PWM->DBRED.BIT.DBRED = 0;
PWM->DBREDHR.BIT.DBREDHR = 0x0;
PWM->DBFED.BIT.DBFED = 0;
PWM->DBFEDHR.BIT.DBFEDHR = 0x0;
PWM->HRCNFG2.bit.EDGEMODEDB = HR_BEP;
PWM->HRCNFG2.bit.CTLMODEDBRED = HR_CTR_ZERO_PRD;// ZRO 上加载
PWM->HRCNFG2.bit.CTLMODEDBFED = HR_CTR_ZERO_PRD;//在 ZRO 上加载
PWM->DBREDHR.BIT.DBREDHR =(0 << 9);
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 1;
//////////////////
EPWM_enableSyncOutPulseSource ((uint32_t) masterPWM->pstEPwmAddr、EPWM_SYNC_OUT_PULSE_ON_CNTR_ZERO);
ePWM_selectPeriodLoadEvent ((uint32_t) slavePWM->pstEPwmAddr、ePWM_shadow_load_mode_counter_sync);
slavePWM->pstEPwmAddr->TBCTL.BIT.SWFSYNC = 1;
slavePWM->pstEPwmAddr->TBCTL.bit.PHSEN = TB_enable;
谢谢!
