F28035 用外部输入过流信号至TZ1封锁PWM慢是怎么回事
用TZ引脚接受外部输入过流信号来触发封锁PWM,但是很慢,经过排查,发现同步(Sync)貌似有问题,我用软件给OSHT置1就可以封锁,但是外部触发就是很慢,而且一点外部过流信号消失又会发出PWM,TZ配置如下:EALLOW;
// CPU Halt Trip
EPwm1Regs.TZSEL.bit.CBC6=0x1;
EPwm2Regs.TZSEL.bit.CBC6=0x1;
EPwm3Regs.TZSEL.bit.CBC6=0x1;
EPwm1Regs.TZSEL.bit.OSHT1 = 1;//enable TZ1 for OSHT
EPwm2Regs.TZSEL.bit.OSHT1 = 1;//enable TZ1 for OSHT
EPwm3Regs.TZSEL.bit.OSHT1 = 1;//enable TZ1 for OSHT
// What do we want the OST/CBC events to do?
// TZA events can force EPWMxA
// TZB events can force EPWMxB
EPwm1Regs.TZCTL.bit.TZA = TZ_FORCE_LO; // EPWMxA will go low
EPwm1Regs.TZCTL.bit.TZB = TZ_FORCE_LO; // EPWMxB will go low
EPwm2Regs.TZCTL.bit.TZA = TZ_FORCE_LO; // EPWMxA will go low
EPwm2Regs.TZCTL.bit.TZB = TZ_FORCE_LO; // EPWMxB will go low
EPwm3Regs.TZCTL.bit.TZA = TZ_FORCE_LO; // EPWMxA will go low
EPwm3Regs.TZCTL.bit.TZB = TZ_FORCE_LO; // EPWMxB will go low
EDIS;
// Clear any spurious OV trip
EPwm1Regs.TZCLR.bit.OST = 1;
EPwm2Regs.TZCLR.bit.OST = 1;
EPwm3Regs.TZCLR.bit.OST = 1;
PWM配置如下:
#define PWM_INIT_MACRO(ch1,ch2,ch3,v) \
/* Setup Sync*/ \
(*ePWM).TBCTL.bit.SYNCOSEL = 0; /* Pass through*/ \
(*ePWM).TBCTL.bit.SYNCOSEL = 0; /* Pass through*/ \
(*ePWM).TBCTL.bit.SYNCOSEL = 0; /* Pass through*/ \
\
/* Allow each timer to be sync'ed*/ \
(*ePWM).TBCTL.bit.PHSEN = 1; \
(*ePWM).TBCTL.bit.PHSEN = 1; \
(*ePWM).TBCTL.bit.PHSEN = 1; \
\
/* Init Timer-Base Period Register for EPWM1-EPWM3*/ \
(*ePWM).TBPRD = v.PeriodMax; \
(*ePWM).TBPRD = v.PeriodMax; \
(*ePWM).TBPRD = v.PeriodMax; \
\
/* Init Timer-Base Phase Register for EPWM1-EPWM3*/ \
(*ePWM).TBPHS.half.TBPHS = 0; \
(*ePWM).TBPHS.half.TBPHS = 0; \
(*ePWM).TBPHS.half.TBPHS = 0; \
\
/* Init Timer-Base Control Register for EPWM1-EPWM3*/ \
(*ePWM).TBCTL.all = PWM_INIT_STATE; \
(*ePWM).TBCTL.all = PWM_INIT_STATE; \
(*ePWM).TBCTL.all = PWM_INIT_STATE; \
\
/* Init Compare Control Register for EPWM1-EPWM3*/ \
(*ePWM).CMPCTL.all = CMPCTL_INIT_STATE; \
(*ePWM).CMPCTL.all = CMPCTL_INIT_STATE; \
(*ePWM).CMPCTL.all = CMPCTL_INIT_STATE; \
\
/* Init Action Qualifier Output A Register for EPWM1-EPWM3*/ \
(*ePWM).AQCTLA.all = AQCTLA_INIT_STATE; \
(*ePWM).AQCTLA.all = AQCTLA_INIT_STATE; \
(*ePWM).AQCTLA.all = AQCTLA_INIT_STATE; \
\
/* Init Dead-Band Generator Control Register for EPWM1-EPWM3*/ \
(*ePWM).DBCTL.all = DBCTL_INIT_STATE; \
(*ePWM).DBCTL.all = DBCTL_INIT_STATE; \
(*ePWM).DBCTL.all = DBCTL_INIT_STATE; \
\
/* Init Dead-Band Generator for EPWM1-EPWM3*/ \
(*ePWM).DBFED = v.Deadband; \
(*ePWM).DBRED = v.Deadband; \
(*ePWM).DBFED = v.Deadband; \
(*ePWM).DBRED = v.Deadband; \
(*ePWM).DBFED = v.Deadband; \
(*ePWM).DBRED = v.Deadband; \
\
/* Init PWM Chopper Control Register for EPWM1-EPWM3*/ \
(*ePWM).PCCTL.all = PCCTL_INIT_STATE; \
(*ePWM).PCCTL.all = PCCTL_INIT_STATE; \
(*ePWM).PCCTL.all = PCCTL_INIT_STATE; \
\
EALLOW; /* Enable EALLOW */ \
\
/* Init Trip Zone Select Register*/ \
(*ePWM).TZSEL.all = TZSEL_INIT_STATE; \
(*ePWM).TZSEL.all = TZSEL_INIT_STATE; \
(*ePWM).TZSEL.all = TZSEL_INIT_STATE; \
\
EDIS; /* Disable EALLOW*/
基本上都是参考TI官方的程序做的,查了寄存器也看不出什么问题 过流到封锁是MCU的硬件完成的吧 有个特殊的引脚需要控制一下
等软件检测关断 太慢了 对啊, 这是硬件完成的, 应该速度很快. 是不是引入了信号滤波? CBC触发是在EPWM 计数器等于0时自动清0
OHST不自动清零,但最好选异步,不然等时钟会延时 zhangmangui 发表于 2017-9-7 22:49
过流到封锁是MCU的硬件完成的吧 有个特殊的引脚需要控制一下
等软件检测关断 太慢了 ...
对,应该是硬件完成,只需要配置成OST模式就行,但是目前就是很慢,需要100--200us才能关断,太慢了,我用的时TZ1引脚,不知道问题出在哪 airwill 发表于 2017-9-10 08:38
对啊, 这是硬件完成的, 应该速度很快. 是不是引入了信号滤波?
GPIO没有配置信号滤波,目前就是需要100-200us才能关断输出,与我们预期的几微妙相差太多了,不知道怎么回事 太不专一 发表于 2017-9-14 11:48
CBC触发是在EPWM 计数器等于0时自动清0
OHST不自动清零,但最好选异步,不然等时钟会延时 ...
意思就是OST模式也不会很快关断?我们想要在2-3微秒关断输出
页:
[1]