【Arduino】ステッピングモーターL6470を回す
1. はじめに
ZAWAWORKSアドベントカレンダー2022、8日目の記事です!
以前、僕は「エロ本を隠す本棚」を制作しました。
そのとき扉を開く機構にステッピングモータを使いました。今回はそのとき用いたArduinoによるステッピングモータの制御方法をまとめました。
※この記事は「工学部生の生プレス」さんの記事をリライトしたものになります。
2. 使ったもの
A. Arduino Uno
B. バイポーラ ステッピングモーター SM-42BYG011
C. L6470使用 ステッピングモータードライブキット
D. ジャンパーワイヤ(メス-オス) 7本(ジャンプワイヤは色数が多い種類がオススメ)
E. 単三電池 8本ボックス
3. モータドライバの組立
- モータドライバはバラバラな状態で販売しているので、自分ではんだづけして組み立てる必要があります。
- はんだづけの様子を動画で記録しました
4. 配線
以下が全体図です。パーツごとに解説していきます。
4.1. Arduino
7本のジャンプワイヤ(オス-メス)のオス部分を以下のようにArduinoに挿してください。
4.2. モータドライバ
4.2.1. ジャンプワイヤ
左から橙、黒、青、緑、無
左から無、黄、紫、赤、無
4.2.2. ステッピングモータ
4.2.3. 電池ボックス
5. コード
5.1. ダウンロード
spinelifyさんがL6470を制御するためのライブラリを公開しているので、そちらを使います。以下の記事にある「ダウンロード」を押すと、ライブラリとサンプルコードがまとまったZipファイルをダウンロードできます。
展開したフォルダにある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