Tool/software:
I am trying to create 2 PWMs with HR enabled (period, duty cycle and deadband), and synchronize them so I can add a phase between them.
The problem is that when I try to set a value to TBPRDHR while synchronized, the PWMs have jitter. If i leave TBPRDHR set to 0, or disable the syncronization between the two, the jitter dissapears.
Are there some limitations in this sense, or am I missing something else?
PWM->HRCNFG.all = 0x0; // Reset the HRCNFG Register
PWM->HRCNFG.bit.EDGMODE = HR_BEP; // MEP control on both edges.
PWM->HRCNFG.bit.CTLMODE = HR_CMP; // CMPAHR and TBPRDHR HR control.
PWM->HRCNFG.bit.HRLOAD = HR_CTR_ZERO_PRD; // load on CTR = 0
PWM->HRCNFG.bit.EDGMODEB = HR_BEP; // MEP control on both edges.
PWM->HRCNFG.bit.CTLMODEB = HR_CMP; // CMPAHR and TBPRDHR HR control.
PWM->HRCNFG.bit.HRLOADB = HR_CTR_ZERO_PRD; // load on CTR = 0
PWM->HRCNFG.bit.AUTOCONV = 1; // Enable autoconversion for HR period
PWM->HRPCTL.bit.TBPHSHRLOADE = 1; // Enable TBPHSHR sync (required for updwn count HR control)
PWM->HRPCTL.bit.HRPE = 1; // Turn on high-resolution period control.
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; // Load on Counter == 0
PWM->DBCTL.bit.LOADFEDMODE = 2; // Load on Counter == 0
PWM->DBCTL.bit.DEDB_MODE = 0x0;
PWM->DBCTL.bit.HALFCYCLE = 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.EDGMODEDB = HR_BEP;
PWM->HRCNFG2.bit.CTLMODEDBRED = HR_CTR_ZERO_PRD; // Load on ZRO
PWM->HRCNFG2.bit.CTLMODEDBFED = HR_CTR_ZERO_PRD; // Load on 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;
Thank you!