我在做直流电机控制时,需要有限位,在硬件设计上,预留了口接到GPIO21和GPIO24上,我现在在使用PWM中的TZ子模块。设置如下:现在的现象是,到了限位,GPIO24会置低,PWM也就不输出了,可是停在了中断了。我有两路PWM,也对应着两个限位,(只能一个限位为低,硬件设计),当TZ2为低时,进入中断了,可是我的TZ1还是高电平啊,为什么另一路的PWM控制不了,就停在TZ2的中断里,为什么呢?要是不到限位,也就是TZ1和TZ2不动作,我试验了,两路PWM都正常工作。这怎么解决啊?
EPwm1Setup()
{
…
EPwm1Regs.TASEL.bit.OSHT2=1;
EPwm1Regs.TACTL.bit.TZA=0x2;
EPwm1Regs.TZEINT.bit.OST=1;
}
interrupt void epwm1_tzint_isr(void)
{
EPwm1TZIntCount++;
EALLOW;
EPwm1Regs.TZCLR.bit.OST=1;
EPwm1Regs.TZCLR.bit.INT=1;
EDIS;
PieCtrlRegs.PIEACK.all =0x0002;
}
Terry Deng:
你可以把两路甚至多路PWM都设置到同一个TZ保护,比如TZ2,只有TZ2低电平,所有的PWM都停止输出。另外,如果不想进入TZ2中断,把该中断允许位关掉即可
我在做直流电机控制时,需要有限位,在硬件设计上,预留了口接到GPIO21和GPIO24上,我现在在使用PWM中的TZ子模块。设置如下:现在的现象是,到了限位,GPIO24会置低,PWM也就不输出了,可是停在了中断了。我有两路PWM,也对应着两个限位,(只能一个限位为低,硬件设计),当TZ2为低时,进入中断了,可是我的TZ1还是高电平啊,为什么另一路的PWM控制不了,就停在TZ2的中断里,为什么呢?要是不到限位,也就是TZ1和TZ2不动作,我试验了,两路PWM都正常工作。这怎么解决啊?
EPwm1Setup()
{
…
EPwm1Regs.TASEL.bit.OSHT2=1;
EPwm1Regs.TACTL.bit.TZA=0x2;
EPwm1Regs.TZEINT.bit.OST=1;
}
interrupt void epwm1_tzint_isr(void)
{
EPwm1TZIntCount++;
EALLOW;
EPwm1Regs.TZCLR.bit.OST=1;
EPwm1Regs.TZCLR.bit.INT=1;
EDIS;
PieCtrlRegs.PIEACK.all =0x0002;
}
囧:
EPwm1Regs.TASEL.bit.OSHT2=1;
EPwm1Regs.TACTL.bit.TZA=0x2;
这两个寄存器有问题,应该是TZSEL和TZCTL吧