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 まで。気が向けば回答します。

Committer:
Yajirushi
Date:
Sat May 30 14:32:55 2015 +0000
Revision:
0:b1046a5398ca
Child:
4:781871b89ac4
first commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Yajirushi 0:b1046a5398ca 1 #include "mbed.h"
Yajirushi 0:b1046a5398ca 2 #include "L6470SDC.h"
Yajirushi 0:b1046a5398ca 3
Yajirushi 0:b1046a5398ca 4 int main(){
Yajirushi 0:b1046a5398ca 5 //インスタンス化
Yajirushi 0:b1046a5398ca 6 //USBシリアルとSPIとCSのピン別名を渡す
Yajirushi 0:b1046a5398ca 7 L6470SDC l6470(USBTX, USBRX, SPI_MOSI, SPI_MISO, SPI_SCK, D10);
Yajirushi 0:b1046a5398ca 8
Yajirushi 0:b1046a5398ca 9 wait(1);
Yajirushi 0:b1046a5398ca 10
Yajirushi 0:b1046a5398ca 11 //L6470ドライバーの初期化
Yajirushi 0:b1046a5398ca 12 l6470.init();
Yajirushi 0:b1046a5398ca 13
Yajirushi 0:b1046a5398ca 14 wait(5);
Yajirushi 0:b1046a5398ca 15
Yajirushi 0:b1046a5398ca 16 //1番目のモーターの最大速度を毎秒100ステップに設定
Yajirushi 0:b1046a5398ca 17 l6470.setMaximumSpeed(1, l6470.calcMaxSpd(100));
Yajirushi 0:b1046a5398ca 18 //2番目のモーターの最大速度を毎秒200ステップに設定
Yajirushi 0:b1046a5398ca 19 l6470.setMaximumSpeed(2, l6470.calcMaxSpd(200));
Yajirushi 0:b1046a5398ca 20
Yajirushi 0:b1046a5398ca 21 //1番目と2番目のモーターを5秒回転させる
Yajirushi 0:b1046a5398ca 22 //最大速度は毎秒400ステップ
Yajirushi 0:b1046a5398ca 23 l6470.run(1, l6470.calcSpd(400), true); //1番は時計回り
Yajirushi 0:b1046a5398ca 24 l6470.run(2, l6470.calcSpd(400), false); //2番は反時計回り
Yajirushi 0:b1046a5398ca 25 wait(5.0);
Yajirushi 0:b1046a5398ca 26 l6470.stop(1);
Yajirushi 0:b1046a5398ca 27 l6470.stop(2);
Yajirushi 0:b1046a5398ca 28
Yajirushi 0:b1046a5398ca 29 //モーターが完全停止するまで待つ
Yajirushi 0:b1046a5398ca 30 while(l6470.isBusy(1) || l6470.isBusy(2));
Yajirushi 0:b1046a5398ca 31
Yajirushi 0:b1046a5398ca 32 //動きが早すぎるので人間が追い付くための待ち時間
Yajirushi 0:b1046a5398ca 33 wait(3.0);
Yajirushi 0:b1046a5398ca 34
Yajirushi 0:b1046a5398ca 35 //1番目のモーター7回転(1回転200ステップ×マイクロステップ数×7)、時計回り
Yajirushi 0:b1046a5398ca 36 l6470.move(1, 200*128*7, true);
Yajirushi 0:b1046a5398ca 37
Yajirushi 0:b1046a5398ca 38 //2番目のモーター7回転(1回転200ステップ×マイクロステップ数×7)、時計回り
Yajirushi 0:b1046a5398ca 39 l6470.move(2, 200*128*7, true);
Yajirushi 0:b1046a5398ca 40
Yajirushi 0:b1046a5398ca 41 //モーターが回転を終えるまで待つ
Yajirushi 0:b1046a5398ca 42 //2番目のモーターは1番目の2倍の速度で動くため、待ち続けることになる
Yajirushi 0:b1046a5398ca 43 while(l6470.isBusy(1) || l6470.isBusy(2));
Yajirushi 0:b1046a5398ca 44
Yajirushi 0:b1046a5398ca 45 //1番目のモーターの最大速度を2番目と同一に設定
Yajirushi 0:b1046a5398ca 46 l6470.setMaximumSpeed(1, l6470.getMaximumSpeed(2));
Yajirushi 0:b1046a5398ca 47
Yajirushi 0:b1046a5398ca 48 //それぞれのモーターの初期位置に戻る(zeroとhomeは別名の同一関数)
Yajirushi 0:b1046a5398ca 49 l6470.home(1);
Yajirushi 0:b1046a5398ca 50 l6470.zero(2);
Yajirushi 0:b1046a5398ca 51 }