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

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

ただいまの
回答率

87.61%

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

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,943

score 10

前提・実現したいこと

秋月版の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/ツールのバージョンなど)

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • y_waiwai

    2020/10/05 15:36

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

    キャンセル

  • ccchogeee

    2020/10/05 15:39 編集

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

    キャンセル

回答 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/12 15: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); //減速

    このあたりまで下げれば動きそうな気はするんですけど・・・

    キャンセル

  • 2020/10/12 16:18

    モーターの型番は、SM-42BYG011-25で間違いなさそうです。

    コードを
    L6470_setparam_kvalhold(40); //停止
    L6470_setparam_kvalrun(190); //定速-9V程度
    L6470_setparam_kvalacc(190); //加速-9V程度
    L6470_setparam_kvaldec(100); //減速
    に書き換えると、モーターのじーーーという音が大きくなったような気がします。。。

    電源を12Vより強いものを用意してやってみます!

    キャンセル

  • 2020/10/13 15: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相のストール

    キャンセル

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

  • ただいまの回答率 87.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る