RaceChrono DIY デバイス
目的
修理・故障・メンテナンス
作業
DIY
難易度
初級
作業時間
30分以内
1
2
NC ロードスターの CAN データを RaceChrono へ取り込むための情報はこちらにまとめてくれています。
https://github.com/timurrrr/RaceChronoDiyBleDevice/blob/master/can_db/mazda_mx5_nc.md
CAN フレームをそのまま BLE で転送する仕組みっぽいので以下の CAN ID を転送する設定とした。
0x081, 0x085, 0x200, 0x201, 0x240, 0x4B0
BMW 用のソースコードに倣い 10msec 間隔で送信されている CAN フレームは間引いて3回に1回転送することとした。
<3/26 追記>
BRZ / 86 では CAN ID 0x241 でシフトポジションが取れるようだ。羨ましいので車速とエンジン回転数からシフトポジションを計算して CAN ID 0x231 の 2 byte 目あたりを使って取れるようにしてみたい。
<3/27 追記>
RaceChrono で CAN ID 0x201 に対し下記の方程式(6速向け)で簡易的にギアを得る事が出来た。CAN からクラッチとニュートラルの状態を得られるので、それを加味すればより正確なシフトポジションを得ることができるけど、車種依存の汚いソースコードにしてまでする必要はないかと思い直しました。
(0.004<(((bytesToUint(raw,4,2)/100.00)-100)/(bytesToUint(raw,0,2)/4.00)))+(0.010<(((bytesToUint(raw,4,2)/100.00)-100)/(bytesToUint(raw,0,2)/4.00)))+(0.015<(((bytesToUint(raw,4,2)/100.00)-100)/(bytesToUint(raw,0,2)/4.00)))+(0.021<(((bytesToUint(raw,4,2)/100.00)-100)/(bytesToUint(raw,0,2)/4.00)))+(0.026<(((bytesToUint(raw,4,2)/100.00)-100)/(bytesToUint(raw,0,2)/4.00)))+(0.032<(((bytesToUint(raw,4,2)/100.00)-100)/(bytesToUint(raw,0,2)/4.00)))-(0.040<(((bytesToUint(raw,4,2)/100.00)-100)/(bytesToUint(raw,0,2)/4.00)))*6
3
開発から年数が経っているせいなのか、最新版の Arduino IDE に esp32 パッケージでは TWAI(CAN) コントローラが動作しなかったので twai ドライバーのソースを参考に修正し ESP32 dev module を使用して RaceChrono で情報が取れることを確認しました。
https://github.com/kz1000a1/racechrono-canbus
<3/21 追記>
このプログラムは、2つある ESP32 のコアのうちコア 0 で BLE によるデータ転送タスクを実行し、コア 1 で CAN コントローラーの割り込みハンドラを実行するという構成です。esp32 でもシングルコアの esp32-c3 等ではビルドができるように修正はしたものの正常には動作しないと思われます。
割り込みハンドラ中で、受信した CAN フレームが BLE で転送する対象かどうかを判定し、転送する CAN フレームだけをキューを介してコア 0 のタスクに渡すという転送性能を追求(?)した作りになっています。
espressif 社の TWAI ドライバーの割り込みハンドラーを使わず上記のハンドラーを使うために、TWAI ドライバーの I/F を使わずに実装されています。
そのため、互換性の問題から SoC によっては、src/canbus/controller.cpp を修正しないと動作しないかもしれません。
4
<3/13 追記>
M5STACK の Atom CAN 用の定義を追加し動作することを確認しました。LED の点灯には対応していません。
https://docs.m5stack.com/ja/atom/atom_can
CAN フレームを 175[フレーム/秒] 送信していて 8フレーム分のキューのうち最大で 4フレーム分しか使用していないようなので、Atom Lite でも性能は間に合っているようです。
5
<3/14 追記>
以下の情報を参考に VN レヴォーグ用のソースコードを追加しました。CAN フレームを解析してブースト圧や空燃比等とれれば面白そうですが、解析する意気地がありません。
https://github.com/timurrrr/ft86/blob/main/can_bus/gen2.md
<3/25 追記>
VN レヴォーグ用として 2代目 BRZ / 86 のサブセットを作りましたが、どうせなら BRZ / 86 用として完全なものにしておこうということで、CAN ID 0x13A と 0x241 を追加しました。以下の CAN ID を BLE に転送します(テストはこれから)。
0x040, 0x138, 0x139, 0x13A, 0x13B, 0x241, 0x345, 0x390, 0x393
<5/9 追記>
ドアがオートロックされる速度が約 22km/h だったので、そのときの CAN の生データから速度の係数を求めると 0.01717 となった。VN5 のメーター表示に合わせて求めた係数なので、86/BRZ では 0.015694 を使うのが良いのだろうと思う。
<5/10 追記>
ブースト圧(インマニ圧)を見つけてくれた方がいらっしゃいました。
https://minkara.carview.co.jp/userid/3717805/car/3726920/8214739/note.aspx
RaceChrono だと CAN ID 0x345、方程式 F * 2 - 100 となる。
6
[PR] Yahoo!ショッピング
おすすめ順
売れている順
関連コンテンツ
関連整備ピックアップ
関連リンク