我现在有这样一个问题需要你帮我解决一下,我在280039芯片上用六个PWM配置成控制两个电机,其中PWM7,PWM1,PWM5控制电机1,PWM2,PWM4,PWM3控制电机2,我现在需要给电机1和电机2分别配置两个TZ中断来做过流保护,配置一个TZ中断做过压保护,所以我把控制电机1的PWM7,PWM1,PWM5配置TZ1中断用来做过流保护,把控制电机2的PWM7,PWM1,PWM5配置TZ2中断用来做过流保护,最后把控制电机1的PWM7,PWM1,PWM5和,把控制电机2的PWM7,PWM1,PWM5配置TZ3中断用来做过压保护,但是我现在的问题是,无论哪个tz事件发送,都会触发三个中断,好像三个中断被绑在一起一样,我需要的是这三个中断独立存在,需要怎么做
这里是我的代码
void MotorPwm_TripZoneOverCurrentConfig(uint32_t base, EPWM_DigitalCompareTripInput tripSource,uint16_t tzSignal)
{
//
// Action on TZ
//
EPWM_setTripZoneAction(base, EPWM_TZ_ACTION_EVENT_DCAEVT1, EPWM_TZ_ACTION_HIGH_Z);
EPWM_selectDigitalCompareTripInput(base, tripSource, EPWM_DC_TYPE_DCAH);
EPWM_setTripZoneDigitalCompareEventCondition(base, EPWM_TZ_DC_OUTPUT_A1, EPWM_TZ_EVENT_DCXH_LOW);
EPWM_setDigitalCompareEventSyncMode(base, EPWM_DC_MODULE_A, EPWM_DC_EVENT_1, EPWM_DC_EVENT_INPUT_NOT_SYNCED);
EPWM_selectDigitalCompareTripInput(base, tripSource, EPWM_DC_TYPE_DCBH);
EPWM_setTripZoneDigitalCompareEventCondition(base, EPWM_TZ_DC_OUTPUT_B1, EPWM_TZ_EVENT_DCXH_LOW);
EPWM_setDigitalCompareEventSyncMode(base, EPWM_DC_MODULE_B, EPWM_DC_EVENT_1, EPWM_DC_EVENT_INPUT_NOT_SYNCED);
EPWM_setTripZoneAction(base, EPWM_TZ_ACTION_EVENT_TZA, EPWM_TZ_ACTION_HIGH_Z);
EPWM_setTripZoneAction(base, EPWM_TZ_ACTION_EVENT_TZB, EPWM_TZ_ACTION_HIGH_Z);
EPWM_enableTripZoneSignals(base, tzSignal);
EPWM_forceTripZoneEvent(base, EPWM_TZ_FORCE_EVENT_OST);
}
void MotorPwm_TripZoneOverVoltageConfig(uint32_t base, uint16_t tzSignal)
{
//
// Action on TZ
//
EPWM_setTripZoneAction(base, EPWM_TZ_ACTION_EVENT_TZA, EPWM_TZ_ACTION_HIGH_Z);
EPWM_setTripZoneAction(base, EPWM_TZ_ACTION_EVENT_TZB, EPWM_TZ_ACTION_HIGH_Z);
EPWM_enableTripZoneSignals(base, tzSignal);
EPWM_forceTripZoneEvent(base, EPWM_TZ_FORCE_EVENT_OST);
}
//电机1过流TZ中断配置
MotorPwm_TripZoneOverCurrentConfig(EPWM7_BASE,EPWM_DC_TRIP_TRIPIN4,EPWM_TZ_SIGNAL_OSHT1);
MotorPwm_TripZoneOverCurrentConfig(EPWM1_BASE,EPWM_DC_TRIP_TRIPIN4,EPWM_TZ_SIGNAL_OSHT1);
MotorPwm_TripZoneOverCurrentConfig(EPWM5_BASE,EPWM_DC_TRIP_TRIPIN4,EPWM_TZ_SIGNAL_OSHT1);
//电机2过流TZ中断配置
MotorPwm_TripZoneOverCurrentConfig(EPWM2_BASE,EPWM_DC_TRIP_TRIPIN5,EPWM_TZ_SIGNAL_OSHT2);
MotorPwm_TripZoneOverCurrentConfig(EPWM4_BASE,EPWM_DC_TRIP_TRIPIN5,EPWM_TZ_SIGNAL_OSHT2);
MotorPwm_TripZoneOverCurrentConfig(EPWM3_BASE,EPWM_DC_TRIP_TRIPIN5,EPWM_TZ_SIGNAL_OSHT2);
//过压TZ中断配置
MotorPwm_TripZoneOverVoltageConfig(EPWM7_BASE,EPWM_TZ_SIGNAL_OSHT3);
MotorPwm_TripZoneOverVoltageConfig(EPWM1_BASE,EPWM_TZ_SIGNAL_OSHT3);
MotorPwm_TripZoneOverVoltageConfig(EPWM5_BASE,EPWM_TZ_SIGNAL_OSHT3);
MotorPwm_TripZoneOverVoltageConfig(EPWM2_BASE,EPWM_TZ_SIGNAL_OSHT3);
MotorPwm_TripZoneOverVoltageConfig(EPWM4_BASE,EPWM_TZ_SIGNAL_OSHT3);
MotorPwm_TripZoneOverVoltageConfig(EPWM3_BASE,EPWM_TZ_SIGNAL_OSHT3);
EPWM_clearTripZoneFlag(PWMU2_BASE, EPWM_TZ_FLAG_DCAEVT1 | EPWM_TZ_INTERRUPT | EPWM_TZ_FLAG_OST);
EPWM_enableTripZoneInterrupt(PWMU2_BASE, EPWM_TZ_INTERRUPT_DCAEVT1 | EPWM_TZ_INTERRUPT_OST);
Interrupt_register(INT_PWMU2_TZ, &INT_OverCurrent_ISR_No2);
Interrupt_enable(INT_PWMU2_TZ);
EPWM_clearTripZoneFlag(PWMU3_BASE, EPWM_TZ_FLAG_DCAEVT1 | EPWM_TZ_INTERRUPT | EPWM_TZ_FLAG_OST);
EPWM_enableTripZoneInterrupt(PWMU3_BASE, EPWM_TZ_INTERRUPT_DCAEVT1 | EPWM_TZ_INTERRUPT_OST);
Interrupt_register(INT_PWMU3_TZ, &INT_OverCurrent_ISR_No3);
Interrupt_enable(INT_PWMU3_TZ);
EPWM_clearTripZoneFlag(PWMV2_BASE, EPWM_TZ_INTERRUPT | EPWM_TZ_FLAG_OST);
EPWM_enableTripZoneInterrupt(PWMV2_BASE, EPWM_TZ_INTERRUPT_OST);
Interrupt_register(INT_PWMV2_TZ, &INT_OverVoltage_ISR);
Interrupt_enable(INT_PWMV2_TZ);