🔧 阿川の電商水電行
Shopify 顧問、維護與客製化
💡
小任務 / 單次支援方案
單次處理 Shopify 修正/微調
⭐️
維護方案
每月 Shopify 技術支援 + 小修改 + 諮詢
🚀
專案建置
Shopify 功能導入、培訓 + 分階段交付

この記事可以學習的內容

您將瞭解如何自行控制無刷馬達。

如何轉動指南針?

某處有一個指南針。

スクリーンショット 2025-10-25 150356.png

看到這個指南針,您會想「我想將這個指南針順時針(反時針)旋轉……」。為了達成這一點,首先可以在指南針周圍產生一個合適方向的磁場。

那麼,產生什麼樣的磁場方向才能最有效地旋轉它呢?
例如,以下這樣的布置,如果放置了磁石(請允許我使用單極磁鐵),指南針的N和S會相互吸引,並總是試圖保持這個方向。

image.png

相反地,若將磁石的布置180°反轉,則會相互排斥,但無法確定轉動的方向,似乎也不會產生明顯的轉動力量。

image.png

考慮到以上情況,可以大致推測從初始狀態(吸引時的布置)順時針旋轉90°的配置似乎是最佳選擇。

image.png

從這張圖可以看到,磁石之間的吸引和排斥力量都以相同的大小,並在良好的方向上作用。

那麼,如何使指南針持續旋轉呢?
這個很簡單,只需像下一張圖那樣,始終在指南針針的方向上產生旋轉90°的磁場。

.gif

也就是說,只需將相對於指南針方向的磁場方向控制為90°。相對於指南針方向的座標系稱為 dq 座標系,如下所示。(看起來像是指南針的基座(正方形)在逆時針旋轉,但實際上是指南針的針在順時針旋轉。)

.gif

相對於指南針的基座進行的絕對座標系稱為 αβ 座標系,如下所示。

.gif

從 dq 座標系轉換到 αβ 座標系非常簡單,只需乘以指南針的角度旋轉矩陣即可。假設指南針的角度為 $\theta$,則可以寫成:

\begin{pmatrix} \alpha \\ \beta \end{pmatrix}
=
\begin{pmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{pmatrix}
\begin{pmatrix} d \\ q \end{pmatrix}

它的逆轉換也很簡單,只需乘以逆旋轉矩陣即可。

\begin{pmatrix} d \\ q \end{pmatrix}
=
\begin{pmatrix} \cos\theta & \sin\theta \\ -\sin\theta & \cos\theta \end{pmatrix}
\begin{pmatrix} \alpha \\ \beta \end{pmatrix}

使用三相線圈創建旋轉磁場

某處有一個線圈。
當電流朝右流過時,磁場也朝右方向產生。(磁場與電流成正比的法則。)

image.png

在這種情況下,磁場和電流的向量可以被視為相同。

那麼,假設有三個線圈按照以下方式配置,並且電流流過如下:(U為1[A],V為-0.5[A],W為-0.5[A])
那麼,整體會產生怎樣的磁場呢?

スクリーンショット 2025-10-25 220759.png

在這種情況下,各線圈產生的磁場向量可與各線圈的電流向量視為相同,因此整體磁場是這三個向量的合成。因此,它將產生右向的磁場。

那麼,我們想將這些關係表達成方程形式,但我們將使用 αβ 座標系。之前提到過 αβ 座標系是一個固定的絕對座標系。在無刷馬達中,線圈位於定子側且是固定的,因此在線圈的位置中,αβ 座標系的座標是固定的。

image.png

首先,定義 U、V、W 各線圈的固有向量(大小為1,表示線圈的方向向量)。

\vec{u}=\begin{pmatrix} 1 \\ 0 \end{pmatrix},\,
\vec{v}=\begin{pmatrix} -\frac{1}{2} \\ \frac{\sqrt{3}}{2} \end{pmatrix},\,
\vec{w}=\begin{pmatrix} -\frac{1}{2} \\ -\frac{\sqrt{3}}{2} \end{pmatrix}

這些向量的定義方式很簡單,查看以下圖就能理解。

image.png

實際上只是將線圈的方向轉換為向量。

若將各線圈的電流記為$I{u},\,I{v},\,I_{w}$,則磁場向量可以表示為:

I_{u}\cdot\vec{u}+I_{v}\cdot\vec{v}+I_{w}\cdot\vec{w}

由於電流和磁場的向量可以視為相同,因此如果要在αβ座標系中定義總電流向量,也可以用上述式子表示。不過,將U的電流定義為1[A]、V的電流為-0.5[A]、W的電流為-0.5[A]時,前面的係數需乘以2/3。
因此,在αβ座標系中的電流向量為:

\vec{I_{\alpha\beta}}=\frac{2}{3}(I_{u}\cdot\vec{u}+I_{v}\cdot\vec{v}+I_{w}\cdot\vec{w})

到此為止,我們以電流向量為例,但電壓同樣可以使用向量表示。

接下來,從αβ座標系轉換到UVW座標系。這是之前的逆轉換。這裡我們以電壓為例說明。或許有些人已經注意到,αβ座標系中的電壓向量和UVW各單位向量的內積等於UVW各輸出電壓(端子電壓)。接下來將具體式子展示如下。

V_{u}=\vec{V_{\alpha\beta}}\cdot\vec{u},\,
V_{v}=\vec{V_{\alpha\beta}}\cdot\vec{v},\,
V_{w}=\vec{V_{\alpha\beta}}\cdot\vec{w}

看看這個式子,再回顧上面的動畫,也會感受到確實內積的感覺(向量似乎被分解為各自線圈的方向分量的投影)。

方程整理

我們來整理一下到目前為止的方程,數據變量名定為$x$。

\vec{u}=\begin{pmatrix} 1 \\ 0 \end{pmatrix},\,
\vec{v}=\begin{pmatrix} -\frac{1}{2} \\ \frac{\sqrt{3}}{2} \end{pmatrix},\,
\vec{w}=\begin{pmatrix} -\frac{1}{2} \\ -\frac{\sqrt{3}}{2} \end{pmatrix}
  • 從 UVW 到 dq
\vec{x_{\alpha\beta}}=\frac{2}{3}(x_{u}\cdot\vec{u}+x_{v}\cdot\vec{v}+x_{w}\cdot\vec{w})
\vec{x_{dq}}
=
\begin{pmatrix} \cos\theta & \sin\theta \\ -\sin\theta & \cos\theta \end{pmatrix}
\vec{x_{\alpha\beta}}
  • 從 dq 到 UVW
\vec{x_{\alpha\beta}}
=
\begin{pmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{pmatrix}
\vec{x_{dq}}
x_{u}=\vec{x_{\alpha\beta}}\cdot\vec{u},\,
x_{v}=\vec{x_{\alpha\beta}}\cdot\vec{v},\,
x_{w}=\vec{x_{\alpha\beta}}\cdot\vec{w}

隨便旋轉無刷馬達(強制轉流)

這部分可能會變得有些困難,建議與 ChatGPT 合作。

首先,不使用編碼器來旋轉無刷馬達的方法(強制轉流)。
到目前為止,我們處理了 UVW 的電壓,這相當於 PWM 的佔空比。不過,這樣無法處理負電壓。因此,我們將佔空比=50%的時候設為基準電壓 $V=0$[V],然後在此基礎上將 PWM 在±50%的範圍內運動來控制馬達。

Duty=0.50+0.50\cdot V

在這個公式中,當V在-1.0至+1.0之間時,佔空比在0%至100%之間變化。
不過,實際上為了讀取電流以及進行門驅動等多種安全因素,需要限制最大佔空比,因此我們將公式寫作

Duty=0.50+0.40\cdot V

若要隨便旋轉無刷馬達,假設 $t$[s] 為時間,

\theta=2\pi t
\vec{V_{\alpha\beta}}=0.01\cdot\begin{pmatrix} \cos\theta \\ \sin\theta \end{pmatrix}
V_{u}=\vec{V_{\alpha\beta}}\cdot\vec{u},\,
V_{v}=\vec{V_{\alpha\beta}}\cdot\vec{v},\,
V_{w}=\vec{V_{\alpha\beta}}\cdot\vec{w}
Duty_{u}=0.50+0.40\cdot V_{u},\,
Duty_{v}=0.50+0.40\cdot V_{v},\,
Duty_{w}=0.50+0.40\cdot V_{w},\

這樣轉動時,無刷馬達會緩緩轉動。如果沒有轉動,那麼可能是輸出不足,請試著逐漸提高第二組方程中的係數0.01。

將公式應用於實際無刷馬達

首先,實際的無刷馬達不僅有三個定子線圈,轉子上的磁鐵也不止兩個。磁鐵通常是N和S交替排列的(或許有些使用哈爾巴赫排列的,但我實際上沒見過)。磁鐵的數量稱為極數(極數,Number of poles),而極數/2稱為對極數(Number of pole pairs)。

雖然定子線圈數目一般被簡單定義為對極數 x 3,但實際上並非如此。不過,在計算時可以不必關心線圈數量,只需考慮對極數即可。
常見的配置為,

磁鐵的數量 : 14
線圈的數量 : 12

對極數 : 7

這些小型至中型馬達如4250、5010、RoboMaster的M2006等,幾乎都是這個配置。

此時,對極數與三相交流的週期數匹配,即流入馬達一圈需要的週期數。要簡單計算對極數,只需隨意選取無刷馬達的UVW中的兩端子,將電流限制設為0.5[A]的穩定電源的+與-連接,再手動轉動(長時間勿如此操作)。您會覺得轉動時有阻力。您會發現轉一圈的過程中,轉子吸附的角度有若干個,而這些個數正是對極數。

之前提到,對極數對於三相交流的週期數及馬達轉一圈的關係。與向量控制有關的角度($\theta{e}$,在前面的公式中為$\theta$,這稱為電氣角)與馬達的實際角($\theta{m}$,通過編碼器獲得,這稱為機械角)之間的關係為:只需乘以對極數即可。例如,對極數為7的馬達,則可表示為:

\theta_{e}=7(\theta_{m} - \theta_{offset})

這表示當機械角轉一圈,電氣角將轉7圈。
在這裡,上述方程中有一個重要數值。對,就是 $\theta{offset}$。
求解 $\theta
{offset}$ 非常簡單,在先前強制轉流時將 $\theta=0$ 固定(或將電流限制設為0.5[A]的電源裝置的+連接到U,-連接到V和W)時的機械角 $\theta{m}$(編碼器的值)正是 $\theta{offset}$。這樣可以使編碼器與電氣角的0°對齊。

此外,操作編碼器時還需注意一點,那就是旋轉方向。請確保在強制轉流操控馬達時,編碼器的值是逐漸增加的。如果減少,那麼請反轉編碼器角度的符號,或進行無刷馬達的接線U和W的交換。

如何更好地旋轉無刷馬達

要旋轉無刷馬達,只需產生一個相對於轉子提前90°的磁場。因此,電氣角 $\theta_{e}$ 提前90°流過電流即可。因此,例如以$I$[A]的扭矩旋轉無刷馬達時,可以表示為:

\vec{I_{dq}}
=I\cdot\begin{pmatrix} \cos\frac{\pi}{2} \\ \sin\frac{\pi}{2} \end{pmatrix}
=\begin{pmatrix} 0 \\ I \end{pmatrix}

也就是說,將 dq 電流的 d 成分設為0[A],q 成分設為$I$[A]即可。
不過,我們先嘗試不進行電流控制的運行。因為在低速下,電壓大致與電流成正比,因此

\vec{V_{dq}}
=\begin{pmatrix} 0 \\ 0.05 \end{pmatrix}
\vec{V_{\alpha\beta}}
=
\begin{pmatrix} \cos\theta_e & -\sin\theta_e \\ \sin\theta_e & \cos\theta_e \end{pmatrix}
\vec{V_{dq}}
V_{u}=\vec{V_{\alpha\beta}}\cdot\vec{u},\,
V_{v}=\vec{V_{\alpha\beta}}\cdot\vec{v},\,
V_{w}=\vec{V_{\alpha\beta}}\cdot\vec{w}

這樣驅動,無刷馬達應該可以運行得相當穩定。如果沒能運行,則可能是輸出過弱,需逐漸提高第一組方程中的0.05。

完美地運行無刷馬達

現在來進行電流控制。只需對 dq 電流進行 PI 控制(PID中的 D 增益設為0的版本)。P增益若不是很小則可能危險。P增益初期可設為0,先調整I增益。I增益上調時不太容易出現失控,但必須設定I項的最大值以保障安全。此外,設定PI的輸入值最大錯誤值,以避免I項急劇增長,這樣的設計可能會有所幫助。最好是以20kHz以上的控制週期進行控制。此外,在高速時電流的噪音可能變得相當大,會發出可怕的聲音,因此務必設計一個可以迅速關閉電源的方法。在這種情況下,透過減小最大佔空比,可以抑制速度。請放棄高速操作的想法。

  • 完美運行無刷馬達時的控制流程(數式)
\vec{u}=\begin{pmatrix} 1 \\ 0 \end{pmatrix},\,
\vec{v}=\begin{pmatrix} -\frac{1}{2} \\ \frac{\sqrt{3}}{2} \end{pmatrix},\,
\vec{w}=\begin{pmatrix} -\frac{1}{2} \\ -\frac{\sqrt{3}}{2} \end{pmatrix}

\theta_{e}=N_{PolePairs}(\theta_{m} - \theta_{offset})
\vec{I_{\alpha\beta}}=\frac{2}{3}(I_{u}\cdot\vec{u}+I_{v}\cdot\vec{v}+I_{w}\cdot\vec{w})
\vec{I_{dq}}
=
\begin{pmatrix} \cos\theta_{e} & \sin\theta_{e} \\ -\sin\theta_{e} & \cos\theta_{e} \end{pmatrix}
\vec{I_{\alpha\beta}}
\vec{V_{dq}}
=\begin{pmatrix} PI(0-I_{d}) \\ PI(I_{target}-I_q) \end{pmatrix}
\vec{V_{\alpha\beta}}
=
\begin{pmatrix} \cos\theta_e & -\sin\theta_e \\ \sin\theta_e & \cos\theta_e \end{pmatrix}
\vec{V_{dq}}
V_{u}=\vec{V_{\alpha\beta}}\cdot\vec{u},\,
V_{v}=\vec{V_{\alpha\beta}}\cdot\vec{v},\,
V_{w}=\vec{V_{\alpha\beta}}\cdot\vec{w}

最後

無刷馬達的驅動器自製技術與有刷馬達並無太大差別(有刷馬達因噪聲大而相對困難,ESC可以小型化,因此在這方面接線可能會困難),然而在控制上存在一定的難度,顯得門檻較高。希望閱讀本文後,能使機器人工程師們的馬達選擇更加廣泛。

有關微控制器實現的文章(有很多待更正的地方)

.gif


原文出處:https://qiita.com/Doraemonjayo/items/37cc77e6d5a6aeb2694e


精選技術文章翻譯,幫助開發者持續吸收新知。

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
🏆 本月排行榜
🥇
站長阿川
📝28   💬4   ❤️7
840
🥈
我愛JS
📝2   💬8   ❤️2
113
🥉
御魂
💬1  
4
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次
🔧 阿川の電商水電行
Shopify 顧問、維護與客製化
💡
小任務 / 單次支援方案
單次處理 Shopify 修正/微調
⭐️
維護方案
每月 Shopify 技術支援 + 小修改 + 諮詢
🚀
專案建置
Shopify 功能導入、培訓 + 分階段交付