2021年6月29日火曜日

安価なステッピングモータを試してみた

久しぶりにステッピングモータで遊ぼうと、アマゾンで安いステッピングモータとドライバのセットを購入しました。3セットで699円なので1セット233円とマブチモータ並みの価格。ただ、ドライバと言ってもパルスを送れば勝手に回転してくれるものではなく、単に電流を増幅するだけなので各コイルを順次オンしていかないとダメです。まぁ、ステッピングモータの勉強用にはよいかも。

ギアで1/64に減速しているモータなので、出力軸がどの程度の速さで回転するか分からなかったのでArduinoで試してみました。1相励磁、2相励磁を試しましたが、500Hzは回転しましたが、1,000Hzではブーンとうなるだけで回転せず。500Hzで約4秒/回転です。とてもゆっくり回ります。


以下は試した簡単なスケッチです。
単純なプログラムとするためにloop内のdelayでパルスの周波数を決めているので分解能は1msです。1ms(=1,000Hz)では動かなかったので2ms(=500Hz)を試したら動きました。もう少し早く回るとよかったのですが、安いものはギア比1/64しか見つけられませんでした。

トルクは結構あって指先で押さえた程度では止まりません。無理に止めると内部のギアが壊れるかも。1相でもトルクが十分で、2相にすると電流が多くなって発熱も大きくなるので、1相で使います。

//------------------------------------------------------------------
// ステッピングモータのテスト
//------------------------------------------------------------------
#define P1 2
#define P2 3
#define P3 4
#define P4 5

int cnt;
void setup() {
  pinMode(P1, OUTPUT);
  pinMode(P2, OUTPUT);
  pinMode(P3, OUTPUT);
  pinMode(P4, OUTPUT);

  digitalWrite(P1,LOW);
  digitalWrite(P2,LOW);
  digitalWrite(P3,LOW);
  digitalWrite(P4,LOW);
  cnt = 0;
}

byte ph1[4][4] = { // 1相励磁
  1,0,0,0,
  0,1,0,0,
  0,0,1,0,
  0,0,0,1
};
void loop() {
  digitalWrite(P1,ph1[cnt][0]);
  digitalWrite(P2,ph1[cnt][1]);
  digitalWrite(P3,ph1[cnt][2]);
  digitalWrite(P4,ph1[cnt][3]);
  cnt = (cnt+1)%4;

  // 1回転 32step * 64(ギア比) = 2,048step 
  // delay 1ms -> 1000step/秒  --> 約2秒/回転 ※回転せず 
  //       2ms ->  500step/秒  --> 約4秒/回転 
  //       4ms ->  250step/秒  --> 約8秒/回転
  //      29ms -> 34.48step/秒 --> 約60秒/回転
  delay(2);
}

2 件のコメント:

  1. 全然理解できないけど、やってみたいです。

    返信削除
    返信
    1. コメントありがとうございます。
      このステッピングモータは4つ(の倍数)のコイルがあるので、
      4つのコイルに順番に電流を流すことで回ります。
      このドライバは4つのLEDが付いているので、周波数を低くすれば
      (回転速度を遅くすれば)、4つのLEDが順番に点灯するのが分かります。
      入門用にはよいと思います。

      削除