行け!! マイクロマウス! ステッピングモーターで前進だマイクロマウスで始める組み込み開発入門(12)(1/3 ページ)

市販の組み立てキットを利用して、「マイクロマウス」の開発を進める北上くんとえみちゃん。サンプルのソースコードに頼らず、オリジナルプログラムでマイクロマウスを走らせようと奮闘中だ。今回は、いよいよモーター制御に取り掛かる!!

» 2013年04月04日 09時30分 公開
[三月兎,MONOist]

前回までのあらすじ

 組み込み技術者に要求される要素が“ギュッ”と詰まった「マイクロマウス」。北上くんと新入社員のえみちゃんは、スキルアップを兼ねてマイクロマウスを開発中です。これまで、えみちゃんは北上くんの指導を受けながら、LEDやブザーの制御、A/D変換、シリアル通信といったマイコン制御の基礎を学んできました(前回の記事へ)。


本連載の登場人物

北上 篤人(きたがみ あつと)
26歳、男性。次期プロジェクトリーダーとして期待されている(と、本人は思っている)。専門は、ソフトウェア開発。電気回路やハードウェアに苦手意識を持っていて、いつか克服したいと考えている。

物江 えみ(ものえ えみ)
22歳、女性。この4月に入社したばかりの新入社員。C言語は大学の授業で学んだ程度なので、仕事についていけるかどうか不安を抱えている。性格は明るく、好奇心旺盛。早く一人前になりたいという強い熱意を持っている(ようだ)。



ステッピングモーターの原理

――ピンポーン!(チャイムの音)

えみ

こんにちはー!!


北上

やぁ、えみちゃん。


えみ

センパイ、今日は「モーター」を回すんですよね!


北上

うん。マイクロマウスを「前進」「停止」「旋回」させるプログラムを作っていくよ。


えみ

やっと、ここまできたーって感じがしますね。

ワタシ、マイクロマウスがちゃんと走るか、今からドキドキしてますよぉ〜。


北上

実際にモーターを制御するプログラムを組んでみると、「階層構造化って便利だな〜」ってあらためて実感できると思うよ!


えみ

そうなんですかぁ〜。楽しみです!!


北上

よし! じゃあ、始めようか。



 「モーター」といっても、さまざまな種類があります。「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-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の発振数
ソースコード1 Pi:Co Classicが迷路内を走行するための物理的パラメータ(「Ctrl.h」に記述する)

 マイクロマウスに搭載されているステッピングモーターの仕組みと、物理パラメータを理解したところで、いつものように、プログラミングに必要な情報をデータシートでチェックしておきましょう(表2画像2画像3)。

基板ポート一覧 表2 基板ポート一覧(※Pi:Co Classic 取扱説明書_ver1.08.pdfより抜粋)
STK-7125回路図のモータードライバ部分 画像2 STK-7125回路図のモータードライバ部分
モータードライバ回路 画像3 モータードライバ回路【※画像クリックで拡大表示】

 PB5に励磁のON/OFFを出力。PE10とPE9にはCW/CCW(モーターの正転/逆転)が、PE12とPE8にはMTUからのパルスが出力されます。


えみ

自動車に100個もモーターが入ってるんですねぇ〜。知りませんでしたよ。

えーと、ワイパーとパワーウィンドウと……。う〜ん、100個も思い付かないや(テヘッ)。


北上

……。

ちなみにケータイの場合、どこに使われているか分かる?


えみ

ケータイですか!? え〜と……。


北上

ほら、ブルブル震えることがあるでしょ!


えみ

あっ、マナーモード!?


北上

そう! あれは、小型の振動モーターを使っているんだ。

シャフトの先端に重心をずらした重りを取り付けて、振動を発生させているんだよ。


えみ

へぇ〜、モーターにもいろいろな使い方があるんですね。


北上

うん。普通はモーターの振動を抑える工夫をするんだけど、それを逆手に取ったアイデアといえるね。


えみ

面白〜い。組み込みに興味を持つと世の中が変わって見えますね!


北上

そうだね〜。

じゃあ、そろそろステッピングモーターを動かすプログラムを書いてみようか!


えみ

はいっ!



       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.