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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1456041/tms320f280025c-induction-motor

器件型号:TMS320F280025C

工具与软件:

您好!

我们使用 Motor Control SDK 5.02和我们的定制电路板、我们可以根据 SDK 中提供的示例运行 PMSM 电机。 我们要使用同一电路板运行交流感应电机、您是否有可用作参考的示例?

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

    您好!

    我们的专家将于1月初离开办公室、请期待延迟回复。

    此致、

    Ben Collier

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

    您好!

    参阅 《通用电机控制实验用户指南》(特别是第10页的图2-8所给出的说明)、您可以看到、本实验以及一般的 InstaSPIN-FOC FAST 库已经考虑了 ACIM 和 PMSM 电机之间的控制方案差异。

    在通用电机控制实验中、您可以在 user_mtr1.h 中看到各种不同的电机示例 大多数电机将 USER_MOTOR1_TYPE 定义为 MOTOR_TYPE_PM (PMSM 电机)、但快速搜索显示有4个不同的示例 ACIM 电机以及定制 ACIM 电机模板。

    这些现有的 ACIM 电机应该是一个很好的起始参考!

    此致、
    Jason Osborn

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

    Jason、您好!

    感谢您的答复、在一些 TI 文档中提到必须锁定 ACIM 转子的电机参数估算。 通用电机控制实验室就是这样。

    此致

    Prashanth

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

    Prashant,

    如果我记得没错、InstaSPIN-FOC FAST 库会在内部进行处理。

    此致、
    Jason Osborn

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

    Jason、您好!

    我们尝试了估算感应电机参数、但在 EST_State_LC 停止估算、且电机关闭。 我们的电机为 ACIM、额定电压为230V、额定电流为9A。

    我们使用以下参数。

    #define USER_MOTOR1_TYPE MOTOR_TYPE_INRECTION
    #define USER_MOTOR1_NUM_POLE_PAIRS (2)
    #define USER_MOTOR1_NULL Rr_Ohm (NULL)
    #define USER_MOTOR1_NULL Rs_Ohm (NULL)
    #define USER_MOTOR1_LS_d_H (NULL)
    #define USER_MOTOR1_Ls_q_H (NULL)
    #define USER_MOTOR1_RATED_FLUX_VpHz (0.8165*230.0/50.0)
    #define USER_MOTOR1_MAGNETIZING_CURRENT_A (NULL)
    #define USER_MOTOR1_RES_EST_CURRENT_A (3.0F)
    #define USER_MOTOR1_IND_EST_CURRENT_A (-1.0f)  
    #define USER_MOTOR1_MAX_CURRENT_A (11.0)
    #define USER_MOTOR1_FLUX_EXC_FREQ_Hz (5.0f)

    您能帮助我们确定问题吗? 提前感谢。

    此致

    Prashanth

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

    Prashant,

    • 电机停止后存在哪些故障(如果有)? 电机状态机处于什么状态? 此外、电机旋转或电机电流波形是否存在任何明显的不稳定? 没有这些信息、我很难知道发生了什么。
    • 如果电机是电感非常低的电机、则需要略微增加 FLUX_EXC_FREQ_Hz。
    • 考虑部分 6.7 '完全识别 ACIM 电机'的 InstaSPIN-FOC 和 InstaSPIN-MOTION 用户指南.
      • 具体而言、我会注意建议在相电流幅度明显振荡时调整 IDRATED_Delta (请参阅图6-32)

      此致、
      Jason Osborn

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

      Jason、您好!

      我是 我们的电流波形、波形在5Hz 时不稳定、但在20Hz 时电流信号是稳定的。  

      初始  USER_MOTOR1_RATED_FLUX_VpHz (0.8165*230.0/50.0)=设置了3.75值、在开环估算期间在调试窗口中可以看到类似的值 、相同的值替换为 EST_STATE_RATEDFLUX 饱和后的估算值、此状态下的电流是 EST_STATE_IDRATED 的一半。

      此状态电机在 EST_State_LOCKROTOR 下关闭后。 以下代码位于 motor1_drive.c 中 是否存在旁路锁定转子问题。

      在调试窗口中、 电机关闭后的状态显示为 EST_State_Ls。

      if (objUser->flag_bypassMotorId == false)

      if ((EST_isLockRotor (obj->estHandle)== true)||
      (EST_isMotorIdentified (obj->estHandle)== true)
      &&(EST_isIdle(obj->estHandle)== true))

      if (EST_isMotorIdentified (obj->estHandle)== true)

      obj->flagMotorIdentified = true;

      //清除标志
      obj->flagRunIdentAndOnLine = false;
      obj->flagEnableRunAndIdentify = false;

      //禁用估算器
      EST_disable (obj->estHandle);

      //启用轨迹生成器
      EST_disableTraj (obj->estHandle);
      }

      if (objuser->motor_type == motor_type_incoration)

      //清除标志
      obj->flagRunIdentAndOnLine = false;
      obj->flagEnableRunAndIdentify = false;
      }
      }
      }// objUser->flag_bypassMotorId = false

       

      完整的 尖叫镜头

      斜升

      EST_State_IDRATED

      EST_STATE_RATEDFLUX

      此致

      Prashanth

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

      Prashant,

      要清除、电机在锁定转子状态期间不应移动。

      以下是整个 ACIM 电机识别过程的预期相电流波形。 这是《InstaSPIN-FOC 和 InstaSPIN-MOTION 用户指南》的图6-46。

      需要明确的是、电机是否未针对 EST_EVM 重新开启的问题 State_Ls? 如果是、我会调整  USER_MOTOR1_IND_EST_CURRENT_A 的值 根据指南、此电流应为负值、幅度介于电机额定电流的10%至20%之间。 首先、我会尝试将其调整为额定电机电流的20%、然后再调整为10%、以查看其中任何一个是否允许电机再次开始运转。

      此致、
      Jason Osborn

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

      Jason、您好!

      感谢您的答复。  禁用该电机后、我们的波形与 EST_State_Rampdown 类似。

      [报价 userid="525429" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1456041/tms320f280025c-induction-motor/5605358 #5605358"]要清楚、电机在锁定转子状态期间不应移动

      程序未处于锁定转子状态 并快速更改为 EST_State_Ls 并关闭。  我们是否增加了等待时间。 对于斜降和锁定转子状态、等待时间被设定为零。  

      进行更改

      如果我记起正确无误、InstaSPIN-FOC FAST 库将在内部加以解决

      可以避免锁定转子。

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

      设置杂散故障标志

      相位不平衡、过频和启动失败、这些在斜坡状态之前设置。  

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

      等待时间不应设为0。 请参阅我之前提供的指南、了解应分配的正确值。

      此致、
      Jason Osborn

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

      Jason、您好!

      EST_State_Rampdown  和 EST_State_Lock 中添加等待时间后 。 控制器在锁定转子处等待并被禁用。 启用控制器后、继续执行 EST_State_LS 和 EST_State_RR、然后获取 EST_State_MOTORIDENTIFIED。

      但在 EST_State_Ls 期间、 波形如下所示、其并未在设定的完全等待时间内运行  

      objUser->LsWaitTime[EST_LS_State_error]= 0;
      objUser->LsWaitTime[EST_LS_State_IDLE]= 0;
      objUser->LsWaitTime[EST_LS_State_RAMPUP]=(int_least32_t)(10.0 * USER_M1_ISR_FREQ_Hz);
      objUser->LsWaitTime[EST_Ls_State_COARSE]=(int_least32_t)(30.0 * USER_M1_ISR_FREQ_Hz);
      objUser->LsWaitTime[EST_Ls_State_Fine]=(int_least32_t)(30.0 * USER_M1_ISR_FREQ_Hz);
      objUser->LsWaitTime[EST_LS_State_Done]= 0;

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

      并且电机在估算期间不旋转。 电流设置为-2.0、频率为1.5Hz。

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

      如果电机在估算过程中的任何点根本没有旋转、则您面临的其他问题可能与此相关。

      您是否有机会阅读 InstaSPIN-FOC 和 InstaSPIN-MOTION 用户指南? 第 4.8.1.2节"将数据表中的 ACIM 电机参数输入 user.h"和第5节"管理电机信号"似乎特别有用。 通常、如果电机未旋转、这是因为基本参数需要校正。

      此外、您是否验证了定制电路板上的电压、电流和 PWM 信号都具有良好的质量?

      此致、
      Jason Osborn

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

      Jason、您好!

      是的、我们已参考了用户指南、我们针对电流和电压信号的偏移校准不会返回错误。

      电机在斜升和磁通估算期间处于旋转状态。 但在 LOCK_ROTORE 状态后重新启用电机后、它不旋转。

      我们没有电机提供电机电阻和电感的详细数据表、因此我们在尝试估算电机参数。

      在频率电机不旋转时、Ls 期间的估算频率低至低于2Hz。  

      同一个板可与 PMSM 电机正常工作。该板能够估算电机参数并使用估算参数在闭环中运行。 我们与不同的 PMSM 座右铭进行了验证。

      此致

      Prashanth

    • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
      [报价 userid="622247" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1456041/tms320f280025c-induction-motor/5602181 #5602181"]

      我们使用以下参数。

      #define USER_MOTOR1_TYPE MOTOR_TYPE_INRECTION
      #define USER_MOTOR1_NUM_POLE_PAIRS (2)
      #define USER_MOTOR1_NULL Rr_Ohm (NULL)
      #define USER_MOTOR1_NULL Rs_Ohm (NULL)
      #define USER_MOTOR1_LS_d_H (NULL)
      #define USER_MOTOR1_Ls_q_H (NULL)
      #define USER_MOTOR1_RATED_FLUX_VpHz (0.8165*230.0/50.0)
      #define USER_MOTOR1_MAGNETIZING_CURRENT_A (NULL)
      #define USER_MOTOR1_RES_EST_CURRENT_A (3.0F)
      #define USER_MOTOR1_IND_EST_CURRENT_A (-1.0f)  
      #define USER_MOTOR1_MAX_CURRENT_A (11.0)
      #define USER_MOTOR1_FLUX_EXC_FREQ_Hz (5.0f)

      [报价]

      极对的数量可能与定子齿槽/2相关、如果这是典型的非磁性感应电机、则有0个极对。 而是异步电气滑动度交流感应电机。 ~对于电机9A 峰值而言、EST_CURRENT_A (3.0F)过低? 可能是转子永远不会真正进入锁定状态的原因。 您可以用手指来测试锁定是否存在、当它进入锁定状态时、尝试以任一方向旋转转子。 如果您可以轻松旋转转子轴、在 LS 测试感应时、它可能并不真正处于锁定状态。

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

      如果 LS 在电机识别期间返回奇怪的值、您还可以尝试缩短状态时间。 返回的定制 PCB 感应值的作用通常与 TI LaunchPad 上电机驱动器板的 Booster Pack DRV 类不同。 或许可以尝试识别定制 PCB 上的 PMSM、以了解是否需要调整这些状态时间、从而返回更真实的感应值。 R/L 状态是另一个可能产生不正确电阻值的值。 如果设置为小于100MHz、电机控制 SDK 状态机的时间可能会因为 x25c 配置的 CPU 时钟速度而异。 检查您的定制 PCB 电流传感器是否与输出反相、该输出在 user.h 或 user_motor1.h 通用电机 SDK 中设置(+/-)。

      objUser->LsWaitTime[EST_LS_State_RAMPUP]=(int_least32_t)(10.0 * USER_M1_ISR_FREQ_Hz);
      objUser->LsWaitTime[EST_Ls_State_COARSE]=(int_least32_t)(30.0 * USER_M1_ISR_FREQ_Hz);
      objUser->LsWaitTime[EST_Ls_State_Fine]=(int_least32_t)(30.0 * USER_M1_ISR_FREQ_Hz);

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

      您好、Genatco、

      很抱歉耽误您的回复、在我们的定制板上、PMSM 运行正常。 在多项试验中、估计值是一致的。 我们使用110V-6A 至480V 14A 的不同 PMSM 电机进行了测试。 所有 PMSM 电机都工作正常。  

      我们是否必须调整 ACIM 的等待时间。 Rs 估算会针对多个值返回相似值。 我们应该尝试使用更高的电感估算电流、因为电机在 Ls 估算期间不会旋转。

      我们使用的是不带反转的内嵌式霍尔电流传感器。

      此致

      Prashanth

    • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
      我们应尝试使用更高的电感估算电流、因为电机在 Ls 估算期间不旋转

      文字状态 转子在 Ls 估算期间保持锁定状态。 电机识别过程中、感应电机会自动进行锁定状态控制。 在 MOTOR ID = TRUE 之后、isLAB_05应该会解锁转子、使其能够测试运行感应电机、并将 CCS 调试脚本值复制到 user.h、感应电机参数中。  

      有时、编译的 bool 标志状态并非始终在 CCS 调试中表现正常、应在电机状态控制功能中主动使用估算器 ROM 调用。  

      // Proper flag setting both motor types isLAB_05
          //
          // 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);
          }
                 
                 
                 
                 if( (EST_isLockRotor(estHandle) == true) ||
                           ((EST_isMotorIdentified(estHandle)
                             && EST_isIdle(estHandle)) == true))
                      {
                          if(EST_isMotorIdentified(estHandle) == true)
                          {
                              motorVars.flagMotorIdentified = true;
                              //! \brief     Sets the motor identified flag state in the estimator
                              EST_setFlag_motorIdentified(estHandle, true);
                              //! \brief     Sets the bypass lock rotor flag value in the estimator
                              motorVars.flagBypassLockRotor = true;
                              EST_setFlag_bypassLockRotor(estHandle, motorVars.flagBypassLockRotor);
                              //
                              // set up the PI control according to the identification
                              // motor parameters
                              //
                              userParams.motor_ratedFlux_Wb = motorVars.flux_VpHz / MATH_TWO_PI;
      
                              userParams.motor_Rr_d_Ohm = motorVars.Rr_Ohm;
                              userParams.motor_Rr_q_Ohm = motorVars.Rr_Ohm;
      
                              userParams.motor_Rs_a_Ohm = motorVars.Rs_Ohm;
                              userParams.motor_Rs_b_Ohm = motorVars.Rs_Ohm;
      
                              userParams.motor_Rs_d_Ohm = motorVars.Rs_Ohm;
                              userParams.motor_Rs_q_Ohm = motorVars.Rs_Ohm;
      
                              userParams.motor_Ls_d_H = motorVars.Ls_d_H;
                              userParams.motor_Ls_q_H = motorVars.Ls_q_H;
      
                              CTRL_setParams(ctrlHandle, &userParams);
      
                          }