馬達控制(FOC)為什麼要 Cortex-M4 的 DSP+FPU:GD32 馬達 MCU 選型
FOC 的電流迴圈要在每個 PWM 週期內算完 Clarke/Park/PI/SVPWM 一連串浮點與三角函數,迴圈跑在 10~20kHz。沒有 FPU 的 M0/M3 得用軟體模擬浮點、又慢又抖;Cortex-M4 的硬體 FPU+DSP 換來速度與確定性。本文講清原理,並對應到內建 FPU+DSP、進階 PWM 計時器與 PWM 同步 ADC 的 GD32F30x / GD32F4xx。
FOC 的控制迴圈在算什麼
FOC(磁場導向控制 / 向量控制)是控制 PMSM / 無刷馬達最主流的方法,它把馬達電流拆成「產生轉矩」與「產生磁通」兩個分量分別控制,讓馬達運轉更平順、效率更高。代價是它的控制迴圈要算一連串數學:先把三相電流經 Clarke 轉換成兩軸靜止座標(α、β),再經 Park 轉換成旋轉座標(d、q)——這一步要算轉子角度的 sin/cos;接著兩個 PI 控制器分別調 d 軸(磁通)與 q 軸(轉矩)電流;再經反 Park 轉換與 SVPWM(空間向量脈寬調變)算出三相的責任週期。關鍵是:這整串運算必須在每個 PWM 週期內算完,而 PWM 通常跑在每秒上萬次(10~20kHz)以上。
為什麼要 FPU + DSP
為什麼這需要 Cortex-M4 的 FPU 與 DSP?因為上面那串運算裡有大量浮點與三角函數(Park / 反 Park 的 sin/cos、各轉換與 PI 的乘加、SVPWM 的乘除)。Cortex-M4 內建硬體單精度 FPU 與 DSP 指令(單週期 MAC、SIMD、硬體除法),這些浮點與乘加大多在個位數時脈週期內完成,而且時間固定;反觀沒有 FPU 的 Cortex-M0 / M3,浮點得靠軟體模擬,一個運算動輒數十到上百個時脈,不但慢、還讓每次迴圈耗時不一致(抖動)。在「每個 PWM 週期都要準時算完」的硬即時迴圈裡,M4 的硬體浮點換來的是速度 + 確定性,這正是電流迴圈最需要的。
⚠️ M3 也能做 FOC:M4 的好處是「浮點 + 時序餘裕」
要誠實說明一點:不是「M3 不能做 FOC」。很多低成本馬達驅動就是用 M3、甚至 M0 跑「定點(fixed-point / Q 格式)」的 FOC——把浮點改寫成整數縮放運算來避開沒有 FPU 的問題。M4 的真正好處有二:一是可以直接用「浮點 FOC」配 ARM 的 CMSIS-DSP 函式庫(內建轉換、PID、快速三角函數),開發與調參比手刻定點容易得多;二是時序餘裕與確定性更好,讓你能把 PWM / 迴圈頻率拉更高、抖動更低。所以選 M4 不是因為 M3「做不到」,而是因為 M4 讓浮點 FOC「又好寫又跑得準」。
FOC-ready 三大周邊,與 GD32 對應
除了核心,一顆 MCU 要「FOC-ready」還要看周邊三件事:一、進階(馬達控制)PWM 計時器——要有互補輸出(驅動半橋的上下臂)與可程式死區(dead-time,避免上下臂同時導通短路),最好還有故障 break 輸入做緊急關斷;二、快速 ADC——做相電流取樣,且要能被 PWM 計時器硬體觸發/同步,確保在開關週期裡正確時點取樣;三、類比——電流感測放大與過流保護(視設計可能需要外接運放/比較器)。對應到 GD32:M4 的 GD32F30x(GD32F303,最高 120MHz)與 GD32F4xx(GD32F405/F407,最高約 168MHz;F450 達 200MHz)都內建 FPU+DSP、兩顆 16-bit 進階計時器(三相 6 通道互補 PWM + 可程式死區)、以及最高三組 12-bit 2.6 MSPS 的 SAR ADC,且 ADC 可由進階/一般計時器事件觸發——正是 FOC 需要的「PWM 同步取樣」。(進階計時器的 break 保護與各料號的周邊數量,請以該料號的 datasheet / 使用者手冊為準;部分電流感測類比可能需外接。)
怎麼選 GD32
怎麼選 GD32:一般單顆 PMSM / 無刷馬達的 FOC 驅動 → 從 GD32F30x(GD32F303)起步,M4F、120MHz、進階計時器 + 2.6MSPS ADC,單馬達電流迴圈綽綽有餘,是 CP 值高的主流選擇;要更高效能(高速馬達、雙馬達、無感測器觀測器、同時跑更多控制與通訊)→ 上 GD32F4xx(GD32F407 168MHz / GD32F450 200MHz),同樣的 FOC 周邊但算力與記憶體更大。一個很實用的點:GD32F303 對 GD32F103 是向下腳位相容(pin-to-pin),所以你想把既有的 M3 GD32F103(或 STM32F103 級)馬達板升級成有 FPU+DSP 的真 M4F FOC 控制器,通常不必重畫 PCB。判斷原則:需要浮點 FOC、低迴圈抖動、或高 PWM 頻率 → 選 M4F(F30x 或 F4xx);只有在堅持定點 FOC 且 BOM 成本很緊時才留在 M3(F103)。傑聯特科技是 GigaDevice 授權代理商,GD32 馬達相關的 M4(F30x/F4xx)與 M3(F10x)全系列供應;歡迎提供你的馬達類型、控制方式(有/無感測器)、迴圈頻率與通訊需求,我們協助選型並回覆樣品、規格書與報價。
文中提及的產品
GD32F303 Arm Cortex-M4 主流 MCU
GD32F303 是 GigaDevice 主流 Arm Cortex-M4 MCU,主頻 120MHz(含 DSP/FPU/MPU),Flash 128KB~3MB、SRAM 32~96KB,具 3× 12-bit ADC、2× DAC、豐富計時器與 USB FS/CAN/SDIO。封裝 LQFP48/64/100/144,常作為 STM32F1 升級到 M4 或 STM32F303 等級的替代選擇。
GD32F407 Arm Cortex-M4 高效能 MCU
GD32F407 是 GigaDevice 高效能 32-bit MCU,採 Arm Cortex-M4 核心(含 FPU/DSP)、主頻 168MHz,Flash 最高 1MB、SRAM 達 192KB,整合 USB OTG(FS+HS)、10/100 Ethernet MAC 與 CAN。封裝對齊 STM32F407(LQFP100/144),常作為 STM32F407 等級的替代方案。
GD32F103 Arm Cortex-M3 MCU
GD32F103 是基於 Arm Cortex-M3 核心的主流型 32-bit MCU,主頻最高 108 MHz,與 STM32F103 腳位相容,方便快速替換。內建豐富周邊(USART/SPI/I²C/USB/CAN/ADC),廣泛應用於工業控制、馬達驅動與消費電子。