以下这段程序,想实现EPWM1A输出低电平,EPWM2A正常输出波形,为什么只有屏蔽掉EPwm2.Regs.CMPA.half.CMPA=Duty2A, EPWM1A输出才为低电平?
Duty1A=0,Duty1B=0,Duty2B=0,Duty2A=10000,Duty3A=0,Duty3B=10000;
EPwm1Regs.CMPCTL.bit.LOADAMODE=0;
EPwm1Regs.AQCTLA.bit.ZRO =2;
EPwm1Regs.AQCTLA.bit.CAU =2;
//EPwm1Regs.AQSFRC.all=0xc0;
//EPwm1Regs.AQCSFRC.bit.CSFA =2;
EPwm1Regs.CMPA.half.CMPA=Duty1A;
EPwm1Regs.CMPB=Duty1B;
EPwm2Regs.CMPCTL.bit.LOADAMODE=0;//LOADAMODE=0在TBCTR=0时装载
EPwm2Regs.AQCTLA.bit.ZRO =2;
EPwm2Regs.AQCTLA.bit.CAU =1;
// EPwm2Regs.CMPA.half.CMPA=Duty2A;
EPwm2Regs.CMPB=Duty2B;
EPwm3Regs.CMPCTL.bit.LOADAMODE=0;
EPwm3Regs.CMPA.half.CMPA=Duty3A;
EPwm3Regs.CMPB=Duty3B;
mangui zhang:
下面的描述不知道对你有没有帮助
TI TMS320F28335的EPWM如何软件强制开关状态在DSP用于电机控制的应用中,有时需要用到强制脉宽调制(PWM)的脉冲开关状态这种操作,比如封锁脉冲以停止电力电子开关管工作;在上电的初始时刻,经常也需要对PWM状态进行一种强制的初始化,比如强制高、强制低等等;一些特殊的PWM算法,如果不是基于三角载波比较法的,如一些SHEPWM、滞环PWM方法等等,也需要直接输出PWM脉冲的状态,此时不能使用比较值与定时器的直接比较来得到开关状态,而且在需要的开关状态已知情况下,直接强制PWM状态,即可得到需要PWM脉冲。在基于事件管理器(EV)的TI C2000 DSP中,如TMS320LF2407A、F2810、2812中,强制脉冲状态是一件很简单的事情,直接写ACTRx寄存器就可以了,比如:EvaRegs.ACTRA.all=0xfff;这样的语句就能强制EVA对应的6个PWM管脚全部为高电平,等于0则可以全部强制低电平,需要强制特定管脚的值只需要修改对应的位即可。在基于改进的PWM模块的C2000 DSP中,如2833x系列,都使用了新型的增强型PWM模块(EPWM),其每个PWM管脚都可以有单独的配置,这样就造成了PWM配置的复杂性增加了。在网上找了好久,都没有找到如何强制脉冲状态。本来想,换了个新片子,大不了照葫芦画瓢配置一番就行了,于是拿过EPWM的手册,照着AQSFRC寄存器配置了半天,却总是没反应。看名字,AQSFRC是Action-Qualifier Software Force Register,应该是可以force它听话的啊!代码EPwm1Regs.AQSFRC.bit.OTSFA=1;EPwm1Regs.AQSFRC.bit.ACTSFA=1;这样子的根本不产生任何效果。后来才发现是研究不深啊,原来真正需要配置的是AQCSFRC:EPwm1Regs.AQSFRC.all=0xc0;EPwm1Regs.AQCSFRC.all=state;两个寄存器的datasheet的页码就差一页,下次真得要读仔细了。
以下这段程序,想实现EPWM1A输出低电平,EPWM2A正常输出波形,为什么只有屏蔽掉EPwm2.Regs.CMPA.half.CMPA=Duty2A, EPWM1A输出才为低电平?
Duty1A=0,Duty1B=0,Duty2B=0,Duty2A=10000,Duty3A=0,Duty3B=10000;
EPwm1Regs.CMPCTL.bit.LOADAMODE=0;
EPwm1Regs.AQCTLA.bit.ZRO =2;
EPwm1Regs.AQCTLA.bit.CAU =2;
//EPwm1Regs.AQSFRC.all=0xc0;
//EPwm1Regs.AQCSFRC.bit.CSFA =2;
EPwm1Regs.CMPA.half.CMPA=Duty1A;
EPwm1Regs.CMPB=Duty1B;
EPwm2Regs.CMPCTL.bit.LOADAMODE=0;//LOADAMODE=0在TBCTR=0时装载
EPwm2Regs.AQCTLA.bit.ZRO =2;
EPwm2Regs.AQCTLA.bit.CAU =1;
// EPwm2Regs.CMPA.half.CMPA=Duty2A;
EPwm2Regs.CMPB=Duty2B;
EPwm3Regs.CMPCTL.bit.LOADAMODE=0;
EPwm3Regs.CMPA.half.CMPA=Duty3A;
EPwm3Regs.CMPB=Duty3B;
xin zhang11:
回复 mangui zhang:
嗯 强制我也试过了 在屏蔽掉EPwm2Regs.CMPA.half.CMPA=Duty2A也是可以强制低 ,但是不屏蔽强制就没反应 我也不知道是啥原因 那个各个EPWM的动作限定模块,比较单元都是独立的吧?