最終更新日
記事公開日

ステッピングモーターを並列駆動(同時制御)

ステッピングモーターを並列駆動(同時制御)のアニメーション動画

以前の記事「Arduinoでステッピングモーターを動かす」の応用編です。

今回は、ステッピングモーターを2つ同時に、同じ動きをする制御方法についてです。

車のタイヤを動かすような用途に使います。

使用したもの

  • ステッピングモーター:ST-42BYH1004(バイポーラ型)
  • Arduino UNO R3 (CH340版)
  • モータードライバー1:DRV8835(Pololu社製)※スイッチサイエンスにて購入
  • モータードライバー2:DRV8835 ※秋月電子にて購入

各パーツの詳細は、以前の記事をご覧ください。

回路図

ステッピングモーターを並列駆動(同時制御)する回路図

プログラム

#include <Stepper.h>

// 1回転ステップ数(ST-42BYH1004の場合)
int around_step = 400;

int sw_pin = 3;   // スイッチの入力Pin
int led_pin = 7;  // LEDの出力Pin
volatile int sw;  // SWの状態

// ボタン一回を押して進むステップ数
// 正転:10、反転:-10
int step = 10;

// 回転スピード(10:遅い、50:早い)
int speed = 25;   

void sw_on(void);

// stepper インスタンス生成
Stepper stepper(around_step, 8,9,10,11);

void setup() {

  pinMode(sw_pin,INPUT);
  pinMode(led_pin,OUTPUT);

  // 立ち上がりで割り込み処理開始
  attachInterrupt(1,sw_on, RISING);

}

void loop() {

  // スイッチを長押し中かどうか
  sw = digitalRead(sw_pin);

  // スイッチがONのときのみモーターを回転
  if(sw == 1) {

    //ステップ数(正転)
    stepper.step(step);

    // 回転スピード
    stepper.setSpeed(speed) ;   

  }
  
}

// スイッチが押されたときの割り込み処理
void sw_on(void) {
    sw = 1;
    digitalWrite(led_pin,HIGH);
}

スイッチを押している間、LEDが点灯し、モーターが回転し続けます。

技術解説

ステッピングモーターを並列駆動(同時制御)

ステッピングモーター1個につき、モータードライバが1個必要

DRV8835一つにつき、制御できるステッピングモーターの数は一つです。

よって今回のように、2つ同時にステッピングモーターを制御したい場合は、DRV8835が2つ必要になります。

なぜ、DRV8835一つで複数のステッピングモーターを動かせないのか?

電流が足りないからです。

DRV8835の出力から2方向に分岐させてしまうと、本来の約半分の電流でステッピングモーターを制御をしようとしてしまいます。

なお、今回は2種類のDRV8835を使用しています。

基本的な仕様は同じです。

ただ、手元にあったDRV8835を使っただけです。

2つとも秋月のを使っても良いですし、2つともスイッチサイエンスのものを使用しても問題ありません。

ステッピングモーター1個につき、電源が1個必要

ステッピングモーター①の電源は、USBケーブルを通ってパソコンから給電。

ステッピングモーター②の電源は、乾電池×3(4.5V)を使って給電しています。

このように電源は別々に取らないと、電流不足でモーターは正常に動きません。

注意点

今回、使用したステッピングモーターは5V仕様のものです。

かなりトルクにもの足りなさを感じました。

タイヤに使うには、力不足です。

とはいえ、あまり負荷が掛からない用途であれば、十分な力はあるのですが・・・

この記事のURLをコピー

メールアドレスは公開されませんのでご安心ください。また、* が付いている欄は必須項目となります。

内容に問題なければ、下記の「コメントを送信する」ボタンを押してください。

関連情報

運営者プロフィール
コダマ

職業はIT系フリーランス。過去、電子配線業務の経験が10年ある為、はんだづけも得意です。宮崎県在住、30代・2児の父親。

カテゴリー