前回、Arduino用のCANバス・インタフェース・ボードを使って、CANフレームを観察できることを確かめました。でも1台では肝心の通信ができません。それでもう一台CANバス・インタフェース・ボードを購入してあります。M5Stack用のCAN UNITです。動いたです。でも最初、早合点で接続間違えました。私のせい。
※「部品屋根性」投稿順Indexはこちら
前回同様、スイッチサイエンス社から購入したので、そちらへのリンクを貼り付けておきます。M5Stack社「純正」のCAN BUSインタフェースユニットです。
M5Stack用CAN-BUSユニット(CA-IS3050G)
前回購入のキットもリーズナブルな価格であったのですが、OBD2コネクタが付属しているためか、今回購入のボードに比べるとお高い。今回のボードはかなりお手頃価格じゃないかと思います。
前回購入のCANインタフェースボードは中国Longan Lab社製でしたが、搭載されているICは米マイクロチップ製でデータシートも英文でした。しかし、今回購入のM5Stack製ボードは、搭載ICが以下の会社製です。探したのですが、英文資料など見当たらず。ダウンロードできたデータシートは簡体字です。
型番的には、CA-IS3050GというIC搭載です。マイコン側がUARTインタフェースで、これをCANと変換するような方式であるのは前回ボードと同様です。ただ、前回ボードが3チップ構成だったのに比べると、今回は論理的にはワンチップ(他に電源関係チップあり)でこれを行っています。さらに特徴としては、5000V耐圧で、マイコン側とCANバス側をアイソレートしています。Webサイトを見る限り、このChipanalog社は高耐圧の絶縁、得意みたいです。英文資料が見当たらないのがちょっと残念。
データシート読むのは断念しましたが、このボード自体の説明はM5Stack社のサイトに立派な英文資料があるので不自由はしません。以下のとおり(と言いながら、最初にちゃんと読まなかったので無駄な時間をかなり使ってしまいました。)
CAN (Controller Area Network) Unit
上記の説明ページからは、例によってGitHubへのリンクが張られており、サンプルプログラムのダウンロードが可能です。Arduino環境のM5Stack向けのサンプルコードです。
M5-ProductExampleCodes/Unit/CAN
上記のところから、以下のサンプルプログラムをダウンロードし、ちょっと改造(オシロで波形を取りやすいように無限ループ化など)して用いました。ID=1、DLC=8で “HelloCAN”という文字列をペイロードとして流し続けるだけ。
CAN_SEND
まずハマったのが、インタフェースボードとM5Stack(使用したのはGray)との接続です。インタフェースボードにはGroveコネクタあり、そしてパッケージにはいつもの黄白赤黒のGroveケーブルが付属、そしてM5StackにもGroveコネクタがあります。短絡的に
Groveコネクタ同士をGroveケーブルで接続したけれどダメでした
サンプルソフトは全く変更しない状態です。ビルドOK、M5Stackへの書き込みもOKで、M5StackのLCDにはグリーティングメッセージが表示されます。しかし、CANバスはピクリとも動きません。
ようやく何かやらかしていることに気づき、先ほどのページをよく読むと、Pin Mapのところに、
-
- GPIO16 RXD
- GPIO17 TXD
とかいてあるじゃありませんか。すでに書きましたがインタフェースボードはUART接続なのです(実際にはここまで気づいていなかった。)M5Stack Grayに一つしかないGroveポートは基本I2C用で出ている端子が異なります。ESP32は端子のフレキシビリティが大なので、I2CからUARTにも変更できるのかもしれませんが、説明のWebページに書いてある通りのピンアサインとして、ESP32のGPIO16とGPIO17に接続することにいたしました(この時点では当然サンプルソフトはそのようになっているだろ~と思い込んでいました。)この場合、Groveコネクタではなく、M5Stack Grayの右側面からの信号取り出しとなります。
接続しなおしたけれどダメ
ますます焦り、ようやくサンプルプログラムのソースを読みました。あれれ、GPIO16と17じゃないよ。ソースか物理接続か、どっちを修正してもよかったのですが、Webページの説明優先、物理接続はそのままに、ソースの端子名を以下のように修正して辻褄を合わせました。
#define TX GPIO_NUM_17 #define RX GPIO_NUM_16
修正したら何のことはない、動作OKとなりました。CANフレームが送信されています。前回同様、AnalogDiscovery2を接続してCANフレームを観察している様子がこちら。
まずはオシロで見たときの波形、とれている感じがします。けれど前回の波形よりも振幅小さ目でないかい。。。
前回述べたとおり、CANフレームの解読はちょっとメンドイので自動がいいです。
AnalogDiscovery2のロジアナ機能にお任せです。そのためには、ロジアナ機能に端子と、極性、速度を設定しないとなりません。今回のサンプルプログラムの場合は左のとおり。
これだけ設定すれば、後はテキトーに解読して表示してくれます。
今回の垂れ流しフレームを解読したところがこちら。ペイロード先頭の3文字 “Hel” の部分だけが読めています。
というわけでM5StackとCANバスの接続も一応できたな。本当はArduino UnoとM5Stack2台の間で通信するところまで行きたかったのですが、今回は早合点のトラブルで疲れました。また今度だな。今度こそ大丈夫か。。。