《线程》中讨论的其他部件:LAUNHXL-F280025C, 测试
我使用了通用电动机控制实验室的示例,我看到需要达到特定转速才能启用转速环的示例,如下所示:
if(fabsf(obj->speed_Hz) > obj->speedStart_Hz)
{
TRAJ_setMaxDelta(obj->trajHandle_spd,
(obj->accelerationMax_Hzps / objUser->ctrlFreq_Hz));
#if defined(MOTOR1_ISBLDC)
ISBLDC_updateThresholdInt(obj->isbldcHandle, obj->speed_int_Hz);
#if (DMC_BUILDLEVEL >= DMC_LEVEL_4)
PI_setMinMax(obj->piHandle_spd, -obj->maxCurrent_A, obj->maxCurrent_A);
#else
PI_setMinMax(obj->piHandle_spd, -1.0f, 1.0f);
#endif // DMC_BUILDLEVEL <= DMC_LEVEL_3
#else // !MOTOR1_ISBLDC
PI_setMinMax(obj->piHandle_spd, -obj->maxCurrent_A, obj->maxCurrent_A);
SVGEN_setMode(obj->svgenHandle, obj->svmMode);
#endif // !MOTOR1_ISBLDC
if(obj->motorState == MOTOR_CL_RUNNING)
{
obj->stateRunTimeCnt++;
if(obj->stateRunTimeCnt == obj->fwcTimeDelay)
{
obj->Idq_out_A.value[0] = 0.0f;
obj->motorState = MOTOR_CTRL_RUN;
obj->mctrlState = MCTRL_CONT_RUN;
}
}
}
else
{
TRAJ_setMaxDelta(obj->trajHandle_spd,
(obj->accelerationStart_Hzps / objUser->ctrlFreq_Hz));
#if defined(MOTOR1_ISBLDC)
#if (DMC_BUILDLEVEL >= DMC_LEVEL_4)
if(obj->speed_int_Hz > 0.0f)
{
PI_setMinMax(obj->piHandle_spd, 0.0f, obj->startCurrent_A);
}
else
{
PI_setMinMax(obj->piHandle_spd, -obj->startCurrent_A, 0.0f);
}
#else // (DMC_BUILDLEVEL < DMC_LEVEL_3)
PI_setMinMax(obj->piHandle_spd, -1.0f, 1.0f);
#endif // DMC_BUILDLEVEL < DMC_LEVEL_3
#else // !MOTOR1_ISBLDC
if(obj->speed_int_Hz >= 0.0f)
{
PI_setMinMax(obj->piHandle_spd, 0.0f, obj->startCurrent_A);
}
else
{
PI_setMinMax(obj->piHandle_spd, -obj->startCurrent_A, 0.0f);
}
#endif // !MOTOR1_ISBLDC
}
我想知道为什么? 这正是问题的关键? 我可以启动马达并使用转速环吗? 我尝试如下修改:
//if(fabsf(obj->speed_Hz) > obj->speedStart_Hz)
//{
TRAJ_setMaxDelta(obj->trajHandle_spd,
(obj->accelerationMax_Hzps / objUser->ctrlFreq_Hz));
#if defined(MOTOR1_ISBLDC)
ISBLDC_updateThresholdInt(obj->isbldcHandle, obj->speed_int_Hz);
#if (DMC_BUILDLEVEL >= DMC_LEVEL_4)
PI_setMinMax(obj->piHandle_spd, -obj->maxCurrent_A, obj->maxCurrent_A);
#else
PI_setMinMax(obj->piHandle_spd, -1.0f, 1.0f);
#endif // DMC_BUILDLEVEL <= DMC_LEVEL_3
#else // !MOTOR1_ISBLDC
PI_setMinMax(obj->piHandle_spd, -obj->maxCurrent_A, obj->maxCurrent_A);
SVGEN_setMode(obj->svgenHandle, obj->svmMode);
#endif // !MOTOR1_ISBLDC
if(obj->motorState == MOTOR_CL_RUNNING)
{
obj->stateRunTimeCnt++;
if(obj->stateRunTimeCnt == obj->fwcTimeDelay)
{
obj->Idq_out_A.value[0] = 0.0f;
obj->motorState = MOTOR_CTRL_RUN;
obj->mctrlState = MCTRL_CONT_RUN;
}
}
//}
//else
//{
// TRAJ_setMaxDelta(obj->trajHandle_spd,
// (obj->accelerationStart_Hzps / objUser->ctrlFreq_Hz));
//#if defined(MOTOR1_ISBLDC)
// #if (DMC_BUILDLEVEL >= DMC_LEVEL_4)
// if(obj->speed_int_Hz > 0.0f)
// {
// PI_setMinMax(obj->piHandle_spd, 0.0f, obj->startCurrent_A);
// }
// else
// {
// PI_setMinMax(obj->piHandle_spd, -obj->startCurrent_A, 0.0f);
// }
// #else // (DMC_BUILDLEVEL < DMC_LEVEL_3)
// PI_setMinMax(obj->piHandle_spd, -1.0f, 1.0f);
// #endif // DMC_BUILDLEVEL < DMC_LEVEL_3
//#else // !MOTOR1_ISBLDC
// if(obj->speed_int_Hz >= 0.0f)
// {
// PI_setMinMax(obj->piHandle_spd, 0.0f, obj->startCurrent_A);
// }
// else
// {
// PI_setMinMax(obj->piHandle_spd, -obj->startCurrent_A, 0.0f);
// }
//#endif // !MOTOR1_ISBLDC
//}
但当我将 flagEnableRunAndIdentify 设置为 true 时,经过一段时间后,我收到了模块过电流错误,并且电机没有响应?
我想知道 TI 工程师设计的目的是什么? 如何修改代码以像 LAB5B 那样直接启动转速环?
谢谢技术专家,致以最诚挚的问候。
