追記 (2022 3/6)
ここで紹介しているArduinoシールド用のファームウェアを公開しています。詳しくはこちらから。
X-NUCLEO-IHM03A1
STEP400はPowerSTEP01というモータドライバチップを使っています。手っ取り早くPowerSTEP01を試してみたいという方には、STMから発売されているX-NUCLEO-IHM03A1という拡張ボードがお勧めです。
これはSTMのNucleoというプラットフォームで使える基板ですが、Arduinoシールドとしても使用可能です。また基板上の抵抗を付け替えると、最大で3段までスタックして使うことができます。MouserやDigikeyなど、メジャーな電子部品ディストリビュータから入手できます。しかも大変魅力的なお値段です!
Nucleoで試す
Nucleoのボードをお持ちであれば、STSW-SPIN002というSTMの公式の評価ツールが使用可能です。Nucleoに専用のファームウェアを書き込むだけですぐに使えます。レジスタの値まで細かく確認できますので、デバッグにも役立ちます。
Arduinoで試す
X-NUCLEO-IHM03A1をArduinoに差し込んでテストすることもできます。Sparkfunの Autodriver libraryからフォークしたMegunolinkのpowerSTEP01 Arduino Libraryが使えますが、このライブラリは電圧モードしか対応していませんので、このライブラリをさらにフォークして作成した我々のライブラリを紹介します。
Ponoor PowerSTEP01 ライブラリについて
このライブラリは、もとになったMegunolinkのライブラリに電流モードのコマンドを追加したものです。そのほかSAMDアーキテクチャで発生していた問題や、レジスタ定義の一部などを修正しています。https://github.com/ponoor/Ponoor_PowerSTEP01_Library
このライブラリはArduino IDEのLibrary Managerからインストールできます。電流モードのExampleも追加していますので、ぜひ試してみてください。
Arduinoで使う際の留意点
SPI pinouts
X-NUCLEO-IHM03A1はArduinoのフォームファクタに基づいていますが、SPIピンはSPIコネクタではなく、D11,D12,D13に出ています。これはArduino UNOか、それより古いArduinoのピン配置ですので、例えばLeonardoやMegaなどほかの機種では使うことができません。Arduino Zero/M0では、これらのピンにSPIの機能を割り当てて使用することが可能です。
Ethernet shield
イーサネットシールドと一緒にX-NUCLEO-IHM03A1を使うと、プロジェクトですぐに使えるシステムができあがります!
ただし以下の点に注意が必要です。
- PowerSTEP01のBUSYピンがD4に接続されていて、EthernetシールドのSDカードのCSピンと干渉する
- PowerSTEP01のCSピンがD10に接続されていて、EthernetシールドのW5500(旧タイプの場合はW5100)のCSピンと干渉する
これらのピンはいずれも、X-NUCLEO-IHM03A1の基板上のジャンパ抵抗を付け替えることでほかのピンと入れ替えることができます。
またEthernetシールドとPowerSTEP01ではSPIモードが異なります。そのため、PowerSTEP01と通信する際には、事前に必ず
SPI.setDataMode(SPI_MODE3);
という一文を入れる必要があります。本来はライブラリ内でSPI通信を行うたびにモード設定をしていますのでこの命令は不要のはずですが、省略するとなぜかうまく動きません。このあたりはまだ原因を調査中です。STEP400では、SAMDチップの機能を利用して異なるSPIポートをEthernetチップ(W5500)とモータドライバ(PowerSTEP01)に割り当てていますので、この処理は不要です。