ステッピングモータ動作確認

更新日2021-08-30 (月) 15:12:58

Arduinoでステッピングモータ(+28BYJ-48)とドライブ用IC(ULN2003)を動かしてみた。

ULN2003のデータシートは以下にあるようにダーリントンが7つ入っている。

ArduinoにはStepperというライブラリがあるので、これを使用して動作の確認をする。

接続図

ステッピングモータを動作するには、ある程度電流が必要なので、ブレットボードに5Vが取れる電源モジュール(MB102)を実装し、供給する

s-MB102.jpg

ULN2003ドライバモジュール

ULN2003.jpg

  ------------------ 8      4  -----------------
  | Arduino        |-----------| ULN2003       |
  |                |           | モジュール    |
  |                | 9      3  | ボード        |
  |                |-----------|               |
  |                |           |               |
  |                | 10     2  |               |
  |                |-----------|               |
  |                |           |               |
  |                | 11     1  |               |
  |                |-----------|               |
  ------------------           -----------------

プログラム

仕様

  • ステッピングモータ(+28BYJ-48)は1回転2048ステップ
  • 90°回転ごとに、500ms停止。これを繰り返す
  • 速度は10rpm
  • 回転中はHigh、停止中はLowをArdiuno PIN2に出力

内容

  • smt1
//ライブラリ使用によるスケッチ

// 電子部品
// 電源モジュール,ドライバモジュール(ULN2003A),ステッピングモーター

//ライブラリインクルード
#include <Stepper.h>

#define START_PIN 2   // モータ回転時:H モータ停止時:L

// ステッピングモータが1回転するのに必要なステップ数を定義
//2相励磁方式で制御するため2048 step で1回転
const int MOTOR_STEPS = 2048; 

//1回転あたりのステップ数と接続するピンの設定
Stepper myStepper(MOTOR_STEPS, 8, 10, 9, 11);


void setup() {
  // put your setup code here, to run once:
  pinMode(START_PIN, OUTPUT);
  myStepper.setSpeed(10); // 10回転/1分に設定 rpm(1分あたりの回転数)
}

void loop() {
  // put your main code here, to run repeatedly:

  digitalWrite(START_PIN, HIGH);
 
  myStepper.step(512);    // 512ステップで半時計45度回転 マイナス指定で反対方向(時計回り)
 
  // 静止時には電流を遮断 
  digitalWrite(8,  LOW); 
  digitalWrite(9,  LOW); 
  digitalWrite(10, LOW); 
  digitalWrite(11, LOW); 

  digitalWrite(START_PIN, LOW);
  
  delay(1000);            //90度回転したら500ms停止

}

確認

観測予測

  1. 速度10rpmより 1回転の時間は6秒
  2. 1回転は2048ステップより1ステップは 6/2048 = 2.9ms

観測結果

回転開始タイミング。CH1(黄色)がHの時回転中。

Timming.png

1ステップは2.9msになっていいる。

Stepperについて

  • 2相励磁に出力する

この関数のマニュアルは以下にある

  • Stepper myStepper(MOTOR_STEPS, 8, 10, 9, 11);

MOTER_STEPSには、1回転分のステップ数を指定する。モータの機種が決まれば一意的に決まる。

StepperへのPIN指定の順は A, A', B B'

2相励磁.png

観測結果の図は、Ardiunoの端子のため、モータに加わる信号はULN2003Aを通るのでロジックが反転する。
PIN8がAでモータにたいしては最初ステップがH、PIN11がB'でモータにたいしては最初ステップがHになる。つまり、図のグリーンの部分。図のB'はLだが、繰り返しの順ではHになる。

  • myStepper.setSpeed(n)

回転速度:n n < 15 を指定する。これ以上だと動作しなかった。

  • myStepper.step(m)

回転させるステップ数を推定。今回のモータだと2048で1回転

ちょっとStepperについて

同じステッピングモータ(+28BYJ-48)で1回転を1024に定義するとどうなるかやってみた。 他のパラメータは同じ。
結果は1ステップが5.8msになった。
モータもカイテンスピードが1/2になる。
512ステップで90°回転する。

この関数は、1024パルスで1回転したと思っているが、指定速度(10rpm)では実際は 半周していることになる。その結果回転速度が1/2になる。進む角度はステップ数に依存するため、512ステップで90°になる。

s-1024-9PIN.jpg

CH2はArduinoのPIN9

参考


添付ファイル: files-1024-9PIN.jpg 9件 [詳細] fileTimming.png 12件 [詳細] file2相励磁.png 7件 [詳細] fileULN2003.jpg 6件 [詳細] files-MB102.jpg 7件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-08-30 (月) 15:12:58 (28d)