STマイクロエレクトロニクスのステッピングモータードライバー「L6470」用のライブラリ。 既にある他のものとは違い、デフォルトで芋蔓式接続(デイジーチェーン接続)に対応しています。 回転速度や16進数変換のためのメソッドもあるので、中級者でも比較的安心して使用できるかと思います。

Dependencies:   L6470SDC mbed

3DプリンタとかハンドメイドNCマシンとかで使える かも しれない、L6470のデイジーチェーン接続。 既存のものはデイジーチェーン全無視で作成されていたので、新たに作成しました。

 -----------------------------------------

動画では結線を間違えているため、CWとCCWが反転しています。ご了承ください。

 -----------------------------------------

秋月電子で販売しているL6470ドライバーキット

/media/uploads/Yajirushi/l6470driver_title.png

 -----------------------------------------

デイジーチェーン時のSPI通信の様子

/media/uploads/Yajirushi/l6470spi_getstatus.png

 -----------------------------------------

デイジーチェーン接続の大雑把な配線図

/media/uploads/Yajirushi/med2l6470drv.png /media/uploads/Yajirushi/jikkenl6470haisen.png

 -----------------------------------------

なんかコメント振ってもWikiに反映されないし、面倒になったので中途半端ですが公開します。 苦情などはこちらのページにコメントいただくか、 http://l52secondary.blog.fc2.com/blog-category-1.html まで。気が向けば回答します。

Revision:
0:b1046a5398ca
Child:
4:781871b89ac4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sat May 30 14:32:55 2015 +0000
@@ -0,0 +1,51 @@
+#include "mbed.h"
+#include "L6470SDC.h"
+
+int main(){
+    //インスタンス化
+    //USBシリアルとSPIとCSのピン別名を渡す
+    L6470SDC l6470(USBTX, USBRX, SPI_MOSI, SPI_MISO, SPI_SCK, D10);
+
+    wait(1);
+
+    //L6470ドライバーの初期化
+    l6470.init();
+
+    wait(5);
+
+    //1番目のモーターの最大速度を毎秒100ステップに設定
+    l6470.setMaximumSpeed(1, l6470.calcMaxSpd(100));
+    //2番目のモーターの最大速度を毎秒200ステップに設定
+    l6470.setMaximumSpeed(2, l6470.calcMaxSpd(200));
+
+    //1番目と2番目のモーターを5秒回転させる
+    //最大速度は毎秒400ステップ
+    l6470.run(1, l6470.calcSpd(400), true); //1番は時計回り
+    l6470.run(2, l6470.calcSpd(400), false); //2番は反時計回り
+    wait(5.0);
+    l6470.stop(1);
+    l6470.stop(2);
+
+    //モーターが完全停止するまで待つ
+    while(l6470.isBusy(1) || l6470.isBusy(2));
+
+    //動きが早すぎるので人間が追い付くための待ち時間
+    wait(3.0);
+
+    //1番目のモーター7回転(1回転200ステップ×マイクロステップ数×7)、時計回り
+    l6470.move(1, 200*128*7, true);
+
+    //2番目のモーター7回転(1回転200ステップ×マイクロステップ数×7)、時計回り
+    l6470.move(2, 200*128*7, true);
+
+    //モーターが回転を終えるまで待つ
+    //2番目のモーターは1番目の2倍の速度で動くため、待ち続けることになる
+    while(l6470.isBusy(1) || l6470.isBusy(2));
+
+    //1番目のモーターの最大速度を2番目と同一に設定
+    l6470.setMaximumSpeed(1, l6470.getMaximumSpeed(2));
+
+    //それぞれのモーターの初期位置に戻る(zeroとhomeは別名の同一関数)
+    l6470.home(1);
+    l6470.zero(2);
+}