MCSDK Using Case and Debug

前言

客戶使用MCSDK5.4.8生成Hall sensor的code,但在馬達有負載起轉時候會出現馬達激磁聲音,但code部分並未新增甚麼東西,僅讓馬達停止後再起轉,這邊使用DAC接口方便Debug,最終找到演算法與部分需要改動與硬體需要調整部分解決了此問題

問題

這邊在起步出現激磁聲音,先確定相電流出現異常波形長如何,又因此Case是使用Hall sensor去做回授非sensorless,這邊去量測Hall訊號組合出下圖,看的出來再Hall訊號出現快速上下震盪,有些像HFI,但在MCSDK5.4.8這塊是被拔除的。

Debug過程

第一步:
因不確定是不是在不對狀態下切換導致,因此先抓取Motor控制狀態,確保到idel狀態在進入馬達起轉或停止

第二步:
結果做完第一步後也還是存在問題,接下來就一步一步查詢訊號異常部分來源是在哪邊
但可以看到下圖異常部分Id是正常的,沒有注入雜訊,又發現Iq是有實際指令讓馬達去達到目標

第三步:
確認是軟體部分後就去切開是回授端出問題還是順向端出問題,使用senorless run後並無發生起步問題,問題縮窄至Hall 回授
先做一些調整,查看公版與打版差異,使用Hall回授公版會出現錯誤無法起轉,因此這邊提高Hall的濾雜訊電容,再把其提高,發生頻率有在減小

軟體解決方案

這邊確認後MCSDK5.4.8在起轉時並不是使用六部方波起轉完後再切換至FOC,因此會有空白區域預猜現象,只要有雜訊出現就會使其猜不准出現震盪

因此這邊會從HALL_CalcElAngle in hall_speed_pos_fdbk.c下手詢問原廠後再6.1.2有針對這部分做修正,因此把修正部分加入

__weak int16_t HALL_CalcElAngle(HALL_Handle_t *pHandle)

{

  int16_t retValue;

#ifdef NULL_PTR_CHECK_HALL_SPD_POS_FDB

  if (NULL == pHandle)

  {

    retValue = 0;

  }

  else

  {

#endif

    if (pHandle->_Super.hElSpeedDpp != HALL_MAX_PSEUDO_SPEED)

    {

      pHandle->IncrementElAngle += pHandle->_Super.hElSpeedDpp + pHandle->CompSpeed;

      pHandle->PrevRotorFreq = pHandle->_Super.hElSpeedDpp;

      if (pHandle->IncrementElAngle >= S16_60_PHASE_SHIFT)

      {

        pHandle->_Super.hElAngle += pHandle->_Super.hElSpeedDpp + pHandle->CompSpeed - (pHandle->IncrementElAngle - S16_60_PHASE_SHIFT) - 1;

        pHandle->IncrementElAngle = S16_60_PHASE_SHIFT;

      }

      else if (pHandle->IncrementElAngle <= -S16_60_PHASE_SHIFT)

      {

        pHandle->_Super.hElAngle += pHandle->_Super.hElSpeedDpp + pHandle->CompSpeed - (pHandle->IncrementElAngle + S16_60_PHASE_SHIFT) + 1;

        pHandle->IncrementElAngle = -S16_60_PHASE_SHIFT;

      }

      else

      {

        pHandle->MeasuredElAngle += pHandle->_Super.hElSpeedDpp;

        pHandle->_Super.hElAngle += pHandle->_Super.hElSpeedDpp + pHandle->CompSpeed;

      }

    }

    else

    {

      pHandle->_Super.hElAngle += pHandle->PrevRotorFreq;

    }

    

    retValue = pHandle->_Super.hElAngle;

#ifdef NULL_PTR_CHECK_HALL_SPD_POS_FDB

  }

#endif

  return (retValue);

}

Leave a Comment

Your email address will not be published. Required fields are marked *

Shopping Cart