interface:can

CAN

Controller Area Network.
1986年にRobert Bosch社が定めた規格.自動車の車載ネットワークとして用いられる.I2Cと同様に2本のデータ線で構成.CAN この2本の線が差動信号(CANL,CANH)とし動作する.
バス接続が可能なのでネットワークの構築が比較的容易.I2CやSPIとは異なり,マスター・スレーブという関係は存在せず,マルチマスター方式となる.CAN はバス上に流れているメッセージ自身がそれぞれ優先順位を有する.このため,デバイスがマスター・スレーブの関係を考えなくて良い.
非常に多くのノイズ耐性が規格として施されており,差動通信方式を採用しているものその理由の1つ.I2CやSPIと比較するとプロトコルが複雑.
125kbpsを堺に「High Speed CAN」,「Low Speed CAN」に分類される.

  • High Speed CAN 最大 1Mbps
  • Low Speed CAN 最大125kbps

STM32の場合CANプロトコルのうち,2.0A,2.0Bをサポート.

バスの状態は「0,ドミナント(優性)」「1,レセシブ(劣性)」のデジタル値で表される.

2012年から「CAN FD」が制定された.CANは最大1Mbpsだが,CAN FDは2~5Mbpsまで高速化可能.
OSIの各層の定義が下記ISOで定義されている.
データリンク層 ISO11898-1
高速CAN ISO11898-2
低速CAN ISO11898-3
マルチマスタ
◆マルチマスタ(CSMA/CA方式)
バスが空いている時はバスに接続される全てのノードが送信を始めることが可能。CSMA/CA(Carrier Sense Multiple Access/Collision Avoidance)方式によるメッセージ送信権の優先順位付けを実施。

RS485の上にもう少し高レイヤのプロトコルを定めたような感じであるけど,電圧レベルも違っているので差動信号での通信というくらいしか共通点がない?

CAN通信のデータのまとまりは「フレーム」と呼ばれ,以下の4種類がある.

  • データフレーム
  • リモートフレーム
  • オーバーロードフレーム
  • エラーフレーム

データフレーム内部の「ID」の部分により信号の優先度が決定させる.基本的にはドミナントが優先される.要は「IDの数字が小さいほど優先度が高い」となる. 駆動系のシステムCANネットワークを用いて構築する場合,0とかを非常停止コマンドに割り当てたりとかする.

同じCANバス上のノードはすべて同じ公称ビットレートで動作する必要があるが,ノイズや配線長,ノードごとのクロック誤差などにより,実際のビットレートが一致しないことがある.このためノードを同期させる必要がある.また.CANは自身の送信データと他のノードの送信データ(つまりデータの受信)を同時に行える必要がある.このためアートビレーションは中は同期が重要.
CANを駆動するデバイスに供給されるクロック及びその時の周期を,CAN通信における最小時間単位としてクアンタ(クォンタム)と呼ぶ,このクアンタをいくつか集めたのものをセグメントと定義し,公称ビットレートは4つのセグメントにより構成される.遅延の補正のために同期ジャンプ幅を設定する.クアンタ,ビットセグメント1,ビットセグメント2により多数の組み合わせが起こりえる.

これらのビット計算をやってくれる素晴らしいサイト→CAN Bit Time Calculation

Basic CAN Bit Timing
Understanding Microchip’s CAN Module Bit Timing
ビット・タイミングの構成により、CANの性能を最適化
Computation of CAN Bit Timing Parameters Simplified

Bus wake upの略,所定の時間内に,それぞれがリセッシブで分離された1つもしくは複数のバスレベルをしているとき,バスウェークアップシーケンスが実行される.
要はバスに所定の信号を流すとトランシーバ内のバスステートを制御できるということでいいんだろうか.
WUPの挙動はISO 11898-5:2007で定められている.
新しいWUPの挙動も定められており,ISO 11898-2:2016に定められている.

CANが規定しているのはOSIで言うところの2層まで,上位プロトコルとしてCANOpenがある

MAX3501 低電力
MAX13054A 最大2Mbps(CANの規格って1Mbpsじゃなかったっけ?)
絶縁CANトランシーバ MAXIM

MCP2517 SPI接続,CANFDにも対応

CAN-USBアダプタ,stm32F042を使用.32ピンではUSBとCANが排他であるため,48ピン以上になってしまう…
CANable
Linklayer Labs

CANable->Getting Startedを参照
Windowsはデバイスドライバが必要なのでインストールするのを忘れないこと.
ポート(COMとLPT)→「CantactUSB/CAN Device」と表示されていればデバイスレベルの認識はできてる.

DBCという拡張子のファイルを用いると、CANメッセージの中身の物理量変換を管理できる
Kvaser - J1939およびDBC fileの概要
CAN Bus Guide for ODrive
DBC Format
DBC ファイルで物理量変換の設定を行う

参考文献

  • interface/can.txt
  • 最終更新: 2023/07/01
  • by yuqlid