TI中文支持网
TI专业的中文技术问题搜集分享网站

无刷电机高速启动时间

应用drv8301 revd 电路板的Lab10a例程,InstaSPIN FOC算法驱动无刷电机,额定转速43000rpm,我已经把 MaxAccel_krpmps赋值为_IQ(120),电机从0到43000rpm也需要4.5秒的时间,按理说应该很快就到达43000rpm,是不是还有一个控制加速度变化率的变量没有调整好?我想把启动时间调整为1.5秒左右,也就是电机从0到43000rpm只需要1.5秒的时间,应该怎么做?(我现在使用的是双环控制:速度环加电流环,如果仅仅是单环控制:电流环启动时间满足要求,我需要双环控制启动时间也满足要求)

Eric Ma:

首先,你设置120KRPMPS这么快的加速度,你的电机惯性是否跟得上?

启动的时候,那些RS recal 还有偏置校准的功能是不是打开了,这些也会占用时间,你可以把偏置值和电机参数都写到user.h中,然后把这两个功能关掉,让电机已启动就直接online运行。

ERIC

应用drv8301 revd 电路板的Lab10a例程,InstaSPIN FOC算法驱动无刷电机,额定转速43000rpm,我已经把 MaxAccel_krpmps赋值为_IQ(120),电机从0到43000rpm也需要4.5秒的时间,按理说应该很快就到达43000rpm,是不是还有一个控制加速度变化率的变量没有调整好?我想把启动时间调整为1.5秒左右,也就是电机从0到43000rpm只需要1.5秒的时间,应该怎么做?(我现在使用的是双环控制:速度环加电流环,如果仅仅是单环控制:电流环启动时间满足要求,我需要双环控制启动时间也满足要求)

user4708725:

回复 Eric Ma:

1.  非常感谢,能不能具体说明一下电机已启动就直接online运行应该关闭以下哪些代码?或者说哪些代码的值可以改小以加速启动时间?我不太清楚怎么修改?

2.  RS recal 还有偏置校准的功能怎么关闭?应该屏蔽以下哪些代码?

pUserParams->ctrlWaitTime[CTRL_State_Error] = 0;pUserParams->ctrlWaitTime[CTRL_State_Idle] = 0;pUserParams->ctrlWaitTime[CTRL_State_OffLine] = (uint_least32_t)( 5.0 * USER_CTRL_FREQ_Hz);pUserParams->ctrlWaitTime[CTRL_State_OnLine] = 0;

pUserParams->estWaitTime[EST_State_Error] = 0;pUserParams->estWaitTime[EST_State_Idle] = 0;pUserParams->estWaitTime[EST_State_RoverL] = (uint_least32_t)( 8.0 * USER_EST_FREQ_Hz);pUserParams->estWaitTime[EST_State_Rs] = 0;pUserParams->estWaitTime[EST_State_RampUp] = (uint_least32_t)((5.0 + USER_MOTOR_FLUX_EST_FREQ_Hz / USER_MAX_ACCEL_EST_Hzps) * USER_EST_FREQ_Hz);pUserParams->estWaitTime[EST_State_IdRated] = (uint_least32_t)(30.0 * USER_EST_FREQ_Hz);pUserParams->estWaitTime[EST_State_RatedFlux_OL] = (uint_least32_t)( 0.2 * USER_EST_FREQ_Hz);pUserParams->estWaitTime[EST_State_RatedFlux] = 0;pUserParams->estWaitTime[EST_State_RampDown] = (uint_least32_t)( 2.0 * USER_EST_FREQ_Hz);pUserParams->estWaitTime[EST_State_LockRotor] = 0;pUserParams->estWaitTime[EST_State_Ls] = 0;pUserParams->estWaitTime[EST_State_Rr] = (uint_least32_t)(20.0 * USER_EST_FREQ_Hz);pUserParams->estWaitTime[EST_State_MotorIdentified] = 0;pUserParams->estWaitTime[EST_State_OnLine] = 0;

pUserParams->FluxWaitTime[EST_Flux_State_Error] = 0;pUserParams->FluxWaitTime[EST_Flux_State_Idle] = 0;pUserParams->FluxWaitTime[EST_Flux_State_CL1] = (uint_least32_t)(10.0 * USER_EST_FREQ_Hz);pUserParams->FluxWaitTime[EST_Flux_State_CL2] = (uint_least32_t)( 0.2 * USER_EST_FREQ_Hz);pUserParams->FluxWaitTime[EST_Flux_State_Fine] = (uint_least32_t)( 4.0 * USER_EST_FREQ_Hz);pUserParams->FluxWaitTime[EST_Flux_State_Done] = 0;

pUserParams->LsWaitTime[EST_Ls_State_Error] = 0;pUserParams->LsWaitTime[EST_Ls_State_Idle] = 0;pUserParams->LsWaitTime[EST_Ls_State_RampUp] = (uint_least32_t)( 3.0 * USER_EST_FREQ_Hz);pUserParams->LsWaitTime[EST_Ls_State_Init] = (uint_least32_t)( 3.0 * USER_EST_FREQ_Hz);pUserParams->LsWaitTime[EST_Ls_State_Coarse] = (uint_least32_t)( 0.2 * USER_EST_FREQ_Hz);pUserParams->LsWaitTime[EST_Ls_State_Fine] = (uint_least32_t)(30.0 * USER_EST_FREQ_Hz);pUserParams->LsWaitTime[EST_Ls_State_Done] = 0;

pUserParams->RsWaitTime[EST_Rs_State_Error] = 0;pUserParams->RsWaitTime[EST_Rs_State_Idle] = 0;pUserParams->RsWaitTime[EST_Rs_State_RampUp] = (uint_least32_t)( 1.0 * USER_EST_FREQ_Hz);pUserParams->RsWaitTime[EST_Rs_State_Coarse] = (uint_least32_t)( 2.0 * USER_EST_FREQ_Hz);pUserParams->RsWaitTime[EST_Rs_State_Fine] = (uint_least32_t)( 7.0 * USER_EST_FREQ_Hz);pUserParams->RsWaitTime[EST_Rs_State_Done] = 0;

3.  把偏置值和电机参数都写到user.h中是这样吗?

#define I_A_offset (0.9939797521)#define I_B_offset (1.014363647)#define I_C_offset (1.005615234)

#define V_A_offset (0.5020679235)#define V_B_offset (0.4977650046)#define V_C_offset (0.4986107945)

#elif (USER_MOTOR == Anaheim_BLY172S)#define USER_MOTOR_TYPE MOTOR_Type_Pm#define USER_MOTOR_NUM_POLE_PAIRS (1)#define USER_MOTOR_Rr (NULL)#define USER_MOTOR_Rs (0.08870909)#define USER_MOTOR_Ls_d (4.478765e-05)#define USER_MOTOR_Ls_q (4.478765e-05)#define USER_MOTOR_RATED_FLUX (0.02004857)#define USER_MOTOR_MAGNETIZING_CURRENT (NULL)#define USER_MOTOR_RES_EST_CURRENT (1.2)#define USER_MOTOR_IND_EST_CURRENT (-1.2)#define USER_MOTOR_MAX_CURRENT (11.0)#define USER_MOTOR_FLUX_EST_FREQ_Hz (20.0)

应用drv8301 revd 电路板的Lab10a例程,InstaSPIN FOC算法驱动无刷电机,额定转速43000rpm,我已经把 MaxAccel_krpmps赋值为_IQ(120),电机从0到43000rpm也需要4.5秒的时间,按理说应该很快就到达43000rpm,是不是还有一个控制加速度变化率的变量没有调整好?我想把启动时间调整为1.5秒左右,也就是电机从0到43000rpm只需要1.5秒的时间,应该怎么做?(我现在使用的是双环控制:速度环加电流环,如果仅仅是单环控制:电流环启动时间满足要求,我需要双环控制启动时间也满足要求)

Eric Ma:

回复 user4708725:

gMotorVars.Flag_enableOffsetcalc = 0; gMotorVars.Flag_enableRsRecalc = 0;

在for循环之前,把上面两句添加进去。

for(;;) {

应用drv8301 revd 电路板的Lab10a例程,InstaSPIN FOC算法驱动无刷电机,额定转速43000rpm,我已经把 MaxAccel_krpmps赋值为_IQ(120),电机从0到43000rpm也需要4.5秒的时间,按理说应该很快就到达43000rpm,是不是还有一个控制加速度变化率的变量没有调整好?我想把启动时间调整为1.5秒左右,也就是电机从0到43000rpm只需要1.5秒的时间,应该怎么做?(我现在使用的是双环控制:速度环加电流环,如果仅仅是单环控制:电流环启动时间满足要求,我需要双环控制启动时间也满足要求)

user4708725:

回复 Eric Ma:

gMotorVars.Flag_enableOffsetcalc = 0;后,电机无法正常启动,这是什么原因?

应用drv8301 revd 电路板的Lab10a例程,InstaSPIN FOC算法驱动无刷电机,额定转速43000rpm,我已经把 MaxAccel_krpmps赋值为_IQ(120),电机从0到43000rpm也需要4.5秒的时间,按理说应该很快就到达43000rpm,是不是还有一个控制加速度变化率的变量没有调整好?我想把启动时间调整为1.5秒左右,也就是电机从0到43000rpm只需要1.5秒的时间,应该怎么做?(我现在使用的是双环控制:速度环加电流环,如果仅仅是单环控制:电流环启动时间满足要求,我需要双环控制启动时间也满足要求)

Eric Ma:

回复 user4708725:

你要先使能一遍gMotorVars.Flag_enableOffsetcalc = 1;

然后将偏置值读取后放在user.h中,才能够gMotorVars.Flag_enableOffsetcalc = 0;。

看文档:C:\ti\motorware\motorware_1_01_00_16\docs\labs

Eric

赞(0)
未经允许不得转载:TI中文支持网 » 无刷电机高速启动时间
分享到: 更多 (0)