ステッピングモータを動かしてみます(Arduino編)
〔マイコンのトップに戻る〕
前回はサーボモータを動かしてみました、この頁ではArduinoを使ってステッピングモータを動かします。
尚、PICを使ってステッピングモータを動かす記事はこちらを見て下さい。
ステッピングモータは秋月電子のこちらで購入しました。
このモータは、励磁方式が2相ユニポーラで1回転(360度)は288ステップ(1step 1.25度)です、入力電圧は12V程掛けて500mAくらい流れる様です。
なので、この頁ではユニポーラタイプのステッピングモータについて書いています。
※ 2017/01/12現在、ここで使用したステッピングモータは販売終了の様です。
こちらで実験しましょう、但し、1回転(360度)は200ステップ(1step 1.8度)です。 *3)
又、モータの線色も異なります、白->赤、黒->白、黄->緑、赤->黄、青->黒、緑->青と読替えます
ステッピングモータとサーボモータの比較
|
ステッピング
モータ |
RCサーボモー
タ |
制御 |
ワンパルス送る度に一定の角度だけ回転します。
例えば、今回のモータならワンパルス(1step)で1.25度回転です。 |
送るパルスのONさせる幅により回転角度が決まります。 |
回転 |
連続回転OK
今回のモータは288ステップで1回転なので、
864パルス送れば3回転して止まります。
また、パルスのONさせる幅を変えると回転速度が変わります。 |
0〜180度までの回転です。
(360度回転する物もあり)
回転速度は制御不可、モータに依存します。 |
精度 |
停止制度は低くモータに依存します。
例えば、今回のモータなら1.25度まいです。 |
停止制度は高い
内部にエンコーダが有るので常に停止位置をキープする(フィードバック制御)。 |
トルク |
低速域でのトルクが大きい、高回転になればトルクが小さく
なり、そのうち回転しなくなる。 |
低速〜高速域でトルクが安定している。 |
回路 |
FET等でドライバーを作る必要がある。
(マイコンへの配線は4本:2相時) |
簡単、部品不要
(マイコンへの配線は1本) |
価格 |
安い |
高い |
《 配線図 》
この左図が実態配線図です。
こちらの「FETをマイコン出力のスイッチとして使う方法」
も合わせて読んでおきましょう。
今回利用するモータには、接続する為のコネクターケーブルが付属しています、
ブレッドボードにそのまま刺せなくもないのですがヘッダーピンあたりに半田付けしたほうが良いでしょう。
Arduinoは外部電池9Vを接続しています、なのでモータの電源は9Vでの実験です。
USBからの電源で駆動させるのは止めましょう。
ArduinoのVin端子は外部電池9V電圧がそのまま出力されています。
左図の様にArduinoデジタル8番端子から
FETを介してモータの白色線に接続されていますねこれが1回路分です。
デジタル9番端子からモータの黄色線、
デジタル10番端子からモータの赤色線、
デジタル11番端子からモータの緑色線、
と全部で4回路有ります。
モータの黒色線と青色線は+電源(9V)に接続です。
ステッピングモータの制御方法について
この様に2回路ずつ順次ONさせる方式を2相励磁方式と言います。
ワンパルス1stepあたり1.25度回転します。
パルスのONする幅を短くするとモータの回転速度が上がります。
尚、ステッピングモータの詳しい制御の話は、
「PICで遊ぶ電子工作」さんの「ステッピングモータの制御」や *3)
「エフテック株式会社」さんの「ステッピングモータを廻す」
を参考にして下さい。
ここではArduinoの標準ライブラリのStepperライブラリを利用してプログラムしています。
《arduinoのスケッチ1》
@上記の回路の様に配線を行います。
(ここでArduinoからの電源線、VinかGND端子は接続しないで置く)
Aarduinoボード(Arduino Duemilanove 328)はUSBケーブルで接続してarduino IDEを起動させます。
BIDEに下記のスケッチプログラムをコピーペーストして貼り付けて下さい。
---------------------------------------------------------------------
#include <Stepper.h>
#define STEPS 288 // ステッピングモータの1回転あたりのステップ数
Stepper Motor(STEPS, 8, 9, 10, 11) ; // stepperクラスのインスタンスを生成する
void setup()
{
Motor.setSpeed(40) ; // モータの速さを毎分の回転数(RPM)で設定する
}
void loop()
{
Motor.step(4) ; // 4ステップのみ回転させる
}
---------------------------------------------------------------------
CIDEツールバーの赤枠部分「Upload」ボタンをクリックしてコンパイルとarduinoボードに書込みを
行います。
DUSBケーブルを外してArduino電源(Vin/GND)を接続し、9V外部電池を取り付けましょう、
モータが連続回転すると思います。
下記に、上記スケッチで実行させた時の出力波形を参考に貼り付けて置きます。 *1)
正転出力(白赤->赤黄->黄緑->白緑 の4step繰り返し)

逆転出力(白緑->黄緑->赤黄->白赤 の4step繰り返し)
スケッチについて
Stepper Motor(STEPS, 8, 9, 10, 11)
ステッピングモータのライブラリーを生成します、Motorの名前は自由に変更出来ます。
STEPSはモータの1回転当たりのステップ数なので各モータにより異なります。
8(白),9(黄),10(赤),11(緑)は接続しているモータのデジタル端子番号です。
Motor.setSpeed(40)
ステッピングモータの回転速度を設定します。
1分間あたり何回転するのかを指定しますが、早い回転数にするとモータは回らなくなります、
今回のモータで25〜65辺りがよさげです。
Motor.step(4)
この関数で実際にモータが回転します、指定する数値はステップ数です。
もし、864と指定したら今回のモータだと3回転(288x3)して止まります、
なので864ステップ実行するまではこの関数は終了しません、注意です。
(って事は終了するまでは次のプログラムを実行しないと言う事です)
また、-864とマイナス数値を指定したら逆回転します、-32767〜32767の範囲です。
今回のスケッチは4ステップ動作が繰り返し実行さえるので回転したままとなります。
※ 停止時は、コイルに電流を流していないのでフリーラン状態でトルクは掛かっていません。
《arduinoのスケッチ2》
こんどは上図の配線図に半固定抵抗(ボリューム)を
追加配線して下さい。
下のスケッチではアナログ0番端子に半固定抵抗を
接続した場合の例です。
左写真が可変抵抗を追加した場合の例です。
尚、半固定抵抗の接続方法はこちらを参考にして
下さい。
このスケッチを動かしてみましょう、半固定抵抗を
右に回せば回した分だけモータが右に回転します、
半固定抵抗を左に回せばモータも左へ回転です、
半固定抵抗の回転を止めればモータも停止します。
(モータ停止状態で微妙にフルフルしていますが、
これは半固定抵抗の読取り値がふらついているから
です)
半固定抵抗とモータの回す方向が逆の場合は、
半固定抵抗の+電源とGND線を入れ替えて下さい。
---------------------------------------------------------------------
#include <Stepper.h>
#define STEPS 288 // ステッピングモータの1回転あたりのステップ数
int PreVal ; // 前回読み込んだ可変抵抗の値を保存する変数
Stepper Motor(STEPS, 8, 9, 10, 11) ; // stepperクラスのインスタンスを生成する
void setup()
{
Motor.setSpeed(40) ; // モータの速さを毎分の回転数(RPM)で設定する
PreVal = 0 ; // 前回値は0として初期化
}
void loop()
{
int x ;
x = analogRead(0) ; // 可変抵抗からの値を読み込み今回値とする
Motor.step(x - PreVal) ; // 今回値−前回値の値だけ回転させる
PreVal = x ; // 今回値を前回値として保存する
}
---------------------------------------------------------------------
《arduinoのスケッチ3》
このスケッチも上スケッチ2の様に半固定抵抗を追加した場合の例です。
このスケッチも動かしてみましょう、こんどは半固定抵抗を回すとモータの回転速度が変わります。
速度が速すぎると回らなくなります、このモータで25〜65が良さげなので、0-100を25-65と変えても良いでしょう。
---------------------------------------------------------------------
#include <Stepper.h>
#define STEPS 288 // ステッピングモータの1回転あたりのステップ数
Stepper Motor(STEPS, 8, 9, 10, 11) ; // stepperクラスのインスタンスを生成する
void setup()
{
}
void loop()
{
int x ;
x = analogRead(0) ; // 可変抵抗からの値を読み込む
x = map(x, 0, 1023, 0, 100) ; // 可変抵抗値(0-1023)を速度値(0-100)に変換する
Motor.setSpeed(x) ; // モータの速さを設定する
Motor.step(4) ; // 4Stepだけ回転させる
}
---------------------------------------------------------------------
《 その他 》

実験風景の写真
モータの回転が判り易い様に、軸にはテープが巻いて有ります、適当な回転数で回さないとモータは
結構振動が有ります。
外部電源12Vでも行ってみました、回転速度も上がり安定して制御しやすい様に感じます、
また、4.5Vでも行いましたが回るには回ります、何かに組み込む場合は12V電源が良いかもね。
尚、バイポーラステッピングモータドライバのL6470を使った記事はPICでの内容ですが
こちらを参照下さい。*2)
リンク切れ見直し(*3) 2017/01/12
追記(*2) 2016/09/27
追記(*1) 2014/06/22
【きむ茶工房ガレージハウス】
Copyright (C) 2006-2020 Shigehiro Kimura All Rights Reserved.