EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET;
EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;
EPwm1Regs.AQCTLB.bit.ZRO = AQ_SET;
EPwm1Regs.AQCTLB.bit.CBU = AQ_CLEAR;
EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; //
EPwm1Regs.ETSEL.bit.INTEN = 0; // Enable INT
EPwm1Regs.ETPS.bit.INTPRD = ET_1ST; //
PWM1A,1B最大的占空比为50%。
在占空比比较小的情况下,要关掉PWM1A,2A的,使其占空比为零,我采取了两种方法。
在EPWM1中断里设置和更新比较值
1.EPwm1Regs.CMPA.half.CMPA = 0;
结果是PW1A占空比变成了100%,不能为0,且还占空比变成了100%。
2.我使用
EPwm1Regs.AQCSFRC.all = 0x01; //PWM1A force low,00 01
EPwm2Regs.AQCSFRC.all = 0x01; //PWM2A force low,00 01
就是在关断的上一个周期,PMW1A变成了固定的1,无论是什么值,都是最小的高速时钟单位1
Young Hu:
采用AQCSFRC寄存器强制关闭的方法是可以的啊
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET;
EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;
EPwm1Regs.AQCTLB.bit.ZRO = AQ_SET;
EPwm1Regs.AQCTLB.bit.CBU = AQ_CLEAR;
EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; //
EPwm1Regs.ETSEL.bit.INTEN = 0; // Enable INT
EPwm1Regs.ETPS.bit.INTPRD = ET_1ST; //
PWM1A,1B最大的占空比为50%。
在占空比比较小的情况下,要关掉PWM1A,2A的,使其占空比为零,我采取了两种方法。
在EPWM1中断里设置和更新比较值
1.EPwm1Regs.CMPA.half.CMPA = 0;
结果是PW1A占空比变成了100%,不能为0,且还占空比变成了100%。
2.我使用
EPwm1Regs.AQCSFRC.all = 0x01; //PWM1A force low,00 01
EPwm2Regs.AQCSFRC.all = 0x01; //PWM2A force low,00 01
就是在关断的上一个周期,PMW1A变成了固定的1,无论是什么值,都是最小的高速时钟单位1
Yibo wang:
采样AQCSFRC强制关掉,需要花费2个时钟周期,也就是说PWM开通两个PWM周期才能关断。
不能更改关断PWM的选择,没有效果,因为我的波形是在CNT = 0有一个脉冲,在CNT = PRD 有一个脉冲,总有一个脉冲的波形只发2个时钟周期就被关断了。
我的PWM是三电平全桥LLC谐振波形。需要同时开通,A和B要求可设定的关断,因此只能靠在0或者PRD上开通了,因为没有第三个比较器了