この写真にあるモジュールってわかりますか?
IMG_20161222_150030
車両で主に使われているCAN通信を行えるモジュールです。
これを見つけた時に唖然としました。だって凄い安いんです(驚)!

日本でパーツ単位で調達しようとすると、とんでもない価格になってしまうのに中華パーツでの通販だと数百円・・・。(^_^;)
しかもすぐに使えるようにモジュール化(基板化)されていて物の価値が良く分からなくなってしまうブツですw

で、CAN通信ですが、普通であればCAN通信をサポートしているマイコン(*1)を使うのが普通なのですが、
このモジュールには、様々なマイコンでサポートされているSPI通信からCAN通信を制御できるチップ(MCP2515)が搭載されていて非常に応用範囲が広いと言いますか、汎用性のあるCANモジュールになっています。

ただし、、、ひとつだけの問題を除いて・・・!?

このCANモジュール安いので、使ってやろう!とお取り寄せして色々といじり倒していたのですが、、、Arduinoから制御すると問題なく動作するのです!
が、他のマイコン(STM32F103など)ボードからは、一切制御できませんでした。(>_<)

原因を探ると、今回のCANモジュールが5V専用みたいだったのです。
データシートを見るとMCP2515は、3Vも対応しているのですが、その周辺チップには5Vを供給してやらないとダメみたいで、今回のCANモジュールが5V専用品だったみたいです(汗)。

古い設計?のArduinoは、IO電圧が5Vなので問題なく動作しますが、他のマイコンはIO電圧が3Vが多いので盲点でした・・・。

とは言え、それぞれのチップに適切な電圧を入れてやれば良い訳でして、CANモジュールの回路を調べると非常に簡単に改修できるのが分かりました!
 ※IOレベル変換ICを通せは良いとも言われそうですが、それはそれで面倒ですし・・・今回は割愛しますw

では、3V IOマイコン機器で使う方法を以下に示します!
IMG_20161222_150044
①CANモジュール裏側のパターン(写真の赤線の部分)をカットします。
②カットしたパターン右側のライン部分を軽く削り、そこに配線を追加して5Vを入力します。
③通常PINのVCCには、3Vを入力します。

たったこれだけで、3V IOのマイコン機器から制御できます!(^^)/


これにより非常に安価にCAN通信が出来るようになります。
それこそ今流行りのRaspberry PIからでもCAN制御できる様になります。
 ※Raspberry PIのCAN通信(MCP2515)設定は、この方のサイトが参考になります
 http://qiita.com/mt08/items/535ab4690eecbcf5375d

これを使ってクルマの通信をのぞき見(*2)してみるのも楽しいですよ♪

なお、CANモジュールを改造せずに使えるArduinoを使った通信は、Arduino自身が遅いのであまりお勧めしません。(;´Д`)


【補足(*1)】
マイコンでは、主にUART, I2C, SPI通信がサポートされています。
CAN通信がサポートされているマイコンは少ないです。
マイクロチップ社製のdsPICシリーズの一部やSTマイクロエレクトロニクス社製のSTM32F1xxシリーズなどです。
更にそれだけではCAN通信は出来ません。CANレシーバーなる周辺チップ(MCP2551など)も必要になります。
ちなみに今回紹介したモジュールには、それらも含まれていてNXP社(最近QUALCOMM社に買収されました)のTJA1050が搭載されていました。

【補足(*2)】
最近の車両であれば、OBD2ポートのCAN High(Pin6), CAN Low(Pin14)端子からワイヤーを使って、CANモジュールのJ2 H, Lにそれぞれ2本を接続すればのぞき見出来まする!
ただし、K-LINE対応車両はCAN通信ではないので無理です。諦めてくださいw