工具与软件:
您好!
我们使用 Motor Control SDK 5.02和我们的定制电路板、我们可以根据 SDK 中提供的示例运行 PMSM 电机。 我们要使用同一电路板运行交流感应电机、您是否有可用作参考的示例?
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.
工具与软件:
您好!
我们使用 Motor Control SDK 5.02和我们的定制电路板、我们可以根据 SDK 中提供的示例运行 PMSM 电机。 我们要使用同一电路板运行交流感应电机、您是否有可用作参考的示例?
您好!
参阅 《通用电机控制实验用户指南》(特别是第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、您好!
我们尝试了估算感应电机参数、但在 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,
此致、
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 库将在内部加以解决
可以避免锁定转子。
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;
如果电机在估算过程中的任何点根本没有旋转、则您面临的其他问题可能与此相关。
您是否有机会阅读 InstaSPIN-FOC 和 InstaSPIN-MOTION 用户指南? 第 4.8.1.2节"将数据表中的 ACIM 电机参数输入 user.h"和第5节"管理电机信号"似乎特别有用。 通常、如果电机未旋转、这是因为基本参数需要校正。
此外、您是否验证了定制电路板上的电压、电流和 PWM 信号都具有良好的质量?
此致、
Jason Osborn
Jason、您好!
是的、我们已参考了用户指南、我们针对电流和电压信号的偏移校准不会返回错误。
电机在斜升和磁通估算期间处于旋转状态。 但在 LOCK_ROTORE 状态后重新启用电机后、它不旋转。
我们没有电机提供电机电阻和电感的详细数据表、因此我们在尝试估算电机参数。
在频率电机不旋转时、Ls 期间的估算频率低至低于2Hz。
同一个板可与 PMSM 电机正常工作。该板能够估算电机参数并使用估算参数在闭环中运行。 我们与不同的 PMSM 座右铭进行了验证。
此致
Prashanth
我们使用以下参数。
#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); }