Skip to content

SPI接続したMA735の設定をシリアルコマンドで確認・変更するArduinoスケッチ

License

Notifications You must be signed in to change notification settings

todateman/MA735_Setting

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

1. はじめに

このArduinoスケッチは、MA735磁気エンコーダをSPI通信を介して設定・制御するためのものです。
シリアル通信を通じてユーザーからのコマンドを受け取り、それに応じてMA735のレジスタを読み書きしたり、角度データを定期的に取得します。
以下に、シリアル通信で使用されるコマンドの内容と、シリアル通信を利用したMA735の設定方法について詳しく説明します。

なお、このArduinoスケッチは
https://github.com/SWITCHSCIENCE/samplecodes/blob/master/9826_MA735_Digital_Angle_Sensor_Module/ma735_setting/ma735_setting.ino
を参考にXIAO RP2040用に一部修正・機能追加しています。

2. シリアル通信を利用したMA735の設定方法

以下に、シリアル通信を通じてMA735���設定・制御する手順を説明します。

2.1. 接続

RP2040を使用したマイコンとは図のように接続します。

2.2. シリアル通信の開始

スケッチの setup() 関数内でシリアル通信が115200ボーレートで開始されます。また、SPI通信の初期化とCSピンの設定が行われます。
スケッチをArduinoにアップロードし、シリアルモニターを開くと、5秒後にヘルプメッセージが表示されます。

MA735 Register Settings available commands:
d
  print all registers
m interval
  Outputs the angle at interval.
r reg
  Reads the register at address 'reg'.
w reg val
  Writes 'val' to the register at address 'reg'.
z
  Set the current angle to the zero position.
cw
  Set the rotation direction to clockwise.
ccw
  Set the rotation direction to counterclockwise.
ppt pulsecount
  Set the number of pulses per rotation.

2.3. レジスタの確認 (d コマンド)

d コマンドを使用すると、MA735の主要なレジスタの現在の値を確認できます。
これにより、現在の設定状況を把握できます。

例:

d

出力例:

0x00 Z[7:0]
 0b00000000 0x0
0x01 Z[15:8]
 0b00000000 0x0
0x02 BCT[7:0]
 0b00000000 0x0
0x03 ETY:1 ETX:0
 0b00000000 0x0
0x04 PPT[1:0]:6 ILIP[3:0]:2
 0b11000000 0xC0
0x05 PPT[9:2]
 0b11111111 0xFF
0x06 MGLT[2:0]:5 MGHT[2:0]:2
 0b00011100 0x1C
0x09 RD:7
 0b00000000 0x0
0x0E FW[7:0]
 0b01110111 0x77
0x10 HYS[7:0]
 0b10011110 0x9E
0x1B MGH:7 MGL:6
 0b01000011 0x43

2.4. レジスタの読み取り (r アドレス コマンド)

特定のレジスタの値を読み取りたい場合は、r コマンドを使用します。レジスタアドレスは16進数(0x プレフィックス)、2進数(0bプレフィックス)または10進数で指定できます。

例:

r 0x04

出力例:

 0b11000000 0xC0

2.5. レジスタへの書き込み (w アドレス 値 コマンド)

MA735の設定を変更するために、特定のレジスタに値を書き込むことができます。w コマンドを使用し、レジスタアドレスと書き込む値を指定します。
レジスタアドレスと値は16進数(0x プレフィックス)、2進数(0bプレフィックス)または10進数で指定できます。

例:

w 0x04 0x10

この場合: レジスタ 0x04 に値 0x10 が書き込まれます。 また、

w 0x04 0b00010000

でも同様の書き込みが可能です。

2.6. 角度データの定期出力 (m 出力間隔(ミリ秒) コマンド)

特定の間隔でMA735の角度データを取得し、シリアルモニターに出力することができます。
m コマンドの後に間隔(ミリ秒)を指定します。

例:

m 1000

この場合: 1秒ごとに角度データが16bit(0~65535)で出力されます。

出力例:

1234
1235
1236
...

2.7. ゼロ位置の設定 (z コマンド)

MA735は磁束を基準にして角度を取得することができますが、任意の角度をゼロ位置に設定することができます。
z コマンドを実行した際の角度をゼロ位置に指定します。

例:

z

この場合: z コマンドを実行した際の角度を取得し、MA735にゼロ位置として登録します。

出力例:

angle : 12345 -> 0
0x01 Z[15:8]
 0b00111001
0x00 Z[7:0]
 0b00110000

2.8. 回転方向の設定 (cw / ccw コマンド)

MA735はデフォルトでは右回りが基準になっていますが、回転方向を入れ替えることができます。
cw コマンドを実行した際にはデフォルトと同じ右回りを基準、ccw コマンドを実行した際には反時計回りを基準に設定できます。

例:

ccw

この場合: ccw コマンドで回転方向に関するレジスタの設定を行い、MA735に反時計回りが基準になるように登録します。

出力例:

0x09 RD:7
 0b10000000 0x80

2.9. 1回転当たりのパルス数の設定 (ppt パルス数 コマンド)

MA735のエンコーダパルス出力はデフォルトでは1回転で1024パルスですが、指定したパルス数を設定することができます。
ppt コマンドの後に、1回転当たりのパルス数を設定します。

例:

ppt 360

この場合: 1回転で360のパルス数(1度あたり1パルス)を設定できます。

出力例:

ppt : 1024 -> 360
0x04 PPT[1:0]:6 ILIP[3:0]:2
 0b11000000 0xC0
0x05 PPT[9:2]
 0b01011001 0x59

2.10. ヘルプの表示

不明なコマンドを入力した場合や再度ヘルプが必要な場合は、スケッチが自動的にヘルプメッセージを表示します。
また、printHelp() 関数を呼び出すことで手動でもヘルプを表示できます。

出力例:

MA735 Register Settings available commands:
d
  print all registers
m interval
  Outputs the angle at interval.
r reg
  Reads the register at address 'reg'.
w reg val
  Writes 'val' to the register at address 'reg'.

3. コマンドの詳細な処理フロー

  1. シリアル入力の処理 loop() 関数内で、シリアルからの入力を1行ずつ読み込みます。入力された文字列をスペースで分割し、コマンド (command) とその引数 (arg1, arg2) を抽出します。

  2. コマンドの実行 executeCommand() 関数で、抽出されたコマンドに応じて適切な処理が行われます。例えば、d コマンドの場合は複数のレジスタの値を読み取り、シリアル出力します。rw コマンドの場合は、指定されたレジスタに対して読み取りや書き込みを行います。

  3. SPI通信の実行 レジスタの読み書きや角度データの取得は、readReg(), writeReg(), readAngle() 関数を介してSPI通信を行います。これらの関数では、SPIトランザクションを開始し、CSピンを制御してMA735と通信します。

  4. 角度データの定期出力 m コマンドで指定された間隔 (angle_interval) ごとに、readAngle() 関数を呼び出して角度データを取得し、シリアルモニターに出力します。

4. 注意点

  • SPI通信の設定: スケッチではSPIの設定として、10MHzのクロック速度、MSBファースト、SPIモード0が使用されています。
    MA735の仕様に合わせて適切な設定を確認してください。

  • CSピンの管理: MA735_CS ピンはデフォルトでArduinoの SS ピンに設定されています。
    必要に応じて他のピンに変更することも可能です。

  • デバイスの初期化: MA735のレジスタ設定を変更する際は、適切な初期化手順を踏む必要があります。
    不適切な設定はデバイスの動作に影響を与える可能性があります。

  • シリアル通信の速度: シリアル通信のボーレート(115200)が適切に設定されていることを確認してください。
    シリアルモニター側でも同じボーレートを設定する必要があります。

5. まとめ

このスケッチを使用することで、シリアル通信を介してMA735の各種レジスタを読み書きし、設定を変更したり、角度データを取得したりすることが可能です。
シリアルモニターを活用して、コマンドを入力しながらリアルタイムでMA735の状態を確認・制御することができます。
適切なコマンドを使用して、目的に応じた設定やデータ取得を行ってください。

6. 【メモ】2025.1.18のMA735の設定変更点

Z相パルスの立ち上がり設定を変更(ILIP) : 0000 -> 1111

ABZ出力の1回転あたりのパルス数(PPT) : 1023 (1111111111) -> 359 (0101100111)

w 0x04 0xFC
w 0x05 0x59

About

SPI接続したMA735の設定をシリアルコマンドで確認・変更するArduinoスケッチ

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages