著者:根岸孝次
モータードライバとは、マイコンからの司令に基づきモーターに適切な電圧(電流)を供給する(※1)です。
マイコンを駆動するために使用している電源(マイコンについている3.3/5V、ロジック電源と呼ぶ)は大きな電流を供給することができません。供給できても最大1A程度です。しかし、モーターが十分な速度とトルクで回転するには、十分な電圧・電流を供給する必要があるので(当たり前)、ロジック電源とは別にパワー電源を用意(※2)して、それを使って回転させる必要があります。ロジック電源の電圧よりパワー電源の電圧のほうが高いので、マイコンが単純にデジタル出力を使ってモーターをON/OFFすることはできません。(やろうとすると、パワー側からロジック側に電流が流れて、最悪故障します。)モータードライバはこの問題を解決するモジュールです。
※1:1つの機能を持った完成済みの回路・基板のことを**モジュール**と呼ぶことが多いです。
※2:ロボカップジュニアでは、Li-Po(12V)を直接パワー電源として使って、パワー電源を降圧することでロジック電源(3.3/5V)を生成することがほとんどです。大人のロボカップでは、Li-Po(24V)を40数Vまで昇圧してパワー電源にする強強チームあるみたいです。 ## 回路について この資料では、ブラシ付きDCモーターを駆動することを想定した回路について扱います。ブラシレスDCモーターなどについて詳しく知りたい人は連絡してください。
まずは、MOSFETについて理解する必要があります。端的に言えば大電流を電気的に扱えるスイッチです。原理などについては興味があれば各自で調べてみてください。
MOSFETには「ゲート(Gate)」、「ドレイン(Drain)」、「ソース(Source)」という3つのピンがあります。ゲートにかかる電圧に応じて、ドレイン-ソース間が導通するかどうか決定されます。MOSFETの何がすごいかというと、ゲートにある程度の電圧かけて、ある程度の電流を供給できれば、ドレイン-ソース間に大電流を流すことができます。素晴らしい。(もちろん制限などはありますが)
MOSFETの中には、Nch MOSFETとPch MOSFET(※)の2つがあります。少し動作が異なるのでそれぞれ解説します。
※ Nchは「Nチャネル」、Pchは「Pチャネル」と読みます。MOSFETは「モスフェット」
今後の解説を楽にするために用語を定義しておきます。 aから見たbの電圧をVbaと描くことにします。ゲートをg、ドレインをd、ソースをsとかけば、一概にゲート電圧といってもVgsとVgdの2つがあります。今後、ゲート電圧と言えばVgsを指しているので混同しないように注意してください。 また、MOSFETがONになるためにはゲート電圧があらかじめ決められた電圧を超える必要があります。この電圧をしきい値電圧 Vth と呼びます。
頻繁に使うのがNch MOSFETです。基本的にモータードライバはこっちで作ってあります。単純にPch MOSFETよりも安価だからと聞きました。
Nchの場合、電流はドレインからソースに方向に流れます。逆は試したことが無いので知りませんが、スイッチングするのはドレインからソースの方向です。ON/OFFの条件を表にまとめました。
状態 | 条件 |
---|---|
ON | Vgs > Vth |
OFF | Vgs < Vth |
※ ゲート電圧は Vgs です。Vgdでは無いので注意してください。 ※ 一般的に、Vth > 0
次に、Pch MOSFETについて解説します。Pch MOSFETはなかなか使う機会がありません。実際、この資料を書いている本人がPch MOSFETを実際に使ったのは1回だけです。ロボットの電源スイッチとしてPch MOSFETを一度だけ使いました。
Pchの場合、電流はソースからドレインの方向に流れます。Nchとは逆方向です。ON/OFFの条件は表のとおりです。
状態 | 条件 |
---|---|
ON | Vgs < Vth |
OFF | Vgs > Vth |
※ 一般的に、Vth < 0
MOSFETの基本的な使い方を理解したところで、基本的なモータードライバの回路図を見ていきましょう。ブラシ付きDCモーターのモータードライバは以下のような4つのNch MOSFETをH型に並べた回路になっています。上下の2つのMOSFETをあわせてハーフブリッジ、4つのMOSFETをあわせてフルブリッジと呼びます。
上2つのMOSFETはパワー電源とモーターの各線をつなぐスイッチの役割があります。一方、下2つのMOSFETはグランドとモーターの各線をつなぐスイッチの役割があります。頭の良い高高生ならわかると思いますが、上2つのMOSFETのうち1つのMOSFETをONにし、それと対角線上にある下のMOSFETをONにすることで、モーターが回転します。別のMOSFETをONにすれば、電流が逆向きに流れるのでモーターは逆回転します。
右(左)2つのMOSFETを同時にONにしたらパワー電源とグラウンドがショートしてしまい非常に危険です。しかし、残念ながらモータードライバーではそういった自体が起こらないように、下側のMOSFETがONの際には、それに対応する上のMOSFETはONにできないよう制御されています。
以上のことを理解すれば、モーターの正回転、逆回転を切り替える方法はわかったと思います。次に、モーターの回転速度の調節の仕方を学んでいきましょう。回転速度の調節にはSMB方式とLAP方式があります。一般的なブログでは、前者が紹介されています。後者を紹介しているブログは殆ど見かけないです。一般的なモーターはSMB方式で回すのが良いです。ただし、高高にあるMAXONモーターだけはLAP方式のほうが良いと言われています。
マイコンがMOSFETを制御するときに出す信号(PWM)はデジタル信号です。一方で、モーターの回転速度がデジタルでは困ります。アナログで無くてはなりません。0rpm ~ 1000rpmのように、特定の範囲で制御できないと意味がありません。そこで、MOSFETがON(モーターが回転している)の時間とMOSFETがOFF(モーターが回転しない)の時間の比率を調節することで、擬似的に回転速度を調節します。高高生ならこれ以上解説する必要は無いと思います。
SMB方式はPWM信号の考え方の延長で理解できると思います。大体の人が思いつくやり方です。LAP方式のほうが少し奇抜です。LAP方式では、正回転と逆回転の比率によって回転速度を調節しています。モーターを回転させている間は、常にどこかのMOSFETがONになっていて、どのMOSFETをONにするかを切り替えることで速度を変えています。
状態 | 回転 |
---|---|
(正回転の時間) > (逆回転の時間) | 正回転 |
(正回転の時間) < (逆回転の時間) | 逆回転 |
(正回転の時間) = (逆回転の時間) | 停止(※1) |
下2つのMOSFETをショート | ブレーキ |
また、下2つのMOSFETを同時にONにすることでモーターの線がショートし、回転にものすごい大きな抵抗がかかります。これをショートブレーキと呼びます。ブレーキを利用したいときには、ショートブレーキを利用してください。※1の状態では、モーターには電流が流れ続けているのでモーターが非常に発熱し故障に繋がります。
理由は知らないのですが、LAP方式を利用する際には、PWM信号の周波数を高くして上げる必要があります。私のときには100kHzのPWM信号を利用していました。使用していたモータードライバの最大周波数が100kHzだったためです。流石に過剰だと思います。実は周波数を上げるとスイッチング損失が増えるのでちゃんと考えましょう。ただ、20kHzより低くすると人間の可聴域に入ってきてモーターが不愉快な音を立てる場合があります。
この制御方式では、常にモーターにかなりの電流が流れ続けます。SMB方式に比べて頭の悪いやり方です。モーターの発熱もかなりひどいです。バッテリーの消耗も激しくなります。しっかりと考えてからこの制御方式を利用してください。詳しいことはこのさいとにあるので意欲のある人は読んでみてください。
市販のモータードライバ Pololu G2ハイパワーモータードライバ 18v17を例に解説します。たくさんピンがありますが、モーターを制御するだけだったら、7つのピンで十分です。
DIRでモーターの回転方向を指定します。こちらのピンはデジタル信号(HIGH or LOW)で制御します。各状態(HIGH,LOW)と正回転、逆回転がどう対応するかはモーター依存なところもあるので1つ1つ確認する必要があります。
PWMでモーターの回転速度を制御します。ArduinoのanalogWriteでは、デフォルトでPWMのDuty比を0~255(8bit)で指定できます。どの値を使うかは色々試していい感じに決めてもらえば良いと思います。255とかでやるとモーターが焼き切れる可能性があるので、開発段階では100とかで十分です。全国大会で上位を目指すレベルまで来たら150以上にしてみると良いと思います。
モーターを回したいときには、PWMを常にHIGHにします。PWMをLOWにするとショートブレーキ状態になります。
回転方向と回転速度はDIRで制御します。DIRにPWM信号を入力してあげましょう。Duty比がちょうど中間(Arduinoのデフォルトであれば、127程度)でモーターが停止します。0と255で最大回転となります。こちらも色々試していい感じの速度を見つけてください。SMB方式より遅い速度で運用したほうが安全だと思います。発熱に最大限注意してください。