PR

L6470が動かない原因はこれ!A4988との違いとSPI通信による制御の注意点(番外編)

スポンサーリンク
Python
スポンサーリンク

はじめに

「A4988と同じように配線したのに、L6470がびくともしない…」そんな経験はありませんか?

実は、L6470はA4988のようなシンプルなパルス制御ではなく、「SPI通信」によるコマンド制御を前提とした高機能ドライバーです。今回は、私が実際にハマったポイントをもとに、L6470を動かすために絶対必要な「初期設定」と「制御の違い」を解説します。


私は新品購入したL6470が初期不良だったのではと疑いましたw

原因は――
L6470が“デイジーチェーン前提のSPIデバイス”だったことでした。

スポンサーリンク

デイジーチェーンとは?

複数の電子機器や周辺機器をケーブルで数珠つなぎに接続し、信号を順番に伝達する方式です。この名前は、ヒナギク(デイジー)の花を繋ぎ合わせた花冠に似ていることに由来しているそうです。
メリットとしては
配線の簡素化: 複数の機器を少ないケーブルで接続できます。
コスト削減: 複雑な分配器が不要なため、導入コストを抑えられます。

スポンサーリンク

A4988 と L6470 の根本的な違い

項目A4988L6470
制御方式STEP/DIRパルスSPIコマンド制御
必要信号STEP, DIRMOSI, MISO, SCK, CS
速度制御外部マイコンが生成内蔵モーションエンジン
デイジーチェーン非対応対応(前提設計)
設定方法ピン設定レジスタ書き込み
A4988 の世界

A4988 は非常にシンプルです。

GPIO.output(STEP, HIGH)
GPIO.output(STEP, LOW)

→ パルスを送れば回る
→ 直感的
→ 動かなければ配線ミスの可能性が高い

L6470 の世界

L6470 はまったく思想が違います。

・SPIでレジスタを書き込む
・MOVEコマンドを送ると内部で加減速制御
・さらに「デイジーチェーン前提」

スポンサーリンク

実際にハマったポイント

私はこう書いていました:

spi_write([0x16, 0x07])

正しいはずです。
しかし動かない。

原因は:「L6470は1回のSPI転送を「1デバイス分」として扱う」

つまり、

spi.xfer2([0x16, 0x07])

これは
・1台目に0x16
・2台目に0x07
と解釈される

私は1台しか使っていないのに、内部的には“2台分の転送”になっていた。

正しい書き方

spi_write([0x16])
spi_write([0x07])

コマンドとデータを分ける。
これで動いた瞬間、理解しました。

スポンサーリンク

まとめ(初心者がハマる理由)

A4988経験者ほどハマります。

なぜなら:
・「動くはず」という前提がある
・SPIは“普通のSPI”だと思ってしまう
・デイジーチェーン前提だと気づかない

スポンサーリンク

結論

L6470は悪くない。
自分が思想の違いを理解していなかっただけ。
同じような罠にかかった人に、この記事が届きます様に・・・

スポンサーリンク

XYテーブル製作シリーズはこちらから

コメント