RaspPi Stepping Motor

Last-modified: 2013-02-25 (月) 00:33:34

GPIO の使い方がわかったのでステッピングモータを回してみる。

用意するもの。

ステッピングモータコパル SPG20-1362秋月で購入。250円
モータドライバパワーMOS-FET MP4401秋月で購入。200円
ACアダプタ5V 2.3A持っていたものを使用。600円
ブレッドボード用DCジャックDIP化キット持っていたものを使用
ブレッドボード
ジャンパーケーブル

ハードウェア構成

RaspberryPi <--> MP4401 <--> SPG20 といった感じで接続。制御信号の接続は以下のとおり。

RasPiのC1コネクタBCM2835のピンMP4401の入力ピンMP4401の出力ピンSPG20
P1-12GPIO-18P-12P-11P-6(X)
P1-16GPIO-23P-8P-9P-2(/X)
P1-18GPIO-24P-5P-4P-5(Y)
P1-22GPIO-25P-1P-2P-1(/Y)
P1-06GNDP-6,P-7---

RasPi のGPIOは 3.3V, モータ用電源は 5V.MP4401 と SPG20には5Vを接続する。

5VMP4401 P-3,P-20SPG20 P-3(1C), P-4(2C)

参考URL

RasPi のピンアサインについてはRPi Low-level peripheralsを参照。Rev.1 と Rev.2 で若干ピンアサインが変わったらしい。自分のボードは Rev.2。

ステッピングモータを取り敢えず回すにはGPIOだったらどのピンでもよかったのだが、兼用ピンの設定方法をどうするのか調べるのが面倒だったので(汗、なるべく兼用でないピンを選んだら上記のようになった。

MP4401とSPG20のピンアサインは秋月からダウンロードできるデータシートをみればわかる。

ソフトウェア

RasPi用のCのライブラリC library for Broadcom BCM 2835 as used in Raspberry Piが公開されていたので、ありがたく使わせていただく。

ライブラリに含まれていた GPIO のサンプルを参考に、ステッピングモータを回すように修正。
2相励磁と1-2相励磁の2パターンで回してみた。見た目は変わらなかった(笑

ソースコードがベタ書きでカッコ悪かったので修正。

  • モータの励磁パターンを構造体の配列に変更。
  • 回転方向を enum で定義
  • モータの駆動処理をベタ書きから励磁パターン配列を使ったループ処理に変更。

かなりすっきりした。2相励磁関数と1-2相励磁関数は励磁パターン配列以外は共通なので、簡単に共通化できる。しかし、励磁パターン配列をパラメータ化すると、ポインタ演算が毎回余計に必要となるのでやめた。
コンパイラの最適化オプションで良きに計らってくれるかもシレナイガ。

モータが回る動画

動いている様子をYoutube にアップした。RaspPi でステッピングモータを回す