プロジェクト P 〜pic でなにかやる〜


■PICマイコン

 PICマイコンに興味がある。 それは RISC CPU と ROM と RAM と I/O がワンチップになったモノらしい。 その手のモノには Z80 をベースに周辺を付けたモノがあったが、それよりも簡略化してわずか 18pin の DIP パッケージに収め、価格も非常に安いらしい。 と、書いても何%の方が理解できるか不明だが、とにかく PIC を使うとそれなりの規模の電子回路がカンタンに作れてしまうらしい。 どのくらいカンタンかと言うと、クルマヲタクが自分でショック交換をするぐらいだろうか。

■PICでなにをする?

 さて、PICマイコンを使って何を作ろうか・・・。

 通常、「PICマイコンを使う」のは、何か「目的」があって、それを達成するための「手段」として使うのであるが、 今回の場合は「PICマイコンを使う」こと自体が「手段」となっている。 まあヲタクにはありがちな現象なので気にしないように。

 電子化が進んだ現代のクルマは、電子回路で遊ぶには都合がいい。 エンジンコンピュータユニット(以下 ECU)の回りには各種の電子信号が入出力されており、その信号を観察するだけでも相当遊べる。 なかには信号を騙してエンジンの特性をいじったりする方もいらしゃるが、とりあえずは信号を観察するだけに留める。 エンジン出力の増大は他に多大な悪影響を及ぼす。 それは燃費かもしれないし、人体に悪影響を及ぼす排出ガスかもしれないし、騒音、寿命・・・以下略。

 フューエルインジェクタ駆動パルスを観察することで、燃費計を作ることができるらしい。 インジェクタとは燃料を噴射するところの名前で、それを駆動する(開かせる)のがフューエルインジェクタ駆動パルスである。 このパルスの時間を積み上げていくと消費した燃料の量がわかるらしい。 ただ、インジェクタが反応するまでの時間を差し引いたり、吸気の負圧によっても燃料の出る量が違ったりするので、それを考慮したりしなければならない(と思う)。 わからないので検索してみた。 そうしたら実際に作っている方を発見したが、どうも単にパルス時間を足しているだけっぽい。 本当にそれでいいのか?

 よく分からないので、とりあえず保留にする。次に考えたのが CVT 変速比計。 ECU からは車速パルスとエンジン回転パルスぐらいは必ず出ているので、それの比を計算するだけで変速比計が出来上がる。 4速ATなら感覚的に今何速かが分かるが、CVT だと今クルマがどんな変速比で走っているのか全然分からない。 スピードメーターとタコメーターを見て割り算すれば分かるが、走っているときにそんな計算をしていたら「心のよそ見」になってしまって危険である。

 ただ、車速パルスとエンジン回転パルスの比では、正しい 変速比は計算できない。クラッチが滑っている分も含まれてしまうからだ。これについては ECU からそれなりの信号が出ていない限り解決できない。



■ECU調査

 とりあえず何を作るにしても ECU 回りの配線図は必要だ。ということでフィットの1ヶ月点検のときにコピーをもらってきた。 そしたらなんと、ドリブンプーリースピードセンサドライブプーリースピードセンサ という信号がある。これを使えばクラッチのロスを含まない変速比計が作れる! ・・・そりゃそうだ。それがないとコンピュータは CVT の制御が出来ない。

 しかしもっとよく見ると燃料噴射量信号出力ってのがある。これはコンビネーションメータに繋がっている。え、もしやこれって一定量の燃料を噴射(消費)する毎にパルスを発生させるんですか! 積算するだけで燃料消費量が分かるんですか!! これはもう瞬間燃費計を作るしかないですねねね!!!

 ということで燃料噴射量信号出力の実車調査をしなければならない。このパルスの間隔が長いと、更新頻度を短くすることが出来ない。少なくとも暖気後のアイドリング時で 1Hz 以上あって欲しいものだ。

 ちなみに ECU 端子は
   31Pカプラ(A) 24Pカプラ(B) 22Pカプラ(C) 空き 31Pカプラ(E)
 と並んでいて、
    E5  緑/白 燃料噴射量信号出力
    E25 青/黄 車速センサ信号出力
    E26   青   エンジン回転信号
 となっている。ECU は助手席足元、発煙筒ホルダの裏あたりにある。




■2002/01/08 プロトタイプ1

 正月中、16時間睡眠体勢で、とりあえず作った。

開発中の図


 ブレッドボード上、左側の IC が PICマイコン、16F84 である。彼が各種パルスを処理して、右上にある液晶画面に燃費などを表示する。 そして、右側の IC も 16F84 である。適当なパルスを作る装置があるとデバッグ時に便利である。それもPICで作った。 ソケットが無いのは手持ちが無かったため。 上にあるキーボードはオーディオテクニカの小さな109キーボードである。机上面積の有効活用に貢献している。 普段、カイシャでも同じキーボードを使用しているのでこのサイズがボクにとっては「普通」になってしまった。 B5ノートパソコン、VAIO SR のキーが大きく感じられる。話がそれたが、「小さいことはいいこと」というフィットネタというとこで。 あ、いや、PICマイコンの大きさ比較の対象としては参考にならない画像ですという補足のために書きました。


液晶表示部 16桁×2桁

 液晶表示部は秋月で1100円のモノ。16桁×2行 表示可能である。燃費を表示するには十分すぎる情報量だ。 今後、変速比とかも表示する予定。今は適当にデバッグ用の表示をさせていて重宝している。 今写っているのは右上が速度で、左下が燃費。デバッグ用のパルスがそーゆーデータなので変な値が表示されている。 それ以外はデバッグ用で、あまり意味の無い数字が並んでいる。燃費に k が付いているのは、走行状態を示す。 停止(アイドリング)状態では単位時間あたりの燃料消費量[cc/min] を表示する。

 アイドル時の燃費はちょっと参考になった。NレンジとDレンジでは燃費に差が出る。 停止時、DレンジからNレンジに入れると1割ほど消費量が少なくなる。 また、そこからDレンジに戻すと1.5倍ほどの消費量となる。 フィットの電子制御の湿式多板クラッチは 停車時の燃費をよくするためにブレーキを踏んでいるときのクリープ力を弱くしている。 Dレンジでの走行後、信号などで停車するとそのモードに入る。 しかし、一度Nに入れてDに戻すと、通常のクリープ力モードになり、燃費が悪化する。

 停止後、Dレンジのまま再度走り出すとき、ブレーキとアクセルの踏み換えが速いと、クラッチを 繋げるのに失敗してカクっとなっちゃったような感じがするのはこのためかも。
 ちなみにクラッチの繋がり具合はECUがリセットされると忘れ去られてしまう。 再メモリ方法がサービスマニュアルに書いてあった。バッテリ交換などの後は必ず行わなければならないが、コピーがどっかいっちゃった。


 一応、瞬間燃費を表示できるようになったが、いろいろと改良の余地アリ。

 まず、速度を表示しているが、これが1割ほど速い。 通常、市販車両の速度メーターは1割ほど速い値を表示すると言われている。 1割ほどの誤差が認められているのだが、遅めに表示されてしまうと速度違反者を大量生産してしまうため、速いほうに振っていると言う話だったと思う。 ということで、速度を正確に表示できた場合、純正速度メーターより1割ほど遅い値で表示されなければならない。 なので2割ほど速い数字が表示されてしまっていることになる。 ボクの計算ミスか。検証する必要がある。

 瞬間燃費表示は思いのほか使い物にならない。20km/h 未満ではどう頑張っても 3km/l とかそんな値だし、 定速走行していても相当値が上下する。むぉぉ、アクセル一定にするぞ! と思うと液晶を見つめすぎてしまって大変危険である。 というか都内では定速走行なんぞ無理かも。

 「最近1分間の燃費」とか、「エンジン始動時からの燃費」とか、「信号待ちからの燃費」とかを表示できたらいいなぁとか思った。

 ということで、掲示板嫌いなボクですが、もし何かありましたら掲示板に書いてみてください。盛り上がったら専用掲示板を作るかも。



■2002/01/11 もっと安価に

 PICへの書き込みが安く出来れば、興味のある方にテストしていただくことも出来るが、書込装置(PICライター)が 6,700円じゃぁ、高いよなぁ。本体が5000円もしないのに。 と、思っていたが、シリアルポート接続で1000円以下でもライターを作れるらしい。

http://cgi.biwa.ne.jp/~jr3roc/pic/
http://homepage2.nifty.com/hijiri~/develop/pic/PIC00_test00.htm

 しかも、作りようによっては燃費計本体に書込機能をビルトインできる。ファームウェアアップグレード可能な燃費計。すばらしい! 部品代はちゃんと計算してませんが、一番高い部品でも液晶の1100円だったりするんで、多分、5000円で収まるでしょう。

 アセンブラやC言語もタダ版があるし、ってことで、回路図から回路を組み立てられる人なら5000円以内で作れるような感じ。シリアルポートのついたPCが必須ですが、無いとは言わせん。(フィットも必須です)

 ちなみに今ごろ気づきましたが、PICに書き込めるようになると、法改正で販売が禁止されたプレステのアレも作れそうですね。もっと詳しくは、検索してどうにかしましょう。



■2002/01/14 あまり進まず

 36.63平方mという狭い賃貸アパートに住んでるんですが、子供が生まれて手狭です。 変に頑張りすぎてさらに年子も誕生予定。 困っているのでモデルルーム廻りをしてました。 ISIZE で見るよりも盛り上がり感が全然違う・・・。 と、いうわけで燃費計に関しては殆ど進捗がありません。

 今回は割り算ルーチンのケアレスミス修正のみです。左上に電源投入時からの区間燃費が表示されます。 が、係数をちゃんと計算してないので少なめな値が表示されます。 純正燃費計と比較すると1割少ない感じ。

 ご要望にお答えして(?)、回路図と部品表を適当に書きました。適当なので変更の可能性があります。 掲示板はまともなものを探したいので未だ作らず。マトモなモノ募集中。

 あと、開発ファイル置き場が見れませんでした。現在は見れます。すいませんでした。



■2002/01/16 掲示板

掲示板作りました。プロジェクトP用ではなく、フィット用です。細かく分けるの嫌いなもので。



■2002/02/02 車速パルス

 わたくし、車速パルスは車軸の回転から作っているものだと思ってました。 タイヤの外周の整数分の1になる筈だと思い込んでました。 しかし、必ずしもそうではないようです。

 昔のスピードメーターは電気信号を突っ込むんじゃなくて、 ぐるぐる回るシャフトを突っ込んでました。 その回転数はJISで決められてて、1km に 637回転するんだそうです。 決めるならSI単位系で楽なようにしてくれよと思うのですが、 日本はメリケン寄りなので、1マイルで1000回転です。

 その名残かどうか知りませんが、Fitの車速パルスは1kmあたり、637の4倍です。 いやあ、タイヤのサイズから一生懸命計算していたのは無駄でした・・・。

 とりあえずその数値で計算したら標準のトリップと距離がバッチリ一致しました。 ただ、ナビが表示する距離とは若干誤差がありました。 空気圧による誤差とかもあるんで、まあそんなもんでしょう。

 そんなこんなで、各種係数についてはほぼ確定した感じです。


 それと、車速パルスを拾う回路ですが、回路図に書いた回路だとノイズを拾っちゃいます。 ナビがパルスカウント数を表示できるんですが、それよりも多くカウントしてます。 手持ちの部品で対策してみました。ダイオードは物理的に邪魔なので外しちゃいました。

車両>---R---+--->PIC
            |
            C
            |
           GND
・Rは手持ちの75Ω
・Cは手持ちの0.1μF

 いわゆるRCローパスフィルタですね。

 PICにバッテリ電圧がかかって壊れるんじゃないの? と思うあなたは正しいです。 でもPICには壊れないようにするためのダイオードが内蔵されているので大丈夫です。 ただ、良い子はダイオードも入れておいたほうが良いかもしれません。 どうせまとめ買いしてるでしょ。 ボクの場合は試作基板を小さく切ってしまってスペースが無いんで外しました。

 パルスは 10M/512 Hz すなわち 51.2μsrcの間隔で計ってます。 51.2μsec を[内部単位時間]としましょう。 27595 ÷ パルス間隔カウント を速度[km/h]としてます。 車速パルスが 32767[内部単位時間]のあいだ発生しなければ、停止状態と判断してます。 これは1.68秒ぐらいです。 そのときは速度表示を idle とします。

 燃料パルスも 32767[内部単位時間]のあいだ発生しなければ、フューエルカットと判断してます。 これも同様に 1.68秒ぐらいです。<あたりまえ そのときは燃費表示を f-c とします。 このタイムアウト値は適当に設定したのですが、テストしてみると結構マトモな表示をしてくれる感じです。 走行中にアクセルを抜けば f-c の表示になるし、停止すれば idol の表示になるし。

 アイドルの時は燃費が0km/l になってつまらないので、時間あたりの消費量を表示します。 単位は[cc/min]。すなわち 1分あたりに消費するガソリンの容積です。 国土交通省のエコランしませう的ページによると 14cc/min ぐらいらしいですが、 フィットは若干少なめで、10〜11 cc/min ぐらいです。



■2002/02/03 表示項目

 瞬間燃費は値が変化しすぎで、走行中に注視すると安全上問題がありそうな感じです。

 そこで新たに、電源ON(エンジン始動)からの燃費を表示するようにしてみました。 (これを「区間燃費」と呼ぶことにします) でも、それならフィットの燃費計で表示できるので詰まらないです。 まあ、フィットの燃費計は TRIP の区間での燃費なので、満タン時にリセットする運用のヒトには 「1回の走行あたりの燃費」を知れることは意味あることかなぁとは思いますが。

 自分が知りたいと思うのは、信号から信号まで、すなわち、停止−走行−停止 1サイクル分の燃費です。 それを表示するようにしてみました。 走り出した瞬間から、現在までの燃費を表示します。 信号待ちの間も表示しつづけ、走り出したらまたリセットします。(これを「信号間燃費」と呼ぶことにします)

 この瞬間燃費計で使用している液晶画面は 16桁2行 のものです。 単位も併記すると、4つの値を表示するのが限度です。 ちょっと前は以下のような表示でした。
区間燃費  瞬間燃費
+----------------+
|00.0km.l 000km/l|
|0000.00km 00km/h|
+----------------+
走行距離  速度
 「信号間燃費」を表示するので、どれかのあきらめなければなりません。走行距離をあきらめてみました。 それで走ってみて思ったのですが、「信号間燃費」の値がいつリセットされたのか、気をつけていないと分かりません。 そこでリセットからの時間を表示するようにしてみました。速度をあきらめます。

区間燃費  瞬間燃費
+----------------+
|00.0km.l 000km/l|
|000.00  00.0km/l|
+----------------+
時間     信号間燃費
 もう訳分からんですね。

 現在、表示可能な項目を整理すると以下のようになります。

現在の
 ・速度
 ・燃料使用量
 ・燃費

エンジン始動からの
 ・時間
 ・走行距離
 ・燃料使用量
 ・平均燃費
 ・平均速度

信号スタートからの
 ・時間
 ・走行距離
 ・燃料使用量
 ・平均燃費
 ・平均速度
 表示項目切り換えボタンが必要ですね。

 部品を買うときに、16桁2行のモノの他に、20桁4行のモノも買ってました。 最近はそっちに表示させてます。 ただ、それだと異常に多くの数値が並んでしまい、やはり走行中に注視して危険な感じです。

 今後の課題は表示項目切り換えボタン新設と、エレガントな表示ですね。

 1024ワードあるプログラム領域は 3/4 使用といったところです。まだ余裕がある感じ。 しかし、68バイトあるメモリはほぼいっぱいなので、CVT変速比計は無理かもしれません。 区間燃費か信号間燃費をあきらめれば可能ですが。
 こうゆうチマチマしたところに頑張って機能を詰め込むのは楽しいですね。


■2002/02/24 対車両I/F


 対車両I/Fのノイズ対策でRCフィルタを入れたとき、ダイオードを外しちゃいましたが、そうすると電源を入れたときにうまくリセットが掛からないらしい。 で、電源を繋いでから、信号線を繋ぐようにしてたが、その回避方法は根本的な対策になってないので、再びダイオードを入れた。

 しかし、ダイオードを入れると車速パルスのカウントが1割ほど減ってしまう。PIC内蔵のプルアップでの充電が間に合わないのだろう。 そんなわけでコンデンサを外した。そうしたらちゃんとカウントするようになった。現状、ダイオードと抵抗を直列に繋いでいる。

 今週になって、PICの動作が止まってしまう現象が出るようになった。 今まで、電源投入に失敗することはしょっちゅうあったが、一旦動作し始めたら止まることは無かったのに。 いいかげんに配線している基板のどこかに接触不良があるのだろうか。

 プロトタイプ2号を作らなきゃなぁ。その際は書き込み回路もいれて、モード切替スイッチもつけて・・・。 いつ出来上がるんだろう?


■適当な部品表

2002/01/14版

液晶 SC1602BSLB 1 1100 秋月(P-00038)  
PIC PIC16F84A-20/P 1 380 秋月(I-00097) 10M品でも可
セラミック発振子 10.0MHz 1 40 秋月(P-00146) 負荷コンデンサ内蔵型
三端子レギュレータ 78L05 1 50 千石(656R-4BER)  
積層セラミックコンデンサ 0.1μF 50V×10 1 100 秋月(P-00090) 10個単位なので1セット購入(要2個)
電解コンデンサ 100uF 35V×10 1 200 千石(2678-53MR) 10個単位なので1セット購入(要1個)
電解コンデンサ 22uF 16V×10 1 100 千石(7648-4GLE) 10個単位なので1セット購入(要1個)
カーボン抵抗 1/6W 1.5k ×10 1 50 千石(5AES-6UJK) 10個単位なので1セット購入(要1個)
カーボン抵抗 1/6W 10k ×10 1 50 千石(6AJS-7UJ6) 10個単位なので1セット購入(要?個)
ダイオード 1S1588×10 1 200 千石(35EV-87D8) 10個単位なので1セット購入(要10個)
ツェナーダイオード 5.1V ×10 1 200 千石(4AZV-8MFJ) 10個単位なので1セット購入(要1個)
ツェナーダイオード 8.2V ×10 1 200 千石(3AGV-88KA) 10個単位なので1セット購入(要1個)
トランジスタ 2SC1815 ×10 1 100 千石(6AFX-4FES) 10個単位なので1セット購入(要2個)
ICソケット 18ピン ×10 1 100 秋月(P-00008) 10個単位なので1セット購入(要1個)
基板 25×15ホール 1 70 秋月(P-00182) 適当に
ケース   1     適当に
配線       適当に
半田       適当に
シリアルケーブル   1     PCに合わせて合わせて適当に
D-SUBコネクタ 9pin or 25pin 1     シリアルケーブルに合わせて適当に


合計は3000円ぐらい。アキバに行けばバラで買えるのでもうチョイ安くなる。 送料と交通費のバランスで悩むところか?

店の括弧書きは通販番号。

回路は今後変更する可能性あり。

参考:秋月
参考:千石

■適当な回路図

2002/01/14版



フリーの回路図エディタ・BSch で書いた回路図のファイル

参考:BSch

プログラム書込回路については反映してません。(誰か書いて〜)
回路は今後変更する可能性あり。


開発ファイル置き場

回路はソースのコメント参照のこと。