ラベル の投稿を表示しています。 すべての投稿を表示
ラベル の投稿を表示しています。 すべての投稿を表示

2015/04/15

CANで社外メーター的なもの(2)

CANの工作をしようとして、一番最初に困ったのがデバッグ環境でした。

普通にPICで何かを作る場合、何につなぐにせよ大概はその場でデバッグができるわけですが、CANのものを作る場合は実車に繋がないと動作確認もできません。CANアナライザ?みたいなものは明らかにお高くて、普通の人には贖うことはできませんし。

かといって実機でデバッグをしようにも、いちいち駐車場まで出かけて車を出すのも面倒ですし、夜中に謎の基板を持って駐車場をうろうろしていたりすると、危ない人になってしまいます。

というわけで、ちょっと悩んだ挙句に、以前にアマゾンで千円で仕入れたELM327を治具にしてデバッグをすればいいじゃないか、と思いつきました。

追加で必要な物はこの二又になったOBD2ケーブルです。これもアマゾンでポチ。




この先の片一方にELM327を、もう片一方に自作メーターを接続すれば、電気的にはお互いが繋がったことになります。

CANの仕様的にはバスの両端に終端抵抗(120Ω)が必要なはずです(参考:フィールドバスの色々(その2)CAN(その1))。
ELM327はスタブ・ノードになるので終端はされていない気がしますが、ケーブル長もそれほどではないからか、特に問題なく動きました。

こうやってつなげばELM327から縦横無尽にCANパケットが出せて、デバッグもらくらくかというと実はそうでもなくて…。ELM327はあくまでCANスキャンツールなので、パケットを出す(OBD2のリクエストを出す)のは比較的自由にできますが、受け取り側はちょっと厳しくなっています。つまり、送信と受信は完全に対象ではなくて、基本的には「出した要求パケット(OBD2パケット)の応答を受け取る」目的で作られていて、任意のパケットを受け取るのはちょっとやりにくい感じになっています。

マニュアルには、回線モニタ系コマンド(AT MR、AT MA、AT MTなど)の記載があって、一見これらを使うと自由自在にパケットを受け取れそうに見えますが、実際には、スヌープだけするモードになっていてACKビットを出さないようです(CANプロトコルでは、受信者がACKビットを立てることで通信が成立するとのことです)。それだと送信側は受信者がいなくて送信に失敗したと認識するようで、結局うまく行きませんでした。

そういうわけで、結局、ELM327を自作基板デバッガとして使うにはだましだましやることになります。

29ビットモードの場合は、

  • 18DB33F1(ECU)へのリクエストをELM327で受け付けるよう設定(ACKするよう設定)
    これをやれば自作基板からFITにデータを送信した時に、送信エラーになることなく送信が可能(なはず)。ただし、ELM327からは自動ではリプライは来ません。
  • 18DAF111宛の送信ができるように設定
    ターミナルから送信データを入力すると、自作基板側に送られます。
    自作基板側で正しくフィルタ設定をして受信しておけば、あたかもELM327から(車から)来たリプライのように見えます。

上を実現するには、以下の様なATコマンドを打てば良いことになります。

AT SP 7       (プロトコルを CAN 29bitに設定。11bitと行ったり来たりするときには必要です)
AT CP 18      (送信時のヘッダの29ビットIDの上位桁を設定します)
AT SH DAF111    (送信時のヘッダの29ビットIDの下位桁を設定します)
AT CF 18DB33F1  (フィルタを設定して、18DB33F1を受け付けるようにします)

FITのOBD2は29ビットなので、テストすべきシーケンスは

(1)自作基板→ELM327(実車)
   自作基板からソフトウェアでID=18DB33F1でリクエストを送信
(2)自作基板←ELM327(実車)
   ELM327から、手入力で応答データを含んだパケットを打鍵、送信。
   ID=18DAF111のパケットになり、自作基板はあたかもリクエストへの返信だと思って画面表示
   (タイムアウトとかは適宜調整しないと、うまくいきませんが)

ということになります。自動で応答できないのが寂しいですが、ひと通り、「温度XX度のデータを受け取った時に自作基板が正しく応答するか」といったテストをすることはできます。

さて、FITのCANバスには、OBD2以外にもデータが常時流れています。
こちらこちらに大変詳しい情報がありますが、それらのパケットはCANの11ビットで流れています。OBD2のようにリクエスト・レスポンスの組ではなく、常時車から垂れ流しなので、受信テストだけできれば充分ですが、その場合には

AT SP 6    (CAN11ビット指定)
AT SH 158   (ヘッダのIDを158に設定)

といったコマンドを投入することになります。

その状態でELM327側からパケットデータを入力すると、11ビットの0x158というCAN IDで送信されるので、自作基板側でそれを受理するようにフィルタ設定しておけば、各種パケットに対する自作基板の応答をテストをすることができます。

ちなみに、こちらによると0x158は車速を送信してくるCAN IDです。

2015/04/05

CANで社外メーター的なもの

こんなのを作りました。


FIT用の「社外メーター的な何か」です。診断用コネクタに繋いで、CANバス経由でECUの情報を取り出しています。

ユニバーサル基板にグラフィック液晶をおんぶさせて、上と下をアクリル板で挟んでいます。こんなので夏日とかは大丈夫かと少し気になりますが、気持ち、涼しげな感じがします。駐車場は機械式の地下なので、とりあえずいきなり溶け落ちたりはしないでしょう。

ハードウェア構成としては、

  • PIC18F4585(CANコントローラ内蔵PIC)
  • MCP2551(CANドライバ)
  • 秋月のグラフィック液晶(TG12864B-02WWBV
  • RTCモジュール(これ)
  • LDO(5V)
  • 電源制御用のトランジスタ(おなじみ2SA1015)
  • バルクのOBD2ケーブル+USBミニで接続
という感じになっています。

MCP2551以外はすべて秋月で購入しました。
MCP2551は秋月・千石・マルツいずれも取り扱いがないので、rsコンポーネンツで購入しました。まあ、こんな特殊用途の石あまり使う人はいないでしょうから致し方ありません...。

とこう書くと、部品を買ってきて組み立てただけのように聞こえますが、そこは素人の悲しさ、なかなか大変でした(続く!?)。

2015/01/25

FITでCAN・OBD2通信してみた(ELM327)

せっかくコネクタが出ているので、OBD2で色々つないでみることにしました。

いきなり自作に走るのも何なので、市販品を調べてみるとELM327という製品(チップ?)がよく出ているようです。アマゾンで1000円前後で買えますので、まあ失敗しても痛くはないということでポチってみました。



bluetooth版もありますが、PCに繋ぎたかったのでUSBにしておきました。

ELM327で検索すると「OBD2テスター」みたいな言われ方をしていますが、元々はチップの名前なのだそうで、ELM electronicsというところから発売されているようです。データシートもここにあります。

ネットで色々調べていたら、ELM327、実は中身はただのPICで、それにプログラムを書き込んだものをELM327チップとして売っているようです。凄い商売ですね。

1.PCと繋いでみる

まず実車には繋がずに、PCとELM327を繋いでみます。
このELM327は、上のデータシートを読むとわかりますが、ATコマンドのようなプロトコルでホスト・デバイス間で通信します。今回のUSB版のやつは、ホストとの間はUSBシリアルで接続されていて、シリアルポートでおしゃべりすることができます。

atz
atl1

などのATコマンドが通ったので、まずは大丈夫そう。アマゾンのレビューには「動かない」「壊れた」というコメントが多数登録されているので、少し心配でしたが。
ボーレートはデフォルトでは38400bpsなので、9600で話そうとすると文字化けします。

2. 実車とつなぐ

実車で繋いでみました。
TeraTermで接続しています。
atz/atl1を入力して、リセット・line feed onにしています。atrv(read voltage)で電圧を読むと12.1Vと帰ってきています。

ここで、おもむろに0100(Mode=1、PID=0)を入力してみました。
このPIDは、「サポートされているPID一覧を返却する」というものです。


SEARCHING...と出た後になんか帰ってきました!
ゴミでも読んでるのかとちょっと不安になりますが、41の4は「返却値」であることを示していて、次のバイト(00)は送ったものがそのまま帰ってきて構わないので、おそらく正しく応答されているのでしょう。データはBE 3F A8 03となっていますが、これも大体妥当そうです。

ただ、二行帰ってきていて結果が違っています。
これは後で色々調べたところ、FITの場合、複数の装置から二重に返却値が返ってくるようで、それで二つの結果が得られている、ということのようです。

詳しくは、pullup.netさんのページにいろいろ情報があります、というかこのページがなかったら、多分まともに使えてなかったような気がします。

3. アプリで見てみる

ELM327の添付CDには、ウィンドウズ用のアプリが色々ついてきます。ただ、キージェネレータがしれっと添付されていたり、怪しさ爆発です。アマゾンのレビューにも、ウィルスがいただのなんだの喧しいので、恐る恐るインストールしてみました…。

が、結論から言うと、どのアプリも全然ダメでした。
どうも正規版チェックに引っかかってエラーになったりと散々なことになってしまったので(今回購入したELM327は、どうも中華製のパチもんのようなのですが)、ウィンドウズ上のアプリで操作する方向はとりあえず放棄しました。


2015/01/10

FITを改造してみた(と言ってもルームランプの置き換え)

早速FITを改造してみました。

改造といっても、いきなりOBD2ではなくてルームランプの置き換えwww
  • ルームランプ
    アマゾンで購入しました。

    明るい、と書いてありますが、本当にびっくりするぐらい明るいです。


  • カーゴランプ
    FITは上位グレードでないと荷室のランプ(カーゴランプ、ラゲッジランプ)が付いていません。FITは車格的には廉価車以外のなにものでもないので、しょうがないといえばしょうがないのですが。
    ググるとストリーム用のランプが適合するようで、皆さんディーラーさんで取り寄せて自分でつけておられるので真似して営業さんにお願いしてみました。
    設置前後の写真を撮り忘れましたが、荷室の左サイドに「ランプ設置用のへこみ」があるので、そこをカッターで繰り抜いて設置します。
HONDA純正部品

2015/01/04

FIT納車とOBD2

しばらく前の話になりますが、車をフォレスターからFITに乗り換えました。中古だけど。

前車のフォレスターは2000年式で、走行距離は6万キロぐらいしか行ってなかったのですが、スキーに行ったあとのメンテが悪く、シャシー下部が錆び錆びになっていしまっていました。ディーラーでもちょっともう乗り続けるのは結構厳しいかもという判断でした(まあディーラの人は常に買い換えろ、というのですが)。燃費も3km/Lぐらいしか出なくなっていて、どこのアメ車ですかという感じになっていたので、いい頃合いだったと思います。

2009年式のGE6なので、昨今のリコール騒ぎとはまったく関係なし。
町中を走っていると、FITばっかり見かけるのでやや辟易しますが、それはそれとして街乗りする分にはいい車だと思いました(高速だとさすがにフォレスターの方が良かった気がしていて、FITだとちょっと不安な感じになります。慣れなのかもしれませんが)。

色が違いますが(ホンダさんのページから引用)

さて、FITに乗り換えて気づいたのですが、最近の車にはOBD2(On Board Diagnostics)というシステム(とコネクタ)が必須なようで、GE6にもちゃんとついています。
ググると、いろいろ作ってつないだりしている人がいるようで、これはちょっと電子工作的にも楽しめそうな予感です。

FITのOBD2コネクタ(運転席左下にあります)