ステッピングモーターを使ってみる(Arduino)
今回は、ステッピングモーターです。
DCモーターは、一般に電流を流すと軸が回転します。
サーボモーターは、信号によって0度~?度の角度を制御できます。
ステッピングモーターは、信号により回転範囲に制限なく回転制御できます。
今回、私が使用するステッピングモーター(28BYJ-48)と、
ステッピングモータドライブモジュール(ULN2003) です。
・ユニポーラ ステッピングモーター 28BYJ-48
¥250- [28BYJ-48]
秋月電子通商
http://akizukidenshi.com/catalog/g/gP-13256/
・ステッピングモータ
¥450- [28BYJ48]
aitendo
https://www.aitendo.com/product/10239
・ステッピングモータドライブモジュール
¥395- [M2003-4P]
aitendo
https://www.aitendo.com/product/10238
・ステッピングモータドライブキット
¥350- [K-2003A]
aitendo
https://www.aitendo.com/product/14589
ステッピングモータは、
回転子(軸)の種類で、
PM(Permanent Magnet)型、
VR(Variable Reluctance)型、
HB(Hybrid)型
コイルへの電流供給方法で、
ユニポーラ型(単極)、
バイポーラ型(双極)
の各型に分類されます。
今回使用するステッピングモーター(28BYJ-48)の
仕様の確認をしておきます。
・ギア比:1/64(中心軸が64回転すると外軸が1回転)
・相数:2相ユニポーラ(相数:4)
・ステップ角:5.625°
・出力軸1回転のステップ数:2048(2相励磁)
※2相励磁で無負荷の最高回転数は4秒で1回転です。
・定格電圧:5V
・直流抵抗:約22Ω(?)
・周波数:100Hz
・結線:5線式
回転を制御する励磁方式には、
・1相励磁方式
・2相励磁方式
・1-2相励磁方式
の3つの方式があり、
それぞれ,
・1相励磁方式:(One Phase On)
パルスを順番に与えていく方式
・動きにガタガタ感がありトルクは弱いが省電力
・2相励磁方式:(Two Phase On)
2相ごとパルスを順番に与えていく方式
・動きがなめらかでトルクは強い
・1-2相励磁方式:(Half Stepping)
3相ごとパルスを順番に与えていく、
1相、2相の倍のフェーズを必要とする方式
・1相、2相励磁の動作角が半分となり、
細かい回転制御が可能
などの特徴があります。
ステッピングモーターを反転1/2回転(180度)、
正転1/4回転(90度)を繰り返すスケッチをしてみます。
回路は図の通りです。
この回路図の作図には fritzing を利用させて頂いております。
https://fritzing.org/home/
このスケッチには、Stepper ライブラリを使用しますが、
このライブラリはインストールされていると思います。
ステッピングモータドライブモジュール(ULN2003) と、
このStepper ライブラリを使用すると、制御は2相励磁方式となります。
Stepper ライブラリの基本関数です。
・オブジェクト生成
Stepper オブジェクト名( 1回転当たりのステップ数,
IN4のピン番号, IN2のピン番号, IN3のピン番号, IN4のピン番号 )
Stepper stepper1( 2048, 8, 10, 9, 11 )
・1分間当たりの回転数設定
オブジェクト名.setSpeed( 毎分の回転数 )
stepper1.setSpeed( 5 )
・回転処理
オブジェクト名.step( 回転させるステップ数 )
stepper1.step( 1024 )
2048ステップで1回転の場合、1/2(180度)回転します。
スケッチです。
// ライブラリ使用宣言
#include <Stepper.h>
// オブジェクト生成
Stepper stepper1( 2048, 8, 10, 9, 11 );
void setup() {
// put your setup code here, to run once:
// 1分間当たりの回転数設定
stepper1.setSpeed( 5 );
}
void loop() {
// put your main code here, to run repeatedly:
// 1/2(180度)反転させる
stepper1.step( 1014 );
// 出力停止
digitalWrite(8, LOW);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
digitalWrite(11, LOW);
delay(5000); // 5000ms停止
// 1/4(90度)正転させる
stepper1.step( -512 );
// 出力停止
digitalWrite(8, LOW);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
digitalWrite(11, LOW);
delay(5000); // 5000ms停止
}
Arduino に書き込んで実行します。
たいへんゆっくりとした動作で反転、正転を繰り返しています。
外軸に触れてみると、トルクは結構あります。
では、ライブラリを使わずにスケッチしてみます。
2相励磁方式(One Phase On)を使用して、
動作は同じ、1/2(180度)反転、1/4(90度)正転を繰り返すものです。
スケッチです。
// 使用デジタルピン番号
int pin_no[4] = { 8, 9, 10, 11 };
// 1相励磁方式(One Phase On)
int one_phase[4][4] = {
{ 1, 0, 0, 0 },
{ 0, 1, 0, 0 },
{ 0, 0, 1, 0 },
{ 0, 0, 0, 1 }
};
// 2相励磁方式(One Phase On)
int two_phase[4][4] = {
{ 1, 1, 0, 0 },
{ 0, 1, 1, 0 },
{ 0, 0, 1, 1 },
{ 1, 0, 0, 1 }
};
// 1-2相励磁方式(One Phase On)
int half_step[4][8] = {
{ 1, 1, 1, 0, 0, 0, 0, 0 },
{ 0, 0, 1, 1, 1, 0, 0, 0 },
{ 0, 0, 0, 0, 1, 1, 1, 0 },
{ 1, 0, 0, 0, 0, 0, 1, 1 }
};
void setup() {
// put your setup code here, to run once:
// デジタルピンモード設定
for ( int i = 0; i < 4; i++ ){
pinMode( pin_no[i], OUTPUT );
}
}
void loop() {
// put your main code here, to run repeatedly:
// 2相励磁方式(One Phase On)にて
// モーターを1/2反転させる
for( int s = 0; s < 256; s++ ){
for ( int i = 0; i < 4; i++ ){
digitalWrite( pin_no[0], two_phase[i][0] );
digitalWrite( pin_no[1], two_phase[i][1] );
digitalWrite( pin_no[2], two_phase[i][2] );
digitalWrite( pin_no[3], two_phase[i][3] );
delay( 5 ); // 5ms停止
}
}
// 出力停止
digitalWrite(pin_no[0], LOW);
digitalWrite(pin_no[1], LOW);
digitalWrite(pin_no[2], LOW);
digitalWrite(pin_no[3], LOW);
delay( 5000 ); // 5000ms停止
// モーターを1/4(90度)正転させる
for( int s = 0; s < 128; s++ ){
for ( int i = 3; i >= 0; i-- ){
digitalWrite( pin_no[0], two_phase[i][0] );
digitalWrite( pin_no[1], two_phase[i][1] );
digitalWrite( pin_no[2], two_phase[i][2] );
digitalWrite( pin_no[3], two_phase[i][3] );
delay( 5 ); // 5ms停止
}
}
// 出力停止
digitalWrite(pin_no[0], LOW);
digitalWrite(pin_no[1], LOW);
digitalWrite(pin_no[2], LOW);
digitalWrite(pin_no[3], LOW);
delay( 5000 ); // 5000ms停止
}
回路は同じです。
Arduino に書き込んで実行します。
前のスケッチと同じく反転、正転の動作を繰り返します。
ステッピングモーター(28BYJ-48)専用のライブラリもあります。
このライブラリはインストールが必要です。
ArduinoIDEにインストールする方法は、
1.メニュー「スケッチ」 → 「ライブラリをインクルード」
→ 「ライブラリを管理」 を選択します。
2.ライブラリマネージャ画面の
検索欄に、”STEPPER_28BYJ_48” と入力します。
表示された一覧の中から、
”STEPPER_28BYJ_48”を選択し、〔インストール〕ボタンと押します。
インストールした、STEPPER_28BYJ_48 ライブラリには、
サンプルスケッチがありますので、読み込んでみます。
1.メニュー「ファイル」 → 「スケッチ例」
→ 「Stepper_28BYJ_48」
→ 「Stepper_28BYJ_example」を選択します。
このサンプルスケッチは、
ブレッドボード上に配置した二つのタクトスイッチを押すと、
押している間だけ、それぞれ、正転・反転するものです。
回路は図の通りです。
スケッチを変更します。
// Stepper_28BYJ_48ライブラリ使用宣言
#include "Stepper_28BYJ_48.h"
// スイッチ用ピン番号設定
int switch_1_pin = 12; // 反転
int switch_2_pin = 13; // 正転
// オブジェクト生成(出力ピン設定)
Stepper_28BYJ_48 stepper(8,9,10,11);
void setup() {
// put your setup code here, to run once:
// スイッチ用ピン設定(プルアップ設定)
pinMode(switch_1_pin,INPUT_PULLUP);
pinMode(switch_2_pin,INPUT_PULLUP);
}
void loop() {
// put your main code here, to run repeatedly:
// switch_1_pin ON時 反転
if ( digitalRead(switch_1_pin) == LOW ) {
stepper.step(-1);
}
// switch_2_pin ON時 正転
if ( digitalRead(switch_2_pin) == LOW ) {
stepper.step(1);
}
}
このスケッチでは、
デジタルピンの設定が変更されています。
Arduino に書き込んで実行します。
タクトスイッチが1個しかありませんでしたので、
デジタルピン12番、13番は差し替えてのテストです。
※ページ内の記載で
正転:時計回り、
反転(逆転):反時計回り、
の表現が、誤っているかもしれません。