版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Ronnie_Hu/article/details/87933953
Flying start具备在非零转速下启动的能力,这种功能适用于洗衣机、风机、电动自行车、电动滑板车等应用。Flying start模式对于启动命令的响应是和电机转速(频率和相位)以及电压同步的,而后电机加速至目标转速,这将避免触发过流保护。
无传感器flying start功能植入了一个“频率搜索算法”来寻找电机转速,“频率搜索算法”寻找与电机的激励电流相对应的电机电压。
电机在旋转过程中,转速和位置信息可以通过反电势来估算。如下图所示,flying start模式下,速度环被禁用,零转矩电流作用于电机,即iq基准值设为0。当flying start运行时间达到时,使能转速环并设置速度环的基准值。
在ISR中,调用了FS_run()函数,分析代码不难看出,如果使能了flying start功能,将id和iq的基准值均设为0,同时获取FAST估算的转速,并对该转速进行低通滤波,当检查时间达到时,禁用flying start功能,并使能转速环,将FAST估算出的转速作为转速环的基准。
static inline void FS_run(CTRL_Handle handle, FS_Handle fsHandle)
{
CTRL_Obj *ctrl = (CTRL_Obj *)handle;
FS_Obj *fs = (FS_Obj *)fsHandle;
if(fs->flag_enableFs == true)
{
CTRL_setId_ref_pu(handle, _IQ(0.0));
CTRL_setIq_ref_pu(handle, _IQ(0.0));
fs->speed_ref_pu = CTRL_getSpd_ref_pu(handle);
fs->speed_est_pu = EST_getFm_pu(ctrl->estHandle);
fs->speed_est_avg = _IQmpy(fs->speed_est_avg, _IQ(0.8)) + _IQmpy(fs->speed_est_pu, _IQ(0.20));
if(fs->cnt_checktime >= fs->max_checktime)
{
if(_IQabs(fs->speed_est_avg) < fs->speed_fs_min)
{
fs->speed_set_pu = _IQ(0.0);
}
else
{
fs->speed_set_pu = fs->speed_est_avg;
}
fs->flag_enableFs = false;
fs->flag_enableSpeedCtrl = true;
TRAJ_setIntValue(ctrl->trajHandle_spd, fs->speed_set_pu);
PID_setUi(ctrl->pidHandle_spd, _IQ(0.0));
CTRL_setSpd_out_pu(handle, _IQ(0.0));
}
else
fs->cnt_checktime++;
}
else
{
fs->flag_enableSpeedCtrl = true;
}
return;
} // end of FS_run() function
参考文献:InstaSPIN Projects and Labs User’s Guide,TI技术文档