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との通信に使用している。