Hello all,
I m trying to implement a trapezoidal control as Following:
/* HS3 HS2 HS1 SCR TP1 TP2 TP3 BT1 BT2 BT3
'0' '0' '1' 1 '0' '1' '0' PWM '0' '0'
'1' '0' '1' 5 '0' '0' PWM '1' '0' '0'
'1' '0' '0' 4 '0' '0' '1' '0' PWM '0'
'1' '1' '0' 6 PWM '0' '0' '0' '1' '0'
'0' '1' '0' 2 '1' '0' '0' '0' '0' PWM
'0' '1' '1' 3 '0' PWM '0' '0' '0' '1'
*/
Based on the bldc control suite exemple, i managed to get only PWM on th A output (the TOPs), only high levels on the B outputs (the Bottom).
My code looks like this for comniation of Sensor equals to 1 and 5:
case 1:
{
DrvPWM_EPwm1Regs.AQCSFRC.bit.CSFB = 0; /* Forcing disabled on output B of EPWM1 */
DrvPWM_EPwm1Regs.AQCTLB.bit.CBU = 2; /* Set high when CTR = CMPB on UP-count */
DrvPWM_EPwm1Regs.AQCTLB.bit.CBD = 1; /* Set low when CTR = CMPB on DOWN-count */
DrvPWM_EPwm1Regs.CMPB.all = p_u16PWM; /* PWM signal on output B of EPWM1 */
DrvPWM_EPwm1Regs.AQCSFRC.bit.CSFA = 1; /* Forcing a continuous LOw on output A of EPWM1 */
/* */
DrvPWM_EPwm2Regs.AQCSFRC.bit.CSFA = 2; /* Forcing a continuous High on output A of EPWM2 */
DrvPWM_EPwm2Regs.AQCSFRC.bit.CSFB = 1; /* Forcing a continuous Low on output B of EPWM2 */
/* */
DrvPWM_EPwm3Regs.AQCSFRC.bit.CSFA = 1; /* Forcing a continuous Low on output A of EPWM3 */
DrvPWM_EPwm3Regs.AQCSFRC.bit.CSFB = 1; /* Forcing a continuous Low on output B of EPWM3 */
}
break;
case 5:
{
DrvPWM_EPwm1Regs.AQCSFRC.bit.CSFA = 1; /* Forcing a continuous Low on output A of EPWM1 */
DrvPWM_EPwm1Regs.AQCSFRC.bit.CSFB = 2; /* Forcing a continuous High on output B of EPWM1 */
DrvPWM_EPwm2Regs.AQCSFRC.bit.CSFA = 1; /* Forcing a continuous Low on output A of EPWM2 */
DrvPWM_EPwm2Regs.AQCSFRC.bit.CSFB = 1; /* Forcing a continuous Low on output B of EPWM2 */
DrvPWM_EPwm3Regs.AQCSFRC.bit.CSFA = 0; /* Forcing disabled on output A of EPWM3 */
DrvPWM_EPwm3Regs.AQCTLA.bit.CAU = 2; /* Set high when CTR = CMPA on UP-count */
DrvPWM_EPwm3Regs.AQCTLA.bit.CAD = 1; /* Set low when CTR = CMPA on DOWN-count */
DrvPWM_EPwm3Regs.CMPA.all = p_u16PWM; /* PWM signal on output A of EPWM3 */
DrvPWM_EPwm3Regs.AQCSFRC.bit.CSFB = 1; /* Forcing a continuous Low on output B of EPWM3 */
}
break;
I expected to have PWM on Output B using:
"DrvPWM_EPwm1Regs.AQCSFRC.bit.CSFB = 0; /* Forcing disabled on output B of EPWM1 */
DrvPWM_EPwm1Regs.AQCTLB.bit.CBU = 2; /* Set high when CTR = CMPB on UP-count */
DrvPWM_EPwm1Regs.AQCTLB.bit.CBD = 1; /* Set low when CTR = CMPB on DOWN-count */
DrvPWM_EPwm1Regs.CMPB.all = p_u16PWM; /* PWM signal on output B of EPWM1 */"
But s far i have only a high on output B and no PWM...
Where should i look?
AQCTLA AND B configuration is as follows:
/********************/
/* AQCTLA registers */
/********************/
// CBD
DrvPWM_EPwm1Regs.AQCTLA.bit.CBD =
DrvPWM_EPwm2Regs.AQCTLA.bit.CBD =
DrvPWM_EPwm3Regs.AQCTLA.bit.CBD = AQ_NO_ACTION;
// CBD
DrvPWM_EPwm1Regs.AQCTLA.bit.CBU =
DrvPWM_EPwm2Regs.AQCTLA.bit.CBU =
DrvPWM_EPwm3Regs.AQCTLA.bit.CBU = AQ_NO_ACTION;
// CAD
DrvPWM_EPwm1Regs.AQCTLA.bit.CAD =
DrvPWM_EPwm2Regs.AQCTLA.bit.CAD =
DrvPWM_EPwm3Regs.AQCTLA.bit.CAD = AQ_SET;
// CAU
DrvPWM_EPwm1Regs.AQCTLA.bit.CAU =
DrvPWM_EPwm2Regs.AQCTLA.bit.CAU =
DrvPWM_EPwm3Regs.AQCTLA.bit.CAU = AQ_SET;
// PRD
DrvPWM_EPwm1Regs.AQCTLA.bit.PRD =
DrvPWM_EPwm2Regs.AQCTLA.bit.PRD =
DrvPWM_EPwm3Regs.AQCTLA.bit.PRD = AQ_NO_ACTION;
// ZRO
DrvPWM_EPwm1Regs.AQCTLA.bit.ZRO =
DrvPWM_EPwm2Regs.AQCTLA.bit.ZRO =
DrvPWM_EPwm3Regs.AQCTLA.bit.ZRO = AQ_NO_ACTION;
/********************/
/* AQCTLB registers */
/********************/
// CBD
DrvPWM_EPwm1Regs.AQCTLB.bit.CBD =
DrvPWM_EPwm2Regs.AQCTLB.bit.CBD =
DrvPWM_EPwm3Regs.AQCTLB.bit.CBD = AQ_SET;
// CBD
DrvPWM_EPwm1Regs.AQCTLB.bit.CBU =
DrvPWM_EPwm2Regs.AQCTLB.bit.CBU =
DrvPWM_EPwm3Regs.AQCTLB.bit.CBU = AQ_SET;
// CAD
DrvPWM_EPwm1Regs.AQCTLB.bit.CAD =
DrvPWM_EPwm2Regs.AQCTLB.bit.CAD =
DrvPWM_EPwm3Regs.AQCTLB.bit.CAD = AQ_NO_ACTION;
// CAU
DrvPWM_EPwm1Regs.AQCTLB.bit.CAU =
DrvPWM_EPwm2Regs.AQCTLB.bit.CAU =
DrvPWM_EPwm3Regs.AQCTLB.bit.CAU = AQ_NO_ACTION;
// PRD
DrvPWM_EPwm1Regs.AQCTLB.bit.PRD =
DrvPWM_EPwm2Regs.AQCTLB.bit.PRD =
DrvPWM_EPwm3Regs.AQCTLB.bit.PRD = AQ_NO_ACTION;
// ZRO
DrvPWM_EPwm1Regs.AQCTLB.bit.ZRO =
DrvPWM_EPwm2Regs.AQCTLB.bit.ZRO =
DrvPWM_EPwm3Regs.AQCTLB.bit.ZRO = AQ_NO_ACTION;
Thank you!
PA

