Hi,
I have been able to turn on my HRPWM and write to the CMPA and CMPAHR registers.
My questions is regarding calling the SFO to get an MEP_ScaleFactor.
Can I run the HRPWM without calling the SFO ?
What would be the error on the PWM without it ?
Here is my config for my HRPWM:
I'm using PWM4 with a constant frequency and I'm controlling the duty cycle.
EPwm4Regs.TBCTL.bit.PRDLD = TB_IMMEDIATE; // set Immediate load
EPwm4Regs.TBPRD = 300; // for 330kHz
EPwm4Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;
EPwm4Regs.TBCTL.bit.PHSEN = TB_DISABLE; // EPwm4 is the Master
EPwm4Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;
EPwm4Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
EPwm4Regs.TBCTL.bit.CLKDIV = TB_DIV1;
EPwm4Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
EPwm4Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm4Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; // optional
EPwm4Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW; // optional
EPwm4Regs.AQCTLA.bit.ZRO = AQ_SET;
EPwm4Regs.AQCTLA.bit.CAU = AQ_CLEAR;
EPwm4Regs.AQCTLB.bit.ZRO = AQ_SET; // optional
EPwm4Regs.AQCTLB.bit.CBU = AQ_CLEAR; // optional
EALLOW; // Note these registers are protected
EPwm4Regs.HRCNFG.all = 0x0; // clear all bits first
EPwm4Regs.HRCNFG.bit.EDGMODE = HR_FEP; // Control Falling Edge Position
EPwm4Regs.HRCNFG.bit.CTLMODE = HR_CMP; // CMPAHR controls the MEP
EPwm4Regs.HRCNFG.bit.HRLOAD = HR_CTR_ZERO; // Shadow load on CTR=Zero
EPwm4Regs.HRPWR.bit.CALPWRON = 1;
EPwm4Regs.HRCNFG.bit.AUTOCONV = 1;
EDIS;
MEP_ScaleFactor = 66*256; // Start with typical Scale Factor
When I load the duty cycle, I do it the following way :
EPwm4Regs.CMPA.all = duty * EPwm4Regs.TBPRD * 65535;
(where duty is value between 0.001 and .8)
Do you have any recommendations ?