Workbench 程式架構

前言

這邊網路資源也算蠻多的一些相關知識可以參考FOC控制原理电机应用开发实战指南-基于STM32中的影片知識,這邊會探討在ST的Workbench 在設定完成後所生成的code,主要在程式架構與重要程式碼說明,在了解架構後,就能夠自己加入所需要應用調整,後續會逐步介紹API應用與不同控制的改動

程式架構

下圖可以看到主要的整個程式運轉主架構,其中有2個中斷(Systick中斷與ADC中斷)可以由圖看出是程式的主核心,Systick中斷執行安全任務與中頻任務(速度環),而ADC中斷則執行高頻任務

Systick中斷

系统定时器是一个24bit的向下遞減的計數器,計數器每計數一次的時間為1/SYSCLK。當中內存數值寄存器的數值遞減到0的時候,系统定時器就產生一次中斷。
這邊參考已默認1ms的定時中斷為範例來看參考代碼

__weak HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority)
{
  /* Configure the SysTick to have interrupt in 1ms time basis*/
  if (HAL_SYSTICK_Config(SystemCoreClock / (1000U / uwTickFreq)) > 0U)
  {
    return HAL_ERROR;
  }

  /* Configure the SysTick IRQ priority */
  if (TickPriority < (1UL << __NVIC_PRIO_BITS))
  {
    HAL_NVIC_SetPriority(SysTick_IRQn, TickPriority, 0U);
    uwTickPrio = TickPriority;
  }
  else
  {
    return HAL_ERROR;
  }

  /* Return function status */
  return HAL_OK;
}

中斷函數

void SysTick_Handler(void)
{
    MC_RunMotorControlTasks();
}

MC_RunMotorControlTasks函數內容

__weak void MC_RunMotorControlTasks(void)
{
  if ( bMCBootCompleted ) {
    /* ** Medium Frequency Tasks ** */ 
    MC_Scheduler(); //中頻任務

    /* Safety task is run after Medium Frequency task so that
     * it can overcome actions they initiated if needed. */
    TSK_SafetyTask(); //安全任務

    /* ** User Interface Task ** */
    UI_Scheduler();  //用户界面任務
  }
}

ADC中斷

ADC中斷主要在Timer觸發後執行FOC座標轉變、SVPWM執行、電壓電流溫度採樣與PWM調整占比輸出(可以參考下圖)
ADC初始化部分可以參考文件【基于NUCLEO-F746ZG电机开发应用】7.程序框架-两个重要中断,與一般初始化大致相同就不贅述只有在中斷部分有加入函示庫

ADC中斷

void ADC_IRQHandler(void)
{
  /* USER CODE BEGIN ADC_IRQn 0 */

  /* USER CODE END ADC_IRQn 0 */
  if ( LL_ADC_IsActiveFlag_JEOS( ADC1 ) )//檢查ADC轉換flag
  {
    LL_ADC_ClearFlag_JEOS( ADC1 );//清除Flag
  }

  // Highfrequency task Single or M1
 UI_DACUpdate(TSK_HighFrequencyTask()); //高頻任務
  /* USER CODE BEGIN ADC_IRQn 1 */

  /* USER CODE END ADC_IRQn 1 */
}

1 thought on “Motor Control Workbench 程式架構”

  1. Pingback: Motor Profiler and MotorControl Workbench - AMS and STM32

Leave a Comment

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

Shopping Cart