2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

28BYJ-48 ステッピングモーター

Last updated at Posted at 2018-07-02

中国から密輸した小さくて安いギアードステッピングモーター。
2015年に買って放置してたのを動かしてみました。

IMG_20180630_160343.jpg

5V駆動のユニポーラ。
4096パルスで1回転らしい。

https://ht-deko.com/arduino/stepper_motor.html
を参考に、ESP32に繋いで動かしてみました。

http://akizukidenshi.com/catalog/g/gP-13256/
最近秋月電子からも扱い始めたらしいですが、僕が買ったのは
ULN2003を使ったドライバボードとセットでした。

IMG_20180630_164228.jpg

ULN2003はTIのトランジスタアレイ。最大50Vのものを駆動することができます。
image

逆起電力防止用のダイオードが入っていて、モータやリレーのようなコイル負荷を動かすのにぴったりです。

image
こんな感じに、Hi入力するとLoが出力されます。

これには、何ボルトの電圧で信号を入力しなければいけないでしょうか?

image

3Vで信号入力できそうです。
しかしながらかなりの損失がありますね。今回は、テストとしてUSBポートからの5Vで動かしますし、100円のUSBケーブル→マイコンボードの5V端子を経由して動かすので、モーターにかかる電圧は3V程度になるかと思います。

本来のパワーを発揮できないはずですが、USBポートの保護にはちょうどいい?

image

この図のCOMが、モータドライバ電源の+につながります。
今回は、安直にUSBポートにつなげますが、本来は逆流防止ダイオードなどを入れないと危険が危ないです。

ESP-32ボードで動かしてみました。以下はArduino化して作ったスケッチです。


/* 
STM32
Stepping morter 28BYJ-48 + Driver ULN2003  
from 
https://ht-deko.com/arduino/stepper_motor.html
*/

int pin_IN[4] = {5,18,23,19};

/*
 * 
 IN1 5
 IN2 18
 IN3 23
 IN4 19
*/

const int NBSTEPS = 4096;
const int STEPTIME = 2500;
int Step = 0;
boolean Clockwise = true;

int arrayDefault[4] = {LOW, LOW, LOW, LOW};

int stepsMatrix[8][4] = {
    {LOW, LOW, LOW, HIGH},  
    {LOW, LOW, HIGH, HIGH}, 
    {LOW, LOW, HIGH, LOW},
    {LOW, HIGH, HIGH, LOW}, 
    {LOW, HIGH, LOW, LOW}, 
    {HIGH, HIGH, LOW, LOW},
    {HIGH, LOW, LOW, LOW},  
    {HIGH, LOW, LOW, HIGH},
};

unsigned long lastTime;
unsigned long time;

void setup() {
  Serial.begin(115200);
  Serial.println("Starting...");
  pinMode(pin_IN[0], OUTPUT);
  pinMode(pin_IN[1], OUTPUT);
  pinMode(pin_IN[2], OUTPUT);
  pinMode(pin_IN[3], OUTPUT);
}

void loop() {
  unsigned long currentMicros;
  int stepsLeft = NBSTEPS;
  time = 0;
  while (stepsLeft > 0) {
    currentMicros = micros();
    if (currentMicros - lastTime >= STEPTIME) {
      stepper();
      time += micros() - lastTime;
      lastTime = micros();
//      Serial.println(stepsLeft);
      stepsLeft--;
    }
  }
  Serial.println(time);
  Serial.println("Wait...!");
  delay(2000);
  Clockwise = !Clockwise;
  stepsLeft = NBSTEPS;
}

void writeStep(int outArray[4]) {
  for (int i = 0; i < 4; i++) {
    digitalWrite(pin_IN[i], outArray[i]);
  }
}

void stepper() {
  if ((Step >= 0) && (Step < 8)) {
    writeStep(stepsMatrix[Step]);
  } else {
    writeStep(arrayDefault);
  }
  setDirection();
}

void setDirection() {
  (Clockwise) ? (Step++) : (Step--);

  if (Step > 7) {
    Step = 0;
  } else if (Step < 0) {
    Step = 7;
  }
}

最初はSTEPTIMEが900でしたが動きませんでした。恐らく適切な電源ではないためでしょう。2500で動くようになりましたが、
やはり、かなり遅いし指で強く押さえると止まる感じです。

IMG_20180630_175850.jpg

LEDが付いているので動作の確認、学習用に便利! STEPTIMEをもっと大きくすると励磁相が目に見えるようになって嬉しいです。

バイポーラとして使用する

通常のユニポーラ式のステッピングモータは6線ですが、そのうちの4線だけを使うことでバイポーラとして使うことも出来ます。

ところが、この28BYJ-48は中点線同士をコモンとして結線して5線しか出ていないので、そういったゴマカシができません。

ケーブルカバーを切り開くと、中身はこんなになってました。

IMG_20180630_160951.jpg

パターンカットして

IMG_20180630_161053.jpg

赤の線を取り外しました。

IMG_20180630_164501.jpg

これで4線式のバイポーラとして使えます。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?