SOARISTO工房 Logo
BMW Archive

 前回の実験により、自作のOBD-IIインタフェースを介して、車両側より各種情報を取り出せることが分かりました。

 つぎなる課題は、取り出した各種情報を、“どのように表示するか”です。

 昨日、Apple社から「iPad」が発表されました。9.7型、1,024×768ドットのIPS液晶を持っています。いずれ、以前にご紹介した、こんなアプリケーションが出てくるとは思いますが、車内に設置するには、明らかにデカ過ぎです、邪魔です。0xF9D1

 ここはやはり、“スマート”に、iDriveのセンターディスプレイに映し出すことにします。
(運転中のドライバーの視認性を高めるために、「あの位置」にあるのですから)

 PICを始めとするマイクロコンピュータに、「RGB出力機能」を持たせるための、便利なモジュールがあります。オーストラリアの4D Systems社が開発・販売している、「µVGA-PICASO-MD1」というモジュールです。

µVGA-PICASO-MD1

 これが、4D Systems社が開発した「PICASOチップ」を搭載したボードです。

 4D Systems社が「世界最小のVGA/SVGAコントローラ」というだけあって、大きさは、わずか24mm×19mm程度しかありません。

 本来は、小型液晶モジュールをコントロールするためのものですが、「PICASOチップ」だけを取り出して、RGB出力できるようにしたものが、このモジュールです。

 小さいながらも、512kbyteのVRAMを持っており、QVGA(320×240)で8画面、VGA(640×480)で2画面、SVGA(800×600)で1画面の容量があります。
(現在のファームウェアでは、SVGAはサポートさせていません)

 ユーザーズマニュアル(英文47ページ)を読んでみると、ふむふむ、なんとか使えそうです。

 VGAで2画面分のメモリがあるので、ダブルバッファによるフリッカレス表示ができそうです。
(“VSYNC待ち”もあるのですが、割り込みを使いたいので、信号を外に出して欲しかった・・・)

µVGA-PICASOMD1-UB

 モジュール単体だと、小さすぎて扱いにくいので、「ベースボード」(µVGA-PICASOMD1-UB)が出ています。

 ラダー抵抗によるD/A変換により、256color/pixelのアナログRGB出力ができます。USARTインタフェースを持っており(電圧はTTLレベル)、外部からシリアル接続にてコントロールします。
(MicroSDカードスロットが装着されており、BMPファイルを読み込んで表示できるようになっていますが、現在のファームウェアでは、サポートされていないようです)

µVGA-PICASO-MD1

 「世界最小のUSB/シリアル変換モジュール」(µUSB-MB5)を取り付けることもできます。

 とりあえず、USB接続にして、デスクトップPCで開発してみることにします。

 4D Systems社のデモです。

〔関連情報〕
   ・µVGA-PICASO-MD1
   ・Users Manual
   (4D Systems)

 前回の続きです。

 いよいよ、OBD-IIインタフェースを、M3 Coupeに接続します。

CAN to Serial Interface Circuit

 運転席右下(右ハンドル車の場合)のOBD-IIポートに、コネクタを挿入します。

CAN to Serial Interface Circuit

 はじめに、「ハイパーターミナル」を使って、車両側と通信できているか確認します。

 「AT RV」(RV:Read the Voltage)と投げてみます。

 「14.7V」と返ってきました。ELM327が感知しているバッテリー電圧です。

CAN to Serial Interface Circuit

 「AT CS」(CS:show the CAN Status counts)と投げてみます。

 「T:00 R:00」と返ってきました。CANバスとの通信における送受信エラーの発生回数です。

 く~っ、やりました。自作の回路を使って、BMWと会話することができましたっ!!0xF9CF

 ふつーのヒトから見れば、大したことないように見えるかも知れませんが、これは大きな前進です。

#この歓びは、イイ年こいて、電車の中でピコピコDSやPSPやってるような連中には、一生味わうことのできない歓びでしょう。0xF9D1

OBD ScanTool

 つづいて、ScanTool.net社から無償配布されている「OBD-II Software」を使って、CANバス上に流れているデータを見てみることにします。

OBD ScanTool

 左がドイツ語版、右が英語版です。

OBD ScanTool

 OBD情報を表示させたところです。CANネットワークとは、500kbpsで通信していることが分かります。

OBD ScanTool

 MAF(Mass Air Flow)センサからの情報が読み出せれば、比較的簡単に「瞬間燃費計」が作れるのですが、データを出していないようです。残念。

OBD ScanTool

OBD ScanTool

OBD ScanTool

OBD ScanTool

OBD ScanTool

OBD ScanTool

OBD ScanTool

 ということで、自作のOBD-IIインタフェースを介して、各種情報を取り出せることが分かりました。

 つぎは、Visual C++を使って、CANバス上に流れているデータを、ロギングするツールを作ることにします。

〔関連情報〕
   ・OBD-II Software

 前回の続きです。

CAN to Serial Interface Circuit

 とりあえず、実験用の回路を、サクっと作ってみました。0xF9C6

CAN to Serial Interface Circuit

 こんな感じです。

CAN to Serial Interface Circuit

 モジュールをPCに接続する前に、AE-UM232Rのセットアップをしておきます。

 FTDI Chip社のホームページから、FT232R用のVCPドライバをダウンロードし、インストールしておきます。

 VCP(Virtual COM port)の設定が終わったら、いよいよ、モジュールをPCに接続します。

 AE-UM232RにUSBケーブルを接続すると、ELM327が正常に動作していれば、ELM327に接続してある4つのLED(送受信インジゲータ)が、順番に点灯します。
(今回の回路では、緑色のLEDが、OBDのTxD/RxD、黄色のLEDが、RS-232CのTxD/RxD)

CAN to Serial Interface Circuit

 ELM327は、ATコマンドを使ってコントロールするので、簡易動作チェックとして、「ハイパーターミナル」を使ってELM327に接続します。

 試しに、「AT I」(I:Identify yourself)と投げると、「ELM327 v1.3a」と返ってきました。
(これは、ELM327のファームウェアのバージョンが、1.3aであることを示しています)

CAN to Serial Interface Circuit

 「AT Z」(Z:reset all)と投げると、初期化シーケンスが走り、4つのLEDが順次点灯して、同じく「ELM327 v1.3a」と返ってきました。

 他にもいろいろとコマンドがありますが、とりあえず、USBを経由してELM327と会話ができて、正常に動作して(いそうな)ことが分かりました。0xF9CF

 次回は、いよいよ、M3 Coupeに接続してみることにします。

 0xF99B「ラブレター フロ~ム カナ~ダ~ッ!!」

Airmail from Canada

 唐突な出だしですが、届きました。カナダはオンタリオ州、ロンドンから、航空郵便が。0xF8E6

ELM327 and MCP2551

 中央の28ピンのチップは、今回の主役、Elm Electronics社のOBD/RS-232Cインタプリタ、「ELM327」(32.50カナダ$)です。

 手前の8ピンのチップは、Microchip Technology社のCANトランシーバ、「MCP2551」(5.00カナダ$)です。CANバスの差動信号を、TTLレベルの信号に変換してくれます。

OBD-II Connector

 OBD-IIコネクタと、コネクタピンです。4ピンしか使いませんが、万が一のことを考えて、8ピン分買いました。

AE-UM232R

 秋月電子通商さんのUSB/シリアル変換モジュール、「AE-UM232R」(950円)です。

 USARTからのシリアル信号は、RS-232Cレベルに変換して入出力するのが一般的ですが、最近のPCは、シリアルポート(COMポート)を持っていないことが多くなっています。(うちのVAIOクン達も)

 そこで、USARTからのシリアル信号(TTLレベル)を、直接そのままUSBに変換し、ノートPCには、「バーチャルCOMポート」として接続することにします。

 AE-UM232Rは、FTDI Chip社のUSB/USARTインタフェース、「FT232R」を使っています。モジュールは、24ピンDIPサイズに収められており、とても扱いやすくなっています。
(FT232Rを“生”で使っても良かったのですが、フラットパッケージのピンのピッチ幅が細か過ぎて、ハンダ付けが面倒くさそうなので、950円で解決)0xF9C7

〔関連情報〕
   ・MCP2551 DataSheet
   ・FT232R DataSheet
   ・FT232R Virtual COM Port Drivers

 前回の続きです。

 最終的には、CANインタフェースを持っている「PIC18F2480」などを使って、スタンドアロンで動作するモジュールを作ることを目標としていますが、まずは小手調べとして、CANバス上に流れているデータを、ノートPCでロギングするツールを作ることにします。

 なぜにロギング・ツールから先に作るかというと、つぎのような理由に依ります。

 CANプロトコルでは、標準で用意すべきPID(Parameter ID)の他に、メーカーで独自にPIDを割り当てることができるようになっています。BMWでも、車載されている多数のモジュール対して、独自のPIDを割り当てているでしょうから、CANバス上に流れている膨大なデータの中から希望の情報を取り出すためには、どのPIDにどのような情報が割り当てられているのか、一つ一つ対照していく必要があります。

 いつも親切丁寧な「BMWカスタマー・サポート」のお姉さんに聞いても良いのですが、そんなこと教えてくれる筈もなく(当たり前だ)0xF9C7、独自に解析していかなければなりません。ほとんど全検索するぐらいの勢いで。

 初めて作る「PIC18F2480」のCANインタフェースの動作チェックをしながら、CANバス上に流れているデータのチェックをしていたのでは、どちらをデバッグしているのか分からなくなってしまいます。
(「PIC18F2480」の評価用ボードは、ボッタクリだし、DIYの精神に反するので却下)

 そこで、まずはノートPCに接続して、CANネットワークのデータを解析できる環境を作ることにします。

 CANバス上に流れているデータを吸い出すために、便利なチップがあります。カナダのElm Electronics社が開発・販売している、「ELM327」というチップです。

 このELM327を使うことにより、OBD-IIコネクタに出ているCANの信号を、RS-232Cのシリアル信号に変換することができます。

CAN to Serial Interface Circuit

 とりあえず、データシートにある標準回路をベースに、実験用の回路を作ってみました。

 回路を考えていた時に、気付いた点を一つ。

 ELM327のピンアサインを眺めていたところ、「何となく、PIC18Fファミリのピンアサインとよく似ているなぁ」と思っていたのですが、データシートをよくよく読んでみたところ(英文60ページ!!)、脚注に小さく、「ELM327は、PIC18F2x8xファミリのデバイスを用いています」との記述が・・・。
(なんだよ~、早く言ってよ~)0xF9C7

 当初、ELM327をテストベッドとして、(BMWの)CANネットワークの解析をしてから、PIC18F2480のCコンパイラ用のCANライブラリの勉強をしようと思っていたのですが(これがなかなか難儀そう)、ELM327をうまく使えば、後者を省くことができそうです。

 ということで、CANからRS-232CへのインタプリタとしてELM327を用いて、各種数値を視覚化するためのコントローラとして、一般的なPIC(PIC18Fファミリ等)を使うことにします。
(最終的に、モジュールの小型化を図る際には、PIC18F2480を使うかも知れませんが)

〔関連情報〕
   ・ELM327 DataSheet
   ・ELM327 QuickSheet
   ・ELM327 AT Commands