今回は
前回M5stackとMCP2562というCAN トランシーバーを使って送受信試験をしましたが、うんともすんとも言わずで終わりました。デジタルオシロ等あれば、確認できるのですが持ち合わせていません。出来合いのモジュールがあることがわかり、それらを使って送受信の確認をしてみます。
M5stack commとM5stickC+CAN moduleで送受信
M5stickC Plusの準備
CAN moduleを購入し、GROVEコネクタにて接続します。GROVEコネクタの実態はI2C接続です。M5stickC Plus側は、GND,5V,SDA,SCLの4線です。このコネクターは、HY2.0-4Pという規格だそうです。名前のとおりピンのピッチが2mmとちょいと狭いです。汎用のコネクタは、はまりません。メス配線コネクターも市販のものは大抵2.54mmなので、この2mmピッチのコネクターが必要です。配線には専用ケーブルを用意するか、手持ち組み合わせて工夫が必要です。0.54mmなんとかなるかと思いましたが、なりませんでした。
CANモジュールはGROVEケーブルを介して外付けなのでちょいとでかくて、M5StickCと同じくらいの大きさです。モジュールの先端は内部と電気的に分離されてCAN BUSになっておりGND、CAN_H、CAN_Lを接続します。
ソフトウェアは、参考が多いArduinoにします。参考リンクのソースそのままで送信プログラムは動きました。ボタンAとBを押せば、それぞれ異なるメッセージがID 0x0でCAN BUSに送信されます。
M5stack+commu moduleの準備
M5stackにスタックできるcommuモジュールを購入しました。これは、esp32とSPI接続してそれぞれのドライバーにつながっていて、以下のインターフェースが入出力できます。
- I2C x 2
- CAN × 1
- RS485 × 1
- TTL × 1
モジュールを本体の底にガチャっと差すだけでOKです。配線間違いの可能性を低減できます。本体とドッキングしたときの側面4方向です。バッテリーモジュールも接続してます。これで、150mA→750mAに容量が上がります。
ソフトウェアはサンプルコードが各種提供されているの、それを参考に作成します。ほぼそのままですが。
CAN送受信試験
送信機と受信機ができたので、送受信できるか確認します。CAN_H、CAN_L、GNDをそれぞれ接続して、CAN_HとCAN_Lの間に120Ωの抵抗を終端として入れます。全体の接続は以下のとおりです。
全体構成とそれぞれの部位は、以下のとおりの構成です。
配線の長さが短いので配線は撚らなくても(twist pairにしなくても)大丈夫です。
送信機は、以下のとおりAとB2種類のメッセージを送信します。
受信機は、2種類の8バイトメッセージを受信してます。
送信機からCAN ID 0x0 にAとBを加えて異なるメッセージを送信すると、受信機側でそれぞれ受信していることが確認できました。
CAN送信機のトランシーバーをMCP2562に変更
送受信確認できたので、以前うんともすんとも言わなかったトランシーバーに変更してみます。再度データーシートを見直すとVDDとVIOが内部で繋がっていないことがわかりました。MCP2561は繋がっているようです。よく確認が必要です。VIOへ配線を追加して、トランシーバーを変更して送受信すると、問題なく送受信確認できました。
一式ちゃんと動くセットがあると、デバッグしやすいです。デジタルオシロ買わずになんとかここまで進んだ感じです。オシロがあればもう少し早くここまでたどり着いたかもです。引き続き購入は検討します。
今日のまとめ
M5stack+commuモジュールとM5StickC+CANモジュールを使ってCAN送受信の確認ができました。また、以前動かなかったmcp2562トランシーバも動作確認ができました。
更にCANメッセージの内容を確認してソフトウェアを改良しつつ、バイクからデータを吸い出せるように引き続き検討したいと思います。