私は、小中学生にプログラミングなどを教えるボランティアグループのメンバーになっています。
先日、「マイクロビットロボカー」をつくる小学生向けワークショップを実施しました(記事は こちら)。
モータードライバ搭載のマイクロビット拡張ボード「KS4033」やギア付きモーターなどを組み合わせ、マイクロビットからの制御で走らせることができる車です。
今回のワークショップで生徒からの質問が多かったのは、「モーターに与える電圧」についてでした。
以前、この拡張ボード「KS4033」に単四電池4本を取り付けたときの、モーター電圧を調べたことがあります(記事は こちら)。
「KS4033」ではモーター制御にPWM信号を使うことができるので、マイクロビットからのアナログ出力の値を調整することでモーター電圧を変動させることができます。
この時の調査では、アナログ出力値を250〜300程度にすると、モーター電圧が2.8V〜3V程度になりました。一般的な工作用モーターは動作電圧が3V程度であることが多いことから、今回のワークショップでも、アナログ出力値を300程度にするよう指示していました。
ただ、今回ロボカーに用いたギア付きモーターは、動作電圧範囲が「3V〜6V」となっています。マイクロビットのアナログ出力値を300にするとモーターに印加される電圧は動作下限の3V程度となり、モーターの回転が遅く、ロボカーの動きもやや緩慢になっていました。
ロボカーをキビキビ動かしたいため、このマイクロビットからの「アナログ出力値」をどのぐらいまで上げてよいか?というのが生徒からの質問です。
モーターの動作範囲は最大6Vなので、アナログ出力値を最大(1023)まで上げても大丈夫ではありますが、今回改めて、マイクロビットロボカーとまったく同じ回路構成にしたときのアナログ出力値とモーター電圧の関係を調査してみることにしました。
拡張ボード「KS4033」に、単四電池4本用電池ボックスとギア付きモーター2個を取り付けます。電池ボックスには単四アルカリ乾電池4本を入れておきます(というか、実際にはマイクロビットロボカーをそのまま使って実験しました)。

実は、この拡張ボード「KS4033」に搭載されているモータードライバ「DRV8833」では、一方の入力端子(例えばxIN1)にPWM信号を入れるとき、もう一方の入力端子(例えばxIN2)に「0」「1」のいずれを入力することも可能です。


PWM信号では「0」と「1」が高速で切り替わりますので、
- xIN1=PWM, xIN2=0 → xOUT1=Z, xOUT2=Z と xOUT1=H, xOUT2=L が切り替わり
- xIN1=PWM, xIN2=1 → xOUT1=L, xOUT2=H と xOUT1=L, xOUT2=L が切り替わり
のようになり、両者では振る舞いが異なります。
以前の調査では「xIN2=0」にしていましたが、今回は「xIN2=0」と「xIN2=1」の両方について調べてみようと思います。
プログラムはこちらです。

「モーターA」がモーター電圧測定対象です。
モーターAのIN1(P12)のアナログ値を0〜1023の範囲(128ピッチ)で変動させ、それぞれのアナログ値のときのモーター電圧をテスターで測定します。
なお、「モーターB」の回転速度によって「モーターA」のモーター電圧が影響を受けないかどうかを確認するために、モーターBのIN1(P15)のアナログ値も変動させています。
ボタンAを押すたびに、モータAのIN2(P13)、モータBのIN2(P16)がともに「0」と「1」に切り替わります。
このプログラムをマイクロビットに書き込み、モーターを動作させた状態で、まずは電池の出力電圧(VM)を測定しました。
その結果、ふたつのモーターが共に停止している状態で6.0V程度、ふたつのモーターが共に最高速で回転している状態で5.7V程度となりました。高負荷の時に若干電圧が下がっており想定どおりの結果です。
次に、モーターAのモーター電圧(A1-A2間電圧)を測定しました。
まず、「モーターB」の回転速度による「モーターA」のモーター電圧への影響ですが、モーターBの回転速度によらずモーターAの電圧はほぼ一定でした。
IN1のアナログ値を変動させたときのモーター電圧は以下のようになりました。

「xIN2=0」にしたとき(青の線)は、電源電圧出力とオープン状態が交互に発生するため、アナログ値とモーター電圧の関係が線形になっていませんが、「xIN2=1」にしたとき(橙の線)は、電源電圧出力と0V出力が交互に発生するため、アナログ値とモーター電圧の関係がほぼ線形になっています。
この拡張ボードでモータードライバ制御にPWM信号を使う場合、出力のモーター電圧がどのぐらいになるのかをより簡単に推定したいのであれば、もう一方の入力端子を「0」固定するよりも「1」固定する方がよいかもしれません。
なお、私がマイクロビットの使い方を習得するのにあたっては、以下の書籍を参考にさせていただきました。
初心者向けから、比較的高度なものまで、さまざまな情報が記載されているだけでなく、子供向けの作例も多数掲載されていますので、「プログラミング教育」のための題材さがしなどにもおすすめです。