Robotics
CAN のビットタイミングとバス長制約
CAN の bit rate とバス長のトレードオフの物理的理由、Bit Time セグメント構造
要点
CAN のビット単位アービトレーションは「1 bit 時間内に送信ビットがバスの反対端まで往復して戻れる」ことを要求する。信号伝搬遅延がボトルネックで、bit rate × バス長 ≲ 50 Mbps·m が実用の目安。
数字
- CAN ケーブル上の伝搬速度: 約 200,000 km/s ≈ 2/3 c ≈ 5 ns/m
- トランシーバ遅延: 片方向 50〜150 ns 典型
- サンプルポイント: 通常 bit time の 75〜87.5%
- 1 bit = 8〜25 TQ (Time Quantum) 分割が典型
bit rate と最大バス長 (経験則)
| bit rate | 最大バス長 |
|---|---|
| 1 Mbps | 40 m |
| 500 kbps | 100 m |
| 250 kbps | 250 m |
| 125 kbps | 500 m |
| 10 kbps | 5 km |
物理的な根拠
アービトレーションと ACK スロットでは、送信ビットが「バスの反対端まで届いて反応が戻ってくる」必要がある。よって:
t_bit ≥ 2 × ( 2L / v_prop + t_TX + t_RX + t_comp )2L / v_prop: 送信→反対端の往復遅延t_TX + t_RX: トランシーバ IC 遅延t_comp: コンパレータ・ノード内部遅延
これが 1 bit 時間内に収まらないと、複数ノードが同じビットを同時に見られず、調停が壊れる。
Bit Time セグメント構造
| SYNC_SEG | PROP_SEG | PHASE_SEG1 | PHASE_SEG2 |
↑
Sample Point- SYNC_SEG: 1 TQ 固定。エッジ同期用
- PROP_SEG: 信号往復遅延を吸収する枠 ← バス長を決めるセグメント
- PHASE_SEG1 / SEG2: 位相ずれ補正、サンプル位置調整
- SJW (Synchronization Jump Width): 再同期時にセグメントを伸縮できる最大幅
Sample Point の選び方
- 遠距離バス: 87.5% 寄り (PROP_SEG を長めに)
- 短距離高速: 75% 寄りでもよい
- CANopen 標準は 87.5%
STM32 等での設定例 (500 kbps, PCLK 42 MHz)
Prescaler = 6 → TQ = 6/42MHz = 143 ns
BS1 (SYNC+PROP+PHASE_SEG1) = 12 TQ
BS2 (PHASE_SEG2) = 1 TQ
合計 = 14 TQ = 2000 ns → 500 kbps
Sample Point = 13/14 = 92.8%関連
- [[can-basics]]
- [[can-fd]]
最終更新: