![]() |
対応している車輌プロトコル OBDの全てのプロトコルに対応してます.しかしながらCANプロトコルを利用するにはさらに別のICが必要になりますが、冒頭で紹介したような機器には大抵セットで組み込まれているので、そこら辺は意識する必要はありません. OBD機器を自作する手前、ELMチップを購入して1から設計しようかと一瞬思いましたが、まずは手っ取り早く市販の機器をつかってこれに手を加えて素性を確認してみることにしました. ・・・ というか、自分の手に負えるものなのかどうかを確かめる意味合いの方が強い. |
マイクロコントローラ(MPU)との接続方法もデータシートに載っているのでこれを参照してテスト回路を作り込みます.今回の場合シリアル通信は”送信”と、その反応を”受信”するという高度な技(←黒っ9にとって)が必要になってきます.ここら辺がかなり自信なし・・・. データの送信か受信を一方通行で行う通信はちょっぴり試したことがありますが、今回は双方向通信なので、頭を悩ませること間違いなし. |
|
![]() |
![]() |
車輌側OBD2コネクタ例 ELM327機器に電源を供給する端子が分かります.OBD2はバッテリーからの常時電源供給らしいので、ちょっと気持ち悪い.エンジン始動したときに電源供給できるよう改造している方をみかけるのはそういった事情があるようです. 自作回路を作るときには電源を別ラインからとる方が良さそうですね.. |
さて、久しぶりにのんびりとした休日だったので通信プログラムを作ってみることに.まずはコマンドを投げるところから.これは非常に簡単でコンパイラのリファレンス通りに記述するだけで処理できる.問題は、コマンドを受け取る部分なのだが、これが非常にやっかい. こちらからコマンドを投げてそのレスポンスをキャッチしなくてはならないのだ.コマンドを投げてから単にELM327から帰ってくるレスポンスを待っていては、他の処理ができない.かといって、全体にループをかけて他の処理をしながらレスポンスの有無をチェックする方法だと、他の処理をしている間にレスポンスが帰ってきてしまい取り逃がしてしまうことになってしまう.う~む. いろいろ調べた結果、マイコン機能の受信割込機能を使ってみることにしました.これは黒っ9にとって初の試み!要はいつ帰ってくるか分からないレスポンスに対して、”レスポンスがきた時に対応する”処理を作っておいて、そこで受信してバッファリングしておく.こうすることで次に新たに受信しても直前のデータが消えないようにする. そしたらメインプログラムの方で、都合の良いときになったら先ほどのバッファからデータを読んでくればよい.そうすれば、他の処理をしながら適当にバッファをチェックしてデータがあれば表示なり演算なりをすればよいというお気楽な設計が可能になる! ・・・はず. |
|
![]() |
|
回路を考えるのもおもしろいけど、バッファリングアルゴリズムを考えるのもなかなかおもしろい.自分の思考回路をC言語で実現させる.電子工作やプログラムは仕事とは全くの畑違いなので、違った刺激がありますね♪ 作ったプログラムはシミュレータで確かめます.バーチャル通信ポートとELM327を接続して実行! 試行錯誤の結果、ばっちり期待通りの動作をしてくれました! |
|
de (hex) |
PID (hex) |
Data (Byte) |
Description | Min value | Max value | Units | Formula |
---|---|---|---|---|---|---|---|
01 | 00 | 4 | PIDs supported [01 - 20] | Bit encoded [A7..D0] == [PID $01..PID $20] See below. | |||
01 | 01 | 4 | Monitor status since DTCs cleared. (Includes malfunction indicator lamp (MIL) status and number of DTCs.) | Bit encoded. See below. | |||
01 | 02 | 2 | Freeze DTC | ||||
01 | 03 | 2 | Fuel system status | Bit encoded. See below. | |||
01 | 04 | 1 | Calculated engine load value | 0 | 100 | % | A*100/255 |
01 | 05 | 1 | Engine coolant temperature | -40 | 215 | °C | A-40 |
01 | 06 | 1 | Short term fuel % trim—Bank 1 | -100 Subtracting Fuel (Rich Condition) | 99.22 Adding Fuel (Lean Condition) | % | (A-128) * 100/128 |
01 | 07 | 1 | Long term fuel % trim—Bank 1 | -100 Subtracting Fuel (Rich Condition) | 99.22 Adding Fuel (Lean Condition) | % | (A-128) * 100/128 |
01 | 08 | 1 | Short term fuel % trim—Bank 2 | -100 Subtracting Fuel (Rich Condition) | 99.22 Adding Fuel (Lean Condition) | % | (A-128) * 100/128 |
01 | 09 | 1 | Long term fuel % trim—Bank 2 | -100 Subtracting Fuel (Rich Condition) | 99.22 Adding Fuel (Lean Condition) | % | (A-128) * 100/128 |
01 | 0A | 1 | Fuel pressure | 0 | 765 | kPa (gauge) | A*3 |
01 | 0B | 1 | Intake manifold absolute pressure | 0 | 255 | kPa (absolute) | A |
01 | 0C | 2 | Engine RPM | 0 | 16,383.75 | rpm | ((A*256)+B)/4 |
01 | 0D | 1 | Vehicle speed | 0 | 255 | km/h | A |
01 | 0E | 1 | Timing advance | -64 | 63.5 | ° relative to #1 cylinder | A/2 - 64 |
01 | 0F | 1 | Intake air temperature | -40 | 215 | °C | A-40 |
01 | 10 | 2 | MAF air flow rate | 0 | 655.35 | grams/sec | ((A*256)+B) / 100 |
01 | 11 | 1 | Throttle position | 0 | 100 | % | A*100/255 |
01 | 12 | 1 | Commanded secondary air status | Bit encoded. See below. | |||
01 | 1F | 2 | Run time since engine start | 0 | 65,535 | seconds | (A*256)+B |
01 | 21 | 2 | Distance traveled with malfunction indicator lamp (MIL) on | 0 | 65,535 | km | (A*256)+B |
01 | 22 | 2 | Fuel Rail Pressure (relative to manifold vacuum) | 0 | 5177.265 | kPa | ((A*256)+B) * 0.079 |
01 | 23 | 2 | Fuel Rail Pressure (diesel, or gasoline direct inject) | 0 | 655,350 | kPa (gauge) | ((A*256)+B) * 10 |
01 | 2C | 1 | Commanded EGR | 0 | 100 | % | A*100/255 |
01 | 2D | 1 | EGR Error | -100 | 99.22 | % | (A-128) * 100/128 |
01 | 2E | 1 | Commanded evaporative purge | 0 | 100 | % | A*100/255 |
01 | 2F | 1 | Fuel Level Input | 0 | 100 | % | A*100/255 |
01 | 30 | 1 | # of warm-ups since codes cleared | 0 | 255 | N/A | A |
01 | 31 | 2 | Distance traveled since codes cleared | 0 | 65,535 | km | (A*256)+B |
01 | 32 | 2 | Evap. System Vapor Pressure | -8,192 | 8,192 | Pa | ((A*256)+B)/4 (A and B are two's complementsigned) |
01 | 33 | 1 | Barometric pressure | 0 | 255 | kPa (Absolute) | A |
01 | 34 | 4 | O2S1_WR_lambda(1): Equivalence Ratio Current |
0 -128 |
1.999 127.99 |
N/A mA |
((A*256)+B)/32,768 ((C*256)+D)/256 - 128 |
01 | 35 | 4 | O2S2_WR_lambda(1): Equivalence Ratio Current |
0 -128 |
2 128 |
N/A mA |
((A*256)+B)/32,768 ((C*256)+D)/256 - 128 |
01 | 36 | 4 | O2S3_WR_lambda(1): Equivalence Ratio Current |
0 -128 |
2 128 |
N/A mA |
((A*256)+B)/32768 ((C*256)+D)/256 - 128 |
01 | 37 | 4 | O2S4_WR_lambda(1): Equivalence Ratio Current |
0 -128 |
2 128 |
N/A mA |
((A*256)+B)/32,768 ((C*256)+D)/256 - 128 |
01 | 38 | 4 | O2S5_WR_lambda(1): Equivalence Ratio Current |
0 -128 |
2 128 |
N/A mA |
((A*256)+B)/32,768 ((C*256)+D)/256 - 128 |
01 | 39 | 4 | O2S6_WR_lambda(1): Equivalence Ratio Current |
0 -128 |
2 128 |
N/A mA |
((A*256)+B)/32,768 ((C*256)+D)/256 - 128 |
|
|
ひさしくプログラムから遠ざかっていたので、アルゴリズム構築の頭の体操がてら、先日こんな物を作ってみました.せっかくなので動画も作ってみました♪ 海外の方からの問い合わせが意外にあるので、ナレーションは中学生なみのボテボテ英語で(笑) 一見複雑な動きに見えるけど、ソースコードは10数行.カンマ無しの連続した数字ならさらに3行減らせます (^ー^ YouTube広しといえど何人が製作してるかな? |
イイね!0件
自作♪パルスジェネレータ(車&バイク用) カテゴリ:その他(カテゴリ未設定) 2017/01/30 21:33:58 |
![]() |
自作♪GPI++:ギアポジションインジケーターVer5(MT用) カテゴリ:≡ 電子工作にチャレンジ♪ 2016/08/27 23:18:43 |
![]() |
【PSI++】自作ドライビングモニター でけたぁ~♪ カテゴリ:≡ 電子工作にチャレンジ♪ 2014/09/16 23:08:56 |
![]() |
![]() |
三菱 ランサーエボリューションX セクシーなXにあこがれて9GTから乗り換えました♪ ファントムブラックの5MTです. ... |
![]() |
三菱 ランサーエボリューションIX 納車されました(^^ セクシーなエボⅨにあこがれて思い切って買い換えました。ん~黒のボで ... |
![]() |
三菱 パジェロ 幼少の頃からパリダカで活躍するパジェロに興味があり、初めての車にパジェロを物色していると ... |
![]() |
三菱 ランサーエボリューションVII 頭文字D見てマニュアルの車にあこがれ、ワイルドスピード×2見て刺激され買ってしまいました。 |
2018年 | |||||
01月 | 02月 | 03月 | 04月 | 05月 | 06月 |
07月 | 08月 | 09月 | 10月 | 11月 | 12月 |
2016年 | |||||
01月 | 02月 | 03月 | 04月 | 05月 | 06月 |
07月 | 08月 | 09月 | 10月 | 11月 | 12月 |
2015年 | |||||
01月 | 02月 | 03月 | 04月 | 05月 | 06月 |
07月 | 08月 | 09月 | 10月 | 11月 | 12月 |
2014年 | |||||
01月 | 02月 | 03月 | 04月 | 05月 | 06月 |
07月 | 08月 | 09月 | 10月 | 11月 | 12月 |
2013年 | |||||
01月 | 02月 | 03月 | 04月 | 05月 | 06月 |
07月 | 08月 | 09月 | 10月 | 11月 | 12月 |
2012年 | |||||
01月 | 02月 | 03月 | 04月 | 05月 | 06月 |
07月 | 08月 | 09月 | 10月 | 11月 | 12月 |
2011年 | |||||
01月 | 02月 | 03月 | 04月 | 05月 | 06月 |
07月 | 08月 | 09月 | 10月 | 11月 | 12月 |
2010年 | |||||
01月 | 02月 | 03月 | 04月 | 05月 | 06月 |
07月 | 08月 | 09月 | 10月 | 11月 | 12月 |
2009年 | |||||
01月 | 02月 | 03月 | 04月 | 05月 | 06月 |
07月 | 08月 | 09月 | 10月 | 11月 | 12月 |
2008年 | |||||
01月 | 02月 | 03月 | 04月 | 05月 | 06月 |
07月 | 08月 | 09月 | 10月 | 11月 | 12月 |
2007年 | |||||
01月 | 02月 | 03月 | 04月 | 05月 | 06月 |
07月 | 08月 | 09月 | 10月 | 11月 | 12月 |
2006年 | |||||
01月 | 02月 | 03月 | 04月 | 05月 | 06月 |
07月 | 08月 | 09月 | 10月 | 11月 | 12月 |
複数社の査定額を比較して愛車の最高額を調べよう!