CAN信号を分析して、実際の値に変換する方法

車両のCAN信号を受信して、PCに表示させることができるようになったら、いよいよCAN信号の分析をしていきます。

過去の記事を基に、ハードとソフトを作成すれば、ProcessingでCAN idと16進のCANデータを表示させることができていると思います。

sx99.hatenablog.com
sx99.hatenablog.com
sx99.hatenablog.com


表示されているCAN値が何を示しているかは、車を操作した時の値の変化から、どのIDの何バイト目が対応しているのかを特定し、さらに、分解能(LSB)やオフセットを推定する必要があります。
全てを特定することはできませんが、ある程度推定することは可能です。

例えば、ステアリング角センサの出力信号を特定する場合は、以下のようにします。
(この記事で特定したCAN id 、CAN信号は私の車のものであり、CAN ID、CAN信号はカーメーカ、もしくは車種ごとに異なります。)

CANを読み出しながら、車両のハンドルを左右に回すと、id 119の3~6バイト目が変化します。
ハンドル操作したときだけ値が変化するため、ここがステアリング角度センサの出力値であることが分かります。

f:id:SX99:20220418031638p:plain
ハンドルを操作して値が変化する場所を見つける

ここで、3~4バイト目(赤枠)と5~6バイト目(黄枠)は2進数換算で"1"ズレているだけで、常にほぼ同じ値が出力されています。
これは、信号出力が2重系になっているか、またはどちらかが補正有り/無しなどの違いによるものだと思います。
走る、止まる、曲がるに関わる機能に使用する信号は、2重系にして信頼性を高める場合があるので、この信号もそのような用途のため2個出力されているのだと思います。
どちらを使っても問題無いと思いますが、今回は赤枠側を使用して説明します。

f:id:SX99:20220418031912p:plain
ほぼ同じ値が出力されている場合がある

ステアリング角の信号用にCANとしては2バイト分確保されていることが分かりました。
2バイト分のMAX値は"FF FF" なので、普通に考えれば、センター付近はその1/2に設定するはずです。
よって、ハンドルセンターの出力は "FFFF" x 1/2 = "7FFF" (10進換算で32,767) と推定します。

これはセンター付近の実際のCAN出力とも近い値なので、問題なさそうです。


次に、ハンドルを右に180°回転させてみると、出力は"78 F6" となります。
センターとの出力差は10進数に変換して計算すると
32,767 - 30,966 = 1,801
となります。

f:id:SX99:20220418032143p:plain
ハンドルを右に180°回転させた場合の出力を確認

今度はハンドルを左に180°回転させると、CAN出力は"87 17" なので、センターとの出力差は
32,767 - 34,583 = -1,816
となります。

右に180°の出力が1,801で、左に180°の出力が-1,816なので、
ここからCAN出力値を1/10にすれば、実際のステアリング角度と一致すると考えられます。

f:id:SX99:20220418032406p:plain
ハンドルセンターの値からCAN出力値を引いて、1/10すればOK

まとめると、CAN出力された値を16進から10進に換算して得られた値から、ハンドルセンターの値 "7FFF" を引いて、1/10すれば、CAN値からステアリング角度に換算することができるのです。

他のCAN信号も、このような感じで分析を進めていくことになります。


分析する上で、ヒントになる情報を以下に書いておきます。
・サービスマニュアルを確認する。
 CAN信号の一覧表が記載されていることがあります。
 記載されている信号が変化しそうな操作をして、どのバイト位置で出力されているか特定しましょう。

・コントローラのフューズを抜く。
 IGオンの状態でコントローラの電源フューズを抜けば、当然そのコントローラが送信していたCAN IDが
 出力されなくなるので、CAN idがどのコントローラの物なのか、特定できます。
 注意)ヒューズを抜くと、他のコントローラがCAN通信異常の故障を検出して、
    警告灯が点灯する可能性があります。

 CANで出力されている値は、基本的にそのコントローラが内蔵しているセンサ、または、ハードワイヤで接続している外部センサの値や、入力されたセンサの値から演算したデータですので、
 そういった観点で分析すると、多少絞り込めると思います。

・海外のフォーラムをチェックする。
 ネットで検索すると海外のサイトで、車両ごとのCAN信号の分析結果について、情報共有が行われていることがあります。後日別で記事にまとめる予定です。


データの分析する際に、PCを見ながら車を走行させる機会が出てくると思います。
次回はノートPCを車載する方法について説明します。


<注意>
走行する際はPCの画面を注視すること無く、周りに障害物の無い広い場所を使う等、
事故が発生しないように十分注意して下さい。
万が一事故が発生しても、当ブログは一切の責任を負いません。