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.

[参考译文] TMS320F280025:电机参数识别:C2000WareMotorControl

Guru**** 2468610 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1477232/tms320f280025-identification-of-motor-parameters-c2000waremotorontrol

器件型号:TMS320F280025

工具与软件:

专家:您好、

我使用 F280025 C2000芯片、在电机参数识别链接(motorVars_M1. FlagEnableRunAndIdentify = true)中使用 MotorCotnrol_SDK_5_02、电机以恒定速度(400rpm)旋转、但只有几秒钟(大约10s)后突然停止。 然后、电机转轴出现较小的旋转、这有点像给定的旋转磁场仍在旋转、而电机转轴无法旋转的现象。 你对这种现象有什么评论吗?

非常感谢!

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

    尊敬的 Yan:

    您专门使用哪种解决方案? (例如 TIDM 2010、TIDA 010265等)

    此致、

    Delaney

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

    universal_motorcontrol_lab->F28002x

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

    尊敬的 Delaney:

    我们今天做了一些测试、发现了一个有趣的现象:如果电机参数直接通过宏定义、即使参数错误、只要电机电阻、电感和其他参数值不为0、也可以使用识别功能。 相反、如果电阻和电感参数设置为0、则识别功能的故障概率很高、即在电感识别阶段突然停止。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="613307" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1477232/tms320f280025-identification-of-motor-parameters-c2000waremotorontrol/5672727 #567272727"]、如果电阻和电感参数设为0、则识别函数出现故障的概率很高、即在电感识别阶段突然停止。

    为了使电机 ID 过程正常工作、用户必须添加这些电机值(user_mtr1.h)、而不是特别添加此处所示的放大器。

    #define USER_MOTOR1_RES_EST_CURRENT_A (0.35f)
    #define USER_MOTOR1_IND_EST_CURRENT_A (-0.315f)

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

    您好、Genatco
    感谢您的回答。 我们已经调整了您在使用过程中提到的两个参数、但识别失败的原因是这两个参数的值不够大? 例如、需要将 USER_MOTOR1_RES_EST_CURRENT_A 调整为2~5A、以确保电机持续旋转。

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

    尊敬的 Yan:

    但识别失败的原因是两个参数的值不够大?

    所需的输入点与显示的值不完全相同。 如果对于 SPM 电机而言电流值过低、则可能会导致以奇数的电感度量。  

    [报价 userid="613307" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1477232/tms320f280025-identification-of-motor-parameters-c2000waremotorontrol/5672727 #567272727"]nductance 和其它参数值不是0、那么就可以使用识别函数了。 [报价]

    当 flag_BYPASS_motorID 为 false 时、尽管 user_mtr1.c 会设置两个电感字段的默认值。 确保#ifdef 语句未突出显示这些代码、并且编译时不会出现警告。

    /* It's a compile time flag providing user a
    choice to use or bypass motor identification; so OK"*/
    if((pUserParams->flag_bypassMotorId == true) &&
    (USER_MOTOR1_INERTIA_Kgm2 != NULL))
    {
        pUserParams->BWc_rps = MATH_TWO_PI * (float32_t)400.0f;
        pUserParams->BWdelta = (float32_t)10.0f;
        
        pUserParams->Kctrl_Wb_p_kgm2 = (float32_t)3.0f *
        pUserParams->motor_numPolePairs *
        pUserParams->motor_ratedFlux_Wb /
        (float32_t) (2.0f * USER_MOTOR1_INERTIA_Kgm2);
    }
    else
    {
        pUserParams->BWc_rps = MATH_TWO_PI * (float32_t)200.0f;
        pUserParams->BWdelta = (float32_t)20.0f;
        pUserParams->Kctrl_Wb_p_kgm2 = (float32_t)3.0f *
        pUserParams->motor_numPolePairs *
        (float32_t)(0.001f) /
        (float32_t)(2.0f * 0.000001f);
    }
    
    #if defined(_FULL_FAST_LIB)
    // other setings
    
    pUserParams->Ls_d_H = (float32_t)1.0e-6;
    pUserParams->Ls_q_H = (float32_t)1.0e-6;
    pUserParams->Ls_coarseDelta_H = (float32_t)0.0000001f;
    pUserParams->Ls_fineDelta_H = (float32_t)0.00000001f;
    pUserParams->Ls_min_H = (float32_t)0.000001f;
    pUserParams->Ls_max_H = (float32_t)100.0f;

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

    #define USER_MOTOR1_RES_EST_CURRENT_A (0.35f)
    #define USER_MOTOR1_IND_EST_CURRENT_A (-0.315f)

    在识别电阻时、电机发出一定的声音但不会旋转、CCS 可以正常观察到电阻识别。 在电感识别期间、电机开始旋转、但旋转持续很短的时间然后停止、这是否意味着第二个参数值(__LW_AT__USER_MOTOR1_IND_EST_CURRENT_A)太小(例如目前为-0.315)并调整为-0.4?

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

    尊敬的 Yan:

    [报价 userid="613307" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1477232/tms320f280025-identification-of-motor-parameters-c2000waremotorontrol/5674602 #5674602"](USER_MOTOR1_IND_EST_CURRENT_A)太小(例如当前-0.315)、并调整为-0.4?

     USER_MOTOR1_IND_EST_CURRENT_A 应设置为比 USER_MOTOR1_RES_EST_CURRENT_A 值低10%至20%。 请使用适合您的电机的值、而不是上面显示的值。 如果转子在 Ls 电感测量 lab_is05期间从不旋转、您可以轻松尝试更高的值/s。 在电感测试之前、您应该会在 CCS 调试中看到 Ls_d/q 的一些默认值、状态机(user.c)用户可在合理范围内调整等待时间。  

    BTW:建议下载更新的通用电机控制(UMCSDK)工程。 将 UMCSDK 文件夹存储在解决方案文件夹 MCSDK 下。 使用 CCS 工具栏导航 REX 以下载 UMCSDK。 它支持 x25 LaunchPad、无需对 DRV8323RS 和少量其他 Booster Pack 电机驱动器进行许多更改。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    USER_MOTOR1_RES_EST_CURRENT_A是正的、而USER_MOTOR1_IND_EST_CURRENT_A是负的。 上述USER_MOTOR1_RES_EST_CURRENT_AUSER_MOTOR1_IND_EST_CURRENT_A值是否比参考绝对值大小低10%至20%?
    此外、我们调整了这些值、电机可以旋转、但会在10秒后停止。 这是否意味着这两个值仍然不够大?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这是否意味着这两个值仍然不够大?

    我们已经看到、这种情况可能取决于转子磁体相对于定子叠片的无动力分离扭矩。 检查锁定转子标志在 SPM 或 BLDC 电机 ID 过程的任何时候都未启用。 可能会尝试通过快速估算器调用强制 bool 标志、应用程序推送标志状态。 文字提到、尽管转子应该在 ls_d/q 期间缓慢旋转、但转子甚至停止几秒钟、因此请查看 PDF。

    e2e.ti.com/.../TI_2D00_InstaSpin_2D00_FOC_5F00_Motion-UserGuide-Rev.I.pdf

    最好设置所需的标志状态、使该函数具有确切的值。 请注意、内联函数被假定能够切换状态、但我们无法访问 ROM 嵌入式库调用。 UMCSDK 可以将快速库调用放入闪存存储器或使用 ROM 符号、并且可以使用新的 eSMO 滑动观测器调用。

        //
        // if motor is an induction motor, configure default state of PowerWarp
        //
        if(userParams.motor_type == MOTOR_TYPE_INDUCTION)
        {
            motorVars.flagEnablePowerWarp = true;
            EST_setFlag_enablePowerWarp(estHandle, motorVars.flagEnablePowerWarp);
            motorVars.flagBypassLockRotor = false;
            EST_setFlag_bypassLockRotor(estHandle, motorVars.flagBypassLockRotor);
        }
        else
        {
            motorVars.flagEnablePowerWarp = false;
            EST_setFlag_enablePowerWarp(estHandle, motorVars.flagEnablePowerWarp);
            motorVars.flagBypassLockRotor = true;
            EST_setFlag_bypassLockRotor(estHandle, motorVars.flagBypassLockRotor);
        }