L6470 ステッピングモータードライバー

例によって秋月で、L6470ステッピングモータードライバーのモジュールを買った(750円)。
※ステッピングモーター駆動のタコメーターを作る予定で買った。

早速動かしてみたので、その報告。

L6470 は、最大 48V、定格 3A のドライバーで、128 マイクロステップが可能なインテリジェントドライバーだ。
制御は SPI で行う。
※このLSIは、位置と速度を管理していて、単なるドライバーとは言えない高機能なものだ。

「マイクロステップ」とは、ステッピングモーターの2つの相に流す電流の比を制御して、より細かいステップで制御する方法で、2相(4相)ステップモーターの相コイルは、丁度90度に直行した構造なので、X、Y軸の関係に等しい。
X、Y軸をそれぞれ、サインとコサインの関係で、電流比を制御すると、理論的には無限大まで分解能を上げられる。
このICはステップモーターの1ステップを128分割まででき、きめ細かな制御が出来る。
注意して欲しいのは、ステッピングモーターに流れる電流は、誘導性負荷なので、速度(回転速度)が速くなると当然流れる電流は少なくなる、なので、制御の精度は、「比」となる、絶対的な電流では無い。

実験には、ATMega88P を使い、SPI の制御を行って、L6470 にコマンドを送って制御した。
※ネットを探すと、Arduino のスケッチが色々見つかるが、純粋に C++ でプログラムを行った。

ステップモーターは秋月で買った物で、定格12Vなのだが、ユニポーラをバイポーラとして駆動する為、12Vで駆動する場合、定格の半分となる。
※最終的にはタコメーターを作る予定なので、12Vで丁度良いと思う。

回路図は書いて無いので、結線は以下のように接続する。
PC0: L6470 STBY/RST
PB2: L6470 /CS
MOSI PB3: L6470 SDI
MISO PB4: L6470 SDO
CLK PB5: L6470 CK

電源は12V、AVRには5Vを印加する。

※他の回路は参考資料にある回路をそのまま使う。
※boot ストラップに使うダイオードはショットキーダイオードを使う。(手持ちの都合で、2A/40V を使った)

IMG_0443s

ソースコード

まだ、実験的コードなので、色々未完成、タコメーターのハード製作に合わせて修正していく予定。

-----
追記:
2013年7月1日(21時25分)
ソースコードを更新しました。
spi.hpp ---> AVR の SPI 通信をクラス化したものです。(まだ不完全です)
L6470io.hpp ---> L6470 の制御をクラス化しました。(まだ不完全ですが、コマンド発行など、より判り易く使えます)

2013年7月1日(22時23分)
L6470io.hpp を更新、これで、アプリケーションから、必要な事が出来るようになった感じ。
※ステータスの読み込みは、まだ未実装

動画をアップ