バックナンバーはこちら。
https://www.simulationroom999.com/blog/diagnostic-communication-backnumber/
はじめに
ISO11898-1ことCANのデータリンク層について。
の前編あたり。
登場人物
博識フクロウのフクさん
![](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん
![](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
「はじめてのCAN/CAN-FD」を読めばいいんじゃん
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
前回、CANの物理層の話をしたが。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
この流れだと、今回はデータリンク層だね。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まぁこれもVector社の「はじめてのCAN/CAN-FD」を読めばいいんじゃん?
Vector社の「はじめてのCAN/CAN-FD」
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
そんな身もふたもない。
だったら、今回ははこれで終了?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
さすがにそれはちょっとアレなんで、
「はじめてのCAN/CAN-FD」では語られていない部分をちょっと補完する感じにする。
CANの洗礼
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
前回、使用するボーレートは500kbpsとしたんだけど、
これはどうのように決定するかわかる?
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
UARTとかと同じノリだと、
システムクロックかペリフェラルクロックを分周して
ボーレートクロックを作るってイメージでいたけど。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
そうだよねー。
普通はそう思うよねー。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」10アップ.png)
え?違うの?!
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
最初にCANにガチで触れる時に受ける洗礼のようなものだね。
ボーレートの設定方法が謎すぎる問題。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
CANoeの時はそんなややこしいことなかったと思ったんだけど?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
CANoeがうまく隠してくれてたって感じかな。
厳密には細かい設定はできるんで、魔境が垣間見れたかもしれないけど、
その時は特に追及しても意味無さそうだったんでスルーした。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」10アップ.png)
うーん、とりあえず説明して。
わからなかったら質問するよ。
CANのボーレートとサンプリングポイント
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
先ほど、太郎くんからペリフェラルクロックの話が出たと思うのだけど、
それをボーレートプリスケーラってので分周してCANのシステムクロックが必要となる。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
それがボーレートを決めるクロックだと思ったのだけど。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
これで決まるCANシステムクロックがボーレートを決める前段階のクロックになる。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」10アップ.png)
え?そのままボーレートにならないの?
意味わからん。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
CANの1bitはさらに分解出来て、クウォンタムってものが最小単位になるんだけど、
この1クウォンタムの時間幅を決定するのが、CANシステムクロック
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
で、そのクウォンタムは何個で1bit分になるの?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
決まっていない。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」10アップ.png)
は?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
12個かもしれないし、16個かもしれない。
ボーレートから逆算して決めることになるね。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」10アップ.png)
え?だったら、例えば、最初から16個なら16個って決めておけば、
自動的にボーレートも決まって、そもそもクウォンタムって概念を認識しなくても良いのでは?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
そうだね。
UARTなんかそのイメージ。
UARTも厳密には内部で固定的なクウォンタムを持っているけど、
固定なんで、設定する側は意識する必要は全くない。
しかし、CANの場合は意識させる。
それはなぜか?
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」10アップ.png)
なぜ?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
サンプリングポイントを設定させるため。
CANのサンプリングポイント
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
サンプリングポイント?
また新しい言葉が・・・。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
別にCAN独自用語ってわけでもないよ。
UARTもソフトウェア側からは見えないけど、サンプリングポイントってのはある。
まぁUARTの場合は50%位置固定になっているだろうね。
ものによってはスタートビットだけは75%位置になってるかもしれないけど。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」09アップ.png)
ちょ、ちょっと待って!
50%とか75%ってどこの話をしてるの?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
UARTでも良いので波形を思い浮かべてみな。
波形のどの位置でサンプルすると安定的に信号のHighとLowを拾えると思う?
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者03アップ.png)
あー。なるほど!
High、Lowの変化点から一番遠い真ん中が安定かな?
その中を指して50%っていってるか!
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/まるフクロウ.png)
その通り。
CANの場合、このサンプリングポイントを任意の位置に変更できるんだ。
まぁ実際は完全な任意ではなく、設定幅はあるんだけど、
規格上は50%~90%の間かな。
ボーレートとサンプリングポイント
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」10アップ.png)
んー、でもまだ頭の中で整理できてない。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
じゃ、恒例の絵で説明してみようか。
![](https://www.simulationroom999.com/blog/wp-content/uploads/2020/07/02_CANボーレート.png)
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
あーこれこれ。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者03アップ.png)
なんとなくわかったぞ。
たぶん、こんか感じで考えていくんだな。
①サンプリングポイントを\(75[\%]\)にしたい
②クウォンタム数を16個くらいにしておく。
③\(500[kbps]\)にしたい場合は、\(500[kHz]×16[qt]=8000[kHz]=8[MHz]\)をCANシステムクロックとしておく。
④サンプリングポイント\(75[\%]\)にしたいので、\(12[qt]\)あたりでサンプルするように設定する。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/まるフクロウ.png)
大正解!
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」08アップ.png)
よし。これでCANマスター!
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/ばってんフクロウ.png)
いや。ここで半分くらいかな。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
まじかー。
まとめ
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まとめだよ。
- 基本的には「はじめてのCAN/CAN-FD」を読んでおけばOK。
- CANのボーレート設定は特殊。
- いきなりボーレートを決めることはできず、1bitを分解したクウォンタム時間を先に決める。
- 総クウォンタムがボーレートになるので、設定したいボーレートから逆算する必要がある。
- CANはサンプリングポイントを調整できる。
- 総クウォンタム中のどこのクウォンタムでサンプルするかで決定できる。
- [%]で表現されることが多い。
- 真ん中であれば50[%]、やや後ろ側(3/4あたり)あれば75[%]。
バックナンバーはこちら。
ボッシュ自動車ハンドブック 日本語第4版
CAN入門講座: 組込みマイコンで学ぶCANプロトコルとプログラミング
CANおよびCANopenによる組み込みネットワーク
カーハッカーズ・ハンドブック ―車載システムの仕組み・分析・セキュリティ
車載イーサネット “クルマIT”高度化への基盤技術
詳解 車載ネットワーク -CAN、CAN FD、LIN、CXPI、Ethernetの仕組みと設計のために
自動車用ECU開発入門 システム・ハードウェア・ソフトウェアの基本とAUTOSARによる開発演習 (エンジニア入門シリーズ122)
車載ネットワ-ク・システム徹底解説: CAN,LIN,FlexRayのプロトコルと実装 (Design wave mook)
コメント