市販の組み立てキットを利用して、「マイクロマウス」の開発を進める北上くんとえみちゃん。サンプルのソースコードに頼らず、オリジナルプログラムでマイクロマウスを走らせようと奮闘中だ。今回は、いよいよモーター制御に取り掛かる!!
組み込み技術者に要求される要素が“ギュッ”と詰まった「マイクロマウス」。北上くんと新入社員のえみちゃんは、スキルアップを兼ねてマイクロマウスを開発中です。これまで、えみちゃんは北上くんの指導を受けながら、LEDやブザーの制御、A/D変換、シリアル通信といったマイコン制御の基礎を学んできました(前回の記事へ)。
――ピンポーン!(チャイムの音)
こんにちはー!!
やぁ、えみちゃん。
センパイ、今日は「モーター」を回すんですよね!
うん。マイクロマウスを「前進」「停止」「旋回」させるプログラムを作っていくよ。
やっと、ここまできたーって感じがしますね。
ワタシ、マイクロマウスがちゃんと走るか、今からドキドキしてますよぉ〜。
実際にモーターを制御するプログラムを組んでみると、「階層構造化って便利だな〜」ってあらためて実感できると思うよ!
そうなんですかぁ〜。楽しみです!!
よし! じゃあ、始めようか。
「モーター」といっても、さまざまな種類があります。「ACモーター」「DCモーター」「ギアドモーター」「超音波モーター」「サーボモーター」「ステッピングモーター」など……。サイズも携帯電話機に内蔵されている小さなものから、エレベーターを動かす巨大なものまで大小さまざまです。これだけの種類とサイズがあるのは、モーターが私たちの生活になくてはならないものだからです。ちなみに、高級自動車には100個以上のモーターが搭載されているそうです。目に見えないところで、たくさんのモーターが動いているのですね。
それぞれのモーターには特徴があり、用途に応じて使い分けられています。マイクロマウス競技会でも30年以上ある歴史の中で、使用されるモーターが時代とともに移り変わってきました。
現在は、エンコーダー付きのDCモーターが容易に入手できるようになりましたので、マイクロマウス競技のトップレベルにいる参加者たちは、DCモーターを採用しています。DCモーターには、小型・軽量で起動トルクが大きいという利点があります。しかし、加速にはPWM(Pulse Width Modulation)制御が必須です。また、正確な距離を走らせるにはエンコーダーも必要になるため、初心者が扱うにはハードルが高いかもしれません。
本稿で使用しているマイクロマウスの市販組み立てキット「Pi:Co Classic」に搭載されているのは、ステッピングモーターです。ステッピングモーターは、回転速度と移動距離をプログラムで指示できるので、初心者にも扱いやすいのが利点です。
プログラミングの解説に入る前に、ステッピングモーターの動作原理を簡単に紹介しておきます。
ステッピングモーターは、電源を接続するだけでは回転しません。モーターを駆動させるためには、回転速度や回転角度を決めるパルスを発信し、モーターの巻き線に流す電流を順次切り替える駆動回路が必要です。Pi:Co Classicでは、この駆動回路部分にモータードライバICを使っています。
画像1は、ステッピングモーターの内部構造のイメージ図です。ステータ(固定子)のコイルに電流を流して磁界を発生させ(これを「励磁(れいじ)」という)、永久磁石のロータ(回転子)を回転させます。ステータに電流を流す順番のことを「励磁方式」と呼びます。励磁方式は、1相、2相、1-2相励磁などがあります(表1)。Pi:Co Classicは、回路設計により1-2相励磁に設定されています。
今回は、ステッピングモーターを回して、マイクロマウスを「前進」「停止」「旋回」させるプログラムを作成します。画像1のように、ステッピングモーターは、1ステップごとしか動きません。間断なくパルスを出力しているので、モーターが連続して回っているように見えるわけです。1ステップでどれだけ進むかが確定しているので、迷路の1区画(180mm)を正確に走らせることができます。
パルスはMTUから出力され、出力間隔を短くするとスピードが上がります。パルスを出力した回数をカウントするには、MTUの割り込みを使います。
Pi:Co Classicに搭載されているステッピングモーター(KH39EM-801)のデータシートを読むと、標準仕様のステップ角は1.8度になっています。1-2層励磁で使用しているため、1ステップは0.9度になります。タイヤの直径が48mm、トレッド幅が64mm、迷路1区画の長さは180mmです。これらの物理データから、Pi:Co Classicが迷路内を走行し、旋回するために必要なパラメータが計算で求まります(ソースコード1)。
//Pi:Co Classicの物理的なパラメータ #define TIRE_DIAMETER 48.0 //タイヤの直径(mm)=48.0mm #define TIRE_CIRCUIT (PI * TIRE_DIAMETER) //タイヤの円周(mm)≒150.80mm #define TREAD_WIDTH 64.0 //トレッド幅(mm)=64.0mm #define TREAD_CIRCUIT (TREAD_WIDTH * PI) //360度旋回時にタイヤが動く距離(mm)≒201.06mm #define STEP_DEGREE (1.8 / 2.0) //ステッピングモーター(1-2相励磁)のステップ角(度/step) #define STEP_LENGTH (TIRE_CIRCUIT * STEP_DEGREE / 360.0) //1ステップで進む距離(mm)≒0.377mm //迷路のパラメータ #define BLOCK_LENGTH 180.0 //1区画=180mm //定数定義 #define PI 3.14159265358979 //円周率π //モーターMTU発振数 #define MTU_MTR_CLOCK 6000000 //モーター用MTUの発振数
マイクロマウスに搭載されているステッピングモーターの仕組みと、物理パラメータを理解したところで、いつものように、プログラミングに必要な情報をデータシートでチェックしておきましょう(表2、画像2、画像3)。
PB5に励磁のON/OFFを出力。PE10とPE9にはCW/CCW(モーターの正転/逆転)が、PE12とPE8にはMTUからのパルスが出力されます。
参考記事: | |
---|---|
⇒ | ステッピングモーターの仕組みと制御のコツ |
自動車に100個もモーターが入ってるんですねぇ〜。知りませんでしたよ。
えーと、ワイパーとパワーウィンドウと……。う〜ん、100個も思い付かないや(テヘッ)。
……。
ちなみにケータイの場合、どこに使われているか分かる?
ケータイですか!? え〜と……。
ほら、ブルブル震えることがあるでしょ!
あっ、マナーモード!?
そう! あれは、小型の振動モーターを使っているんだ。
シャフトの先端に重心をずらした重りを取り付けて、振動を発生させているんだよ。
へぇ〜、モーターにもいろいろな使い方があるんですね。
うん。普通はモーターの振動を抑える工夫をするんだけど、それを逆手に取ったアイデアといえるね。
面白〜い。組み込みに興味を持つと世の中が変わって見えますね!
そうだね〜。
じゃあ、そろそろステッピングモーターを動かすプログラムを書いてみようか!
はいっ!
Copyright © ITmedia, Inc. All Rights Reserved.