1. はじめに
趣味でMA735の磁気エンコーダを搭載したモジュールをswitch-scienceから購入しました。
このMA735はSPI、A・B・Z相のエンコーダ出力、PWMの3種類の方法で角度を取得することができるのですが、データシートを参照するとSPI接続でレジスタに直接アクセスすることで、現在の設定の確認や設定変更することができると記載があります。
この設定変更のためのArduinoスケッチは
で公開されているのですがReadmeがなくぱっと見では使用方法が分からないので、Readmeを整理してコマンドで簡易的に設定変更できるように機能追加したArduinoスケッチを
で公開しています。
なので、手っ取り早くMA735のレジスタを弄りたい人は上記のリポジトリを活用してください。
2. 例: 1回転当たりのパルス数を変更する場合
MA735のデータシートを参照するとP.22に記載があるのですが、10bitのPPT[9:0]
でエンコーダ出力時の1回転当たりのパルス数を指定する旨で記載があります。
(実際に欲しいパルス数-1の値を設定せよと書いてあります。)
ちなみに初期設定では1回転で1024パルスです。
PPT(9:0)はアドレス0x05
の全8bit(PPT[9:2]
)とアドレス0x04
の上位2bit(PPT[1:0]
)で設定します。
初期設定では1回転当たりのパルス数は1024
で、実際のレジスタ値はアドレス0x05
に16進数で0xFF
(2進数では11111111
)、アドレス0x04
に16進数で0xC0
(2進数では11000000
)として設定されています。
この場合、アドレス0x05
の全8bitとアドレス0x04
の上位2bitを合体させると11111111
と11
を合わせた11111111 11
になり、10進数に変換すると1023と読み取れるわけです。
※0x04にはZパルスのタイミングや長さの設定も上位3~6bitでILIP[3:0]
として設定するのですが、ここでは初期設定のまま0000
のまま変更していない前提で進めます。
さて、仮に1回転当たりのパルス数を360に変更するとします。
この場合、実際に設定する値は360 - 1 = 359です。
10進数の359を2進数に変換すると0101100111
になります。
この10bitの2進数をアドレス0x05
とアドレス0x04
にそれぞれ割り当てる上位8bit+下位2bitに分解すると、
0x05: 01011001
0x04: 11******
になります。
アドレス0x05
の方はそのまま書き込んでしまっていいのですが、アドレス0x04
の方は******
で表現した下位6bitにはZパルスのタイミングや長さの設定があるので、誤って変更しないように気を付けます。
初期設定のままであれば
0x04: 11000000
でいいのですが、もし変更済みなら
0x04: 11111100
にしないといけないかもしれません。
なので、変更前に現在の設定を一度確認した方がいいです。
3. 10進数と2進数の変換や事前に設定を確認がめんどくさいよう…
なので、比較的使用頻度の多そうなレジスタの書き換え機能を追加したArduinoスケッチを
で公開しています。
Readmeを読んでもらえれば概ね使い方はわかるはずですが、参考元の
にあった
- 全レジスタの確認 (
d
コマンド) - 個別のレジスタの読み込み(
r アドレス
コマンド)・書き込み(w アドレス 値
コマンド) - 角度データの定期出力 (
m 出力間隔(ミリ秒)
コマンド)
に加えて
- ゼロ位置(
z
コマンド) - 回転方向(
cw
ないしccw
コマンド) - 1回転当たりのパルス数(
p パルス数(10進数)
コマンド)
をコマンドと数値で設定できるようにしています。
ゼロ位置と1回転当たりのパルス数に関しては事前に現状の設定を確認したうえで変更を行うので、誤って違うアドレスやbitを弄ってしまうミスがないようにしたつもりです。