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.

[参考译文] TMS320F28379D:在 FCL 示例中卡在1级

Guru**** 2553260 points
Other Parts Discussed in Thread: SFRA, BOOSTXL-DRV8301, DRV8301

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/997461/tms320f28379d-stuck-at-level-1-with-fcl-example

器件型号:TMS320F28379D
主题中讨论的其他器件:SFRABOOSTXL-DRV8301DRV8301

大家好、

 应用报告 SPRACO3中介绍的"在单个 C2000 MCU 上使用 FCL 和 SFRA 的双轴电机控制"设计出现问题。 我将 Launchpad 28379D 与两个 BoostXL-DRV8301逆变器配合使用。 我知道该应用报告使用了3PhGanInv、我们将很快切换。 就我所能知、重要信号位于相同的引脚上(ADC、PWM、ENABLE)。
我可以在调试模式下获取 isrTicker 变量计数。 但是、我无法生成正确的图形、因为设置 enableFlag 后立即将标志"tripFlagDMC"设置为1、表示过流。 请注意、逆变器没有连接负载、因此没有相电流。 然而、高电平 I 设置电流限制变量(即使高达100A)、过流状态仍会显示。 在另一篇文章中、我看到有人提到与此问题相关的溢出。

我知道两个逆变器之间的电压和电流感应电路中的增益不同、但我仍然无法找出问题。

我们非常感谢您的任何帮助。

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

    这意味着 runMotorControl()中会检测到过压/欠压、过流等故障,因此您需要根据  BoostXL-DRV8301配置 GPIO、PWM、ADC、XBARINPUT 和 CMPSS。

    您还需要根据 HAL_setupMotorFaultProtection ()中的 BoostXL-DRV8301更改 M1_XBAR_INOP_GPIO/M2_XBAR_INPUT_INPUT 和 XBARINPUT。

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

    感谢你的答复。 我研究了您提到的内容,但是,由于 HAL_setupmotorfaultprotection()函数,该标志仍然被设置。 下周我将做更多的调试、因为我不太熟悉 tripZones。 我很快会回来的。 谢谢!  

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

    好的。 您必须 根据硬件板更改 HAL_setupMotorFaultProtection()中的设置。 如果您有其他问题、请告知我们。

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

    我研究了负责生成跳闸信号的代码(setupMotorFaultProtection())。 我认为它设置正确、因为我已经根据 DRV8031设置了输入 xbar、并且使用了正确的 CMPSS 模块。 但是、跳闸标志仍然置1。 我尝试将 EPWM_setTripZoneDigitalCompareEventCondition 更改为 ePWM_TZ_EVENT_DCXH_LOW (因此它应该在下降沿而不是上升沿触发)、但该标志仍然置1。 当我使用示波器检查时、逆变器的 nfault 引脚一直处于高电平。

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

    您可以检查相关 GPIO 数据和 CMPSS 状态寄存 器中的值是否正确。 并检查 DRV8301的 nFault 和 OCTW 是否为低电平输出。 您需要为 nFault 或 OCTW 设置到 GPIO 的输入 XBAR 链接。

    BTW、 您应将采样频率设置为可用选项之一、因为低侧分流电阻器仅支持此模式。

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

    我检查了寄存器。 nFault GPIO 的 GPIODAT 设置为1 (即使 GPIO 引脚指定为 TYPE_INPTED)。 遗憾的是、我在 SPRS880O 中找不到有关 GPIODAT 寄存器的信息、因此我不确定它应该显示实际输入还是本例中的反相值)。 此外、低侧比较器输出1、即使它们的输出在 dual_axy_server_drive_hal.c 中反转。

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

    1.在 dual_axis_servo_drive_user.h 中更改 ADC 和 CMPSS 基址的定义以及电流和电压的 ADC 通道

    针对 M1的与// ADC 和 PWM 相关的定义
    //
    #define M1_IU_ADC_base ADCC_BASE //C2、NC:设置基于的电路板
    #define M1_IV_ADC_base ADCB_BASE //B2、NC:设置基于的电路板
    #define M1_iW_ADC_base ADCA_BASE //A2、NC:设置基于的电路板
    #define M1_VDC_ADC_base ADCD_BASE //D14、NC:设置基于的电路板

    #define M1_IU_ADCRESULT_base ADCCRESULT_base //C2、NC:设置基于电路板
    #define M1_IV_ADCRESULT_base ADCBRESULT_BASE //B2:设置基于电路板
    #define M1_IW_ADCRESULT_base ADCARESULT_BASE //A2、NC:设置基于电路板
    #define M1_VDC_ADCRESULT_base ADCDRESULT_BASE //D14、NC:设置基于电路板

    #define M1_IU_ADC_CH_NUM ADC_CH_ADCIN2 //C2:设置基于电路板
    #define M1_IV_ADC_CH_NUM ADC_CH_ADCIN2 //B2、NC:设置基于电路板
    #define M1_IW_ADC_CH_NUM ADC_CH_ADCIN2 //A2、NC:设置基于电路板
    #define M1_VDC_ADC_CH_NUM ADC_CH_ADCIN14 //D14、NC:设置基于电路板

    #define M1_IU_ADC_SOC_NUM ADC_SOC_NUMBER0 //C2、NC:设置基于电路板
    #define M1_IV_ADC_SOC_NUM ADC_SOC_NUMBER0 //B2、NC:设置基于电路板
    #define M1_iW_ADC_SOC_NUM ADC_SOC_NUMBER0 //A2、NC:设置基于电路板
    #define M1_VDC_ADC_SOC_NUM ADC_SOC_NUMBER0 //D14、NC:设置基于电路板

    #define M1_IU_ADC_PPB_NUM ADC_PPB_NUMBER1 //C2:设置基于电路板
    #define M1_IV_ADC_PPB_NUM ADC_PPB_NUMBER1 //B2:设置基于电路板
    #define M1_IW_ADC_PPB_NUM ADC_PPB_NUMBER1 //A2、NC:设置基于电路板
    #define M1_VDC_ADC_PPB_NUM ADC_PPB_NUMBER1 //D14、NC:设置基于电路板

    #define M1_U_CMPSS_BASE CMPSS6_BASE // NC:设置基于的电路板
    #define M1_V_CMPSS_BASE CMPSS3_base // NC:设置基于的电路板
    #define M1_W_CMPSS_BASE CMPSS1_BASE // NC:设置基于的电路板

    2. 在  ual_axis_servo_drive_user.h 中更改 nFault 输入的定义 M1_XBAR_INPUT_GPIO

    //选择 GPIO24作为 INPUTXBAR1
    Xbar_setInputPin (M1_XBAR_INPUT_NUM、M1_XBAR_INPUT_GPIO);

    3.在 hal.c 中为 HAL_setupGPIO ()中的 nFault 输入配置 GPIO

    GPIO_setMasterCore (24、GPIO_CORE_CPU1);
    GPIO_setPinConfig (GPIO_24_GPIO24);
    GPIO_setDirectionMode (24、GPIO_DIR_MODE_IN);

    GPIO_setPadConfig (24、GPIO_PIN_TYPE_INOPH);

    4.在 hal.c 中更改 HAL_setupMotorFaultProtection ()中 CMPSS 的 XBAR 多路复用器

    //为 CMPSS1H 和1L 的有源输入启用多路复用器、为 Mux0x 启用多路复用器
    //cmps1 -三相或三相
    Xbar_setEPWMMuxConfig (XBAR_TRIP4、XBAR_EPWM_MUX00_CMPSS1_CTRIPH_OR_L);

    //cmps3 -三相或三相
    Xbar_setEPWMMuxConfig (XBAR_TRIP4、XBAR_EPWM_MUX04_CMPSS3_CTRIPH_OR_L);

    //cmps6 -三相或三相
    Xbar_setEPWMMuxConfig (XBAR_TRIP4、XBAR_EPWM_MUX10_CMPSS6_CTRIPH_OR_L);

    //启用多路复用器0或多路复用器4以生成 TRIP4
    Xbar_enableEPWMMUX (XBAR_TRIP4、XBAR_MUX00 | XBAR_MUX04 | XBAR_MUX10 |
    Xbar_MUX01);

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

    感谢您的回答。 我发现错误:对于 DRV8301、仅当 EN_GATE 信号为高电平时才启用电流感应放大器。 EN_GATE 设置为高电平后、ADC 引脚需要长达1.5ms 才能显示正确的电压。