Copyright (C)SUWA TSUSHIN NETWORK.
All Rights Reserved. TOPへ戻る
スポンサードリンク


No.0005 2016.5.11


CAN信号の読み方






□1.CANって何?

ドイツのBOSCH社が1980年代に考案したシリアル通信の規格です。
1組のCAN通信線に複数台の送受信ユニットを接続して通信ができます。
差動信号のため、ノイズが重畳しても復元しやすい特徴があります。
復元しやすいだけで、ノイズに強い訳ではありません。
主に自動車等で使用されています。
特許が切れているためか、様々なマイコンメーカーや測定器メーカーが2000年代半ば頃から対応化しています。




□2.CANの回路や制御

CAN通信には、CANの論理信号を生成解読するコントローラーと、CANの物理信号を生成、復号させるドライバーが必要です。 入手が容易なMicrochip製品で挙げると、MCP2561などがドライバーICです。シリアル信号をCANの差動信号に変換して出力したり、入力(受信)された差動信号をシリアル信号に変換してコントローラーへ出力したりするものです。品番末尾に「FD」と付くMCP2561FDなどは、CAN FDに対応しているようです。
Typicalの回路はデータシートに明記されており、終端で構成される非常に簡単な回路です。

MCP2515は昔からあるコントローラーで、解説書なども沢山出ています。 最新のデータシートを見ても記述がないので、CAN FDには対応していないと思います。 (対応した場合は、新しい型番で売られるはずです。) CAN対応が謳われPICマイコンに内蔵しているコントローラーも基本的に2515がベースだと思います(実際にアドレス空間を比較したわけではありませんが)。よって2016年5月現在でCAN FDに対応したMicrochip製品のコントローラーはありません。

以下は、Microchip製品の一例のブロック図です。電源系、SPLITやSTBY等は省略していますが、基本的にVDDとVSS(GND)を繋げば動きます。



ドライバ MCP2561
http://www.microchip.com/wwwproducts/en/MCP2561

コントローラー MCP2515
http://www.microchip.com/wwwproducts/en/MCP2515




少なくともマイクロチップ製品のマニュアルやデータシートを見る場合、PIC32MX1XX/2XXといった具体的な品番のデータシートでは、どのpinではどの信号が対応できるといった物理仕様やビットアサイン、その製品固有の情報しか記載されていません。

具体的にC言語で具体的なレジスタビットを操作してCAN通信の処理を行いたい場合は、例えばCAN対応のPIC32MX・・・・であればPIC32共通のリファレンスを読む必要があります。


PIC32リファレンス マニュアル (日本語版)
http://www.microchip.co.jp/download/index.php?Mode=4&CategoryID=3ff2c36b12b083345acb176bd22206d6c22249c3

PIC32 CAN関係レジスタビット割り当て (日本語版)
http://ww1.microchip.com/downloads/jp/DeviceDoc/61154C_JP.pdf




□3.CAN通信の論理仕様

CANも所詮はパケット通信ですので、ヘッダー、データ、フッターという構成で成り立っています。
CANではパケットのことをデータフレーム(DATA FRAME)と呼びます。一般的には、CANメッセージとも呼びます。
パケットには2種類の仕様があり、標準フォーマット(Standard Format)と拡張フォーマット(Extended Format)があります。





標準フォーマットのヘッダーは、パケットの識別番号であるID(Identifier)、データサイズを示すDLC(Data Length Code)、パケットの種類を示すRTR、IDE、未使用(予約)R0 の構成で成り立っています。
ID、RTRの構成をArbitration Fieldと呼びます。DLC、IDE、未使用(予約)のR0の構成をControl Field、もしくは単にCFと呼んでいます。





拡張フォーマットのヘッダーは、パケットの識別番号であるIDが11bitと18bitの合計29bitで表現されます。データサイズを示すDLC、パケットの種類を示すSRR、RTR、IDE、未使用(予約)のR0、R1の構成で成り立っています。
ID、SRR、IDE、RTRの構成をArbitration Fieldと呼びます。DLC、未使用(予約)のR0、R1の構成をControl Field、もしくは単にCFと呼んでいます。





データは、1〜8バイトまで1バイト単位で増減して載せることができます。 データを載せない(0バイト)での送信も、規格上できることになっています。 データが何バイト分あるかは、DLCで指定することになっています。 データ領域のことをDATA FIELDと呼びます。 ちなみにCAN FDは、DLCのビット幅について4bitのまま抑えつつも、割り当てを拡張することで最大64バイトまでに対応させています。




フッターは、パケットの誤り検出のためのCRC(CRC FIELD)、受信したときに送信するACK(ACK FIELD)、パケットの終わりを示すEOF(END OF FRAME)の構成で成り立っています。CRCは、パソコン等でもお馴染みの巡回冗長検査のことです。対象はデータのみでなくID、CF、スタートビットも含まれます。ACKは、送信側でなく受信側がパケットを受信できたときにこの部分を狙ってHi(0)となるように電気信号を出力します。CRCとACKには、それぞれ1bitのデリミタが割り当てられています。受信側は、CRCデリミタ1bit分=2μs(500kbpsの場合)で、受信したデータが正しいかのCRC計算と判定も含めて、ACKを返すかどうかの判定処理を完了させる必要があります。






□4.CAN信号の読み方

実際のCAN信号から情報を読み取ってみます。 CANLはCANHの反転信号ですので、ノイズが乗らない限りどちらか片側のみ読み取れば十分です。 今回はCANHから読み取ってみます。 CANHの電圧がHiのとき0、Loのとき1となります。 電圧がHiのときをドミナント、Loのとき1をレセッシブと呼びます。

テスト信号として、以下のCANメッセージを送信します。

ID: 0x042
DLC: 8
DATA: 02 11 03 FF 4A 0C FA 37
送信周期: 13〜14ms

送信環境は、CANレコーダーとCANUSBを使用しています。
スズキのCAN対応エンジンECUを電源OFFで接続して、終端代わりに使用しています。
単なる終端抵抗として使用しているので、カーボン抵抗で代用しても問題ありません。
エンジンECUのCAN H、CAN L間の終端抵抗120Ωが内蔵されていることをテスターで確認済みです
ちなみにこの環境はAckを返す機器がなく他のCANメッセージも存在しないため、送信側は送信周期を無視してCANメッセージを乱発することになりますが仕様です。


CANレコーダー 製品情報
https://www.suwatsu.com/product/CanRecorder.htm







再生に使用したデータファイルと、
データファイル変換元のExcelデータは以下の通りです。
Excelデータからデータファイルへの変換は、CANレコーダーのシェアウェア版でできます。
データファイルの再生は、無料版でできます。


再生用データファイル test_can.dat

変換元のExcelデータ test_can.xls




この環境で、実際にオシロスコープで測定したCANメッセージ(CAN H の電圧)が下図です。
メッセージの速度は500kbpsです。






1メッセージ分を取り出して、1ビットずつ切り出していきます。
500kbpsのときの1ビットは、2μsです。






CAN通信にはビットスタッフィングという機能があります。 同じビットが規定数連続した場合、反転するビットを付与する機能です。CANの場合は、5回連続したら反転です。 追加された反転ビットには、情報としての意味はありません。 同じビットが連続すると、送信側と受信側でタイミングずれてしまい、送信側と受信側でビットずれを起こしてしまう可能性があるためです。送信側と受信側では、それぞれ独立した内部クロック信号によって動作しているため、時間を合わせるために必要な反転動作となります。





最初の1ビット目は、スタートビットと呼ばれているものです。CANメッセージの最初を示すもので、情報としての意味はありません。2ビット目以降をヘッダ、データ、フッターに分けると以下のようになります。





今回の場合はメッセージを受信するユニットがないため、ACKスロットの電圧がHi(ドミナント)にされることはありません。EOFはLo:1 固定ですので、ACKデリミタを含めて8bit×2μs=16μs 以上のLo(レセッシブ)が確認できればOKです。

取得したデータビットは以下のようになります。

ID : 000001000010
DLC: 1000
DATA1: 00000010
DATA2: 00010001
DATA3: 00000011
DATA4: 11111111
DATA5: 01001010
DATA6: 00001100
DATA7: 11111010
DATA8: 00110111

10進もしくは16進数に変換すると以下のようになります。
送信したCANメッセージと同じ値になりました。

ID : 0x042
DLC: 8
DATA1: 0x02
DATA2: 0x11
DATA3: 0x03
DATA4: 0xFF
DATA5: 0x4A
DATA6: 0x0C
DATA7: 0xFA
DATA8: 0x37



□5.Ack信号の確認

みるCANを使って、実際のAck信号を見てみます。
みるCANはCANメッセージの受信ソフトです。CANUSBで受信したときには、すべてのメッセージに対してAckを返してしまいます。Interface社CANモジュールを使用すれば、Ackを返さずにサイレントで受信することも可能です。 CANレコーダーにCANUSB、みるCANにInterface社CANモジュールという組み合わせで行いましたが、逆でもかまいません。ただしAckを返さないときの波形を確認することができません。 Interface社CANモジュール同士の組み合わせ、CANUSB同士の組み合わせでもできます。

みるCAN 製品情報
https://www.suwatsu.com/product/MiruCAN.htm


図中には記載していませんがCAN H、CAN L間に終端抵抗を入れる必要があります。 Interface社CANモジュールは内部で終端抵抗をON/OFFできるので、ONにすれば不要になります。





以下がAck信号のなし、あり、それぞれの状態です。
Ack信号のこのビット分のみは、受信側がこのタイミングで出力しています。 受信側が出力しているため、わずかにドミナント電圧の傾向が異なることが分かります。






スポンサードリンク

TOPへ戻る


ご利用条件
 Copyright (C)SUWA TSUSHIN NETWORK. All Rights Reserved.