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:
Tue Jan 12 11:33:16 2016 +0000
Revision:
4:781871b89ac4
Parent:
0:b1046a5398ca
Add Daisy-chain queue and methods. rewrite many...many...so many comments.

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 4:781871b89ac4 22 //最大速度は毎秒300ステップ
Yajirushi 4:781871b89ac4 23 //キューを介して実行していないので、開始タイミングがズレる
Yajirushi 4:781871b89ac4 24 l6470.run(1, l6470.calcSpd(300), true); //1番は時計回り
Yajirushi 4:781871b89ac4 25 l6470.run(2, l6470.calcSpd(300), false); //2番は反時計回り
Yajirushi 0:b1046a5398ca 26 wait(5.0);
Yajirushi 0:b1046a5398ca 27 l6470.stop(1);
Yajirushi 0:b1046a5398ca 28 l6470.stop(2);
Yajirushi 0:b1046a5398ca 29
Yajirushi 0:b1046a5398ca 30 //モーターが完全停止するまで待つ
Yajirushi 0:b1046a5398ca 31 while(l6470.isBusy(1) || l6470.isBusy(2));
Yajirushi 0:b1046a5398ca 32
Yajirushi 0:b1046a5398ca 33 //動きが早すぎるので人間が追い付くための待ち時間
Yajirushi 0:b1046a5398ca 34 wait(3.0);
Yajirushi 0:b1046a5398ca 35
Yajirushi 4:781871b89ac4 36 //実行キューに追加:1番目のモーター7回転(1回転200ステップ×マイクロステップ数×7)、時計回り
Yajirushi 4:781871b89ac4 37 l6470.ENQ_move(1, 200*128*7, true);
Yajirushi 0:b1046a5398ca 38
Yajirushi 4:781871b89ac4 39 //実行キューに追加:2番目のモーター7回転(1回転200ステップ×マイクロステップ数×7)、時計回り
Yajirushi 4:781871b89ac4 40 l6470.ENQ_move(2, 200*128*7, true);
Yajirushi 4:781871b89ac4 41
Yajirushi 4:781871b89ac4 42 //キューを実行
Yajirushi 4:781871b89ac4 43 l6470.Qexec();
Yajirushi 0:b1046a5398ca 44
Yajirushi 0:b1046a5398ca 45 //モーターが回転を終えるまで待つ
Yajirushi 0:b1046a5398ca 46 //2番目のモーターは1番目の2倍の速度で動くため、待ち続けることになる
Yajirushi 0:b1046a5398ca 47 while(l6470.isBusy(1) || l6470.isBusy(2));
Yajirushi 0:b1046a5398ca 48
Yajirushi 0:b1046a5398ca 49 //1番目のモーターの最大速度を2番目と同一に設定
Yajirushi 0:b1046a5398ca 50 l6470.setMaximumSpeed(1, l6470.getMaximumSpeed(2));
Yajirushi 0:b1046a5398ca 51
Yajirushi 0:b1046a5398ca 52 //それぞれのモーターの初期位置に戻る(zeroとhomeは別名の同一関数)
Yajirushi 0:b1046a5398ca 53 l6470.home(1);
Yajirushi 0:b1046a5398ca 54 l6470.zero(2);
Yajirushi 0:b1046a5398ca 55 }