インターフェース・バス(有線)

CAN(CANバス)

車載・産業で使う高信頼な通信バス。

概要

CAN(Controller Area Network:コントローラ・エリア・ネットワーク)は、1986年にドイツのBosch社が車載ECU(電子制御ユニット)間の通信を目的として開発した差動シリアル通信バスです。現在は車載だけでなく、産業機器・医療機器・航空宇宙分野など、高信頼性が求められる幅広い用途で使われています。

CANの最大の特徴は「高い耐ノイズ性」と「マルチマスター対応」です。CANH/CANLの2線差動信号を使うため、ノイズ環境に強く、バスに接続された全デバイス(ノード)が対等にバスを使えるマルチマスターアーキテクチャを採用しています。また、1つのノードが故障してもバス通信が維持される耐障害性も大きな強みです。

標準的なCAN(CAN 2.0)は最大1Mbpsの速度を持ちます。より高速・大容量が必要な用途にはCAN FDが使われます。

歴史・背景

CANの開発は1983年、Boschがメルセデス・ベンツと共同で開始しました。1986年のSAE(自動車技術会)で正式発表され、1991年にはIntelとPhilipsが最初のCAN ICを製品化。1993年にISO 11898(高速CAN)とISO 11519(低速CAN)として国際標準化されました。

1990年代に欧州の自動車メーカーが次々とCANを採用し、2004年にはEUがすべての新車へのCAN搭載を義務化。今日では1台の自動車に70〜100個ものECUが搭載され、数本のCANバスで繋がれています。

産業分野ではCANopenプロファイルが標準化され、産業機器の相互接続性を確保しています。また医療機器・エレベーター・農業機械など、安全性・信頼性が重視される分野でも採用が進んでいます。

技術仕様

物理層

仕様
信号方式差動(CANH/CANL)
ドミナント電圧CANH: 3.5V, CANL: 1.5V(差電圧2V)
レセッシブ電圧CANH/CANL共に約2.5V(差電圧0V)
最大ノード数理論値127、実用上32〜110
最大バス長1Mbps時: 40m / 125kbps時: 500m / 10kbps時: 6km
終端抵抗両端に120Ω(差動インピーダンス60Ω)

速度と距離の関係

速度最大バス長
1 Mbps40 m
500 kbps100 m
250 kbps250 m
125 kbps500 m
10 kbps6 km

フレームフォーマット(CAN 2.0A:標準フレーム)

[SOF][ID(11bit)][RTR][IDE][r0][DLC(4bit)][Data(0〜8byte)][CRC(15bit)][CRC Del][ACK][ACK Del][EOF]
  • SOF(Start of Frame): フレーム開始の1ビット(ドミナント)
  • ID(識別子): 11ビット(標準)または29ビット(拡張フレーム)。優先度も兼ねる
  • RTR(Remote Transmission Request): データ要求フレームの識別
  • DLC(Data Length Code): データ長(0〜8バイト)
  • Data: 最大8バイトのペイロード
  • CRC: 15ビットのCRC(誤り検出)

CAN 2.0Bでは拡張フレーム(29ビットID)が追加されました。

動作原理

ビット調停(Arbitration)

CANはマルチマスターバスのため、複数ノードが同時に送信を開始する可能性があります。CANはビット単位の「非破壊調停(Non-destructive Arbitration)」で競合を解決します:

  • ドミナント(Dominant): 論理0。任意のノードがドミナントを送出すると、バス全体がドミナント
  • レセッシブ(Recessive): 論理1。全ノードがレセッシブのとき、バスはレセッシブ

送信中に自分の送出ビット(レセッシブ)とバスの状態(ドミナント)が異なる場合、そのノードは送信を停止して受信に切り替わります。IDが小さい(数値が低い)フレームが優先されます(低IDほど0が多くドミナントが勝つ)。

エラー処理

CANの高信頼性を支えるのは多層的なエラー検出と自動再送です:

  • CRCエラー: CRC不一致
  • スタッフエラー: 6ビット連続同値(ビットスタッフィング違反)
  • フォームエラー: フレームフォーマット違反
  • ACKエラー: ACKスロットで誰もACKを返さない
  • ビットエラー: 送信中に異なるビットを検出

エラーを検出したノードはエラーフレームを送出してフレームを無効化します。各ノードはTEC(送信エラーカウンタ)とREC(受信エラーカウンタ)を持ち、一定値を超えると「バスオフ状態」になりバスから切り離されます。

// STM32 HAL を使ったCAN送信例(CAN 2.0A標準フレーム)

CAN_TxHeaderTypeDef tx_header;
uint8_t tx_data[8];
uint32_t tx_mailbox;

tx_header.StdId              = 0x123;       // 11ビットID
tx_header.IDE                = CAN_ID_STD;  // 標準フレーム
tx_header.RTR                = CAN_RTR_DATA;
tx_header.DLC                = 8;           // データ長8バイト
tx_header.TransmitGlobalTime = DISABLE;

tx_data[0] = 0x01;
tx_data[1] = 0x02;
// ... (tx_data[2]〜[7]をセット)

HAL_CAN_AddTxMessage(&hcan1, &tx_header, tx_data, &tx_mailbox);

// 受信設定(フィルタ設定)
CAN_FilterTypeDef filter;
filter.FilterBank           = 0;
filter.FilterMode           = CAN_FILTERMODE_IDMASK;
filter.FilterScale          = CAN_FILTERSCALE_32BIT;
filter.FilterIdHigh         = 0x0000;
filter.FilterIdLow          = 0x0000;
filter.FilterMaskIdHigh     = 0x0000;
filter.FilterMaskIdLow      = 0x0000;
filter.FilterFIFOAssignment = CAN_RX_FIFO0;
filter.FilterActivation     = ENABLE;
HAL_CAN_ConfigFilter(&hcan1, &filter);

// 受信割り込みコールバック
void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan) {
    CAN_RxHeaderTypeDef rx_header;
    uint8_t rx_data[8];
    HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO0, &rx_header, rx_data);
    // rx_header.StdId でIDを確認、rx_data でデータを処理
}

用途・ユースケース

CANが採用される主な分野:

  • 車載ECU間通信: エンジン制御・変速機・ABS・エアバッグ・ボディコントロールなど多数のECUをCANバスで接続
  • OBD-II診断: 車両の故障診断ポートはCAN上のOBDプロトコル(ISO 15765-4)
  • 産業用ロボット: 多軸ロボットの各軸モーターコントローラ間のリアルタイム通信(CANopenプロトコル)
  • 医療機器: 人工呼吸器・手術ロボットなど安全性が求められる機器
  • 農業機械・建設機械: ISOBUS(ISO 11783)規格による農業機械の標準インターフェース
  • エレベーター制御: 各階ボタンユニットと制御盤の通信

実装・開発のポイント

終端抵抗の重要性

CANバスの両端には必ず120Ωの終端抵抗が必要です。終端がないと信号が反射してエラーが多発します。開発時はバスの両端(最初と最後のノード)に120Ωを実装します。

ビットタイミングの設定

CANのビットタイミングはプリスケーラ・プロパゲーションセグメント・フェーズセグメント1・フェーズセグメント2で構成されます。1ビット時間は複数のTime Quantum(Tq)に分割されます。マイコンのクロックから目標ボーレートを設定するための計算:

1ビット時間 = 1 / ボーレート
Time Quantum (Tq) = 1 / (システムクロック / プリスケーラ)
1ビット = (Sync_Seg + Prop_Seg + Phase_Seg1 + Phase_Seg2) × Tq

各マイコンベンダーのCANビットタイミング計算ツールや、オンラインのBit Timing Calculatorを使うと便利です。

CANopenとDBC

産業用途ではCANopenプロトコルを使うことでデバイス間の相互運用性が確保できます。車載用途ではDBC(CAN Database)ファイルでメッセージ定義を管理し、CANalyzerなどのツールで通信解析を行います。

他技術との比較

CAN vs RS-485

項目CANRS-485
マルチマスターあり(調停機能)なし(マスタースレーブ)
エラー処理ハードウェアで自動ソフトウェアで実装
ボーレート最大1Mbps最大10Mbps
最大距離1Mbps時40m10Mbps時12m, 100kbps時1200m
対象分野車載・産業産業・建物設備

CAN vs CAN FD

CAN FD(CAN with Flexible Data-rate)は標準CANの後継で、データフェーズを最大8Mbpsまで高速化し、ペイロードを最大64バイトまで拡張しました。既存のCANネットワークとの後方互換性も持ちます。

関連用語

参考リンク