GW前にスイッチサイエンス社から買い込んだものの一つにOBD2コネクタ付きのCAN-BUS Dev Kitというものがあります。マイコン間をCANで接続したかっただけなので、OBD2コネクタを使う予定がある分けではないのですが何故か嬉しい。大体自分の車のOBD2コネクタの位置など知らないのですがね。本日はサンプルソフトでフレーム垂れ流し、CAN信号を観察できることを確認。
※「部品屋根性」投稿順Indexはこちら
CANバスは車載というイメージが強いですが、ノイズに強く、何十メートルも配線を引っ張りまわせ、その上1本のバスに複数のノードを接続できるなど普通のマイコンシステムで使うのも大有りなインタフェースです。最近は、CANバスインタフェースを搭載しているマイコンが多くなったので、工業用途などでも応用が増えているものと思います。こちらでもCAN対応のマイコンボードを端から接続してみるべし、との野望のもとCAN-BUS Dev Kitを買い込んだのであります。
まずは購入先、スイッチサイエンス殿のページへのリンクを貼り付けておきます。
製造元は Longan Lab社、そちらへのリンクも貼り付けておきます。Arduino用ライブラリ等はこちら(GitHub)。GitHubのライブラリの中に examples が含まれており、今回はその中から、繰り返し送信を行うだけの send というサンプルプログラムを動かしています。
このキットには組み立てればOBD2コネクタになる部品(まだ組み立てていないですが、コネクタの形に組み上げるのはパチパチ嵌めてねじ止めなので簡単そうです。ただし、信号線ははんだ付けする必要あるのじゃないかな)と、小さなCANバスインタフェースボードが含まれています。インタフェースボードのCAN側はスクリュー端子台。マイコン側はGroveコネクタです。
このインタフェースボードのGroveコネクタはUartインタフェースですが、それをATMEGA168マイコンで受けて、MCP2515 CAN コントローラにつなぎ、物理層はMCP2551トランシーバと、マイクロチップ社勢ぞろいのソリューションであります。
UARTで通信すればCANに変換してくれるお手軽インタフェースです。用意されているArduino用のサンプルプログラムで動作確認をしてみたいと思います。今回使用するのはめずらしく「純正」Arduino Unoであります。
CANバスへのフレーム送信とその観察
キットには4線、黄、白、赤、黒でおなじみのGroveケーブルが付属していますが、純正Arduino UnoにはGroveコネクタが無いので、コネクタでパッチンとはいきません。個別に配線する必要があります。サンプルプログラムは Arduino標準ライブラリのSoftwareSerialモジュールとこのモジュール用のライブラリ使用です。CANバス用のライブラリは所定の位置にインストール必要です。
-
- 黄 D2
- 白 D3
- 赤 5V
- 黒 GND
さて、今回はまだCANバス通信の相手が居ないので、以下のようにして動作確認をいたしました。
-
- インタフェースボードはCANフレームを垂れ流し
- Digilent Analog Discovery2のロジアナ機能でフレーム内容を解読
なお、CANバス配線のサキッぽに 120Ω の終端抵抗を入れてみました。こんなんで良いのか?
まずはオシロでとった波形、AnalogDiscovery2のオシロ端子は「差動」になっているので、1+端子をCAN-HIGH、1-端子をCAN-LOWに接続して取得したもの。ほぼほぼ安定した波形がとれています。
CANは、差動信号といいつつも振幅はあるので波形的には見やすいです。しかし、ちと面倒なのがスタッフビットの扱いなど。同じレベルが長く続くときに挿入されるビットです。このためCANバスは、Uartのように、スタート1ビット、データ8ビット、ストップ2ビットってな具合で決まった長さで区切って読むことができません。それほど複雑なものではないので、手で解読するのも不可能ではないですが、メンドイ。機械的に解読できるのが良いです。お約束通りAnalogDiscovery2のロジアナ機能にはCANの解読機能が付いています。以下のように、ロジアナのどの端子が、CANのHighにつながっているのか、Lowにつながっているのか、ビットレートがいくらなのかを指定します。ここではDIO0をHighにつないだので、GNDをLowに接続しています。
設定をして、ロジアナ画面で解読すれば、ID、DLC、ペイロードの各バイト、CRCなどが解読されて表示されます。今回のサンプルソフトは、ID=0x55、DLC=8バイトで、ペイロード8バイトを運ぶフレームを繰り返しているだけですが、各フィールドの意味を表示しようとすると表示が長くなりすぎるので、ペイロードの3バイト目までの画像です。
とりあえず、垂れ流しでのフレーム送信と、バスの観察はOK。次回は、もう一台CANインタフェースを動かして実際に送受信を行ってみたいと思います。