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.

[参考译文] TMS320F28375D:ePWM 跳闸源检测

Guru**** 2439560 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1018252/tms320f28375d-detection-of-epwm-trip-sources

器件型号:TMS320F28375D

我有一个项目、在该项目中、我想使用 ePWM 跳闸硬件功能、并且能够从多个源跳闸 PWM、然后在事件发生后检测 PWM 跳闸源。  目前、我正在通过在软件中手动轮询跳闸源的 GPIO 引脚状态(请参阅下面的代码)来完成此操作、但如果跳闸事件持续时间非常短、则可能会错过正确记录跳闸源的机会。  理想情况下、我想找到一种查询硬件寄存器的方法、该方法可以将我指向跳闸信号的源。  这是可行的吗?

软件轮询方法的代码如下:

  // INITIALIZATION (call once)
  //================
  //Select DRV_FAULT & estop as INPUTXBAR1
  XBAR_setInputPin(XBAR_INPUT1, XBAR_INPUT_GPIO_M1);
  XBAR_setInputPin(XBAR_INPUT2, ESTOP_SENSE);

  // Configure TRIP 4 to OR the High and Low trips from both
  // comparator 1, 2 & 3, clear everything first
  EALLOW;
  HWREG(XBAR_EPWM_CFG_REG_BASE + XBAR_O_TRIP4MUX0TO15CFG) = 0;
  HWREG(XBAR_EPWM_CFG_REG_BASE + XBAR_O_TRIP4MUX16TO31CFG) = 0;
  EDIS;

  // Enable Muxes for ored input of CMPSS1H and 1L, mux for Mux0x
  //cmpss1 - tripH or tripL
  XBAR_setEPWMMuxConfig(XBAR_TRIP4, XBAR_EPWM_MUX00_CMPSS1_CTRIPH_OR_L);

  //cmpss4 - tripH or tripL
  XBAR_setEPWMMuxConfig(XBAR_TRIP4, XBAR_EPWM_MUX06_CMPSS4_CTRIPH_OR_L);

  //cmpss3 - tripH or tripL
  XBAR_setEPWMMuxConfig(XBAR_TRIP4, XBAR_EPWM_MUX04_CMPSS3_CTRIPH_OR_L);

  //inputxbar1 trip DRV_FAULT
  XBAR_setEPWMMuxConfig(XBAR_TRIP4, XBAR_EPWM_MUX01_INPUTXBAR1);

  //inputxbar2 trip estop
  XBAR_setEPWMMuxConfig(XBAR_TRIP4, XBAR_EPWM_MUX03_INPUTXBAR2);
  //================
 
  // FOREGROUND CHECK (run continuously)
  //================
  // Check for PWM trip
  if((EPWM_getTripZoneFlagStatus(obj->pwmHandle[0]) & EPWM_TZ_FLAG_OST) || (EPWM_getTripZoneFlagStatus(obj->pwmHandle[1]) & EPWM_TZ_FLAG_OST)
      || (EPWM_getTripZoneFlagStatus(obj->pwmHandle[2]) & EPWM_TZ_FLAG_OST)) {

    if(pMotor->faults.indirect.latchFault) {
      pMotor->faults.fault_source.drv = GPIO_readPin(XBAR_INPUT_GPIO_M1);
      pMotor->faults.fault_source.estop = GPIO_readPin(ESTOP_SENSE);
      pMotor->faults.indirect.latchFault = 0;
    }
  }
  //================

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

    您好、npaMe、

    我看到您使用 ePWM_getTripZoneFlagStatus()函数来识别是否设置了跳闸标志。 您还可以使用 ePWM_getCyclByCyclone TripZoneFlagStatus()函数来告诉您发生了什么特定 CBC 跳闸区域标志[TZCBCFLG 寄存器]或 ePWM_getOneShotZoneFlagStatus()函数来返回特定的单触发源[TZOSTFLG 寄存器]。  

    您还可以在每次出现跳闸信号(TZEINT 寄存器)时设置中断、然后在该中断范围内确定发生了哪个特定跳闸信号并采取相应的措施。  

    此致、

    Marlyn