| 
 
| 要实现的任务是,将28035比较器的输出来驱动EPWM1A和EPWM1B实现互补。 两天实现了。代码如下。
 比较器初始化相当简单。
 void InitCompA(void)
 {
 EALLOW; // This is needed to write to EALLOW protected registers
 AdcRegs.ADCCTL1.bit.ADCBGPWD = 1;
 Comp1Regs.COMPCTL.bit.COMPDACEN = 1;
 Comp1Regs.COMPCTL.bit.CMPINV = 0;
 Comp1Regs.COMPCTL.bit.COMPSOURCE = 0;
 Comp1Regs.COMPCTL.bit.SYNCSEL = 1;
 Comp1Regs.COMPCTL.bit.QUALSEL = 1;
 EDIS; // This is needed to disable write to EALLOW protected registers
 Comp1Regs.DACVAL.all = 512;
 
 }
 PWM初始化。
 EALLOW;
 EPwm1Regs.DCTRIPSEL.bit.DCAHCOMPSEL = DC_COMP1OUT;
 EPwm1Regs.DCTRIPSEL.bit.DCBHCOMPSEL = DC_COMP1OUT;
 EPwm1Regs.TZDCSEL.bit.DCAEVT1 = TZ_DCAH_HI; //010 DCAH = high, DCAL = don't care
 EPwm1Regs.TZDCSEL.bit.DCAEVT2 = TZ_DCBH_LOW; //011 DCAL = low, DCAH = don't care
 EPwm1Regs.TZDCSEL.bit.DCBEVT1 = TZ_DCAH_HI;
 EPwm1Regs.TZDCSEL.bit.DCBEVT2 = TZ_DCAH_LOW;
 EPwm1Regs.DCACTL.bit.EVT1SRCSEL = DC_EVT1;
 EPwm1Regs.DCACTL.bit.EVT2SRCSEL = DC_EVT2;
 EPwm1Regs.DCACTL.bit.EVT1FRCSYNCSEL = DC_EVT_ASYNC;
 EPwm1Regs.DCACTL.bit.EVT2FRCSYNCSEL = DC_EVT_ASYNC;
 EPwm1Regs.DCBCTL.bit.EVT1SRCSEL = DC_EVT1;
 EPwm1Regs.DCBCTL.bit.EVT2SRCSEL = DC_EVT2;
 EPwm1Regs.DCBCTL.bit.EVT1FRCSYNCSEL = DC_EVT_ASYNC;
 EPwm1Regs.DCBCTL.bit.EVT2FRCSYNCSEL = DC_EVT_ASYNC;
 // Enable DCAEVT1 as a one-shot trip source
 // Note: DCxEVT1 events can be defined as one-shot.
 // DCxEVT2 events can be defined as cycle-by-cycle.
 // EPwm1Regs.TZSEL.bit.DCAEVT1 = 1;
 EPwm1Regs.TZSEL.bit.DCAEVT1 = 0;
 EPwm1Regs.TZSEL.bit.DCAEVT2 = 0;
 EPwm1Regs.TZSEL.bit.DCBEVT1 = 0;
 EPwm1Regs.TZSEL.bit.DCBEVT2 = 0;
 EPwm1Regs.TZCTL.bit.DCAEVT1 = TZ_FORCE_HI;
 EPwm1Regs.TZCTL.bit.DCAEVT2 = TZ_FORCE_LO;
 EPwm1Regs.TZCTL.bit.DCBEVT1 = TZ_FORCE_LO;
 EPwm1Regs.TZCTL.bit.DCBEVT2 = TZ_FORCE_HI;
 EDIS;
 主要参考spruge9d。
 容易出错的地方是P65图的最上面部分,当然P62和P63部分内容也要仔细阅读。
 所谓的CBC方式和OSHT方式没有仔细研究,但是他们到输出PWM是由TZCTL[TZA]等来实现的。
 Digital Compare Events 事件也可以直接驱动PWM,但是是通过TZCTL[DCAEVT1/2]来实现的,这是要注意的地方。
 思路是这样的,DCAH和DCBH和输入都选择COMP1OUT,产生四个事件,一个事件是DCAEVT1/2,另一个是DCBEVT1/2,然后有,DCAEVT1靠COMP1OUT高触发,DCAEVT2靠COMP1OUT低触发,然后有DACEVT1/2触发ePWM1A/B,不好处是没有死区,下一步想一下如何处理死区。
 | 
 |