This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F280039:TMS320F280039:80引脚280039芯片中的跳闸区域(TZ)中断配置问题

Guru**** 2392905 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1505376/tms320f280039-tms320f280039-trip-zone-tz-interrupt-configuration-issue-in-80pin-280039-chip

器件型号:TMS320F280039

工具/软件:

现在我需要帮助我解决这样的问题、我使用280039芯片上的六个 PWM、这些 PWM 配置为控制两个电机、即 PWM7、PWM1、PWM5控制电机1、PWM2、PWM4、PWM3控制电机2、现在需要电机1和电机2配置两个 TZ 中断来执行过流保护、配置 TZ 中断来执行过压保护。 我需要分别为电机1和电机2配置两个 TZ 中断来提供过流保护、并配置一个 TZ 中断来提供过压保护、因此我需要分别配置电机1的 PWM7、PWM1、PWM5来配置 TZ3中断来提供过压保护、但我需要分别为电机1和电机2配置两个 TZ 中断来提供过流保护、一个 TZ 中断 但是、我需要为电机1和电机2分别配置两个 TZ 中断来实现过压保护、但我需要分别为电机1和电机2配置两个 TZ 中断来实现过压保护、因此我需要分别为电机1和电机2配置两个 TZ 中断来实现过压保护。 中断用于过压保护、但我现在的问题是、无论发生哪个 tz 事件、都会触发三个中断、就像将三个中断连接在一起一样、我需要让这三个中断独立存在、我需要做什么?
这是我的代码

使用 www.DeepL.com/Translator 翻译(免费版本)

Void  Motor Pwm_Trip ZoneOverCurrentConfig (uint32_t  base、EPWM_DigitalCompareTripInput tripSource uint16_t  tzSignal)
   //
   //在 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_Synchronous);

   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_Synchronous);

   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  Pwm_Trip ZoneOverVoltageConfig (uint32_t  base、 uint16_t  tzSignal)
   //
   //在 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中断配置 μ V
Motor.ZoneOverCurrentConfig Pwm_Trip (EPWM7_BASE、EPWM_DC_TRIP_TRIPIN4、EPWM_TZ_SIGNAL_OSHT1);
Motor.ZoneOverCurrentConfig Pwm_Trip (EPWM1_BASE、EPWM_DC_TRIP_TRIPIN4、EPWM_TZ_SIGNAL_OSHT1);
Motor.ZoneOverCurrentConfig Pwm_Trip (EPWM5_BASE、EPWM_DC_TRIP_TRIPIN4、EPWM_TZ_SIGNAL_OSHT1);

电机2过流TZ中断配置 μ V
Pwm_Trip 电机 ZoneOverCurrentConfig (EPWM2_BASE、EPWM_DC_TRIP_TRIPIN5、EPWM_TZ_SIGNAL_OSHT2);
Pwm_Trip 电机 ZoneOverCurrentConfig (EPWM4_BASE、EPWM_DC_TRIP_TRIPIN5、EPWM_TZ_SIGNAL_OSHT2);
Pwm_Trip 电机 ZoneOverCurrentConfig (EPWM3_BASE、EPWM_DC_TRIP_TRIPIN5、EPWM_TZ_SIGNAL_OSHT2);

过压TZ中断配置 μ V
Motor.ZoneOverVoltageConfig Pwm_Trip (EPWM7_BASE、EPWM_TZ_SIGNAL_OSHT3);
Motor.ZoneOverVoltageConfig Pwm_Trip (EPWM1_BASE、EPWM_TZ_SIGNAL_OSHT3);
Motor.ZoneOverVoltageConfig Pwm_Trip (EPWM5_BASE、EPWM_TZ_SIGNAL_OSHT3);

Motor.ZoneOverVoltageConfig Pwm_Trip (EPWM2_BASE、EPWM_TZ_SIGNAL_OSHT3);
Motor.ZoneOverVoltageConfig Pwm_Trip (EPWM4_BASE、EPWM_TZ_SIGNAL_OSHT3);
Motor.ZoneOverVoltageConfig Pwm_Trip (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_OVER_ISR);
INTERRUPT_ENABLE (INT_PWMV2_TZ);
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Qin:

    扫描代码看起来像您为第一个过流中断(EPWM_TZ_INTERRUPT_DCAEVT1和 EPWM_TZ_INTERRUPT_OST )启用以下 TZ 中断、然后为第二个过流中断启用相同的中断。  通过 EPWM_TZ_INTERRUPT_OST 启用过压中断。 因此、只要发生 OST 事件、就会触发全部三个中断。  

    但我现在的问题是、无论发生哪一个 tz 事件、都会触发三个中断、就像三个中断相互关联一样、我需要让这三个中断独立存在、我需要做什么?

    如果您只需要 OST 事件、我建议仅通过 DCAEVT1配置一个过流中断、而通过 DCBEVT1配置另一个过流中断。 可以通过任何 OSHT1-OSHT6事件启用过压中断。

    为每个 EPWM 启用中断时、务必  相应地选择 DCAEVT1、DCBEVT1和 OSHx 中断。  

    此致、

    Marlyn

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    具体情况是、在我的硬件上有一个过流故障引脚、当存在过流时触发高电平、因此我据此配置了 OST 过流 TZ 中断、我还将用于过流保护的比较器配置为安全侧、因此此中断中必须同时存在 DCAEVT1和 OSHT1、以便我能够执行此操作。

    您说的是、TZ 中断中只能有一个触发源?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Qin:

    好的、感谢您分享有关过流检测方案的更多信息。 您的过压保护是什么样子的? 您是否也在使用比较器? 从上面的代码来看、似乎不会这样做。 如果不是、并且您只需要 OST 事件、则是的、您将触发多个中断。 但是、在 ISR 中、您可以检查 OST 标志以查看触发中断的原因、然后执行相应操作。  

    此致、

    Marlyn

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在硬件中、过压也具有过压故障引脚、因此过压中断只需要使用 OST TZ 中断进行配置

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Qin:

    那么、如前所述、是的、 您将触发多个中断。 但是、在 ISR 中、您可以检查 OST 标志以查看触发中断的原因、然后执行相应操作。

    此致、

    Marlyn