I am trying to replicate the behavior of Figure 14-30 in the TRM (SPRUHX5F) using EPwm6A.
The up-count settings work as expected but the down-count settings don't work.
EPwm6 register settings are as follows:
EPwm6Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;
EPwm6Regs.CMPCTL.bit.LOADAMODE = 0; /* Load on CTR = 0 */
EPwm6Regs.CMPCTL.bit.LOADBMODE = 0; /* Load on CTR = 0 */
EPwm6Regs.CMPCTL.bit.SHDWAMODE = 0; /* Shadow Enabled */
EPwm6Regs.CMPCTL.bit.SHDWBMODE = 0; /* Shadow Enabled */
EPwm6Regs.CMPCTL.bit.LOADASYNC = 0; /* Use LOADAMODE */
EPwm6Regs.CMPCTL.bit.LOADBSYNC = 0; /* Use LOADBMODE */
EPwm6Regs.AQCTL.bit.LDAQAMODE = 0; /* Load on CTR = 0 */
EPwm6Regs.AQCTL.bit.LDAQBMODE = 0; /* Load on CTR = 0 */
EPwm6Regs.AQCTL.bit.SHDWAQAMODE = 1; /* Shadow enabled */
EPwm6Regs.AQCTL.bit.SHDWAQBMODE = 1; /* Shadow enabled */
EPwm6Regs.AQCTL.bit.LDAQASYNC = 0; /* Use LDAQAMODE */
EPwm6Regs.AQCTL.bit.LDAQBSYNC = 0; /* Use LDAQBMODE */
EPwm6Regs.TBPRD = 166;
EPwm6Regs.CMPA.bit.CMPA = 120;
EPwm6Regs.CMPB.bit.CMPB = (EPwm6Regs.TBPRD - EPwm6Regs.CMPA.bit.CMPA); /* CMPB = 46 */
EPwm6Regs.AQCTLA.bit.ZRO = AQ_CLEAR;
EPwm6Regs.AQCTLA.bit.PRD = AQ_NO_ACTION;
EPwm6Regs.AQCTLA.bit.CAU = AQ_SET;
EPwm6Regs.AQCTLA.bit.CAD = AQ_NO_ACTION;
EPwm6Regs.AQCTLA.bit.CBU = AQ_NO_ACTION;
EPwm6Regs.AQCTLA.bit.CBD = AQ_CLEAR;
With these settings I am expecting the behavior as seen in Figure 14-30:
What I'm actually getting is shown in the scope plot below. Channel 1 is EPwm2A (its rising edge corresponds to EPwm2.TBCNT = EPwm6.TBCNT = 0). Ch2 = EPwm6A. Deadband has been zero'd for clarity.
Note that EPwm6A goes high at TBCNT = CMPA on up-count, as expected. It does NOT go low at TBCNT = CMPB on down-count but instead stays high until TBCNT = 0.
I have tried swapping the values for EPwm6Regs.CMPA.bit.CMPA and EPwm6Regs.CMPB.bit.CMPB (i.e. CMPA = 46, CMPB = 120) and the result is the same.
I've also tried setting both EPwm6Regs.CMPCTL.bit.LOADAMODE and EPwm6Regs.CMPCTL.bit.LOADBMODE to 1 and 2 (PRD load and both ZRO and PRD load) also wiht no effect.
Am I mis-setting a register, or possibly attempting something that can't be done? Thanks in advance for any insight.
