你(们)好
我正在 我的项目中学习TMS320F2.8027万。 由于TMS320F2.8027万卡上的比较器,我正在检测正弦电流的零交叉。 将电流与DAC值进行比较。 之后,比较器的输出将创建一个事件。 当该事件发生时,它将创建一个tripzone中断。 在Tripzone中断服务例程中,系统测量正负半周期窦。 此数据用于调整PWM的频率。
但是,当比较器的当前输入等于或接近DAC值时,就会出现弹跳问题,由于这种弹跳问题,零交叉的测量会获得错误的数据。 由于这种情况,我无法正确创建PWM信号。 为了解决此问题,我使用了事件过滤子模块。 我的代码似乎没有问题,但事件筛选似乎不起作用。 我仍在观察弹跳。 这是我的比较器,事件触发器和事件过滤代码
EALLOW; GpioCtrlRegs.AIOMUX1.bit.AIO4 = 3;//比较器输入2A GpioCtrlRegs.AIOMUX1.bit.AIO12 = 3;//比较器输入2B gpioCtrlRegs.GPAMUX1.bit.GPIO3 = 3;//比较器输出2输出 gpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1;// GPIO0 = PWM1A gpioCtrlRegs.GPAMUX1.bit.GPIO1 = 1;// GPIO1 = PWM1B EDIS; //初始化比较器 EALLOW; AdcRegs.ADCCTL1.bit.ADCPWDN = 1; //为ADC加电 AdcRegs.ADCCTL1.bit.ADCBGPWD = 1; //启动ADC bandgap AdcRegs.ADCCTL1.bit.ADCREFPWD = 1; //为ADC参考缓冲电路加电 Comp2Regs.COMPCTL.bit.COMPDACEN = 1;//加电比较器DAC Comp2Regs.COMPCTL.bit.COMPSOURCE = 0;//选择反向输入作为DAC (或外部输入) Comp2Regs.DACVAL.Bit.DACVAL = 512; //(1.65V-3.3V)(burada compout sinyali çıkmaya başlıyor) EDIS; //TIMER0TIM=4.573万 //数字比较器事件触发 EALLOW; EPwm1Regs.DCTRIPSEL.bit.DCAHCOMPSEL = DC_COMP2OUT;// DCAH =比较器2输出 EPwm1Regs.TZDCSEL.bit.DCAEVT1 = TZ_DCAH_HI;//为比较器生成用于初始化的高事件 EPwm1Regs.DCFCTL.bit.SRCSEL = DC_SRC_DCAEVT1; // DCEVTFLT滤波源= DCAEVT1 (27.03 ,2017) EPwm1Regs.DCACTL.bit.EVT1SRCSEL = DC_EVT_FLT; EPwm1Regs.DCACTL.bit.EVT1FRCSYNCSEL = DC_EVT_Async; //筛选事件(27.05。2017) EPwm1Regs.DCFCTL.bit.PULSESEL = 1; //TBCNT=0 EPwm1Regs.DCFOFFSET = 500; 窗口的//直流偏移 EPwm1Regs.DCFWINDOW = 2200; //窗口长度 EPwm1Regs.DCFCTL.bit.BLANKINV =1; //空白窗口未反转(1:反转)