質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

1回答

6328閲覧

秋月版のL6470を使ってステッピングモーターを動かしたい

ccchogeee

総合スコア11

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0グッド

0クリップ

投稿2020/10/05 06:23

編集2020/10/05 06:42

前提・実現したいこと

秋月版のL6470モータードライバを使って、ステッピングモータを動かしたいです。
動くはずのタイミングで、ステッピングモーターはピクっと動き、モータードライバのLEDが緑色に光りますが、正常な動きはしません。

使用しているもの
ユニポーラ ステッピングモーターST-42BYG0506H(秋月)
L6470(秋月)
・Arduino UNO
・電源は12V1Aのアダプタまたは、9V電池を3つ使用

配線は以下のサイトを参考にしています
秋月版L6470使用ステッピングモータードライバの使い方
コードは、以下のサイトからダウンロードしたものをそのまま書き込みました。
L6470をArduinoで簡単に動かすスケッチ北の国から電子工作(仮)

※編集・追記依頼がありましたので、、
秋月版ではないL6470モータードライバは持っておらず、動くかどうかの確認はできません。
ATOMIC ステッピングモータードライバキット
を持っていたのでこれでステッピングモーターを動かしたところ、正常に動かすことができました。

発生している問題・エラーメッセージ

コンパイルのエラー等はなくArduinoに書き込めました。

モータードライバのJP1ですが、
3-4を繋ぐと、ステッピングモーターは何も動かず、
1-2,3-4を両方繋ぐと、動くはずのタイミングでステッピングモーターがピクッとだけ動き、モータードライバのLEDが緑色に一瞬光ります。

該当のソースコード

 L6470をArduinoで簡単に動かすスケッチ北の国から電子工作(仮)
こちらをダウンロードしそのままスケッチとしました。エラーは出ませんでした。

#include <SPI.h> #include <MsTimer2.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 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); Serial.begin(9600); digitalWrite(PIN_SPI_SS, HIGH); L6470_resetdevice(); //L6470リセット L6470_setup(); //L6470を設定 MsTimer2::set(50, fulash);//シリアルモニター用のタイマー割り込み MsTimer2::start(); delay(4000); L6470_move(1,1600);//指定方向に指定数ステップする L6470_busydelay(5000); //busyフラグがHIGHになってから、指定ミリ秒待つ。 L6470_run(0,10000);//指定方向に連続回転 delay(6000); L6470_softstop();//回転停止、保持トルクあり L6470_busydelay(5000); L6470_goto(0x6789);//指定座標に最短でいける回転方向で移動 L6470_busydelay(5000); L6470_run(0,0x4567); delay(6000); L6470_hardhiz();//回転急停止、保持トルクなし } void loop(){ } 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) } void fulash(){ Serial.print("0x"); Serial.print( L6470_getparam_abspos(),HEX); Serial.print(" "); Serial.print("0x"); Serial.println( L6470_getparam_speed(),HEX); }

void loop {}
の中に
L6470_move(1,200); //正転方向に200ステップする
L6470_move(0,400); //逆転方向に400ステップする
を書いてみたりもしました。が動きませんでした。

試したこと

・JP1の部分をつなぎ変える。①1-2だけつなぐ、②3-4だけつなぐ、③1-2, 3-4を繋ぐ
・モータードライバへの電源を、 ①12V1Aのアダプタで供給する, ②9V電池×3個で供給する、③5V1Aのアダプタで供給する。

補足情報(FW/ツールのバージョンなど)

電源周りが悪いのかなと思っていますが、どのように変更すればいいのかがわかりません。
何かアドバイスをお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2020/10/05 06:36

秋月版ではないL6470モータードライバではモータを動かすことはできるんでしょうか
ccchogeee

2020/10/05 06:43 編集

秋月版ではないL6470モータードライバは持っておらず、確認ができません。 本文中に記載させていただきました。ご指摘ありがとうございます。
guest

回答1

0

まず、このモータはユニポーラで、ドライバがバイポーラ用という事は理解していますか?
多分バイポーラ結線しただけで使えるとは思いますけど、「絶対」ではありません。

で、UNOなら5V駆動になりますから、ジャンパーは3-4のみで、5VをArduinoからEXT-VDDに入れて、ドライバを5Vで動かします。

その電源なら、12V1Aの方が良いと思います。

で、
L6470_setparam_kvalrun(0x50);
L6470_setparam_kvalacc(0x50);
L6470_setparam_kvaldec(0x50);

あたりは0x50→170(8V相当)で試すのが良いと思います。
※デフォルトの0x50だと3.7V相当です。バイポーラ結線なら低すぎます。

ちゃんと結線しているのなら、その程度の変更で動きそうな気がします。

投稿2020/10/05 07:20

nac_tnk

総合スコア463

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ccchogeee

2020/10/05 07:53

ご回答ありがとうございます。 >このモータはユニポーラで、ドライバがバイポーラ用という事 理解していませんでした、、、 12V1Aアダプタをモータードライバに繋ぎ、ジャンパは3-4のみ繋ぎ、 コードを L6470_setparam_kvalrun(0x170); L6470_setparam_kvalacc(0x170); L6470_setparam_kvaldec(0x170); に変更してみましたが、動きませんでした。。 厳しいのでしょうか
nac_tnk

2020/10/05 07:54

0x170じゃなくて170です。
ccchogeee

2020/10/05 07:58

すみません L6470_setparam_kvalrun(170); L6470_setparam_kvalacc(170); L6470_setparam_kvaldec(170); でやってみましたが、動きませんでした
nac_tnk

2020/10/05 07:59

それなら他の部分ですね。動こうともしていない様子ですか?
ccchogeee

2020/10/05 08:02 編集

はい、 シリアルモニターで「0x0 0x0」が永遠に出続けていて、 ArduinoのTXのLEDが高速で点滅していて、 他は何も動いていないです。 ステッピングモーターは動こうとする様子はないです。
nac_tnk

2020/10/05 08:06

通信自体が出来ていないようですね。 やはり配線の間違いのような気がします。 或いはケーブルの断線とか。
ccchogeee

2020/10/05 08:14

配線は他のサイトと比べてみたり、何度も確認しさし直したのですが、、、 ケーブルもいま全部交換してみましたができませんでした。 ArduinoUno自体が良くない可能性は考えられますか?
nac_tnk

2020/10/05 08:20

可能性は低いですね。TXが動いていて、ちゃんと送信していますから、プログラムはちゃんと動いていると思います。 また、「ATOMIC ステッピングモータードライバキット」でも動いていたという事はバイポーラ結線でも動くという事ですから、ちゃんと結線していれば動く筈です。
ccchogeee

2020/10/05 08:26

そうですよね、、 もう一度配線確認してみます。
nac_tnk

2020/10/05 13:54

今まで赤LEDの話がでなかったですけピンヘッダに5VとGND、モータ用電源のターミナルブロックにDC9V以上の2点(計4本)を結線すれば、赤LEDが点灯するはずです。 (場合によっては5VとGNDだけでも点灯する可能性はあります)
ccchogeee

2020/10/06 01:12

赤LEDは点灯しています!伝えてなくてすみません
ccchogeee

2020/10/08 09:19

ジャンパーを3-4のみではなく、1-2, 3-4繋ぐと、緑のLEDが光り、ステッピングモーターはジーーーという音を立てますが、回転しません!
ccchogeee

2020/10/08 09:22

以前教えていただいた、(0×50)の部分は(170)に変更してもしなくても、ジーーーと音が鳴ります。 また、Arduinoの3.3Vに挿しても5Vに挿しても変わらず、ジーーーと音が鳴ります。 連投申し訳ありません。
nac_tnk

2020/10/08 09:54

いやいや、「ATOMIC ステッピングモータードライバキット」で動いた、と聞いた時点で、モータ自体は原因ではありません。ただし、結線は、赤と緑、青と黄の組み合わせは守ってください。 端子の端から 緑赤青黄 黄青赤緑 は良いですけど 青赤緑黄 とかは駄目ですから。(念のため) 新モータの場合は ↑で言ったL6470_setparam_kvalrun○○の値は0xFF(255)が適当です。 いずれにしても、シリアルモニタで、位置とドライバのステータスが返ってこないのなら、 まだ駄目なのだと思います。 ※大きな声ではいえませんけど、1-2、3-4共につなぎ、5Vも繋ぐのは正しい方法とは言えませんけど、私自身は、よくそうしています。
ccchogeee

2020/10/08 10:07

申し訳ありません、新しく購入したバイポーラのステッピングモーターは「ATOMIC ステッピングモータードライバキット」では動かせませんでした、、、 端子は、端から、赤緑黄青で繋いでいます! 0xFFに変更してみましたが、これまでと同じで、1-2, 3-4を共につなぐと、緑のLEDが光り、ステッピングモーターからはジーーーと音がなります。3-4だけだとなりません。 ジーーーと鳴っているときは 0x4100 0x17 0x0 0x0 0x0 0x0 0x1041 0x0 0x4100 0x1C 0x0 0x0 0x100000 0x0 0x4100 0x0 0x4100 0x1D 0x0 0x0 0x0 0x0 0x0 0x5 0x4100 0x0 0x0 0x0 0x0 0x0 0x4100 0x13 のようなのがシリアルモニタに続きます。
ccchogeee

2020/10/08 10:08

他に何か試せる部分はありますでしょうか、、、 すごく丁寧に教えてもらっているのに、成功させられず申し訳ありません。
nac_tnk

2020/10/08 12:32

原因が不明で上手くいなない事はよくあります。 で、シリアルモニタの表示は「絶対位置 スピード」になっていると思うから 右側の数値が出ている時は、ドライバとしては回している状態です。 左側(絶対位置)はそれに伴って変化はしているようですけど、数値に連続性が感じられません。 動画はspinelifyさん(ライブラリ主)のhttps://www.youtube.com/watch?v=5bMXHRMk_9M&feature=emb_title を見てください。 本来、そのように、ステッパーの動作と連動するように動きます。 Arduinoが再起動を繰り返している(ドライバの初期化過程を繰り返している)という風には感じませんか?
nac_tnk

2020/10/08 12:39

fulash関数の内容を下記のようにして、ドライバのstatusも表示してみてください。 何か判るかもしれません。 Serial.print("0x"); Serial.print( L6470_getparam_abspos(),HEX);//絶対位置 Serial.print(" 0x"); Serial.print( L6470_getparam_speed(),HEX);//速度 Serial.print(" 0x"); Serial.println( L6470_getstatus(),HEX);//statusレジスタ値
ccchogeee

2020/10/12 02:05

>Arduinoが再起動を繰り返している(ドライバの初期化過程を繰り返している)という風には感じませんか? こちらはどのように確認できますか??> < fulash関数の内容を書き換えたところ、 1-2, 3-4ともにつないでいると以下のように出力が繰り返されているようでした。 緑のLEDが光り、ステッピングモーターはジーーーと鳴ります。 0x0 0x0 0x7D03 0x0 0x0 0x3C13 0x0 0x0 0x3D13 0x0 0x0 0x3D03 0x4100 0x0 0x7D03 0x104100 0x0 0x7C03 0x4100 0xA 0x7D30 0x4100 0x17 0x7C13 0x104100 0x0 0x7C13 3-4だけをつなぐと 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 が繰り返されます。ステッピングモーターは何も動いていません。
ccchogeee

2020/10/12 02:08

繰り返されると書きましたが、 いろいろな数値が出力されているようです! 0x0 0x0 0x7D13 0x0 0x0 0x3D13 0x0 0x4 0x7D20 0x4100 0x17 0x7D13 0x11041 0x0 0x7C 0x0 0x0 0x3D13 0x104100 0x0 0x7C03 0x0 0x0 0x3D03 0x0 0x0 0x7D30 0x4100 0x13 0x7D03 0x0 0x0 0x3C13 0x100000 0x0 0x7D
nac_tnk

2020/10/12 04:05

statusレジスタ値から、エラー相当の箇所は0x3D13で、 STEP_LOSS_B WRONG_CMD hi-z が読み取れます。中でも STEP_LOSS_B---B相がストールしている が悪いような気がします。 で、 L6470_setparam_stallth(val); をしてください。 STALL_THは(数値+1)×31.25mAです。例えば3Aにしたい場合は3/0.03125=96です。ここから1を引いて95で3Aです。 また、 0x7C03だと、UVLOが出ています。これは低電圧ロックアウトで、電源電圧が規定値よりも下がると起こります。 他のパラメータ(kval)を下げれば大丈夫なのかもしれませんけど、安心して運用するなら電源を強化した方が良いです。
ccchogeee

2020/10/12 05:53

void L6470_setup(){ }の最後に、 L6470_setparam_stallth(val); を追記しました。 valには何を入れたらいいかわからなかったので、デフォルトの0x40や95(すみません、STALL_THの意味がわからず、とりあえずコメント内の数値を入れてみました、、、)を入れてみましたが、出力されるのは、前と同じような数値でした。 0x7C03の部分に関しては、いま電源に12V1AのACアダプタを使っているのですが、それを24Vのものにしてみたりするということでしょうか?? 12Vのものしか手元にないので用意してみようと思います。
nac_tnk

2020/10/12 06:45

ちょっと見間違えました。全てにわたってUVLO(BIT9)がアクティブ(LOW)です。 これは、要因がなくなり、GetStatusをすれば消える(HIGHになる)筈です。 なので、「電源が弱い」、或いは「電圧が高すぎて、予定よりも多く電流を流している」という事だと思います。 ※私自身、このドライバで「動かない」という事態に遭遇した事がありません。  いつもは、「思ったように動かない」という事でレジスタ値は確認する事が多いです。  なので、認識が間違えている可能性もあります。 基本、電圧はモータ定格より多少大きいものが良いです。12Vのモータなら、15Vとか、24Vとかです。 私はノートPC用のアダプタをよく使います。 電流値は最低、定格電流の倍です。大きければ多いほど電圧が安定&アダプタが発熱しません。 新モータSM-42BYG011-25(定格12V-0.3A)を使っているのなら、12V-1.0Aの電源でも動きそうなものですけど…。 モータの型番を間違えている、という事はありませんか? L6470_setparam_kvalhold(40); //停止 L6470_setparam_kvalrun(190); //定速-9V程度 L6470_setparam_kvalacc(190); //加速-9V程度 L6470_setparam_kvaldec(100); //減速 このあたりまで下げれば動きそうな気はするんですけど・・・
ccchogeee

2020/10/12 07:18

モーターの型番は、SM-42BYG011-25で間違いなさそうです。 コードを L6470_setparam_kvalhold(40); //停止 L6470_setparam_kvalrun(190); //定速-9V程度 L6470_setparam_kvalacc(190); //加速-9V程度 L6470_setparam_kvaldec(100); //減速 に書き換えると、モーターのじーーーという音が大きくなったような気がします。。。 電源を12Vより強いものを用意してやってみます!
nac_tnk

2020/10/13 06:11

電圧を下げた筈なのに音が大きくなって、それが良い兆候なのか悪い兆候なのか・・・ ↓に書いてある加速の所以外は全て停止状態です。 現状は、回している状態ではないので、「加速」をしようとしている回数が増えているのかもしれませんけど。 正常値 X111 1110 0XXX XXXX 0x7D03 0111 1101 0000 0011 0x3C13 0011 1100 0001 0011 0x3D13 0011 1101 0001 0011 0x3D03 0011 1101 0000 0011 0x7D03 0111 1101 0000 0011 0x7C03 0111 1100 0000 0011 0x7D30 0011 1101 0011 0000 加速 0x7C13 0011 1100 0001 0011 0x7C13 0011 1100 0001 0011 0x7D13 0111 1101 0001 0011 0x3D13 0011 1101 0001 0011 0x7D20 0111 1101 0010 0000 加速 0x7D13 0111 1101 0001 0011 0x3D13 0011 1101 0001 0011 0x7C03 0111 1100 0000 0011 0x3D03 0011 1101 0000 0011 0x7D30 0111 1101 0011 0000 加速 0x7D03 0111 1101 0000 0011 0x3C13 0011 1100 0001 0011 悪いのは BIT8 :WRONG_CMD→そのコマンドは、現在実行出来ないよ、と言っているだけ。 BIT9 :UVLO →低電圧ロックアウト。但し、リセット時とかにもアクティブになる。 BIT14:STEP_LOSS_B→B相のストール
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問