3色表示 HUD 式スピードメーターの製作 (2010/07/30/〜2010/08/13)

(Last update:2010/09/01)


まずはブレッドボードで動作確認 制御部基板表。
この上に表示部基板が乗っかる
制御部基板裏
UEW (ウレタン線) を多用。
表示部基板表
7 セグ LED を上下逆に実装してしまった(爆)
表示部基板裏
こちらも UEW を多用。
GE 型フィットの車速信号線の位置
丁度いいケースが無かったので、
黒く塗った厚紙でカバーを作った。
もっとよい実装方法を考えねば(汗)
設置および動作の様子。
バー表示は直射日光下でもちゃんと映るが、
7 セグ LED は輝度不足で昼間は
まったく映らなかった(核爆)。
回路図 配線参考レイアウト
(レイアウトには PaaSを使用)

(7セグ LED のダイナミック点灯用配線は省略)

前フリ:

 「電映クロスゲージ、明度 20」と聞いて「ターゲットスコープ、オープン」という古代進のセリフが頭に浮かんだアナタは管理人と同じ「ヤマト世代」であろう ^^; 30年以上も前のアニメではあるが、今にして思えば波動砲のターゲットスコープ(照準器)は Head Up Display(HUD)そのものであった。(あ、そういえば最近ヤマトが実写版でリメイクされたな・・・汗)

 まぁ、ヤマトはさておくとして、光モノ好きの管理人は、ご多聞に漏れず LED をふんだんに使ったデジタル表示方式のスピードメーター(いわゆるデジパネね)に昔から憧れていた。こんなサイトとかを指をくわえて眺めながら、いつかデジパネの車を買いたい、と思っていたのである。

 が、現実はなかなか厳しい ^^; 結局は予算や大きさ、維持費などから現在の GE 系フィットになったわけだが、車の電装いじりにもだいぶ慣れてきたので、満を持してデジパネの製作を敢行することに。

 もっともフツーにパネル面にデジパネを嵌め込んでも面白みがない(実用的ではあるけれど)。ってか、自作のデジパネなんか仕込んだら、運転中そっちばっかり見て危険である(汗)。そこで視線移動を最小限に抑えられる Head Up Display の登場となる。


仕様:

 ・車の速度パルス信号からスピードを計算し、7 セグ LED とバー配列の LED で表示
 ・回転計は装備しない(オートマなフィット君には不要 ^^; )。
 ・表示はフロントガラスに反射させる Head Up Display (HUD) 式
 ・バー LED、7 セグ LED ともに 3色表示
 ・7 セグ LED の表示色は、一般道路と高速道路で閾値を自動で変更する(80Km/h で一定時間経過すると閾値を変更)
 ・周囲の明るさに合わせて LED の輝度を自動的に変更するディマー回路を設ける
 ・通常表示(7 セグ LED を上下反転しない)もサポート

回路説明、設計時の考慮点等:

 【車速信号について】

 まずは車速パルスについてネットで調べてみたところ、以下のことが判った。

 機械式スピードメーター時代から、1km 走行時のメータワイヤ回転数は 637回、と JIS で決められており、これを基にワイヤ 1 回転毎にパルスを発生させたものが車速パルス信号。ワイヤ 1 回転あたり何回のパルスを発生させるかはメーカーや車種によって異なるが、最近の国産車は 4 パルスが主流。

 GE 型フィットは 4 パルスなので、1Km/h なら 637 x 4 のパルスが 3600 秒間に送られてくる( = 1秒間に 0.7 回パルス)。即ち、1 秒間のパルス数(=周波数)を数えて約 1.41 倍することで時速が求まる。(参考サイト

 車速パルスの H 時の電圧(12V or 5V)は車種によって異なるが、フィットは先人の知恵を見る限り H = 5V のようなので、入力部は保護ダイオードを介して C1815 で信号を受ける程度とした。


【電源部】

 ダッシュボードの上は車内で一番過酷な熱環境。室内機器の感覚で 12V → 5V に三端子レギュレーターで降圧して LED を光らせるのはアブナイ。実際、今回の回路では 80mA 程度流れるので、( 12 - 5 ) x 0.08 = 0.56W の排熱が必要であり、周囲温度が室温状態でもヒートシンクを付けなければならない発熱状態。周辺温度が高いダッシュボード上では遅かれ早かれ三端子レギュレーターの内蔵保護回路が働いてダウンするのは目に見えている(汗)。

 理想的には LED 系には三端子レギュレーターを通さずに 12V を供給すればいいのだが、車は電圧変動が激しく CRD でも使わない限り輝度が変動してしまうし、今回はディマー回路もあるため、電源電圧の固定が望ましい。

 そこで電気食いの LED 系にはなるべく高い電圧を供給して三端子レギュレーターの発熱を抑えることにする。何 V を与えるかは三端子レギュレーターの発熱具合を実際に触って ^^; 確かめながら 9.7V とした。三端子レギュレーターは少し暖かくなる程度だが、過酷な熱環境を考慮し、小型のヒートシンクをちゃんと付けておく。10V にしなかったのは単に LM317T で 10V にできる抵抗の組み合わせが手持ちになかっただけなので、シリーズレギュレーターの 7810 でも問題ないはず。(教科書的には、低ドロップ三端子レギュレーターの入力電圧 = 出力電圧 + 3V 以上、となるが、一応動くので良しとする。製品化するなら落第設計ですな)

 なお LED への電源を 9.7V としたおかげで PIC から直接ハイサイド制御ができなくなり、トランジスタアレイを 1つ追加しなければならなくなったのはイタイ。ま、発火されるよりまマシなので、これぐらいは妥協しよう。

 それから過酷な熱環境とくれば電解コンデンサの使用は極力控えたいので、コンデンサは全て積層セラミックとしている。どうしても電解コンデンサを使用するなら最低でも 105℃品、願わくば車載用の 125℃ 品以上を準備すべきだろう。


 【ディマー回路について】

 HUD 方式にする以上、夜間になっても昼間と同じ輝度で映り込ませては目眩まし効果で危険極まりない ^^;。明るさに応じて LED の輝度を自動的に変更するディマー回路は必須といえる。ソフトウエアで対応(LED の点灯パルス時間で調整)するテもあるが、今回は PIC に明るさを検出させるための空きポートがないのでハードウエアで対応する。ま、こっちの方がソフト側も楽だし ^^;

 具体的には、フォトトランジスタを使って電流供給用トランジスタのベース電流を調整し、LED への流し込み電流量を調整する。電流制限抵抗は輝度を確認しながらトライ & エラーで値を決定。

 なお、7 セグ LED へは最大 70mA ほどの電流が流れるため Ic の大きいトランジスタの投入が望ましい。2SA1015 (Ic=-150mA) や RN2205 (Ic=-100mA) だとちと余裕が無いので、ここは 2SA950 (Ic=-800mA) を投入。一方、バー LED へ電流を供給しているトランジスタは 2SA1015 や RN2205 で十分。


 【PIC16F690 の役割分担】

 当初は全ての機能をピン数の多い PIC 1個にやらせるつもりだったのだが、後々の応用性を考え、バー LED 表示を別の 16F690 に担当させることにした。

 まず車速カウント用 PIC は、車速パルスから速度を計算し、7 セグ LED に数値を表示するとともに、点灯すべきバー LED の個数を 4bit の BCD データとして出力する。

 一方のバー LED 表示用 16F690 は、4bit の BCD データをデコードするのが仕事。汎用ロジック 74 シリーズの 4bit BCD デコーダー 74154 と機能的に類似するが、74154 は BCD を 1〜16 へデコードし、対応する出力ピンの 1 つを必ず active にするのに対し、こちらは 0〜14 にデコードするため全出力 L もありうるし、複数の出力を H にする点が 74154 と異なる。

 注意点としては、ダイナミック点灯ゆえに点灯 LED 数によって応答速度がかなり変わる。今回は応答時間がバラついても特に問題は無いが、今後応答時間を一定にしたい場合に備えて、ソースのコメントアウト部分を復活させることである程度は対応可能にしておいた。

 なお、LED と並列に入っているツェナーは、オープンコレクタではない PIC のポート( H = 5V )から H = 10V を操るためのシカケ。これを実装し忘れると PIC が壊れる可能性アリ ^^; 本来なら外付けのトランジスタを介して LED を制御するべきだが、部品点数(と実装面積)節約のためツェナーで誤魔化している。


 【使用部品について】

 ・7 セグ LED はスタンレーの NARG105(ちと入手難かも)。
 ・バー LED には、秋月で売っている 3mm 径「ハイパワー LED」シリーズを使用。
 ・トランジスタアレイは実装の容易さから採用しただけなので、デジトラを使ってディスクリート構成にしても良い。
 ・温度環境の厳しいダッシュボードに置くことを鑑み、電解コンデンサは使用せず、すべて積層セラミックとする。


ソフトウエア:

【車速計算】

 前述の通り、車速は速度パルス信号の周波数から求めることになるワケで、要するに周波数カウンターを作るのと同じこと。そこで先人の知恵を拝借すべく、周波数カウンターの製作例をネットで検索(爆)。

 その結果、周波数測定には 2つの方式があることがわかった。(参考サイト

 直接計数方式  :一定時間(ゲートタイム)毎のパルス数をカウントする(=コンペア機能を使って正確な時間を計る)
 レシプロカル方式:パルス幅の時間を求める(=キャプチャ機能を使ってパルス間のタイマーのカウント数を得る)

 応答性に関してはパルス 2回で速度が計算できるレシプロカル方式が有利だが、表示数値があまり高速に変化しても読み取り辛いし、バー LED 表示も 10Km/h 間隔のため、応答性はさほど必要無いと予想された。またソフトウエア的にも直接計数方式の方が簡単そうだったので、今回は直接計数方式を採用する。

 直接計数方式の場合、200Km/h 時の車速パルス周波数はおよそ 143Hz 。即ち 1秒間に 143 回のパルスを数えられる処理速度が PIC に必要。言い換えればパルス検出から 1000(ms)/143 = 6.9 ms 以内に割込み処理を終了させなければパルスを取りこぼす可能性が出てくることになる。もっとも 8MHz の PIC なら 1 命令サイクルはたったの 0.5us なのでこれはまったく問題ない。

 具体的な実装方法は、PORTA 状態変化割込みを使って車速パルスの立ち上がり回数をカウントしつつ、TMR1 とコンペア機能を併用して正確に 250ms 毎に割込みをかけ、この割り込みを数回経過した時点の積算パルス数をメインルーチン側に渡す。メインルーチン側ではこの積算パルス数を周波数に変換し、さらに 1.41 をかけて速度を求めて 7 セグ LED に数値を表示する。

 ただし周波数 x 1.41 ではキリの良い数字( 20 とか 30 とか)が出ないので、1.41 ではなく 1.43 をかけることにする。ゲートタイム 1秒なら 1.43 にしても誤差は 140km/h まで 2Km/h 以内に収まり、かつキリのいい数字が全て出るので問題は無いハズだ。ちなみに今回もアセンブラでコーディングする関係上、小数点計算を避けるために実際には周波数に 143 をかけた後 100 で割ることで事実上の小数点計算を行っている。

 ちなみにパルス検出は RB2/INT 割込みの方が若干楽。実際、開発初期では RB2/INT 割り込みを使っていたのだが、ポートが足りなくなったため RA3(入力専用)を使った PORTA 状態変化割込みで落ち着いた。

 【閾値自動変更機能】

 連続して 80Km/h 以上で 127 秒以上走ると、7 セグ LED の橙色表示の閾値を自動的に変更する。

 一般道モード:0〜70 → 緑、71〜90 → 橙、91〜 → 赤
 高速道路モード:0〜100 → 緑、101〜120 → 橙、121〜 → 赤

 80Km/h 以下に減速すると高速道路モードは直ちに解除される。


実装:

 GE 系フィットでの車速信号の取り出し場所は写真参照。この線から市販の分岐コネクタを圧着して車速信号を取り出す。

 基板は二段重ねとしたが、適当なケースが無かったため、LED の周りに黒塗りの厚紙を配し(写真参照。黒塗りにして LED 以外を隠さないと余計な映り込みが激しい)、フロントガラスへの LED の映り込み具合を確認しながらダッシュボード上に設置。

 実走してみたところ、速度表示はフィットのスピードメーターと見比べる限り周波数 x 1.43 で特に問題は無かった。ただ バー LED 表示はかなり違和感を覚えた。例えば 59Km/h で走っている場合、体感的には 60Km/h なのにバー LED は 50Km/h 表示のままで、感覚と一致しないのだ。そこでバー LED 表示に関しては速度を 7捨 8入して点灯するよう変更した。

 なお開発初期ではゲートタイムを 1 秒としていたが、意外に応答性が悪かったため 0.5秒に変更。ところがこれには問題点が・・・(下記参照)。

失敗点・問題点:

 写真を見ると判るとおり、管理人は 7 セグ LED の配置を上下逆さまに実装してしまった(爆)。まぁ、今回は小数点を使わないので実用上の問題は無いのだが、もし追製作されるなら参考実体配線図通りに製作されたい(公開プログラムも参考実体配線図通りでの実装を想定している)。

 今回の最大の問題点は、2色 7 セグ LED の輝度が低く、昼間はまったく速度表示が見えないこと(逝)。7 セグ表示は夜間限定のお楽しみということで(殴)。勿論、夜間は他に例を見ない (?) 3色の速度表示が素敵。ディマー回路のおかげでフロントガラスに適度な輝度で映るため、使い勝手も良好。

 一方バー LED の方は真夏の直射日光下でも輝度は十分。黄色や赤はやや見づらいものの、青や緑は非常によく視認できる。ただし使用した LED の照射角度が狭く、フロントガラスの曲面を勘案しつつうまく光軸を揃えてやらないと綺麗に写り込ませることができないのは誤算であった(こういうのは実際に作ってみないと判らんよね)。

 ここらへんの映り込ませ方については、フロントガラスにスモークフィルムを貼ったり(ただし車検が通らない可能性大)、ハーフミラーやアクリル板で別途ターゲットスクリーンを用意したりと、先人達はいろいろと工夫しているようだ(アクリル板は耐熱性に問題アリなので耐候性ポリカーボネート板が必要になりそう)

 それからゲートタイムを 1 秒から 0.5 秒に変更したことにより、応答性は実用レベルになった。が、それと引き換えに周波数 x 1.43 でもキリのいい数字が出づらくなってしまった(例えば 30,50,70,90 が出ない)。よくよく考えてみれば当たり前で、整数のパルスカウント数に掛け算をすることでもともと「とび値」が発生することに加え、パルス数を周波数に変換する際に、さらに「飛び値」を作ってしまうからだ(例えばゲートタイム 0.5 秒なら周波数計算の前にパルスカウント数を 2倍するため、結果的に奇数のパルスカウント数はあり得なくなる)。数値表示までするならレシプロカル方式にすべきである。


注意点、改良案など:

 ・昼間でも視認可能な超高輝度 7 セグ LED を投入
 ・HUD ではなくフツーにコンソールパネルに埋め込む場合には、ソースを一箇所書き換えるだけで通常表示(7セグ LED 上下反転表示をしない)も可能にしてある。
 ・レシプロカル方式で周波数を計算して精度を向上(あ、16F690 のままではポートが足りない・・・)→ 後日解決
 ・HUD の「わき見運転」による事故に関しては当方は一切の責任を負いません(汗)


今回学んだこと:

 ・車速信号について
 ・TMR1 + コンペア機能による正確な時間の数え方
 ・RB0/INT割込み、PORTA 状態変化割込み
 ・ディマー回路の設計


最後に:

 HUD は、ハードやソフト云々よりも最終的な実装が最大のポイント。LED の輝度や照射角、周囲の明るさへの追従などなど、これまでの室内用機器の製作とは異なるノウハウの山であった ^^;

 今回の製作物に関していえば、昼間 7 セグ LED が見えないのはつまらん。実車での輝度テストを念入りにしておくべきだった。単色でもいいから超高輝度 7 セグ LED を投入して改良する必要がありそうだ(汗)


プログラム:

 改変自由だが商用利用厳禁


プログラム ( asm & HEX ) (2010/08/23)
車速カウント & 7セグ表示担当 PIC 用 3color_Speed_Meter_v3.2.zip
バー LED 表示担当 PIC 用 Bar_Meter_v1.0.zip



2010/08/23 追記:

 改良版の製作が完了。詳細は改良版 1改良版 2へどうぞ。

 最終形 (ver 7) はこちら

謝辞:

 数値演算にはこちらのライブラリを使用させていただいております。開発者に御礼申し上げます。


 [電子工作のページへ]