Other Parts Discussed in Thread: DRV8350
目的是想通过检测3个ADC,A2/B2/C2所表示的电流信号是否超出阈值,超出的话关断EPWM1/2/3,从而保护电机。设计的思路可以从如下手册中的图路线来体现。



按照手册进行了一些配置,下面会给出一些配置代码与结果,最后在设置错误的阈值条件下,电机仍然持续转动,没有触发tripzone,不知错误在何处。
#define ADCLIMHI 100
#define ADCLIMLO 3000 //由于想使ADC直接跳闸,因此将阈值设置的比较奇怪,但并未触发跳闸
AdcaRegs.ADCPPB1TRIPHI.bit.LIMITHI = ADCLIMHI; // limitHigh +5 A
AdcaRegs.ADCPPB1TRIPLO.bit.LIMITLO = ADCLIMLO; // limitLow -5 A
AdcaRegs.ADCEVTSEL.bit.PPB1TRIPHI = 1; //使能PPB阈值处理
AdcaRegs.ADCEVTSEL.bit.PPB1TRIPLO = 1;
EPwmXbarRegs.TRIP4MUX0TO15CFG.bit.MUX0= 2; // Select ADCA EVT1 on Mux0, IBUS > Hlim
EPwmXbarRegs.TRIP4MUXENABLE.bit.MUX0 = 1; // Enable MUX0
EPwmXbarRegs.TRIP4MUX0TO15CFG.bit.MUX2= 2; // Select ADCA EVT2 on Mux2, IBUS < Llim
EPwmXbarRegs.TRIP4MUXENABLE.bit.MUX2 = 1; // Enable MUX2
ePWM1Regs.DCTRIPSEL.bit.DCAHCOMPSEL = 3; // Trip4 as Digital Compare A High Input
ePWM1Regs.TZDCSEL.bit.DCAEVT1 = TZ_DCAH_HI; // DCAH = high, DCAL = don't care
ePWM1Regs.TZSEL.bit.DCAEVT1 = TZ_ENABLE;
ePWM1Regs.TZSEL.bit.DCBEVT1 = TZ_ENABLE; // Enable DCBEVT1 as a one-shot trip source for this ePWM1/2/3
ePWM1Regs.TZCTL.bit.TZA = TZ_HIZ; // Force EPWMxA to a high impendance state
ePWM1Regs.TZCTL.bit.TZB = TZ_HIZ; // Force EPWMxB to a high state -> a high impendance state <TZ_HIZ>
最后在TZFLG寄存器中能看到DCAEVT1被触发,但电机仍然可以转动。附上一些中间寄存器的值








请问,配置是否符合我的设计思路,中间是否有遗漏或者错误,如果正确,为何在我设计阈值后,电机仍然可以正常转动,或者是否不能通过这种方式来trip,需要通过DCAEVT或OST事件来触发中断,在中断中手动掷位来实现trip功能,请不吝赐教,谢谢!