ZHCU083I January 2013 – October 2021 TMS320F2802-Q1 , TMS320F28026-Q1 , TMS320F28026F , TMS320F28027-Q1 , TMS320F28027F , TMS320F28027F-Q1 , TMS320F28052-Q1 , TMS320F28052F , TMS320F28052F-Q1 , TMS320F28052M , TMS320F28052M-Q1 , TMS320F28054-Q1 , TMS320F28054F , TMS320F28054F-Q1 , TMS320F28054M , TMS320F28054M-Q1 , TMS320F2806-Q1 , TMS320F28062-Q1 , TMS320F28062F , TMS320F28062F-Q1 , TMS320F28068F , TMS320F28068M , TMS320F28069-Q1 , TMS320F28069F , TMS320F28069F-Q1 , TMS320F28069M , TMS320F28069M-Q1
为了启用 Rs 在线重校准,需要设置一些参数。其中一个最重要的参数是为实现 Rs 在线重校准需要向 D 坐标轴电流 (Id) 注入电流的大小。通常,建议使用的最小电流为额定电流的 5%,以便在电机运行时通过可测量电流获得准确的电阻重校准结果。
_iq RsOnLineCurrent_A = _IQ(USER_MOTOR_MAX_CURRENT * 0.05);
请注意,乘法由预编译器执行,使用 USER_MOTOR_MAX_CURRENT 定义的浮点值乘以 0.05 来表示 5%,然后将浮点结果转换为全局 IQ 值。有关 IQmath 库的详细信息,请参阅 C28x IQMath Library – 虚拟浮点引擎 – 模块用户指南。
另外,在启用 Rs 在线重校准之前,用户必须设置:
当禁用 Rs 在线重校准时,需要将 Id_mag_pu 和 Id_pu 的值都设置为零,以防止估算器保留任何剩余电流参考。在 InstaSPIN 的未来版本中,不需要执行此操作,只需要将 Id_mag_pu 重置为零。但是对于 2806xF 器件,仍需要在启用或禁用 Rs 在线重校准前将上述两个值设置为零。
在估算器内部,两个标志分别用于执行不同的任务。设置 enableRsOnLine 标志后即可运行完整的 Rs 在线特性,可以更新内部变量使其保持最新的电阻值,并向 Id 注入电流。设置第二个标志 updateRs 后,电机模型便可使用电阻值。如果未设置 updateRs 标志,但设置了 enableRsOnLine 标志,则仍可使用电阻来监控电阻变化,但是内部电机模型不能使用此变化电阻。如果电机温度显著升高且未更新电机模型中的电阻(将 updateRs 标志设置为 TRUE),则 InstaSPIN 的性能会受到影响,并且无法达到所需的电机低速性能要求。另外,在满载时电机可能无法启动。
以下代码示例显示如何设置初始值以及如何检查条件以确保在状态机处于正常状态时设置初始值。需要在启用 Rs 在线重校准前执行此操作:
CTRL_Obj *obj = (CTRL_Obj *)ctrlHandle;
// get the controller state
gMotorVars.CtrlState = CTRL_getState(ctrlHandle);
// get the estimator state
gMotorVars.EstState = EST_getState(obj->estHandle);
if((gMotorVars.CtrlState <= CTRL_State_OffLine) ||
((gMotorVars.CtrlState == CTRL_State_OnLine)&&
(gMotorVars.EstState == EST_State_Rs)))
{
EST_setRsOnLine_qFmt(obj->estHandle,EST_getRs_qFmt(obj->estHandle));
EST_setRsOnLineId_mag_pu(obj->estHandle,_IQ(0.0));
EST_setRsOnLineId_pu(obj->estHandle,_IQ(0.0));
EST_setFlag_enableRsOnLine(obj->estHandle,FALSE);
EST_setFlag_updateRs(obj->estHandle,FALSE);
}
由于此代码示例仅包含全局变量而不含时间关键代码,因此可在主函数中的死循环中(中断程序外)执行此代码示例。请记住,“if”条件中的代码需要在启用 Rs 在线重校准前执行。
如上述代码示例所示,重置 Rs 在线重校准所有参数的其中一个条件是 CtrlState 小于或等于 CTRL_State_OffLine。此条件表示当状态机空闲(电机未通电)或执行偏移重校准时应禁用并重置 Rs 在线重校准。另一个必须重置这些初始值的条件是控制状态为在线 (CTRL_State_OnLine) 且估算器状态为 EST_State_Rs,即正在执行 Rs 离线重校准。所有这些条件表示电机静止。有关 InstaSPIN 中这些状态与整个状态机的关系,请参阅Chapter7。CTRL_State_OffLine 状态在 CTRL 状态机框图中显示为离线,CTRL_State_OnLine 状态在 CTRL 状态机框图中显示为在线,而 EST_State_Rs 状态在 EST 状态机框图中显示为 Rs
当电机运行时,需要确保 Rs 在线重校准特性给定的电阻与 Rs 离线特性给出的初始电阻足够接近。这是为了确保两个电阻值之间进行平稳转换,从而确保不会对闭环系统造成任何干扰。可通过以下代码执行此操作,其中包含了上一个代码示例中的“else”条件。只要电机未处于静止状态(即电机正在旋转),就会执行以下条件。此条件可用于启用 Rs 在线重校准,如下所示。
else
{
// Scale factor to convert Amps to per units.
// USER_IQ_FULL_SCALE_CURRENT_A is defined in user.h
_iq sf = _IQ(1.0/USER_IQ_FULL_SCALE_CURRENT_A);
Rs_pu = EST_getRs_pu(obj->estHandle);
RsOnLine_pu = EST_getRsOnLine_pu(obj->estHandle);
Rs_error_pu = RsOnLine_pu -Rs_pu;
EST_setFlag_enableRsOnLine(obj->estHandle,TRUE);
EST_setRsOnLineId_mag_pu(obj->estHandle,_IQmpy(RsOnLineCurrent_A,sf));
// Enable updates when Rs Online is only 5% different fromRs Offline
if(_IQabs(Rs_error_pu) <_IQmpy(Rs_pu,_IQ(0.05)))
{
EST_setFlag_updateRs(obj->estHandle,TRUE);
}
}
请注意,在此示例中通过调用以下函数启用 Rs 在线重校准:
EST_setFlag_enableRsOnLine(obj->estHandle,TRUE)
但是,直到将更新标志设置为 TRUE 之后,才会更新 Rs 在线值。当 Rs 在线值与 Rs 离线所提供的初始值足够接近时(在本例中为该值的 5%),将更新标志设置为 TRUE。对于要求启动扭矩为满扭矩的应用,建议针对 Rs 在线和 Rs 离线的差值选择更小的比例,即用 3% 左右的值代替 5%。一旦 Rs 在线值和 Rs 离线值的差值小于 5%,就可以通过调用以下函数来设置 Rs 在线更新标志:
EST_setFlag_updateRs(obj->estHandle,TRUE)
启用这两个标志后,Rs 在线重校准将实时重新计算电阻,而估算器会根据新电阻值更新其内部电机模型。
另外,如代码示例所示,可通过调用以下函数来设置用于估算在线电阻的注入电流的幅度:
EST_setRsOnLineId_mag_pu(obj->estHandle,_IQmpy(RsOnLineCurrent_A,sf));