OBD2による自作水温計完成(ブレッドボード上)

AK12型マーチ君のOBD2プロトコルはCAN通信を採用しているのですがECUに関して多くの基本データをやりとりしているのはISOー14230(KWP2000)のK-LINE通信です。

OBD2通信するにはOBDバスを初期化する必要があります。

0.K-LINE端子を1(電圧12V)状態。

1.K-LINE端子を0(電圧 0V)25msec維持する。

2.K-LINE端子を1(電圧12V)25msec維持する。

3.K-LINE端子をシリアル通信速度10400bpsの8N1でStartCommunicationをリクエストします。ヘッダーアドレス3バイト+StartCommnnication「0x81」+CRC8を送信。

4.上記リクエストに応答したレスポンスが返ってきます。

5.これでOBDバスの初期化は終了。

これでダイアグノーシスサービスを実行できるようになります。ですがこれだけではreadDataByCommonIdentifier「0x22」でECU内のデータを正常にリクエストすることはできません。全てネガティブレスポンスとして返ってきます。

readDataByCommonIdentifier「0x22」で、あるデーターをリクエストして初めてECUとの通信が可能となります♪。

上記コマンドを実行後、readDataByCommonIdentifier「0x22」にてデータID(水温などなど)をリクエストして、レスポンスで各データを受信してLCDにデータを表示させる。

一般的にはELM327などを利用して、ATコマンドで気軽に送受信しますが、おらっちはそれではELM327の回し者になっちゃうのでELM327は使用せずマイコンから直接K-LINEを制御。

OBD2による自作水温計の中身はこんな感じ制御していてAFR部以外ブレッドボード上ですが出来上がりました。

初期画面からOBD2バスを初期化するまでのプロセス(マーチ君のOBD2バスに接続していなのでエラーが発生しています)。

マーチ君に自作水温計を接続水温71度から73度に上昇確認。

ちびっつに配線踏み潰されてLCDがお亡くなりになって画面が白くなってるのがですが新たに代替品が手に入るまで我慢しよう。