请问一下,lab5c 中无法正常识别惯量:
1、识别使能标志置一后,很快又被清零了,查看程序如下, 速度环PI控制器依然使能 CTRL_setFlag_enableSpeedCtrl(ctrlHandle, true);,但看说明中明确规定要关闭速度环PI控制器:
识别条件:
电机不应旋转,或者不应缓慢旋转。 如果在电机已经转动时开始执行转矩配置,惯性的估算结果会不准确。
InstaSPIN-FOC PI 速度控制器必须禁用。 为测试惯性,SpinTAC 速度识别需要提供 Iq 参考值。 这只有在 InstaSPIN-FOC PI 速度控制器禁用时才 能实现。
正向速度基准值必须在 FAST 中设置。 FAST 估算器需要通过速度基准获得电机旋转方向,从而正确地估算速度。 该值可以是速度基准设置的 任意正值。
强制角必须启用。
然而关闭foc 速度环PI控制器后开始实验,电机以100转运行,使能识别运行,一直报2004错误,不断减小目标速度,依然报2004错误。
2、使用lab12a,有感惯性识别,会报2003错误,减小时间后,则正常识别。
对比lab5c 和 lab12a,发现lab12a中没有使能foc 速度环PI控制器,而且在识别函数中也有不同,如下:
lab12a 识别函数中:
if(STVELID_getStatus(stObj->velIdHandle) == ST_VEL_ID_IDLE) {
// If inertia identification is successful, update the inertia setting of SpinTAC Velocity Controller
// EXAMPLE: STVELCTL_setInertia(stObj->velCtlHandle, STVELID_getInertiaEstimate(stObj->velIdHandle));
gMotorVars.SpinTAC.VelIdRun = false;
// return the speed reference to zero
gMotorVars.SpeedRef_krpm = _IQ(0.0);
CTRL_setSpd_ref_krpm(ctrlHandle, gMotorVars.SpeedRef_krpm);
}
else if((STVELID_getErrorID(stObj->velIdHandle) != false) && (STVELID_getErrorID(stObj->velIdHandle) != ST_ID_INCOMPLETE_ERROR)) {
// if not done & in error, wait until speed is less than 1RPM to exit
if(_IQabs(speedFeedback) < _IQ(ST_MIN_ID_SPEED_PU)) {
gMotorVars.SpinTAC.VelIdRun = false;
// return the speed reference to zero
gMotorVars.SpeedRef_krpm = _IQ(0.0);
CTRL_setSpd_ref_krpm(ctrlHandle, gMotorVars.SpeedRef_krpm);
}
lab5c识别函数中:
if((STVELID_getStatus(stObj->velIdHandle) == ST_VEL_ID_IDLE) && (_IQabs(speedFeedback) < _IQ(ST_MIN_ID_SPEED_PU))) {
// If inertia identification is successful, update the inertia setting of SpinTAC Velocity Controller
// EXAMPLE: STVELCTL_setInertia(stObj->velCtlHandle, STVELID_getInertiaEstimate(stObj->velIdHandle));
gMotorVars.SpinTAC.VelIdRun = false;
// return the speed reference to zero
gMotorVars.SpeedRef_krpm = gMotorVars.StopSpeedRef_krpm;
CTRL_setFlag_enableSpeedCtrl(ctrlHandle, true);
CTRL_setSpd_ref_krpm(ctrlHandle, gMotorVars.SpeedRef_krpm);
}
else if((STVELID_getErrorID(stObj->velIdHandle) != false) && (STVELID_getErrorID(stObj->velIdHandle) != ST_ID_INCOMPLETE_ERROR)) {
// if not done & in error, wait until speed is less than 1RPM to exit
if(_IQabs(speedFeedback) < _IQ(ST_MIN_ID_SPEED_PU)) {
gMotorVars.SpinTAC.VelIdRun = false;
// return the speed reference to zero
gMotorVars.SpeedRef_krpm = gMotorVars.StopSpeedRef_krpm;
CTRL_setFlag_enableSpeedCtrl(ctrlHandle, true);
CTRL_setSpd_ref_krpm(ctrlHandle, gMotorVars.SpeedRef_krpm);
}
将lab5c中上述程序修改与 lab12a 中一样,运行识别还是一直报2004错误,这是lab5c 程序有错么?求解!!!
Young Hu:电机传感器的线序正确么?
请问一下,lab5c 中无法正常识别惯量:
1、识别使能标志置一后,很快又被清零了,查看程序如下, 速度环PI控制器依然使能 CTRL_setFlag_enableSpeedCtrl(ctrlHandle, true);,但看说明中明确规定要关闭速度环PI控制器:
识别条件:
电机不应旋转,或者不应缓慢旋转。 如果在电机已经转动时开始执行转矩配置,惯性的估算结果会不准确。
InstaSPIN-FOC PI 速度控制器必须禁用。 为测试惯性,SpinTAC 速度识别需要提供 Iq 参考值。 这只有在 InstaSPIN-FOC PI 速度控制器禁用时才 能实现。
正向速度基准值必须在 FAST 中设置。 FAST 估算器需要通过速度基准获得电机旋转方向,从而正确地估算速度。 该值可以是速度基准设置的 任意正值。
强制角必须启用。
然而关闭foc 速度环PI控制器后开始实验,电机以100转运行,使能识别运行,一直报2004错误,不断减小目标速度,依然报2004错误。
2、使用lab12a,有感惯性识别,会报2003错误,减小时间后,则正常识别。
对比lab5c 和 lab12a,发现lab12a中没有使能foc 速度环PI控制器,而且在识别函数中也有不同,如下:
lab12a 识别函数中:
if(STVELID_getStatus(stObj->velIdHandle) == ST_VEL_ID_IDLE) {
// If inertia identification is successful, update the inertia setting of SpinTAC Velocity Controller
// EXAMPLE: STVELCTL_setInertia(stObj->velCtlHandle, STVELID_getInertiaEstimate(stObj->velIdHandle));
gMotorVars.SpinTAC.VelIdRun = false;
// return the speed reference to zero
gMotorVars.SpeedRef_krpm = _IQ(0.0);
CTRL_setSpd_ref_krpm(ctrlHandle, gMotorVars.SpeedRef_krpm);
}
else if((STVELID_getErrorID(stObj->velIdHandle) != false) && (STVELID_getErrorID(stObj->velIdHandle) != ST_ID_INCOMPLETE_ERROR)) {
// if not done & in error, wait until speed is less than 1RPM to exit
if(_IQabs(speedFeedback) < _IQ(ST_MIN_ID_SPEED_PU)) {
gMotorVars.SpinTAC.VelIdRun = false;
// return the speed reference to zero
gMotorVars.SpeedRef_krpm = _IQ(0.0);
CTRL_setSpd_ref_krpm(ctrlHandle, gMotorVars.SpeedRef_krpm);
}
lab5c识别函数中:
if((STVELID_getStatus(stObj->velIdHandle) == ST_VEL_ID_IDLE) && (_IQabs(speedFeedback) < _IQ(ST_MIN_ID_SPEED_PU))) {
// If inertia identification is successful, update the inertia setting of SpinTAC Velocity Controller
// EXAMPLE: STVELCTL_setInertia(stObj->velCtlHandle, STVELID_getInertiaEstimate(stObj->velIdHandle));
gMotorVars.SpinTAC.VelIdRun = false;
// return the speed reference to zero
gMotorVars.SpeedRef_krpm = gMotorVars.StopSpeedRef_krpm;
CTRL_setFlag_enableSpeedCtrl(ctrlHandle, true);
CTRL_setSpd_ref_krpm(ctrlHandle, gMotorVars.SpeedRef_krpm);
}
else if((STVELID_getErrorID(stObj->velIdHandle) != false) && (STVELID_getErrorID(stObj->velIdHandle) != ST_ID_INCOMPLETE_ERROR)) {
// if not done & in error, wait until speed is less than 1RPM to exit
if(_IQabs(speedFeedback) < _IQ(ST_MIN_ID_SPEED_PU)) {
gMotorVars.SpinTAC.VelIdRun = false;
// return the speed reference to zero
gMotorVars.SpeedRef_krpm = gMotorVars.StopSpeedRef_krpm;
CTRL_setFlag_enableSpeedCtrl(ctrlHandle, true);
CTRL_setSpd_ref_krpm(ctrlHandle, gMotorVars.SpeedRef_krpm);
}
将lab5c中上述程序修改与 lab12a 中一样,运行识别还是一直报2004错误,这是lab5c 程序有错么?求解!!!
user5919672:请问您的问题解决了吗?我也遇到了同样的问题