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

关于电机控制 DQ轴的疑惑

我用的官方的双电机例程,其中有段程序是这样的:

// init stage 1: release 1 electric round
if (gAlignCount[HAL_MTR1] < USER_CTRL_FREQ_Hz)
{
   angle_pu = _IQ(gAlignCount[HAL_MTR1]*INIT_RPM/USER_CTRL_FREQ_Hz*gMotorInitDirection[HAL_MTR1]);
   gIdq_ref_pu[HAL_MTR1].value[0] = _IQ(USER_MOTOR_RES_EST_CURRENT/USER_IQ_FULL_SCALE_CURRENT_A);
}
// init stage 2: wait 1s, and get offset
else if(gAlignCount[HAL_MTR1] < 2*USER_CTRL_FREQ_Hz)
{
   angle_pu = _IQ(1.0*gMotorInitDirection[HAL_MTR1]);
   gIdq_ref_pu[HAL_MTR1].value[0] = _IQ(USER_MOTOR_RES_EST_CURRENT/USER_IQ_FULL_SCALE_CURRENT_A*2);
}

其中 gIdq_ref_pu[HAL_MTR1].value[0] 中的变量应该是D轴的值,这段程序应该是初始化电机位置的,因为用的增量式编码器,需要转动一下来确定位置。

我的疑惑是:为什么只需要改变D轴就可以控制电机转动?不应该是gIdq_ref_pu[HAL_MTR1].value[1]中的Q轴来控制力矩吗?

Green Deng:用D轴就可以了,如果D轴电流是正,它会对准N极。如果是负,会对准S极。

我用的官方的双电机例程,其中有段程序是这样的:

// init stage 1: release 1 electric round
if (gAlignCount[HAL_MTR1] < USER_CTRL_FREQ_Hz)
{
   angle_pu = _IQ(gAlignCount[HAL_MTR1]*INIT_RPM/USER_CTRL_FREQ_Hz*gMotorInitDirection[HAL_MTR1]);
   gIdq_ref_pu[HAL_MTR1].value[0] = _IQ(USER_MOTOR_RES_EST_CURRENT/USER_IQ_FULL_SCALE_CURRENT_A);
}
// init stage 2: wait 1s, and get offset
else if(gAlignCount[HAL_MTR1] < 2*USER_CTRL_FREQ_Hz)
{
   angle_pu = _IQ(1.0*gMotorInitDirection[HAL_MTR1]);
   gIdq_ref_pu[HAL_MTR1].value[0] = _IQ(USER_MOTOR_RES_EST_CURRENT/USER_IQ_FULL_SCALE_CURRENT_A*2);
}

其中 gIdq_ref_pu[HAL_MTR1].value[0] 中的变量应该是D轴的值,这段程序应该是初始化电机位置的,因为用的增量式编码器,需要转动一下来确定位置。

我的疑惑是:为什么只需要改变D轴就可以控制电机转动?不应该是gIdq_ref_pu[HAL_MTR1].value[1]中的Q轴来控制力矩吗?

user5170101:

回复 Green Deng:

对准?励磁电流流过的电流正的话是自动去找转子上的N吗?

我用的官方的双电机例程,其中有段程序是这样的:

// init stage 1: release 1 electric round
if (gAlignCount[HAL_MTR1] < USER_CTRL_FREQ_Hz)
{
   angle_pu = _IQ(gAlignCount[HAL_MTR1]*INIT_RPM/USER_CTRL_FREQ_Hz*gMotorInitDirection[HAL_MTR1]);
   gIdq_ref_pu[HAL_MTR1].value[0] = _IQ(USER_MOTOR_RES_EST_CURRENT/USER_IQ_FULL_SCALE_CURRENT_A);
}
// init stage 2: wait 1s, and get offset
else if(gAlignCount[HAL_MTR1] < 2*USER_CTRL_FREQ_Hz)
{
   angle_pu = _IQ(1.0*gMotorInitDirection[HAL_MTR1]);
   gIdq_ref_pu[HAL_MTR1].value[0] = _IQ(USER_MOTOR_RES_EST_CURRENT/USER_IQ_FULL_SCALE_CURRENT_A*2);
}

其中 gIdq_ref_pu[HAL_MTR1].value[0] 中的变量应该是D轴的值,这段程序应该是初始化电机位置的,因为用的增量式编码器,需要转动一下来确定位置。

我的疑惑是:为什么只需要改变D轴就可以控制电机转动?不应该是gIdq_ref_pu[HAL_MTR1].value[1]中的Q轴来控制力矩吗?

Green Deng:

回复 user5170101:

方便先告知一下具体使用的哪个例程吗?

我用的官方的双电机例程,其中有段程序是这样的:

// init stage 1: release 1 electric round
if (gAlignCount[HAL_MTR1] < USER_CTRL_FREQ_Hz)
{
   angle_pu = _IQ(gAlignCount[HAL_MTR1]*INIT_RPM/USER_CTRL_FREQ_Hz*gMotorInitDirection[HAL_MTR1]);
   gIdq_ref_pu[HAL_MTR1].value[0] = _IQ(USER_MOTOR_RES_EST_CURRENT/USER_IQ_FULL_SCALE_CURRENT_A);
}
// init stage 2: wait 1s, and get offset
else if(gAlignCount[HAL_MTR1] < 2*USER_CTRL_FREQ_Hz)
{
   angle_pu = _IQ(1.0*gMotorInitDirection[HAL_MTR1]);
   gIdq_ref_pu[HAL_MTR1].value[0] = _IQ(USER_MOTOR_RES_EST_CURRENT/USER_IQ_FULL_SCALE_CURRENT_A*2);
}

其中 gIdq_ref_pu[HAL_MTR1].value[0] 中的变量应该是D轴的值,这段程序应该是初始化电机位置的,因为用的增量式编码器,需要转动一下来确定位置。

我的疑惑是:为什么只需要改变D轴就可以控制电机转动?不应该是gIdq_ref_pu[HAL_MTR1].value[1]中的Q轴来控制力矩吗?

user5170101:

回复 Green Deng:

12c

赞(0)
未经允许不得转载:TI中文支持网 » 关于电机控制 DQ轴的疑惑
分享到: 更多 (0)