モータ制御の勉強をしていると、d軸とq軸という言葉が出てきます。
モータ制御のベクトル制御について調べていると、
- d軸電流
- q軸電流
- dq変換
- Park変換
- q軸電流でトルクを制御する
みたいな言葉が出てくると思います。
ただ、最初に見たときは、
「d軸とq軸って何?」
「U相、V相、W相とは違うの?」
「なぜわざわざdq軸に変換する必要があるの?」
と思う方も多いのではないでしょうか。
ぼく自身も、最初にd軸・q軸という言葉を見たときは、モータの中にそういう軸が実際に存在しているのかと思っていました。
しかし、d軸とq軸は、U相・V相・W相のような実際の配線ではありません。
簡単に言うと、モータを制御しやすくするために使う仮想的な座標軸です。
この記事では、モータ制御初心者の組み込みエンジニア向けに、d軸とq軸がどういうものなのか、また実際の制御でどのように使われているのかを整理していきます。
d軸とq軸とは何か?

まず、d軸とq軸を一言で説明すると、以下のようになります。
d軸とq軸とは、ロータの磁石の向きを基準にした回転座標軸です。
もう少し言うと、PMSMのロータには永久磁石が付いています。
この永久磁石のN極・S極が作る磁束の向きを基準にして、d軸とq軸を考えます。
- d軸:ロータの磁石が作る磁束の向き
- q軸:d軸から電気角で90度ずれた向き
ここで大事なのは、d軸とq軸はロータと一緒に回転するという点です。
モータが回転すると、ロータの磁石も一緒に回転します。
そのため、ロータ磁石の向きを基準にしているd軸も、ロータと一緒に回転します。
そして、q軸はそのd軸から90度ずれた方向なので、q軸も同じように回転します。
つまり、d軸とq軸は、モータのステータ側に固定された軸ではありません。
ロータ目線で見たときの座標軸だと思ってもらえればOKです。
d軸は磁束の向き
d軸は、ロータの永久磁石が作る磁束の向きです。
PMSMの場合、ロータには永久磁石があります。
永久磁石があるということは、ロータ自身が磁束を作っているということです。
この磁束の向きに合わせた軸がd軸になります。
イメージとしては、ロータのN極からS極に向かう磁石の向きを基準にした軸です。
そのため、d軸方向に電流を流すと、ロータ磁石が作る磁束に対して影響を与えることになります。
簡単に言うと、d軸電流は磁束に関係する電流です。
ここで初心者の方が混乱しやすいのは、
「d軸電流を流したら、モータのトルクが増えるのでは?」
という点です。
もちろん、モータの種類や制御方法によってはd軸電流もトルクに関係します。
ただ、最初の理解としては、
d軸電流は磁束方向の電流
と覚えるのが分かりやすいです。
q軸はトルクを出す向き
q軸は、d軸から90度ずれた向きです。
そして、モータ制御で特に重要になるのが、このq軸です。
なぜなら、q軸電流はトルクに大きく関係する電流だからです。
モータは、磁束と電流の相互作用によって回転力を発生します。
ロータ磁石の磁束と同じ方向に電流を流しても、ロータを回転させる力としては使いにくいです。
一方で、ロータ磁石の磁束に対して90度ずれた方向に電流を流すと、ロータを回そうとする力が発生しやすくなります。
この90度ずれた方向がq軸です。
そのため、初心者向けには、
q軸電流Iqを流すとトルクが出る
と理解してもらえればOKです。
実際の制御でも、トルクを増やしたいときはq軸電流指令値を大きくします。
たとえば、速度制御をしている場合、目標回転数に対して実回転数が低ければ、もっと加速させる必要があります。
そのとき、速度制御の出力としてq軸電流指令が作られます。
つまり、q軸電流は、モータにどれだけトルクを出させるかを決める重要な値になります。
なぜdq軸に変換するのか?
ここまでで、d軸とq軸の意味について説明しました。
ただ、ここで疑問になるのが、
「なぜわざわざdq軸に変換する必要があるの?」
ということです。
マイコンで実際に取得する電流は、基本的にはU相、V相、W相の電流です。
また、インバータで出力する電圧も、U相、V相、W相に対する電圧です。
それなら、U相、V相、W相のまま制御すれば良さそうに思えます。
しかし、三相交流のままだと、電流が常に正弦波のように変化します。
たとえば、モータが一定トルクで回っている場合でも、U相電流、V相電流、W相電流は時間とともに変化します。
制御したい値が常に変化していると、計算(PI制御など)が複雑になってしまうため、非常に扱いにくくなります。
そこで、ロータと一緒に回転するdq軸座標に変換します。
dq座標に変換すると、ロータから見た電流として扱うことができます。
ロータ目線で見ると、一定トルクを出しているときの電流は、ほぼ一定値として扱えるようになります。
つまり、三相交流として見るとグルグル変化している電流を、dq座標では直流のような値として扱えるようになります。
これが、dq変換を使う大きな理由です。
まとめると、以下のようになります。
- 三相電流のままだと、電流が常に変化して制御しにくい
- dq座標に変換すると、ロータ目線の電流になる
- ロータ目線では、電流を直流のように扱える
- その結果、PI制御がしやすくなる
ベクトル制御でのd軸・q軸の使い方
ベクトル制御では、三相電流をそのまま制御するのではなく、d軸電流とq軸電流に変換してから制御します。
大まかな流れは以下のようになります。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
U相、V相、W相の電流を取得 ↓ Clarke変換 ↓ α軸、β軸の電流に変換 ↓ Park変換 ↓ d軸、q軸の電流に変換 ↓ Id、Iq(d軸電流、q軸電流)をPI制御 ↓ Vd、Vq(d軸電圧、q軸電圧)を計算 ↓ 逆Park変換 ↓ 三相電圧指令に戻す ↓ PWMデューティを更新 |
このように、ベクトル制御では途中で一度dq座標に変換します。
そして、d軸電流Idとq軸電流Iqをそれぞれ別々に制御します。
制御としては、以下のようなイメージです。
- Idが目標値になるようにVdを調整する
- Iqが目標値になるようにVqを調整する
ここで出てくるVd、Vqは、d軸方向・q軸方向の電圧指令です。
ただし、インバータが実際に出力するのはU相、V相、W相の電圧です。
そのため、PI制御で求めたVd、Vqを、最終的には三相電圧指令に戻す必要があります。
このように、dq軸はあくまで制御演算をしやすくするための座標系になります。
d軸電流Idの役割
d軸電流Idは、磁束方向の電流です。
基本的なPMSM制御では、d軸電流指令値を0Aにすることが多いです。
なぜ0Aにするのかというと、PMSMにはロータに永久磁石があるためです。
永久磁石がすでに磁束を作っているので、低速から中速の通常運転では、d軸方向にわざわざ電流を流さなくてもトルクを出すことができます。
そのため、基本的にはd軸電流を0にして、q軸電流でトルクを制御する考え方になります。
ただし、d軸電流が常に不要というわけではありません。
d軸電流は、以下のような場面で重要になります。
- 弱め界磁制御
- IPMモータの高効率制御
- MTPA制御
弱め界磁制御で使う
モータが高速回転になると、逆起電圧が大きくなります。
逆起電圧とは、モータが回転することで発生する電圧のことです。
回転数が高くなるほど逆起電圧は大きくなり、モータを回転するためのインバータが出せる電圧の上限に近づいていきます。
そうなると、モータを回転するための電圧を印加できなくなるため、モータの回転数をそれ以上回転数を上げるのが難しくなります。
そこで、d軸方向に負の電流を流して、ロータ磁石の磁束を見かけ上弱めます。
これを弱め界磁制御と呼びます。
弱め界磁制御によって、逆起電圧を小さくすることができるので、モータに電圧をさらに印加することができるという仕組みです。
弱め界磁制御を行う場合、d軸電流指令は以下のように負の値になります。
|
1 |
Id_ref < 0 |
つまり、d軸電流は通常は0Aにすることが多いですが、高速回転領域では重要な制御対象になります。
IPMモータではd軸電流もトルクに関係する
PMSMには、大きく分けてSPMモータとIPMモータがあります。
- SPM:永久磁石がロータ表面に配置されているモータ
- IPM:永久磁石がロータ内部に埋め込まれているモータ
IPMモータでは、d軸方向とq軸方向でインダクタンスが異なります。
この性質を利用すると、永久磁石によるトルクだけでなく、リラクタンストルクも利用できます。
そのため、IPMモータでは、d軸電流をうまく使うことで効率よくトルクを出すことがあります。
初心者の段階では、まず以下のように覚えておけばOKです。
- SPMでは基本的にId=0で考えやすい
- IPMではIdも積極的に使うことがある
- 高速回転では弱め界磁制御でIdを負方向に流すことがある
q軸電流Iqの役割
q軸電流Iqは、トルクに関係する電流です。(「トルq(ク)のq軸」って覚えました。)
モータに大きなトルクを出したい場合、基本的にはq軸電流を大きくします。
たとえば、速度制御の場合は以下のような流れになります。
|
1 2 3 4 5 6 7 8 9 |
目標回転数 - 実回転数 ↓ 速度PI制御 ↓ q軸電流指令 Iq_ref ↓ 電流PI制御 ↓ q軸電圧指令 Vq_ref |
目標回転数に対して実回転数が低い場合、もっと加速させたいのでトルクが必要になります。
その結果、速度PI制御の出力としてIq_refが大きくなります。
そして、電流制御では実際のIqがIq_refに近づくようにVqを調整します。
つまり、q軸電流は、上位制御から見ればトルク指令に近い意味を持つ値になります。
もちろん、厳密にはモータ定数や極対数なども関係します。
ただ、最初の理解としては、
Iqを大きくするとトルクが大きくなる
と考えると分かりやすいです。
組み込みソフトではどう処理されるのか?
ここからは、組み込みソフトの観点で、d軸とq軸がどこで使われるのかを整理します。
モータ制御ソフトでは、だいたい以下のような周期処理の中でdq軸制御が行われます。
|
1 2 3 4 5 6 7 8 9 |
void MotorControl_Main(void) { /* 1. 相電流を取得 */ /* 2. Clarke変換 */ /* 3. Park変換 */ /* 4. d軸/q軸電流制御 */ /* 5. 逆Park変換 */ /* 6. PWMデューティ更新 */ } |
実際の現場コードでは、関数名や構造体名はプロジェクトによって違います。
ただ、やっていることは大きく変わりません。
1. 相電流を取得する
まず、AD変換によってU相、V相、W相の電流を取得します。
三相すべてを測定する場合もありますし、二相だけ測定して残り一相を計算で求める場合もあります。
三相電流は、理想的には以下の関係になります。
|
1 |
Iu + Iv + Iw = 0 |
そのため、二相分が分かれば残り一相を計算できます。
2. Clarke変換でαβ軸に変換する
次に、三相電流を一旦αβ軸に変換します。
αβ軸は、ステータ側に固定された二相の座標軸です。
三相のままだと扱いにくいため、まず二相の静止座標に変換します。
この処理がClarke変換です。
3. Park変換でdq軸に変換する
次に、αβ軸の電流をdq軸に変換します。
この処理がPark変換です。
Park変換では、ロータ角度を使います。
ロータ角度は、エンコーダ、レゾルバ、ホールセンサ、またはセンサレス推定などで求めます。
この角度がズレていると、d軸とq軸を正しく分離できません。
たとえば、本来q軸電流として扱いたい成分が、d軸側に混ざってしまうことがあります。
そのため、ロータ位置の精度はベクトル制御で非常に重要です。
4. IdとIqをPI制御する
dq変換によって、現在のd軸電流Idとq軸電流Iqが分かります。
次に、それぞれの指令値と比較します。
|
1 2 |
Id_err = Id_ref - Id Iq_err = Iq_ref - Iq |
この偏差をPI制御器に入力して、VdとVqを求めます。
|
1 2 |
Vd_ref = d軸PI制御の出力 Vq_ref = q軸PI制御の出力 |
ここで求めたVd、Vqは、d軸方向・q軸方向にどれだけ電圧を出すかを表しています。
5. 逆変換して三相電圧指令に戻す
Vd、Vqを求めても、そのままではインバータに出力できません。
インバータが出力するのは、U相、V相、W相の電圧だからです。
そのため、Vd、Vqを逆Park変換でαβ軸に戻します。
そして、最終的にU相、V相、W相の電圧指令を作ります。
6. PWMデューティを更新する
三相電圧指令が求まったら、それをPWMデューティに変換します。
これによって、インバータのスイッチングが変わり、モータに流れる電流が制御されます。
d軸・q軸を理解すると何が嬉しいのか?
最後に、現場レベルの話をします。
d軸とq軸は、モータ制御の業務やインバータ制御の業務をしていると、必ず目にする用語かなと思います。
d軸とq軸を理解することで、モータ制御の見通しがかなり良くなり、設計書やソースコードの理解が深まります。
ぼくは、d軸q軸を知らない状態でモータ制御の現場に入ったのですが、ソースコードの流れや処理が全然ついていけず、理解に苦しんでいました。
そして自分でモータ制御のことを勉強し、d軸とq軸について理解をして、改めてソースコードを見てみると、理解がすごく進みました。
「ここでd軸とq軸を求めているのか。ということは、ここでU相、V相、W相の電流値を取っているはず。。あ、やっぱり取ってた。」
「ここでd軸とq軸を求めているということは、次の関数ではPWM制御周りの処理をしているはず。。やっぱりそうだ!」
という感じで、一連の流れを理解することができました。
このように、d軸・q軸は単なる理論ではなく、実際の組み込みソフトの理解にも直結します。
そして、理解すると一気におもしろくなります。
なのでぜひ、d軸とq軸のことや、処理の流れは理解してほしいなと思います。
初心者向けにざっくり整理
ここまでの内容を、初心者向けにざっくり整理します。
| 項目 | 意味 |
|---|---|
| d軸 | ロータ磁石の磁束方向 |
| q軸 | d軸から90度ずれた方向 |
| Id | 磁束に関係する電流 |
| Iq | トルクに関係する電流 |
| dq変換 | 三相交流を制御しやすい回転座標に変換する処理 |
| ベクトル制御 | IdとIqを分けて制御するモータ制御方式 |
特に最初は、以下の3つを押さえておけば良いと思います。
- d軸は磁束方向
- q軸はトルク方向
- ベクトル制御ではIdとIqに分けてPI制御する
最後に
今回は、モータ制御で出てくるd軸とq軸について整理しました。
d軸とq軸は、最初に聞くとかなり分かりにくい言葉だと思います。
実際のモータにd軸端子やq軸端子があるわけではないので、イメージしづらいのも当然です。
ただ、考え方としてはそこまで難しくありません。
d軸はロータ磁石の磁束方向、q軸はそこから90度ずれたトルク方向です。
そして、三相交流のままだと制御しにくいため、dq座標に変換して、IdとIqを直流のような値として扱います。
ベクトル制御では、このIdとIqをPI制御することで、モータの磁束とトルクを分けて制御しています。
初心者の方は、まず以下のイメージで覚えておくと良いです。
|
1 2 |
Id:磁束に関係する電流 Iq:トルクに関係する電流 |
この考え方が分かると、ベクトル制御、弱め界磁制御、MTPA制御、電流制御、PWM制御などの内容が少しずつつながってきます。
モータ制御は最初に出てくる用語が難しいですが、一つずつ整理していけば必ず理解できます。
この記事が、d軸・q軸を理解するきっかけになれば嬉しいです。

