notes
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 Mbps40 m
500 kbps100 m
250 kbps250 m
125 kbps500 m
10 kbps5 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]]
最終更新:

On this page