久々の電子工作ネタです。
ラジオの製作が途中なのに、また新たなネタに手を出してしまいました。
ラジオの方は、電源をどうしようとか、ケースをどうしようかなど悩んでいるうちに全然進まなくなってしまいました。すっぱり割り切って作ってしまわないとと思っています。
ところで、今回のネタは、ステッピングモーターです。
ステッピングモーターを使って何をするかということは今のところ内緒です。計画はあるのですが、うまくいくかどうかわからないので、ある程度目途が立った段階でブログに書いていこうと思っています。
とりあえず、今回はステッピングモーターを動かすところまでです。
用意したもの。
ステッピングモーター
ja.aliexpress.com
CNCシールド
ja.aliexpress.com
モータードライバ―
ja.aliexpress.com
いずれもAliexpressで購入。
びんぼうでいいの(Arduino UNO互換機)
www.aitendo.com
Aitendoさんで購入。以前から持っていた。すごい名前ですが、ちゃんと動きます。現在のバージョンは基板の色が変わっているようです。
ACアダプター12V
手持ちのものを使用。
配線
Arudino UNO(互換機)とCNCシールドはタダ載せるだけ。
CNCシールドに、モータードライバ―(A4988)を載せる。
今回はモーターが一つだけなので、X軸用のところに一つ取り付けた。取り付ける向きは調整用のつまみが下になるように。
ここサイトを参考にしました。
iot.keicode.com
CNCシールドはCNC(computerized numerical control)を制御するためのもので、旋盤などに使われたりする。今回はステッピングモーターを動かすために使うことにしている。
CNCシールドが無くても、モータードライバ―だけでステッピングモーターを動かすことはできるのだが、面倒な配線がいらないし、価格も大したことないので、シールドを使ってみた。
モーターとモータードライバ―の配線
実際にはCNCシールドの端子に配線をすることになる。CNCシールドのソケットの右側にピンが4つ出ているところにステッピングモーターのケーブルを配線する。今回のステッピングモーターは2相式というやつで、配線が2組ある。1組目を1番目と2番目のピンに、2組目を3番目と4番目のピンに接続する。組み合わせさえ間違えなければ問題ない。今回購入したモーターは1組目が青と黄色、2組目が緑と赤のケーブルにつながっている。
12Vの電源を繋げる。
モーターを動かすためには12Vの電源が必要でこれは別個に用意する必要がある。今回は手持ちのACアダプターを使った。ブレッドボードに刺すことができる下のようなDCジャックを使って、配線した。
これで配線は完了。
電流の調整
A4988には電流調整用のつまみがついている。これでステッピングモーターに流れる電流を調整するようになっている。
スペック表によるとステッピングモーターの電流値は1.7Aで、参考サイトによると、Imax=Vref/(8×Rcs)とのことで、Rcsが0.068Ω。最大電流の70%をImaxとすると、1.7×0.7=1.19A。したがって、Vref=1.19×8×0.068=0.64となるので、おおよそ0.6Vに調整した。
調整の仕方も参考サイトに詳しく書いてあるが、精密ドライバーをテスターのプラスに、GNDをテスターのマイナスにつないで、12V電源を繋いだ状態でつまみを回して調整する。
最初、調整をしなくても動くかと思ってやってみたが、ステッピングモーターがうなるだけで動かなかったので、電流値を調整したらうまく動くようになった。
あと、ヒートシンクの取り付け位置が悪くてドライバーと干渉してしまったので、ヒートシンクは調整した後で付けたほうが良いと思う。
Arduino UNO(互換機)にスケッチを書き込む。
今回のスケッチは実に単純なもので、イネーブルピンをLOWにして、方向制御ピンをHIGH、LOWのいずれかに設定し、ステップピンにパルスを所定回数のパルスを送るだけ。
イネーブルピンはArduinoの8番ピン、方向制御ピンは5番ピン、ステップピンは2番ピンにつながっています。1ステップ1.8°なので200ステップで1回転となります。
#define PIN_EN 8 #define PIN_DIR 5 #define PIN_STEP 2 void setup() { pinMode(PIN_EN, OUTPUT); pinMode(PIN_DIR, OUTPUT); pinMode(PIN_STEP, OUTPUT); digitalWrite(PIN_EN, LOW); digitalWrite(PIN_DIR, LOW); digitalWrite(PIN_STEP, LOW); } void loop() { for (int i=0; i<200; i++){ digitalWrite(PIN_STEP, HIGH); delayMicroseconds(2000); digitalWrite(PIN_STEP, LOW); delayMicroseconds(2000); } while(1){ } }