micro:bit Makecode モータを駆動する舞台裏

2022.12.26 2022.8.13 Coskx Lab  

1 はじめに(どのような人向けの記事か)

micro:bitなどのマイクロコンピュータで模型用小型モータ(DCブラシモータ,例えばマブチ130モータ)を駆動することを考えます。
よくあるチュートリアルの説明では,拡張機能を使ってプログラムし,ドライバ基板とモータを与えられたとおりに接続すれば,モータ駆動が出来ます。
このページはその舞台裏を見たい人のための解説です。
モータの制御で必要なことは,次の2つです。
(1)モータモータドライバというICを使ってモータの正転・逆転・停止を行います
(2)パルス幅変調(PWM,Pulse Width Modulation)を使って,見かけ上モータに加わる電圧を調整します

2 モータドライバ

micro:bitなどのマイクロコンピュータは,端子からデジタル信号(電圧をHighにしたり,Lowにしたり)を出力して必要な動作をします。(micro:bitの場合,Highは約3.3V,Lowは約0Vです)
3.3Vの電圧が出てくるのなら,そのまま模型用小型モータ(DCブラシモータ,例えばマブチ130モータ)を駆動できそうですが,そのような接続をして試してはいけません。マイクロコンピュータが壊れます。
(マイクロコンピュタが出力できる電流は30mA程度しかありません。 小型モータは止まっているときには1Ω程度の抵抗として働くので,3.3Vをかけると3.3Aの電流が流れてしまいます。30mA<<3.3Aなので壊れてしまいます。)
モータドライバを使用するとこのようなことが起きないようにすることができます。 いきなりモータドライバの話ではなく,モータ駆動について順を追って説明します。

2.1 モータのスイッチ制御

図のように電池とモータの間にスイッチを付ければ,モータを回したり止めたりすることができます。



2.2 モータのFET制御

図のようにスイッチを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として出力されます。



2.3 4つのスイッチでモータの正転・逆転・停止(フリー)・ショートブレーキ

モータの正転・逆転は電池の極性を入れ替えれば出来ますが,電池の入れ替えをせずにスイッチだけでできるようにするには,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 ショート 停止(ショートブレーキ)

「停止(フリー)」は,モータ配線がどこにも繋がっていない状態です。正転または逆転の状態から停止すると,惰性でしばらく回転します。

「停止(ショートブレーキ)」では,スイッチをたどるとモータの配線が短絡(ショート)の状態になっています。
正転または逆転の状態から停止すると,急速に回転が止まります。
モータが発電機となり,発生した電流がGND経由で流れ,モータ内部抵抗で発熱します。
回転の運動エネルギを熱エネルギとして捨てるため,はやく止まる動作になります。
モータが止まっている状態では,ブレーキ効果は有りません。
(減速機・車輪付きのモータで,車輪を手で回して見てください。モータの2つの端子をショートしたときと,何もつながないときを比べると,ショートブレーキを実感できます。)

2.4 4つのFETでモータの正転・逆転・停止(フリー)・ショートブレーキ

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には寄生ダイオード効果があり,ソースからドレインに向けてはいつでも電流を流すことができます。この効果のおかげで,ショートブレーキの動作が可能となっています。4つのFETの動作はもう少し複雑で,特にFET1,FET3のゲート信号はもう一工夫必要ですが,ここでは触れません。)

2.5 モータドライバICでモータの正転・逆転・停止(フリー)・ショートブレーキ

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ではダイオードが組み込まれています。(下図では,回路動作を説明するため寄生ダイオードが省略せずに描かれています。)このモータドライバでは,上の2つはPchMOSFETで下の2つはNchMOSFETとして描かれています。
停止(フリー)のときは,ダイオードを経由して電源側に電流を流すことができますが,モータを流れる電流は0になります。
停止(ショートブレーキ)のときは,ダイオードの働きにより,モータ端子がショートする状態になります。



小型DCモータ用のモータドライバICは小さくて扱いにくいので,モータドライバICの端子を引き出して,必要な電子部品も加えて,モータドライバIC基板として出回っています。
表に示したようにFETの状態組み合わせは4つなので,入力端子はIN1,IN2の2つあれば十分ですが,それ以外の機能を増やした製品では入力端子が2本以上あるものもあります。
また,モータドライバIC基板には,論理回路用の電源を与え,共通のGND(グランド)も与える端子も有ります。 製品のデータシートを見ると,各端子の役割,電圧制限,電流制限などの使いかたがわかります。

2.6 モータドライバICの例

次の図はモータドライバIC基板の例です。真ん中の黒い部分がモータドライバICです。
このモータドライバIC基板は1つのモータを駆動します。



モータドライバIC基板の中には2つのモータを駆動できるように2組の回路が組み込まれているものもあります。

AE-TB6612FNG

3 パルス幅変調(Pulse Width Modulation)

モータに加える電圧を変化させると,モータの定常回転数を制御できます。
マイクロコンピュータの指令で,電圧を変化させるのは難しいため,マイクロコンピュータのモータ制御では,見かけの電圧を変化させるパルス幅変調方式が使われます。

3.1 スイッチによるONOFF動作

図のような回路でスイッチを指でゆっくりとON-OFFさせると(例えば3秒間ON,3秒間OFFを繰り返す),モータは回転したり止まったりしるのがわかります。 しかし,高速にスイッチを指でON-OFFさせると(例えば0.1秒間ON,0.1秒間OFFを繰り返す),モータはスイッチ連続ONの場合よりゆっくりと連続回転します。モータはこの切替の速さに対応して回転したり止まったり出来ないからです。回転音を聞くと,脈動しているのがわかるかもしれません。



3.2 FETによるONOFF動作

図のような回路ではマイクロコンピュータの端子からの信号で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%の信号です。





3.3 micro:bitとモータドライバICによる小型モータの制御

次の図のような回路を使うと,プログラムで小型モータの制御が出来ます。
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.4 拡張機能の利用(micro:bitとモータドライバICによる小型モータの制御)

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が出てくるので,これを使ってプログラムします。



4 まとめ

小型DCブラシモータの制御では拡張機能が用いられています。
拡張機能は何をしているのかを考えずにプログラムできますが,その舞台裏でなにをやっているのかを解説しました。


補足1 2つの指令値パターン

「3.3」で,PWMでモータ駆動するときの指令値パターンを次のように示しました。
通電区間と絶縁区間が交互に現れます。
この指令値パターンを通電・絶縁駆動とします。



これとは別な,指令値パターンがあります。
次のように通電区間とショート区間が交互に現れます。
この指令値パターンを通電・ショート駆動とします。
Sign Magnitude(SM) または Sign/Magnitude/Break(SMB)とも呼ばれます。



通電・絶縁駆動は,通電・ショート駆動に比べて同じデューティ比ならば,はやく回ります。
通電・ショート駆動は,回転を止めやすいため,位置決め制御になどによく使われています。
しかしmicro:bitのデフォルトPWM周波数が50Hzと低いため,この2つの駆動方式ではほとんど差がありません。

1kHzを超えるようなPWM周波数においては,中高デューティ比では,通電・絶縁駆動の方が高速に回転することができる半面,低デューティ比では電流が流れにくく,発生トルクも小さくなります。
通電・ショート駆動であれば,低デューティ比での発生トルクの低下は,通電・絶縁駆動より緩和されます。

上記の2つ以外に,正転駆動と逆転駆動を高速に繰り返し,50%:50%の駆動のとき停止する駆動方式(Locked Anti-Phase(LAP))もありますが,ここでは扱いません。

補足2 通電・ショート駆動の拡張機能

通電・ショート駆動を実現するMakecode拡張機能もあります。
MakeCode画面で「拡張機能」を開き,
拡張機能の一覧の見えているところの検索ボックスで,
「https://github.com/healthywalk/nifty-motor-driver-type2-microbit」のURLで検索すると
「nifty-motor-driver-type2-microbit」が見つかるので,これを取り込ます。
画面左のメニューにNiftyMotorDriver2が出てくるので,これを使ってプログラムします。



使用方法は通電・絶縁駆動と全く同じです。