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.

[参考译文] LAUNCHXL-F280049C:电机识别步骤中的 Instaspin 电流过高问题

Guru**** 2563960 points
Other Parts Discussed in Thread: DRV8305

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/963011/launchxl-f280049c-instaspin-too-high-current-problem-in-motor-identification-step

器件型号:LAUNCHXL-F280049C
主题中讨论的其他器件:DRV8305

我将逐一进行电机控制 SDK intaspin FOC 实验。 我的控制器是 F280049C Launchpad、我的驱动程序是 Boostxl-drv8305。 我在前面的三个实验工作中没有遇到任何问题。 第三个实验是 is03_hardware_test、它运行开环电机速度控制、我已经顺利完成了此实验。 但是、在第四个和第五个实验中、即 IS _04和 IS _05_MOTOR_id 中、产生过高电流的系统和驱动器会提供 nFault 信号。 因此、我无法完成这些实验、也无法识别电机。

过去、我还在 Instaspin 上使用过 F28069M launchpad 和 drv8305、但我没有遇到任何问题。 此外、我针对 F280049C 修改了 drv8305的所有代码、因此 ADC 和 PWM 值看起来是正确的。

我想在 IT_05实验中、EST_State_ROVERL 阶跃中会出现高电流。 电流控制器可能存在问题。 当我更改 PWM 频率时、这种行为会发生变化。 20-25kHz PWM 频率会导致高电流、但当我将该值增大到45kHz 时、电机电流非常低、电机不旋转。 此外、估算器状态保持 EST_State_ROVERL。

我已经检查了 instaspin 用户指南、但"6.9.2.5 RoverL 识别期间电流控制器稳定性故障排除"部分为空

我的电机参数:

#Elif (USER_MOTOR== My_A2212T13)
#define USER_MOTOR_TYPE MOTOR_TYPE_PM
#define USER_MOTOR_NUM_POLE_PAIRS (6)
#define USER_MOTOR_RR_OHM (空)
#define USER_MOTOR_Rs_Ohm (0.102725)
#define USER_MOTOR_LS_D_H (0.00001216)
#define USER_MOTOR_LS_q_H (0.00001216)
#define USER_MOTOR_RATed_磁 通_VpHz (空)
#define USER_MOTOR_磁 化电流_A (空)
#define USER_MOTOR_RES_EST_CURRENT_A (1.0)
#define USER_MOTOR_IND_EST_CURRENT_A (-1.0)
#define USER_MOTOR_MAX_CURRENT_A (3.0)
#define USER_MOTOR_FLUX_EXC_FREQ_Hz (20.0)

#define USER_MOTOR_RATID_SPEED_KRPM (3.0)

#define USER_MOTOR_FREQ_MIN_Hz (5.0) // Hz
#define USER_MOTOR_FREQ_MAX_Hz (300.0) // Hz

#define USER_MOTOR_FREQ_LOW_Hz (10.0) // Hz
#define USER_MOTOR_FREQ_HIGH_Hz (150.0) // Hz

#define USER_MOTOR_VOLT_MIN_V (0.1)
#define USER_MOTOR_VOLT_MAX_V (12.5)

#define USER_MOTOR_NUM_ENC_SLOTS (空) 

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

    您好!

    您是否有可能交叉连接电流监控器 ADC 输入通道? 根据经验、如果发生这种情况、则会导致过大的电流过冲并使各种 PWM 区域监视器跳闸。

    BTW:LAB5 ~ d_d_H/_q_H、_Rs_Ohm 值为 NULL、然后我们仅在电机 ID 运行成功后输入 finding。 如果在软件中交叉连接 ADC 电流监控器输入、状态 R/L 还将允许极高的相电流跳闸故障、也可轻松修复(hal.c/h)检查 TRM。 据说 Lab4应该揭示这种情况,但我不会指望它。

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

    非常感谢。 最后、感谢您的参与。 据我所知、不幸的是、示例代码中存在错误。 因为 ADC 序列不正确。 这是原始 ADC 设置代码(在我的代码中、我只更改了具有正常 ADC 输入的 PGA):

    // ISENA - PGA5->A14->RA0
    ADC_setupSOC (obj->adcHandle[0]、ADC_SOC_NUMBER0、ADC_TRIGGER_EPWM6_SOCA、
    ADC_CH_ADCIN14、HAL_ADC_SAMPLE_WINDOW);
    
    // ISENB - PGA3->C7->RC0
    ADC_setupSOC (obj->adcHandle[2]、ADC_SOC_NUMBER0、ADC_TRIGGER_EPWM6_SOCA、
    ADC_CH_ADCIN7、HAL_ADC_SAMPLE_WINDOW);
    
    // ISENC - PGA1->B7->RB0
    ADC_setupSOC (obj->adcHandle[1]、ADC_SOC_NUMBER0、ADC_TRIGGER_EPWM6_SOCA、
    ADC_CH_ADCIN7、HAL_ADC_SAMPLE_WINDOW); 

    代码注释 A、B、C 序列必须相反、因此该错误影响到 ADC 读取操作代码:

    //转换 A 相电流 ->RA0/A14
    值=(float32_t) adc_readResult (obj->adcResult[0]、adc_SOC_NUMBER0);
    pADCData->I_A.value[0]=值* CURRENT_SF;
    
    //转换 B 相电流 ->RC0/C7
    值=(float32_t) adc_readResult (obj->adcResult[2]、adc_SOC_NUMBER0);
    pADCData->I_A.value[1]=值* Current_SF;
    
    //转换 C 相电流 ->RB0/B7
    值=(float32_t) adc_readResult (obj->adcResult[1]、adc_SOC_NUMBER0);
    pADCData->I_A.value[2]=值* Current_SF; 

    应交换 adcResult[0]和 adcResult[1]。

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

    回想一下、在将 PGA 切换到外部电流传感器的模拟多路复用器输入后、从源头上拉取毛发。 我在每个手册的末尾添加了注释、以便在某个时间为 drv8320rs booster pack 切换回。 ADC 输入问题对 R/L 电流的影响非常糟糕。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    //配置中断源
    //通过分配14将采样窗口配置为15个系统时钟周期
    //到 ADCSOCxCTL 寄存器的 ACQPS。
    // RB2/B1
    adc_setInterruptSource (obj->adcHandle[1]、adc_int_number1、adc_SOC_number2);
    
    //为 hvkit_rev1p1配置 SOC
    // ISENA - PGA5->A14->RA0
    ADC_setupSOC (obj->adcHandle[2]、ADC_SOC_NUMBER0、ADC_TRIGGER_EPWM6_SOCA、
    ADC_CH_ADCIN0、HAL_ADC_SAMPLE_WINDOW);
    
    // ISENB - PGA3->C7->RC0
    ADC_setupSOC (obj->adcHandle[0]、ADC_SOC_NUMBER0、ADC_TRIGGER_EPWM6_SOCA、
    ADC_CH_ADCIN5、HAL_ADC_SAMPLE_WINDOW);
    
    // ISENC - PGA1->B7->RB0
    ADC_setupSOC (obj->adcHandle[1]、ADC_SOC_NUMBER0、ADC_TRIGGER_EPWM6_SOCA、
    ADC_CH_ADCIN4、HAL_ADC_SAMPLE_WINDOW);
    
    // VSENA - A5->RA1
    ADC_setupSOC (obj->adcHandle[2]、ADC_SOC_number1、ADC_TRIGGER_EPWM6_SOCA、
    ADC_CH_ADCIN2、HAL_ADC_SAMPLE_WINDOW);
    
    // VSENB - B0->RB1
    ADC_setupSOC (obj->adcHandle[0]、ADC_SOC_number1、ADC_TRIGGER_EPWM6_SOCA、
    ADC_CH_ADCIN8、HAL_ADC_SAMPLE_WINDOW);
    
    // VSENC - C2->RC1
    ADC_setupSOC (obj->adcHandle[1]、ADC_SOC_number1、ADC_TRIGGER_EPWM6_SOCA、
    ADC_CH_ADCIN0、HAL_ADC_SAMPLE_WINDOW);
    
    // VSENVM - B1->RB2。 Hvkit 板的 Vbus 反馈上有电容器、因此
    //采样不需要很长的时间即可获得准确的值
    ADC_setupSOC (obj->adcHandle[1]、ADC_SOC_number2、ADC_TRIGGER_EPWM6_SOCA、
    ADC_CH_ADCIN2、HAL_ADC_SAMPLE_WINDOW); 
    float32_t CURRENT_SF =-HAL_getCurrentScaleFactor (handle);
    float32_t VOLTAGE_SF = HAL_getVoltageScaleFactor (handle);
    
    #if (BOOST_TO_LPD = BOOSTX_TO_J1_J2)
    //转换 A 相电流 ->RA0/A14
    值=(float32_t) adc_readResult (obj->adcResult[1]、adc_SOC_NUMBER0);
    pADCData->I_A.value[0]=值* CURRENT_SF;
    
    //转换 B 相电流 ->RC0/C7
    值=(float32_t) adc_readResult (obj->adcResult[0]、adc_SOC_NUMBER0);
    pADCData->I_A.value[1]=值* Current_SF;
    
    //转换 C 相电流 ->RB0/B7
    值=(float32_t) adc_readResult (obj->adcResult[2]、adc_SOC_NUMBER0);
    pADCData->I_A.value[2]=值* Current_SF;
    
    //转换 A 相电压 ->RA1/A5
    值=(float32_t) adc_readResult (obj->adcResult[1]、adc_SOC_number1);
    pADCData->V_V.Value[0]=值* VOLTGE_SF;
    
    //转换 B 相电压 ->RB1/B0
    值=(float32_t) adc_readResult (obj->adcResult[0]、adc_SOC_number1);
    pADCData->V_V.Value[1]=值* VOLTGE_SF;
    
    //转换 C 相电压 ->RC1/C2
    值=(float32_t) adc_readResult (obj->adcResult[2]、adc_SOC_number1);
    pADCData->V_V.Value[2]=值* VOLTGE_SF;
    
    //转换 DCBus 电压 ->RB2/B1
    值=(float32_t) adc_readResult (obj->adcResult[1]、adc_SOC_numer2);
    pADCData->DCBus_V =值* VOLTGE_SF;
    #endif 

    大家好、您的解决方案也适用于我。 我管理了 Lab04。 但在 Lab05中、我有问题。 我想问题可能出在电压传感器的错误 ADC 输入。 我在玩一点、但似乎什么都不起作用。 有时、Rs 计算出现错误、显示可能的最小值、有时是正确的。 但是、当程序进入 CONSTSPEED 模式时、speedRef_Hz 表达式跳转至零、不再发生任何情况。 我有一个针对电压传感器的 ADC 设置、其中 speedRef_Hz 跳转至600、电机开始旋转速度非常快、但随后停止。  为了更好地理解、我插入了我的代码。

    很抱歉、长文本、您可以帮我吗? 我不知道问题是什么。

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

    你好 Jonas、

    缺少影响正确状态机时间计数的符号名称、编译器未出错。 因此、R/L 计算的运行时间比所需时间长(微调时间 user.c)。 有时状态机会在观察 CCS 调试状态时跳过步骤。 TI 可能已在后续 RDK 版本中修复了缺失的符号。

    预定义符号中可能缺少_inline、问题发布在论坛中。