
2026-09-08

最近の自動車には、多くの電子制御装置が搭載されています。
例えば、
など、さまざまな機能が電子制御によって動いています。
こうした制御を担当する電子制御装置は、一般に**ECU(Electronic Control Unit)**と呼ばれます。
そして、複数のECUが情報をやり取りするために使われている代表的な通信方式の一つが、
CAN(Controller Area Network)
です。
CANは車載ネットワークで広く利用されている通信方式の一つですが、実際の車両では用途に応じて複数の通信方式が使い分けられており、ネットワーク構成もメーカーや車種、システムによって異なります。
今回は、その中でも車載システムで広く利用されてきたCAN通信の基本的な仕組みについて紹介します。
自動車の中では、それぞれのECUが完全に独立して動いているわけではありません。
例えば、あるECUが取得した情報を、別のECUでも利用したい場合があります。
そこで必要になるのが、ECU同士で情報を共有するための通信です。
CANでは、複数のECUなどのノードが同じ通信ネットワークに接続され、CANバスを通じてメッセージを送受信します。
イメージとしては、
ECU A
↓
CANバス
↓
ECU B・ECU C・ECU D
という形です。
ただし、「ECU AがECU Bだけに直接データを送る」という仕組みとは少し異なります。
CANでは基本的に、送信側がCANバス上にメッセージを送信し、それぞれの受信側が、そのメッセージを必要とするかどうかを判断します。
CAN通信を理解するうえで重要なのが、
CAN Identifier(CAN ID・識別子)
です。
CANのフレームには識別子が含まれています。
この識別子は、一般的なネットワーク通信における「この端末へ送る」という単純な宛先アドレスとは役割が異なります。
受信する側は識別子を確認し、自分に必要なメッセージであれば、そのデータを受け取って処理します。
例えば、ある識別子のメッセージを、
「車両のある状態を示す情報」
としてシステム側で定義しておけば、その情報を必要とする複数のECUが同じメッセージを利用できます。
どの識別子にどのような意味を持たせるかは、車両やシステムの設計によって決められます。
同じCANバスに複数のECUが接続されていると、
「2つのECUが同時にデータを送ろうとしたらどうなるのか?」
という疑問が出てきます。
CANには、そのための**仲裁(Arbitration)**という仕組みがあります。
複数のノードが同時に送信を開始した場合、識別子などのビットを使ってバス上で仲裁が行われます。
CANでは、dominant(ドミナント)とrecessive(リセッシブ)という2つの論理状態を利用します。
仲裁の結果、送信を継続できるノードと、送信をいったん停止するノードが決まります。
重要なのは、一般的な通信でイメージするような、
「データ同士が衝突して両方とも壊れてしまう」
という方法ではないことです。
CANでは送信しながらバスの状態を監視し、仲裁に負けたノードは送信を中断します。
そのため、優先度の高いメッセージを先に送信できる仕組みになっています。
CANでは識別子の数値が小さいメッセージほど、仲裁上の優先度が高くなります。
自動車の中は、電子機器にとって必ずしも穏やかな環境ではありません。
モーターや各種電装品が動作し、電気的なノイズの影響を受ける可能性もあります。
そのため、通信ではデータを送るだけではなく、
「正しく通信できたか」
を確認することも重要です。
CANには、通信上の異常を検出するための複数の仕組みがあります。
例えば、
などです。
CANでは各ノード自身も通信状態を監視し、エラーの発生状況に応じた処理を行う仕組みが規定されています。
こうしたエラー検出・処理の仕組みも、CANの重要な特徴です。
従来から広く使われてきたClassical CANでは、一つのデータフレームで扱えるデータ部分は最大8バイトです。
現在では、より多くのデータを扱える**CAN FD(CAN Flexible Data Rate)**も利用されています。
CAN FDでは、データフィールドを最大64バイトまで拡張できます。
また、フレームの一部でより高いビットレートを使用できる仕組みも導入されています。
さらに現在のCAN規格には、CAN XLという新しいフレーム形式もあります。
つまりCANも、一つの規格のまま止まっているわけではなく、扱うデータ量や通信性能への要求に合わせて発展しています。
CANというと自動車を思い浮かべることが多いかもしれません。
もともと車載用途と深く結びついて発展した通信技術ですが、CANは車載以外の制御システムでも利用されています。
産業機器など、複数の制御装置が情報をやり取りするシステムでも利用される通信技術です。
そのため、組込み・制御系のソフトウェア開発に携わっていると、
「CAN」
という名前に触れる機会があります。
車載ソフトウェアの開発というと、
CやC++でプログラムを書くことに目が向きがちです。
しかし実際のシステムでは、そのプログラムが単独で動いているわけではありません。
ECUがセンサーなどから情報を受け取り、処理を行い、必要な情報を通信によって他のECUと共有する。
その通信を支えている技術の一つがCANです。
「自分が書いたプログラムのデータは、どのように別のECUへ伝わるのか」
そこまで少し視野を広げてみると、組込み・制御システム全体の理解にもつながってきます。
プログラムを書く技術だけではなく、そのプログラムが動くシステムの仕組みを知る。
それも、組込み・制御系エンジニアにとって大切な技術知識の一つではないでしょうか。
担当者 技術部主任