2022.12.26 2022.8.13 Coskx Lab
micro:bitなどのマイクロコンピュータで模型用小型モータ(DCブラシモータ,例えばマブチ130モータ)を駆動することを考えます。
よくあるチュートリアルの説明では,拡張機能を使ってプログラムし,ドライバ基板とモータを与えられたとおりに接続すれば,モータ駆動が出来ます。
このページはその舞台裏を見たい人のための解説です。
モータの制御で必要なことは,次の2つです。
(1)モータモータドライバというICを使ってモータの正転・逆転・停止を行います
(2)パルス幅変調(PWM,Pulse Width Modulation)を使って,見かけ上モータに加わる電圧を調整します
micro:bitなどのマイクロコンピュータは,端子からデジタル信号(電圧をHighにしたり,Lowにしたり)を出力して必要な動作をします。(micro:bitの場合,Highは約3.3V,Lowは約0Vです)
3.3Vの電圧が出てくるのなら,そのまま模型用小型モータ(DCブラシモータ,例えばマブチ130モータ)を駆動できそうですが,そのような接続をして試してはいけません。マイクロコンピュータが壊れます。
(マイクロコンピュタが出力できる電流は30mA程度しかありません。
小型モータは止まっているときには1Ω程度の抵抗として働くので,3.3Vをかけると3.3Aの電流が流れてしまいます。30mA<<3.3Aなので壊れてしまいます。)
モータドライバを使用するとこのようなことが起きないようにすることができます。
いきなりモータドライバの話ではなく,モータ駆動について順を追って説明します。
図のように電池とモータの間にスイッチを付ければ,モータを回したり止めたりすることができます。
図のようにスイッチをFET(NchPowerMOSFET)に置き換えれば,micro:bitの1つのピンから電圧信号を与えて,モータを回したり止めたりすることができます。
FETは,ゲート信号によりドレインからソースに多くの電流を流すことができます。
ゲートにかかる電圧が0Vのとき,ドレインからソースに電流は流れません。
ゲートにかかる電圧が5V(3.3V)のとき,ドレインからソースに大きな電流を流します。
ゲートに流れ込む電流は数μA程度で無視できます。
この動作から,FETは電圧制御のスイッチとして働きます。
FETは図のような形状のものが多いです。
FETをONにするゲート電圧はFETにより異なり,5V以上を使用するものが多いですが,3.3Vでも動作可能なFETもあります。
例えば,2SK2412,2SK3134,EKI04036,2SK4019 などは3.3Vで動作可能です。データシートで確認してください。
micro:bitでP0端子を使ったモータのON-OFFのプログラムは次のようになるでしょう。
このプログラムでは,ボタンAが押されている間P0に1を出力し,押されていない間P0に0を出力します。
プラグラムでの1,0は,端子では3.3V,0Vとして出力されます。
モータの正転・逆転は電池の極性を入れ替えれば出来ますが,電池の入れ替えをせずにスイッチだけでできるようにするには,4つのスイッチを使って図のような回路にします。
SW1とSW4をON,SW2とSW3をOFFにすると,電流は図のモータの左から右に流れます。
SW1とSW4をOFF,SW2とSW3をONにすると,電流は図のモータの右から左に流れます。
いくつかの組み合わせは次の表のようになります。
SW1 | SW2 | SW3 | SW4 | 電流状態 | モータの状態 |
---|---|---|---|---|---|
ON | OFF | OFF | ON | 正転通電 | 正転 |
OFF | ON | ON | OFF | 逆転通電 | 逆転 |
OFF | OFF | OFF | OFF | 絶縁 | 停止(フリー) |
OFF | ON | OFF | ON | ショート | 停止(ショートブレーキ) |
4つのスイッチを使った回路をそのまま4つのFETを使った回路に置き換えます。
4つのFETのゲート端子に3.3Vあるいは0Vを与えることによって,それぞれのFETをスイッチのようにON,OFFすることができます。
(FETにはNチャンネルのものとPチャンネルのものがあります。この図は全てNチャンネルFETを使用していますが,上側の2つをPチェンネルFETで構成することもあります。)
FET1 | FET2 | FET3 | FET4 | 電流状態 | モータの状態 |
---|---|---|---|---|---|
ON | OFF | OFF | ON | 正転通電 | 正転 |
OFF | ON | ON | OFF | 逆転通電 | 逆転 |
OFF | OFF | OFF | OFF | 絶縁 | 停止(フリー) |
OFF | ON | OFF | ON | ショート | 停止(ショートブレーキ) |
4つのFETが組み込まれたモータドライバICが有ります。
モータドライバICの役割は図の黄色着色部分です。
駆動用入力信号はIN1,IN2があり,モータ駆動用電源+ー接続用端子,モータ出力端子があります。
IN1,IN2にマイクロコンピュータなどの出力端子から,High(3.3V)あるいはLow(0V)を与えることによって,FETをON,OFFすることができ,所望のモータの状態にすることができますます。
IN1 | IN2 | FET1 | FET2 | FET3 | FET4 | 電流状態 | モータの状態 |
---|---|---|---|---|---|---|---|
High | Low | ON | OFF | OFF | ON | 正転通電 | 正転 |
Low | High | OFF | ON | ON | OFF | 逆転通電 | 逆転 |
Low | Low | OFF | OFF | OFF | OFF | 絶縁 | 停止(フリー) |
High | High | OFF | ON | OFF | ON | ショート | 停止(ショートブレーキ) |
次の図はモータドライバIC基板の例です。真ん中の黒い部分がモータドライバICです。
このモータドライバIC基板は1つのモータを駆動します。
モータドライバIC基板の中には2つのモータを駆動できるように2組の回路が組み込まれているものもあります。
AE-TB6612FNG |
モータに加える電圧を変化させると,モータの定常回転数を制御できます。
マイクロコンピュータの指令で,電圧を変化させるのは難しいため,マイクロコンピュータのモータ制御では,見かけの電圧を変化させるパルス幅変調方式が使われます。
図のような回路でスイッチを指でゆっくりとON-OFFさせると(例えば3秒間ON,3秒間OFFを繰り返す),モータは回転したり止まったりしるのがわかります。
しかし,高速にスイッチを指でON-OFFさせると(例えば0.1秒間ON,0.1秒間OFFを繰り返す),モータはスイッチ連続ONの場合よりゆっくりと連続回転します。モータはこの切替の速さに対応して回転したり止まったり出来ないからです。回転音を聞くと,脈動しているのがわかるかもしれません。
図のような回路ではマイクロコンピュータの端子からの信号でFETを高速にON-OFFさせることができます。
マイクロコンピュータではプログラムで端子の出力を制御できるので,1秒間に50回くらいのON-OFF動作は簡単すぎるくらいです。
20msec(0.02sec)ごとに1回のON-OFFをすること(1秒間に50回)を考えます。
micro:bitでは標準で20msecに1回のON-OFFするようになっています。(PWM周期=20msec,PWM周波数50Hz)
この速さでは,モータが回ったり止まったりすることは見えませんし,音を聞いてもわかりません。
端子をオシロスコープで観察するとパルス状の電圧が連続して出力されているのがわかります。
しかも,20msecのうち,15msecがONで,5msecがOFFのように制御することもできます。
時間にして75%がONになっていることになります。この時,電圧を測定してみると,電圧の平均値が測定されるので,最大電圧の75%が出力されているように見えます。
また,20msecのうち,5msecがONで,15msecがOFFのように制御することもできます。
時間にして25%がONになっていることになります。この時,電圧を測定してみると,電圧の平均値が測定されるので,最大電圧の25%が出力されているように見えます。
このように,連続パルスの幅を変化させて見かけの電圧を変化させる方法は,パルス幅変調(PWM,Pulse Width Modulation)と呼ばれます。
上記の例では,PWM周波数は50Hz,PWM周期は20msecになります。1周期中でONになっている時間割合はデューティ比と呼ばれます。上記の例ではデューティ比75%,25%です。
micro:bitでP0端子を使ったモータのPWM制御のプログラムは次のようになるでしょう。
このプログラムでは,ボタンAが押されている間P0にデューティ比75%のパルスを出力し,押されていない間P0にデューティ比0%のパルス(ずっと0)を出力します。
micro:bit Makecodeでは,PWM出力ことを「アナログ出力」(アナログで出力する)と呼んでいます。
デューティ比100%を出したかったら1023を指示します。デューティ比75%を出したかったら768を指示します。
PWM周期は20msecですが,変更する命令もあります。
デューティ比を75%,25%に設定したときのパルス出力のイメージは次のようになります。
また実際のmicro:bitの端子から出力されている信号を観察すると,1周期が20msecで,電圧Hは3.3V,電圧Lは0Vで出力されます。
次の例はデューティ比20%と60%の信号です。
次の図のような回路を使うと,プログラムで小型モータの制御が出来ます。
micro:bitのP0端子,P1端子をモータドライバICのIN1,IN2に接続しています。
この回路ではmicrobitのP0とP1の端子を使ってモータの制御をするようになっているので,プログラムもそのように作ります。
次のプログラムでは
ボタンAが押されている間はデューティ比75%で正転
ボタンBが押されている間はデューティ比75%で逆転
ボタンA・ボタンBの両方が押されている間は停止(ショートブレーキ)
どちらのボタンも押されていなかったら,停止(フリー)
となります。
その結果,ボタンAが押されている間は。IN1(P0)とIN2(P1)の端子の信号は次のようになります。
75%の通電区間(IN1:1,IN2:0)と25%の絶縁区間(IN1:0,IN2:0)があります。
3.3のプログラムを拡張機能を使って書き改めると次のようになります。
この拡張機能では,指令値は-100から100までの値をとります。
正転と逆転は,指令値の負号で指示しますので,フィードバック制御の時には便利です。
このプログラムによるモータの動作は3.3のプログラムと同じです。
initialize Driverで,モータ1をP0,P1端子で制御すると宣言します。
drive moterでモータ1を正転でデューティ比75で駆動,
drive moterでモータ1を逆転でデューティ比75で駆動,
などを指令出来ます。
汎用モータドライバ用拡張機能「nifty-motor-driver-microbit」の取り込み方
MakeCode画面で「拡張機能」を開き,
拡張機能の一覧の見えているところの検索ボックスで,
「https://github.com/healthywalk/nifty-motor-driver-microbit」のURLで検索すると
「nifty-motor-driver-microbit」が見つかるので,これを取り込ます。
画面左のメニューにNiftyMotorDriverが出てくるので,これを使ってプログラムします。
小型DCブラシモータの制御では拡張機能が用いられています。
拡張機能は何をしているのかを考えずにプログラムできますが,その舞台裏でなにをやっているのかを解説しました。
「3.3」で,PWMでモータ駆動するときの指令値パターンを次のように示しました。
通電区間と絶縁区間が交互に現れます。
この指令値パターンを通電・絶縁駆動とします。
これとは別な,指令値パターンがあります。
次のように通電区間とショート区間が交互に現れます。
この指令値パターンを通電・ショート駆動とします。
Sign Magnitude(SM) または Sign/Magnitude/Break(SMB)とも呼ばれます。
通電・絶縁駆動は,通電・ショート駆動に比べて同じデューティ比ならば,はやく回ります。
通電・ショート駆動は,回転を止めやすいため,位置決め制御になどによく使われています。
しかしmicro:bitのデフォルトPWM周波数が50Hzと低いため,この2つの駆動方式ではほとんど差がありません。
1kHzを超えるようなPWM周波数においては,中高デューティ比では,通電・絶縁駆動の方が高速に回転することができる半面,低デューティ比では電流が流れにくく,発生トルクも小さくなります。
通電・ショート駆動であれば,低デューティ比での発生トルクの低下は,通電・絶縁駆動より緩和されます。
上記の2つ以外に,正転駆動と逆転駆動を高速に繰り返し,50%:50%の駆動のとき停止する駆動方式(Locked Anti-Phase(LAP))もありますが,ここでは扱いません。
通電・ショート駆動を実現するMakecode拡張機能もあります。
MakeCode画面で「拡張機能」を開き,
拡張機能の一覧の見えているところの検索ボックスで,
「https://github.com/healthywalk/nifty-motor-driver-type2-microbit」のURLで検索すると
「nifty-motor-driver-type2-microbit」が見つかるので,これを取り込ます。
画面左のメニューにNiftyMotorDriver2が出てくるので,これを使ってプログラムします。
使用方法は通電・絶縁駆動と全く同じです。