コンテンツにスキップ

CAN通信

CANとは

CAN(Controller Area Network)は、複数の機器同士が1本の通信バスを共有して通信を行うためのシリアル通信規格である。

主に自動車や産業機器で利用されており、高い信頼性とノイズ耐性を持つことが特徴である。

現在では、

  • 自動車

  • ロボット

  • 工作機械

  • ドローン

  • 産業用制御装置

など幅広い分野で利用されている。


特徴

マルチマスタ方式

CANでは通信を管理する親機(マスタ)が存在しない。

接続されている全ての機器が通信を開始できる。

そのため一部の機器が故障しても通信ネットワーク全体への影響が少ない。


高いノイズ耐性

CANは差動通信を採用している。

通信線には

  • CAN_H

  • CAN_L

の2本を使用する。

ノイズが両方の線に同時に乗った場合でも差分を利用して通信を行うため、誤動作しにくい。


エラー検出機能

CANには様々なエラー検出機能が組み込まれている。

主なものとして

  • CRCチェック

  • ACK確認

  • フレームチェック

  • ビット監視

などが存在する。

異常が検出された場合は自動的に再送信が行われる。


配線

基本的な接続は以下のようになる。

MCU A
  │
CANトランシーバ
  │
CAN_H ───────────── CAN_H
CAN_L ───────────── CAN_L
  │
CANトランシーバ
  │
MCU B

終端抵抗

CAN通信では通信線の両端に終端抵抗を設置する。

一般的には120Ωを使用する。

120Ω                     120Ω
 │                         │
CAN_H ─────────────────── CAN_H
CAN_L ─────────────────── CAN_L

終端抵抗が無い場合、

  • 通信エラー

  • 波形の反射

  • 通信速度低下

などの問題が発生する。


通信速度

CANの通信速度は配線長によって制限される。

代表例

通信速度 配線長の目安
1Mbps 約40m
500kbps 約100m
250kbps 約250m
125kbps 約500m

実際の通信品質は配線方法や周囲環境によって変化する。


フレーム

CANではデータをフレームとして送信する。

主な情報は以下の通りである。

項目 内容
ID メッセージ識別番号
DLC データ長
Data 送信データ
CRC エラー検出用
ACK 受信確認

CAN ID

CANでは送信元や送信先ではなく、メッセージそのものにIDを付与する。

ID 内容
0x100 モータ状態
0x101 モータ温度
0x200 バッテリ情報
0x300 エラー情報

受信側は必要なIDのみを受信する。


優先度制御

CANではIDが小さいほど優先度が高い。

ID 優先度
0x001
0x010
0x100

複数の機器が同時送信を行った場合でも、自動的に優先度が高いメッセージが送信される。

この仕組みを調停(Arbitration)という。


CANコントローラとCANトランシーバ

CAN通信には通常2種類の回路が必要となる。

CANコントローラ

通信データの生成や解析を行う。

  • STM32内蔵CAN

  • MCP2515

CANトランシーバ

CAN_HとCAN_Lの物理信号を生成する。

  • SN65HVD230

  • TJA1050

  • MCP2551


I2Cとの違い

項目 CAN I2C
通信線 2本 2本
通信距離 長い 短い
ノイズ耐性 高い 普通
通信速度 中程度 高速
マルチマスタ
用途 機器間通信 基板内通信

UARTとの違い

項目 CAN UART
通信相手 複数 基本1対1
エラー検出 強力 限定的
ノイズ耐性 高い 普通
配線 CAN_H/CAN_L TX/RX

メリット

  • ノイズに強い

  • 長距離通信が可能

  • 複数機器を接続できる

  • エラー検出機能が豊富

  • 自動車業界で広く利用されている


デメリット

  • UARTより実装が複雑

  • トランシーバが必要

  • I2Cより回路規模が大きい


Asterでの利用

前述した通りノイズに強いのでACとALEOとの通信に使用している。