工具与软件:
专家:您好、
我使用 F280025 C2000芯片、在电机参数识别链接(motorVars_M1. FlagEnableRunAndIdentify = true)中使用 MotorCotnrol_SDK_5_02、电机以恒定速度(400rpm)旋转、但只有几秒钟(大约10s)后突然停止。 然后、电机转轴出现较小的旋转、这有点像给定的旋转磁场仍在旋转、而电机转轴无法旋转的现象。 你对这种现象有什么评论吗?
非常感谢!
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.
工具与软件:
专家:您好、
我使用 F280025 C2000芯片、在电机参数识别链接(motorVars_M1. FlagEnableRunAndIdentify = true)中使用 MotorCotnrol_SDK_5_02、电机以恒定速度(400rpm)旋转、但只有几秒钟(大约10s)后突然停止。 然后、电机转轴出现较小的旋转、这有点像给定的旋转磁场仍在旋转、而电机转轴无法旋转的现象。 你对这种现象有什么评论吗?
非常感谢!
为了使电机 ID 过程正常工作、用户必须添加这些电机值(user_mtr1.h)、而不是特别添加此处所示的放大器。
#define USER_MOTOR1_RES_EST_CURRENT_A (0.35f)
#define USER_MOTOR1_IND_EST_CURRENT_A (-0.315f)
尊敬的 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%? 这是否意味着这两个值仍然不够大?
我们已经看到、这种情况可能取决于转子磁体相对于定子叠片的无动力分离扭矩。 检查锁定转子标志在 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);
}