🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Arduino

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

IoT

IoT(Internet of Things)とは、インターネットがコンピュータなどの情報・通信機器のネットワークだけでなく、世の中のある様々なモノに接続されて自動認識・自動制御・遠隔計測などの能力を備えることです。「モノのインターネット」と一般的にいわれます。

マイコン

マイクロコンピュータの略で、CPUにマイクロプロセッサを用いたコンピュータのこと。家電製品、電磁機器などの制御に用いられています。単体でコンピュータとしての機能を一通り備えています。 現代のパーソナルコンピュータに近く、同時期のメインフレームやミニコンピュータと比べ、小さいことが特徴です。

Q&A

解決済

2回答

4012閲覧

esp32とL6470を使ってステッピングモーターを動かしたい

akasuka

総合スコア21

Arduino

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

IoT

IoT(Internet of Things)とは、インターネットがコンピュータなどの情報・通信機器のネットワークだけでなく、世の中のある様々なモノに接続されて自動認識・自動制御・遠隔計測などの能力を備えることです。「モノのインターネット」と一般的にいわれます。

マイコン

マイクロコンピュータの略で、CPUにマイクロプロセッサを用いたコンピュータのこと。家電製品、電磁機器などの制御に用いられています。単体でコンピュータとしての機能を一通り備えています。 現代のパーソナルコンピュータに近く、同時期のメインフレームやミニコンピュータと比べ、小さいことが特徴です。

0グッド

0クリップ

投稿2021/02/04 14:27

編集2021/02/05 15:09

##ESP32とL6470のステッピングモータードライバを使ってステッピングモーターを動かしたいのですが、現状ピクリとも動きません。
詳しい方がいらっしゃいましたら、ご教授ください。

使用ハード:
・ESP32-wroom-32d
・L6470(秋月電子で販売しているドライブキットです。 https://akizukidenshi.com/catalog/g/gK-07024/)
・DC電源 24V 2.7A
・ステッピングモーター 3V 1.3A 1.8° 

各サイトを参考にしてプログラムを書いてみましたが、全く動く気配がありません。
作成したソースを載せます。

#include <Arduino.h> #include <SPI.h> #define PIN_SPI_STATUS 32//busy,sync pin #define PIN_SPI_MOSI 23 #define PIN_SPI_MISO 19 #define PIN_SPI_SCK 18 #define PIN_SPI_SS 5 void Stepper_L6470_Send(unsigned char val) { while ( !digitalRead(PIN_SPI_STATUS) ) { }//busy status check digitalWrite(PIN_SPI_SS, LOW); SPI.transfer(val); digitalWrite(PIN_SPI_SS, HIGH); } void Stepper_L6470_Send_u(unsigned char val) { digitalWrite(PIN_SPI_SS, LOW); SPI.transfer(val); digitalWrite(PIN_SPI_SS, HIGH); } void Stepper_L6470_transfer(int add,int bytes,long val){ int data[3]; Stepper_L6470_Send(add); for(int i=0;i<=bytes-1;i++){ data[i] = val & 0xff; val = val >> 8; } if(bytes==3){ Stepper_L6470_Send(data[2]); } if(bytes>=2){ Stepper_L6470_Send(data[1]); } if(bytes>=1){ Stepper_L6470_Send(data[0]); } } void Stepper_L6470_Reset() { Stepper_L6470_Send_u(0x00); Stepper_L6470_Send_u(0x00); Stepper_L6470_Send_u(0x00); Stepper_L6470_Send_u(0x00); Stepper_L6470_Send_u(0xc0); } void Stepper_L6470_setup() { Stepper_L6470_Send(0x09); Stepper_L6470_Send(0x1F); Stepper_L6470_Send(0x0A); Stepper_L6470_Send(0x1F); Stepper_L6470_Send(0x0B); Stepper_L6470_Send(0x1F); Stepper_L6470_Send(0x0C); Stepper_L6470_Send(0x1F); } void Stepper_L6470_Move(int dir, long n_step) { Stepper_L6470_transfer(dir, 3, n_step); } void setup() { delay(2000); Serial.begin(9600); pinMode(PIN_SPI_STATUS, INPUT); pinMode(5,OUTPUT);//PIN_SPI_SS//追記 SPI.begin(PIN_SPI_SCK, PIN_SPI_MISO, PIN_SPI_MOSI, PIN_SPI_SS); SPI.setDataMode(SPI_MODE3); SPI.setBitOrder(MSBFIRST); //reset device delay(200); Stepper_L6470_Reset();//device reset //setup device delay(200); Stepper_L6470_setup(); } void loop() { Stepper_L6470_Move(0x41, 200); delay(1000); uint8_t res; Stepper_L6470_Send(0xD0); digitalWrite(PIN_SPI_SS, LOW); res = SPI.transfer(0x00); digitalWrite(PIN_SPI_SS, HIGH); Serial.printf("%X", res); digitalWrite(PIN_SPI_SS, LOW); res = SPI.transfer(0x00); digitalWrite(PIN_SPI_SS, HIGH); Serial.printf("%X", res); digitalWrite(PIN_SPI_SS, LOW); res = SPI.transfer(0x00); digitalWrite(PIN_SPI_SS, HIGH); Serial.printf("%X", res); }

###試したこと
getsutasの値を取得してみましたが、0が戻って来るのみでステータス情報も取得できていません。

###追記
esp32とステピンクドライバーとの接続は、
esp32---L6470端子
GPIO23---5ピン GPIO23---7ピン
GPIO19---7ピン GPIO19---5ピン
GPIO18---6ピン
GPIO5---8ピン
GPIO22---1ピン

L6470のロジックボード電圧は、内部レギュレータの3vを使うように、ジャンパピンの1-2をつなげています。
基盤上のLEDは光っています。

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

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

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

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

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

guest

回答2

0

ベストアンサー

スケッチを見るかぎり、
・Stepper_L6470_ResetCMD()とは?
・Stepper_L6470_setup()とは?
・初期設定をしていない
といった問題があります。

getsutasの値を取得してみましたが

getsutasなんてありませんよ。
STATUSレジスタの値を取得してみた、或いは、GetStatusをしてみた、でしょうけど、
それが出来ないというのは一番先に来ます。
つまり、それはどんな状況でも通用するコマンドだからです。
(勿論ちゃんと配線、給電が出来ている事が前提です。)

ただし、このスケッチ中にGetStatusをしているコードが書かれていません。
なので、どこが悪いのかは判りません。
スケッチに問題はあるけど、配線にも問題があるかも。

<追記>
ちょっと繋いでみたので書いておきます。

・モータ用電源も、接続する必要がある。※ジャンパー次第なのかもしれません。
ジャンパーを2つ付けた状態では、モータ電源を繋がないと動きません。
また、モータ電源を切った途端に通信は終わります。

・コードは
SPI.begin(PIN_SPI_SCK, PIN_SPI_MISO, PIN_SPI_MOSI, PIN_SPI_SS);
の前に、
pinMode(5,OUTPUT);//PIN_SPI_SS
といれたら、getStatusは取得出来ました。

・getStatusは、ビジーウェイト関係無しに、いつでも取得出来る命令です。
なので、busyピンの状態を見ない
Stepper_L6470_Send_u(0xD0);
が適当です。

・getStatusの戻り値(レジスタ)は16ビットです。なので、3バイト取り込む必要はありません。
まぁ、問題は無いですけど。

※上記で通信は出来ます。ただし、初期設定はしていないのでモータは動かないでしょう。
モータを動かす「前に」、初期設定をする必要があります。
・kvalの4つ。
・ストール電流、過電流の値
これは、今回の条件では必須です。

あとは、加速度とかも、最高速/最低速とかも設定しておいた方が良いです。

投稿2021/02/04 15:24

編集2021/02/05 00:20
nac_tnk

総合スコア494

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

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

akasuka

2021/02/04 17:01

早速のご回答ありがとうございます。 ご指摘頂いた通り、コピペ出来ていないとろろがありましたので、修正、追記致しました。 給電ができているか、とのことですが、確認する方法はありますでしょうか?
nac_tnk

2021/02/05 00:17 編集

普通、テスターとかで確認するでしょ。全く動いていないようなら。 ESP32ってprintf出来るんだ。知らなかった。 1バイト多いけど、GetStatus部は出来ていそう。 ※↑に追記しておきます。
nac_tnk

2021/02/05 00:34

データシートを見直してみたら、デフォルト値と使用条件はそれほど違っていなかった。 24V*0.16=4.16V 自分の中では*0.4ぐらいだと思っていた。(24V*0.4=9.6V) なので、そのままでも動く「可能性」はありますね。 それでも、普通、モータを動かす前に必ず設定する箇所ですから。
akasuka

2021/02/05 15:03

動きました!! ありがとう御座います!! ストール電流、過電流の値と、pinMode(5,OUTPUT);//PIN_SPI_SSの設定をしたら動きました! ストール電流、過電流の値の計算方法がまだよく分かっていませんが、もう少し考えてみます。
guest

0

esp32とステピンクドライバーとの接続は、

#define PIN_SPI_STATUS 32//busy,sync pin #define PIN_SPI_MOSI 23 #define PIN_SPI_MISO 19 #define PIN_SPI_SCK 18 #define PIN_SPI_SS 5

ドライバ側

PINシンボル機能
1#BUSY/SYNC動作表示/同期表示
5SDOSPIデータOUT
6CKSPIクロック
7SDISPIデータIN
8#CSSPIチップセレクト

GPIO23---5ピン

GPIO19---7ピン
GPIO18---6ピン
GPIO5---8ピン
GPIO22---1ピン

なによりもまず、ESP32のGNDとドライバのGNDはちゃんと繋ぎましょう。電力供給系ではないから、一つでもlowレベルがあればなんとかなったりすることもあるけれど。

MOSI(GPIO23)はMaster Out / Slave In の意なので、SDI(7Pin)に
MISO(GPIO19)はMaster In / Slave Out の意なので、SDO(5Pin)に
繋ぐべきではないでしょうか?
(ポリティカルコレクト的に今後Slaveとか言えなくなったらどうするんだろう? MISOは理由なんかなくMISOだ、とか言うのだろうか)

GPIO22は32のTypoでしょうか?

投稿2021/02/04 22:58

thkana

総合スコア7703

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

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

akasuka

2021/02/05 15:00

回答ありがとうございます。 解決出来ました!!ありがとうございます!! GPIO22はおじゃるとおり、32のうちミスです。
thkana

2021/02/05 21:55

> GPIO23---5ピン > GPIO19---7ピン これは合っていた、ということですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問