我用的官方的双电机例程,其中有段程序是这样的:
// 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
TI中文支持网



