Skip to content

CAN通信からの制御

TakashiKusachi edited this page Jun 28, 2018 · 4 revisions

概要

MotorSystemではCAN通信によって大体の制御と調整が可能(となる予定)です。 標準IDのみに対応し、大きく二つの部分に分かれます。

個体区別コード[3:0]

マイコン基板に取り付けられているスライドスイッチ×4によって、個体のIDを決め識別することが可能です。これらの認識は電源投入からのMotorSystem側のイニシャライズ時に決定され、電源投入後の変更、並びに外部からの変更はできません。する必要がないと思うので。

MotorSystemではCANモジュールでこの下位4bit以外にマスクをかけ、この4bitが自分の個体IDと同一の場合メッセージを取得し、割り込みを生成します。このため、同一バス上に接続されるノードはみな同様に下位4bit(16nodes)で個体識別するのがいいと思っています。そういう想定です。

命令識別コード[10:4]

命令そのものです。厳密には最上位2bitは緊急性、次の1bitはR/W、最後の4bitはcmd。という風にしています。CAN通信ではコリジョン発生時IDが最も小さいものが優先されるため、最上位2bitはこの緊急性(優先度)として、意味を付けたほうがいいと思います。個体区別コードが最後にあるのもこのためです。(これが前にあると、特定のnodeへのコマンドが何より優先されることになる。これはおかしい)

くわしい命令識別コードは参照

データエリア

データエリアは(おそらく)リトルエンディアンで転送されます。これはRXマイコンがリトルエンディアンが標準なためです。

GET_*命令について

速度などの取得方法は各種GET命令をホスト側からRTR=1、DLC=0で転送し、MotorSystemがそれをキャッチすると同じIDでRTR=0で転送してきます。このように、ホスト側はリクエストを送ってから非同期的に転送してきます。ホストアプリケーションは定期的にリクエストを発行するか、もしくはリクエストを送ってから返送が来るまで待機してください(なぜ、二つで分かれてるんですか?)。