您好,我在HVACI_Sensorless中看到:
(*ePWM[ch1]).CMPA.half.CMPA = _IQmpy(v.HalfPerMax,v.MfuncC1)+ v.HalfPerMax;
(*ePWM[ch2]).CMPA.half.CMPA = _IQmpy(v.HalfPerMax,v.MfuncC2)+ v.HalfPerMax;
(*ePWM[ch3]).CMPA.half.CMPA = _IQmpy(v.HalfPerMax,v.MfuncC3)+ v.HalfPerMax;
当我将(*ePWM[ch1]).CMPA.half.CMPA =0时,在示波器中我看到PWM1A一直为低,PWM1B一直为高
当我将(*ePWM[ch1]).CMPA.half.CMPA =v.PeriodMax+1时,我发现PWM1A一直为高,PWM1B一直为低
请问:1、当(*ePWM[ch1]).CMPA.half.CMPA =0时,在0处不是要产生触发吗?为什么一直是低?
在文档中我看到,当比较值大于周期值得时候,对于增减模式,CMPA>=TBPRD周期,则比较匹配时(TBCTR=TBPRD)发生触发事件。
那么当(*ePWM[ch1]).CMPA.half.CMPA =v.PeriodMax+1时,在v.PeriodMax不是也要产生触发吗?为什么一直为高?
2、请问在程序中,当比较寄存器赋完值之后,什么时候才进行比较?在下一个中断到来的时候吗?为什么?
谢谢!!!
Jay:
你好,
1. 当CMPA=0时,在TBCTR值为0时发生比较事件;当CMPA=TBPRD+1时,比较事件永远不发生。那么,比较事件发生后对应引脚的电平变化,是由AQ子模块来决定的,你需要查看AQ子模块的相关寄器。
2. 比较寄存器赋值后,什么时候有效有两种情况。如果你使用了影子寄存器,那么从影子寄存器装入活动寄存器的时间是可以配置的,如果没有使用影子寄存器,那么写入后就立即有效了。
建议仔细阅读一下ePWM模块的用户手册。