秋月電子のL6470キットをデイジーチェーン接続(3)

秋月電子通商の<AE-L6470DRV>をデイジーチェーン接続で駆動させるためにしたことをアレコレ書いてます。


mbedで簡単に動かす

前回と前々回の記事でややこしいことをいろいろ書きましたが、泥臭い作業ばかりでぜんぜんmbedらしくありません。
L6470のことを考えて朝も起きれないようになってはダメなので、簡単なサンプルライブラリ?を用意しました。

download.png

ソースコード (main.cpp,
mbed_L6470_DC.h,
mbed_L6470_DC.cpp)
 こちらは公開を停止しました。

ライブラリっぽいものを作っておいてます。そっちを使ってください。
https://developer.mbed.org/users/Yajirushi/code/L6470_daisy_chain/

注意:個人の使用であれば改変は自由ですが、再配布はご遠慮ください。
個人で作成して検証も不十分ですので、使用して何らかの問題が発生した場合でも責任は負いかねます。
あらかじめご了承ください。個人以外での使用は、無償有償を問わず必ず事前にご連絡いただきたく思います。
(端的にいうとお金ください)

使用方法やプログラムの内部説明については、記事の続きをご参照ください。


サンプルを使うための準備

サンプルを使うために、予め以下の準備をしておく必要があります。

  • L6470とモーター用電源の接続
  • mbedとL6470とモーターの配線

L6470とモーター用電源の接続は、線を2本つなぐだけなので問題はないと思います。
モーターとL6470の結線は、モーターのメーカーによって配線の色が違ったりするので気を付けてください。

jikkenl6470haisen.png

mbedとL6470の接続は前回の記事で触れていますので、そちらを参照願います。
尚、私の実験した環境での配線は以下のようになっています。

ホントは3つでも4つでも接続できるんですが、幾分場所をとるので今回は2つだけにしています・・・。

サンプルの使用方法

ここではmbedのWEBコンパイラからテスト用のプログラムを動かすまでを説明しています。
プロ(笑)の方は、mbed_L6470_DC.hとmbed_L6470_DC.cppを読み込んでmain.cppに目を通すだけで十分です。
※main.cppはNucleo F401RE用に記述しています。青mbedや黄mbedにはユーザー用ボタンはありませんのでご注意ください。

1.mbedのコンパイラで新規プロジェクトを作る

pg1_l6470_newproj.png

mbedのWEBコンパイラを起動し(ローカル環境があるならそれでも構いません)、
左上メニューの[NEW]から[New Program…]をクリック。
PlatformTemplateを自分の環境に合わせて選んで、Program Nameをつけて[OK]

TemplateはEmptyじゃなくて何かを入れておいたほうが楽になります

2.ライブラリをインポート

pg1_l6470_import1.png


▲プログラム名フォルダを右クリックして、[Import Library]-[From Import Wizard …]

pg1_l6470_import2.png


▲真ん中のカラムの[Upload]タブをクリックし、参照ボタンでファイルを選択

pg1_l6470_import3.png


▲上記のように2つ選択できたら、[Import]ボタンをクリック

pg1_l6470_import4.png


▲ダイアログは何もせず[Import]ボタンをクリック

pg1_l6470_import5.png


▲最終的にこのような階層になればOK

main.cppを作成または改変

ライブラリが読み込めたので、実験したいようにmain.cppを改変してください。
サンプルに付属のmain.cppはNucleoボード用
書いているので、ユーザーボタンが押されるまで待つ命令がありますが
青mbedや黄mbedにはユーザーボタンがありませんので、
5行目、13行目、20行目をコメントアウトしてもらう必要があります。

5行目

DigitalIn   btn(USER_BUTTON);

13行目、20行目

	while(btn);

また、mbedのプラットフォームによってはSPIに使用するピン別名(PinName)が異なる可能性もありますので、
10行目付近のStepperL6470クラスのインスタンス化の引数を各自のプラットフォームに合わせて変更してください。

10行目付近

	StepperL6470 l6470(USBTX, USBRX, SPI_MOSI, SPI_MISO, SPI_SCK, D10);

第1引数はシリアル通信に使用するUSBTX, 第2引数はシリアル通信に使用するUSBRX
第3引数はSPIのMasterOut SlaveIn(いわゆるMOSI), 第4引数はSPIのMasterIn SlaveOut(いわゆるMISO)
第5引数はSPIのクロック信号(いわゆるSCK)
第6引数はSPIのCS信号

そこ以外は特に変更しなくても、コンパイルは通ると思います。
配線さえ合っていれば、モーターがゆるゆるとまわる光景が楽しめます。

もしモーターが回ろうとしているのに、ガッっとなっている場合は脱調している可能性があります。
KVALなどの設定をsetKVALで設定しなおしてみてください。

サンプルライブラリの特徴

だいたい説明が必要なところはコメントを振っていると思いますので、そちらを読んでみてください。
モーターを動作させるために最低限必要な項目は下記になります。

  1. #includeでの”mbed_L6470_DC.h”のインクルード
  2. StepperL6470クラスのインスタンス化
  3. init()メソッドの実行

init()メソッドの実行時にSPIでリセット前のL6470に対して
0xEE(L6470で解釈できない命令)を投げて、SPIチェーンの数を特定していますので、
モーター個数が増えようが減ろうが数を記載する必要はありません。

初期設定では、モーターの最大速度を800step/s加減速0x2E0常にマイクロステップ駆動にセットしています。
この設定が気に食わない場合はinit()メソッドの後でsetMaximumSpeedsetAccelerationを実行して値を書き換えるか、mbed_L6470_DC.cppの記述を変更してデフォルト値を変えてください。

そのほかの動きについてわからないことがあれば、私のわかる範囲で(暇であれば)答えますので、
この記事に対してコメントを頂ければと思います。


コメントを残す