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技術文檔