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.

[参考译文] TMS320F280025C:一般电机控制实验室转速环问题

Guru**** 2422790 points
Other Parts Discussed in Thread: LAUNCHXL-F280025C

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1083476/tms320f280025c-general-motor-control-laboratory-speed-ring-problem

部件号:TMS320F280025C
《线程》中讨论的其他部件: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 那样直接启动转速环?

谢谢技术专家,致以最诚挚的问候。

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

    您在本实验中使用的是哪种电机控制算法和硬件套件? 您是否查看了实验室用户指南并按照指南运行新电机的实验室?

    通用项目和实验室用户指南:https://www.ti.com/lit/spruj26

    更多信息可让我们更好地理解您的问题。

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

    我使用 LaunchXL-F280025C 和 DRV8323RS 进行开发,我的电机是一个永久性磁体电机,已由 DMC_LEVEL_4识别,并获得了电机的参数。 然后,我将修改代码以使其具有吸引力,我的目的是直接启用速度循环而不进行转换,因此我会得到模块覆盖当前的错误。

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

    如果您使用的是基于快速的电动机控制算法,则无需更改任何内容,本实验将满足您的上述要求。 您只需按照实验室指南按照电机规格设置正确的电机参数。

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

    是的,我正在使用快速算法,我已经识别了电机并获得了电机的参数,但当我开始设置运行速度时,实际电机速度不像 speed_Hz 那么快:

    e2e.ti.com/.../47d88654712dc5abfc6e715d397fbac8.mp4

    我会看到一个警报,表明存在相电流失衡或相位损失,我不明白这意味着什么,我认为我的连接是好的,因为它成功地完成了电机的识别。

    电机无负载,我的电源电压为30V,如何解决此问题?

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

    您可以禁用 相电流不平衡或相位损失故障保护,或者更改相电流不平衡或相位损失故障保护的设置阈值,然后尝试再次运行电动机。

    请尝试根据您的电机规格更改/调整以下参数。

    #define user_motor1_RES_EST_CURRENT_A      (1.0f)           // A -电机额定电流的10-30%

    #define user_motor1_IND_EST_current_a      (-1.0f)           // a -电机额定电流的10-30%,足以支持旋转

    #define user_motor1_flux_exC_FREQ_Hz         (40.0f)         // Hz -电机额定频率为10~30%

     

    #define user_motor1_startup_current_A    (3.0F)            // A -电机额定电流的30-100%

    #define user_motor1_MAX_CURRENT_A            (6.0f)             // A -电机额定电流的50-150%

    #define user_motor1_over _current_a          (6.5 f)             // a -电机额定电流的50-150 %

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

    实际速度(如视频所示)的显示速度_ Hz 不是那么快,如何解决此问题?

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

    请按照实验室用户指南运行实验室项目。 似乎没有您报告的问题。 或者,请详细说明您所采取的行动步骤。

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

    我首先根据测试指南测试了 DMC_LEVEL _1,这是正常的。 然后,我准备了一个对数为15的电动机,将 DMC_LEV_1更改为 DMC_LEV_4,电源电压为30V。 我首先确定了电机的参数并将其填充到 user_mtr1.h 中 然后我开始运行完整的闭环,算法很快速,通用实验室的默认速度是40 Hz,我将 flagEnableRunAndIdentify 设置为 true,系统开始运行, 我注意到实际的电机速度不是40 RPM,就像在视频中一样,这是我的完整操作流程。 我还尝试将 speedRef_Hz 更改为更快,例如100Hz。 我看到马达旋转速度确实更快,但远远没有达到我的目标速度,但 speed_Hz 的反馈值几乎与 speedRef_Hz 相同,这让我感到困惑。 你能告诉我原因吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="402201" url="~ë/support/icles/c2000-微控制器-组/CC2000 /f/c2000 -微控制器-论坛/1083476/tms320f280025c-general-电机控制-实验室-速度环问题/4017957#4017957"]我注意到实际电机速度不是40转/分[RPM ]

    您应该知道参考和反馈速度是电机的电气频率,而不是机械 速度。  似乎  speed_Hz 的值接近 speedRef_Hz 的值,这意味着电机正在正常运行。

    机械 速度= speed_Hz * 60 / pole 对

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

    我遵循速度 n =60*speed_Hz /pole 对的公式。 理论示例的默认频率为40Hz。 对于我的15级马达,速度应为160RPM。 可以给我一个提示吗?

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

    正确。 机械 速度(rpm)=电气频率(Hz)* 60 /极对。 您应该知道 在示例实验中没有显示机械速度的任何变量,所有速度都是基于带 Hz 单位的电气频率。

    关闭线程,因为 没有上述问题。 如果   可能,您可能会看到一些教科书,这些教科书应该提供有关这些电机控制电子知识的更多详细信息。