TI學習筆記之“Flying Start”

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章