【DoCAN】車両診断通信 その4【CAN②】

【DoCAN】車両診断通信 その4【CAN②】 車両診断通信

バックナンバーはこちら。
https://www.simulationroom999.com/blog/diagnostic-communication-backnumber/

はじめに

ISO11898-1ことCANのデータリンク層について。
の前編あたり。

登場人物

博識フクロウのフクさん

イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1

エンジニア歴8年の太郎くん

イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1

「はじめてのCAN/CAN-FD」を読めばいいんじゃん

フクさん
フクさん

前回、CANの物理層の話をしたが。

太郎くん
太郎くん

この流れだと、今回はデータリンク層だね。

フクさん
フクさん

まぁこれもVector社の「はじめてのCAN/CAN-FD」を読めばいいんじゃん?

Vector社の「はじめてのCAN/CAN-FD」

太郎くん
太郎くん

そんな身もふたもない。
だったら、今回ははこれで終了?

フクさん
フクさん

さすがにそれはちょっとアレなんで、
「はじめてのCAN/CAN-FD」では語られていない部分をちょっと補完する感じにする。

CANの洗礼

フクさん
フクさん

前回、使用するボーレートは500kbpsとしたんだけど、
これはどうのように決定するかわかる?

太郎くん
太郎くん

UARTとかと同じノリだと、
システムクロックかペリフェラルクロックを分周して
ボーレートクロックを作るってイメージでいたけど。

フクさん
フクさん

そうだよねー。
普通はそう思うよねー。

太郎くん
太郎くん

え?違うの?!

フクさん
フクさん

最初にCANにガチで触れる時に受ける洗礼のようなものだね。
ボーレートの設定方法が謎すぎる問題

太郎くん
太郎くん

CANoeの時はそんなややこしいことなかったと思ったんだけど?

フクさん
フクさん

CANoeがうまく隠してくれてたって感じかな。
厳密には細かい設定はできるんで、魔境が垣間見れたかもしれないけど、
その時は特に追及しても意味無さそうだったんでスルーした。

太郎くん
太郎くん

うーん、とりあえず説明して。
わからなかったら質問するよ。

CANのボーレートとサンプリングポイント

フクさん
フクさん

先ほど、太郎くんからペリフェラルクロックの話が出たと思うのだけど、
それをボーレートプリスケーラってので分周してCANのシステムクロックが必要となる。

太郎くん
太郎くん

それがボーレートを決めるクロックだと思ったのだけど。

フクさん
フクさん

これで決まるCANシステムクロックがボーレートを決める前段階のクロックになる。

太郎くん
太郎くん

え?そのままボーレートにならないの?
意味わからん。

フクさん
フクさん

CANの1bitはさらに分解出来て、クウォンタムってものが最小単位になるんだけど、
この1クウォンタムの時間幅を決定するのが、CANシステムクロック

太郎くん
太郎くん

で、そのクウォンタムは何個で1bit分になるの?

フクさん
フクさん

決まっていない。

太郎くん
太郎くん

は?

フクさん
フクさん

12個かもしれないし、16個かもしれない。
ボーレートから逆算して決めることになるね。

太郎くん
太郎くん

え?だったら、例えば、最初から16個なら16個って決めておけば、
自動的にボーレートも決まって、そもそもクウォンタムって概念を認識しなくても良いのでは?

フクさん
フクさん

そうだね。
UARTなんかそのイメージ。
UARTも厳密には内部で固定的なクウォンタムを持っているけど、
固定なんで、設定する側は意識する必要は全くない
しかし、CANの場合は意識させる。
それはなぜか?

太郎くん
太郎くん

なぜ?

フクさん
フクさん

サンプリングポイントを設定させるため。

CANのサンプリングポイント

太郎くん
太郎くん

サンプリングポイント?
また新しい言葉が・・・。

フクさん
フクさん

別にCAN独自用語ってわけでもないよ。
UARTもソフトウェア側からは見えないけど、サンプリングポイントってのはある。
まぁUARTの場合は50%位置固定になっているだろうね。
ものによってはスタートビットだけは75%位置になってるかもしれないけど。

太郎くん
太郎くん

ちょ、ちょっと待って!
50%とか75%ってどこの話をしてるの?

フクさん
フクさん

UARTでも良いので波形を思い浮かべてみな。
波形のどの位置でサンプルすると安定的に信号のHighとLowを拾えると思う?

太郎くん
太郎くん

あー。なるほど!
High、Lowの変化点から一番遠い真ん中が安定かな?
その中を指して50%っていってるか!

フクさん
フクさん

その通り。
CANの場合、このサンプリングポイントを任意の位置に変更できるんだ。
まぁ実際は完全な任意ではなく、設定幅はあるんだけど、
規格上は50%~90%の間かな。

ボーレートとサンプリングポイント

太郎くん
太郎くん

んー、でもまだ頭の中で整理できてない。

フクさん
フクさん

じゃ、恒例の絵で説明してみようか。

太郎くん
太郎くん

あーこれこれ。

太郎くん
太郎くん

なんとなくわかったぞ。
たぶん、こんか感じで考えていくんだな。
①サンプリングポイントを\(75[\%]\)にしたい
②クウォンタム数を16個くらいにしておく。
③\(500[kbps]\)にしたい場合は、\(500[kHz]×16[qt]=8000[kHz]=8[MHz]\)をCANシステムクロックとしておく。
④サンプリングポイント\(75[\%]\)にしたいので、\(12[qt]\)あたりでサンプルするように設定する。

フクさん
フクさん

大正解!

太郎くん
太郎くん

よし。これでCANマスター!

フクさん
フクさん

いや。ここで半分くらいかな。

太郎くん
太郎くん

まじかー。

まとめ

フクさん
フクさん

まとめだよ。

  • 基本的には「はじめてのCAN/CAN-FD」を読んでおけばOK。
  • CANのボーレート設定は特殊。
    • いきなりボーレートを決めることはできず、1bitを分解したクウォンタム時間を先に決める。
    • 総クウォンタムがボーレートになるので、設定したいボーレートから逆算する必要がある。
  • CANはサンプリングポイントを調整できる。
    • 総クウォンタム中のどこのクウォンタムでサンプルするかで決定できる。
    • [%]で表現されることが多い。
    • 真ん中であれば50[%]、やや後ろ側(3/4あたり)あれば75[%]。

バックナンバーはこちら。

コメント

タイトルとURLをコピーしました