😎

【Arduino】ステッピングモーターL6470を回す

2022/12/08に公開

1. はじめに

ZAWAWORKSアドベントカレンダー2022、8日目の記事です!

以前、僕は「エロ本を隠す本棚」を制作しました。

https://youtu.be/wtSeyw_WMlc

そのとき扉を開く機構にステッピングモータを使いました。今回はそのとき用いたArduinoによるステッピングモータの制御方法をまとめました。

※この記事は「工学部生の生プレス」さんの記事をリライトしたものになります。
https://kogakubu.com/?p=2918

2. 使ったもの


A. Arduino Uno
B. バイポーラ ステッピングモーター SM-42BYG011
C. L6470使用 ステッピングモータードライブキット
D. ジャンパーワイヤ(メス-オス) 7本(ジャンプワイヤは色数が多い種類がオススメ)
E. 単三電池 8本ボックス

3. モータドライバの組立

  • モータドライバはバラバラな状態で販売しているので、自分ではんだづけして組み立てる必要があります。
  • はんだづけの様子を動画で記録しました

https://youtu.be/72SXKuVmE1Q

4. 配線

以下が全体図です。パーツごとに解説していきます。

4.1. Arduino

7本のジャンプワイヤ(オス-メス)のオス部分を以下のようにArduinoに挿してください。

4.2. モータドライバ

4.2.1. ジャンプワイヤ

左から橙、黒、青、緑、無

左から無、黄、紫、赤、無

4.2.2. ステッピングモータ

4.2.3. 電池ボックス

5. コード

5.1. ダウンロード

spinelifyさんがL6470を制御するためのライブラリを公開しているので、そちらを使います。以下の記事にある「ダウンロード」を押すと、ライブラリとサンプルコードがまとまったZipファイルをダウンロードできます。
http://spinelify.blog.fc2.com/blog-entry-41.html

展開したフォルダにあるL6470_commands.inoにステッピングモータを制御するための命令が書いてあります。

5.2. サンプルコード

1秒(1000ミリ秒)ずつ時計回りと反時計回りを繰り返すサンプルです。

#include <SPI.h>

//モーター
#define PIN_SPI_MOSI 11
#define PIN_SPI_MISO 12
#define PIN_SPI_SCK 13
#define PIN_SPI_SS 10
#define PIN_BUSY 9

#define MOTOR_SPEED 20000 //30000ぐらいで悲鳴をあげる
#define DELAY_TIME 1000


void setup()
{
  delay(1000);
  pinMode(PIN_SPI_MOSI, OUTPUT);
  pinMode(PIN_SPI_MISO, INPUT);
  pinMode(PIN_SPI_SCK, OUTPUT);
  pinMode(PIN_SPI_SS, OUTPUT);
  pinMode(PIN_BUSY, INPUT);
  SPI.begin();
  SPI.setDataMode(SPI_MODE3);
  SPI.setBitOrder(MSBFIRST);

  digitalWrite(PIN_SPI_SS, HIGH);

  L6470_resetdevice(); //L6470リセット
  L6470_setup();  //L6470を設定
}


void loop() {
  L6470_run(0, MOTOR_SPEED);
  delay(DELAY_TIME);
  L6470_softstop();
  L6470_run(1, MOTOR_SPEED);
  delay(DELAY_TIME);
  L6470_softstop();
}

void L6470_setup() {
  L6470_setparam_acc(0x40); //[R, WS] 加速度default 0x08A (12bit) (14.55*val+14.55[step/s^2])
  L6470_setparam_dec(0x40); //[R, WS] 減速度default 0x08A (12bit) (14.55*val+14.55[step/s^2])
  L6470_setparam_maxspeed(0x40); //[R, WR]最大速度default 0x041 (10bit) (15.25*val+15.25[step/s])
  L6470_setparam_minspeed(0x01); //[R, WS]最小速度default 0x000 (1+12bit) (0.238*val[step/s])
  L6470_setparam_fsspd(0x3ff); //[R, WR]μステップからフルステップへの切替点速度default 0x027 (10bit) (15.25*val+7.63[step/s])
  L6470_setparam_kvalhold(0x50); //[R, WR]停止時励磁電圧default 0x29 (8bit) (Vs[V]*val/256)
  L6470_setparam_kvalrun(0x50); //[R, WR]定速回転時励磁電圧default 0x29 (8bit) (Vs[V]*val/256)
  L6470_setparam_kvalacc(0x50); //[R, WR]加速時励磁電圧default 0x29 (8bit) (Vs[V]*val/256)
  L6470_setparam_kvaldec(0x50); //[R, WR]減速時励磁電圧default 0x29 (8bit) (Vs[V]*val/256)

  L6470_setparam_stepmood(0x03); //ステップモードdefault 0x07 (1+3+1+3bit)
}

6. おわりに

今回は、Arduinoでステッピングモータを回す方法をまとめました。

次回は、2台のステッピングモータを連携しながら動かす方法について解説します。

宣伝|大阪の梅田で展示会を開催します!


※これは2022年のものです

12/22(木)~12/25(日)に、まるでリア充のような体験ができる「バーチャルリアジュウ展」を開きます!
電子工作やVRで、あなたを「バーチャルリア充(ほぼリア充)」に変えます!

クリスマスシーズン、時間に余裕がある方はぜひお越しください!

著者プロフィール

ZAWA WORKS
モテない理系男子の末路。妄想を叶える装置を日々開発中。

Discussion