ウインカーLED装着 その5

ポジションキャンセル回路

ポジションキャンセルのための遅延回路は、失敗に終わった。ノイズなどが原因と思われるが、 調査するスキルが無いので、原因は不明。

ポジション点灯のウインカー時キャンセル化のための遅延回路を作成するも、なぜかエンジンの回転をあげるとポジション消灯と、大失敗に終わった。

手で動作させてみるときちんと動作するので、何かノイズなどにより余計な信号が入りキャンセル動作になっていると思われる。もしかすると何かわかるかと思い、テスターを当ててエンジンを吹かしてみるが、あまり変化なく原因不明。

やはりエンジンを吹かしたところで、ウインカーに電気が来ることはなさそう。やはりノイズが載っているのだろう。 まあ原因がちゃんとわかったところで、対処方法はわからないのだが。

ここであきらめるのも癪なので、別の方法を探る。ウインカー信号が来たらすぐ反応するのが悪いと思うので、 0.5秒くらい点灯しているならウインカー信号と判断してポジションキャンセルに入るように出来ないか?

IC回路の設計と作成

回路で実現はスキルがなさ過ぎるので、今度はPICという小型マイコンによるプログラム制御化を考えてみる。今回ポジション電源があるので、常時電源は確保されている。よってPICでプログラム制御によるポジション点灯をさせてみよう。

使用するのは12F683で、1個100円。必要なのはウインカー入力検知とポジション点灯スイッチ。 1入力と1出力で可能なので、ピン数の少ない石を選んだ。

必要な処理としては、ウインカーの入力検知。12Vが入力されるので、抵抗で3分圧して4Vあたりを入力すると検知できるのでは。出力はそのままポジションをドライブできないので、FETを電子スイッチとして使用する。

このPICは6ポートの入出力があるのであと4つ使える。 ひとまず2つほど状態表示用のLED点灯とし、残り2つは何かの入力に残しておこう。

ということで回路設計を行い、なんとなく完成。入力の12Vと処理の5Vを綺麗に分ける必要があり面倒。 PICに12V突っ込んでも大丈夫なのかな?たぶん燃える気がする。

早速ハードの製作に入る。使用する基板は小さいユニバーサル基盤。しかもこの半分を使用する。

部品配置まで回路図で行っているので、たぶんきちんと乗るはず。たまに部品同士が干渉してしまい、 配置変更が発生するが、だいぶ経験値も積んできているので大丈夫だろう。

PICはゲタをはかせる。これを装備すればICを直接はんだ付けしなくて済む。PICはデバッグが必要なので、あらかじめ基板にはんだ付けすると、デバッグもプログラミングも出来なくなる。 そこでこういった抜き差し可能なゲタが用意されている。

PICは5Vで動作するが、電源は12Vなので変換が必要。 その5Vの電圧を作成してくれるレギュレータというものを使用する。7805という部品。 12Vを差し込むと反対側から5Vが出てきてくれる便利なもの。

レギュレータを使用する際には必要とされるコンデンサ。積層セラミックコンデンサというタイプ。 これをつけておかないと何かが起こるらしい。

理屈はまったくわからないが、おまじないとして必ず装備させておく。 レギュレータの近辺に取付ける必要があるとのこと。レギュレータ用に2個、PIC用に1個使用する。

ウインカー入力には前回同様ダイオードをかましておく。今回も左右あわせて入力検知とするので、 電気の逆流を防ぐために差し込んでおく。強制一方通行のための部品。

各種抵抗。1/4Wのちょっと小さめの抵抗。すべて10kΩ。

LED点灯用の300Ωの抵抗。5VでのLED点灯なので10kΩを使うと点かないかと思い、10mA程度流れる予定の300Ωを準備。ただしLEDの1つは12Vを掛ける予定なのでこちらは10kΩを使用する。

使用するLEDは3色。別に同色にしてもいいのだが、安いLEDなのでこれらを使用する。照らすレベルの明るさはないが、点灯しているのは見えるレベルの明るさ。明るいLEDは高価だが、 パイロットランプレベルであれば十分安い。

LED点灯用のトランジスタ。スイッチ兼LEDドライブとして使用する。 LEDはあんまり電流を流さないので、PIC直結でも問題ないと思うが、一応トランジスタドライブにしておく。 まあなんとなくかな。

電源安定用に電解コンデンサを差し込んでおく。しかし容量はあまりなく、手元にあった適当なやつを使用。 回路が使う電力もかなり小さめなので、コンデンサの容量が小さくても問題ないだろう。

最後にポジションランプドライブ用のFET。しかしこいつのチョイスが後で事件を起こす。 詳しくは後で。

さて、とっとと回路図どおりにはんだ付けを行い、いつの間にか完成。回路図があると、都度悩まずに取り付けが出来るので、作り始めると完成までが早い。

裏面用の回路図が無いので、裏返しで見たときの回路接続に頭を悩ますが、この程度の大きさなので何とか脳内変換で対応する。

完成したら導通試験。一応PICは差し込まずに電源をつなぎ、各部の電圧を測定。PIC用ソケット部分も電圧を測りきちんと5Vが来ていることを確認。問題なさそうなのでPICを差し込んで起動。

ほぼ何もしないプログラムしか入っていないが、赤LEDが点灯してなんとなくいい感じ。とりあえず出来上がったかな? 動作中の電流値を測ってみると24mA。ほとんどはLED点灯用と思われる。かなり省電力だ。

白煙

PICデバッグを行うために、基本動作のプログラムを行いながら、動作試験を行っていたが、 どうもFETが動作してくれない。ゲートに電圧を掛けても抜いてもFETはオープンしっぱなしだ。

そのうち、突然の白煙が発生。どうもFET近辺から煙が出た。12Vを差し込むとどうもカチカチと嫌な音がする気がしていたが、ショートか何かがあったと思われ、とうとう煙が出た。そういえばちょっと変な匂いもしていたかも。 しかし調べてみても燃えた部品が見当たらない。

煙はFETあたりから出た気がするので、FETをよく調べてみると、型番がF5022となっている。 予定ではFU5505だったはずなのだが?

と、F5022を調べてみると、予定していたPchのFETではなく、NchのFETだった。ということは極性が逆の部品を接続していたようで、FETのオープンは12Vによる 無理やりな突破だったように思われる。なので切断動作はしてくれず、ずっとオープンだった様だ。

肝心な部分の部品間違いをしてしまい、白煙を上げる事態になってしまった。 FETのみが壊れている気もするが、今回の失敗を踏まえてもうひとつ新しく作り直すことにする。

作り直すに当たりひとつ改善を行う。レギュレータに7805を使用したが、実際に使用している電流は25mA程度とかなり小さいので、1000mA使用できる7805だとオーバースペック。

100mAまでの78L05という小さめの部品があるので、こちらに差し替える。これで、一番大きかった部品の7805が少し小さくなり全体的に突出した部品がなくなってくれる。 みためはトランジスタと同じ感じ。間違えないようにしなくては。

回路図も再設計を行う。とはいえ基本は変わらないので部品配置を少し検討。 抵抗は1/4Wなので小さく使えるため、コンパクトな配置に変更。まああまり大きな変更はない。

回路図設計も出来上がったら、作成開始。小さめの部品からセロテープ固定作戦を駆使してはんだ付けを行う。背の低い部品から取り付けがセオリーなのだが、これはやってみるとわかるが大きなのを先につけると邪魔で大変になる。

多少何度か失敗すれば身につくセオリーだ。セロテープというかこのメンディングテープは案外熱にも強く便利。

ちまちまと確認しながら作成して1時間程度で完成。仕事ではないので一つ一つの作業を楽しみながらゆっくり作っていく。 出来上がり版は前回版と大差ない。さてうまく動いてくれるだろうか?

PICなしで導通試験を行う。12Vをつないでもひとまず異臭や煙は発生しない。でも赤LEDが点灯しない。何かがおかしい。ひとまずまだ?煙は出ないので、各部の電圧を測定。

するとPICの電源部分にも12Vが来ている。ここは5Vのはずなのにおかしい。ということで78L05の出力側を測定すると、12Vが出てきている。ここは5Vのはずなのにと、78L05の資料を見ると入出力ピンが逆だった。

ピンの説明のトップビューかボトムビューかを間違えて、ピンを逆に勘違いしてしまった。 さらにもう一個作るのはさすがに大変なので、取付けた部品を取り外して取付けなおしを行ってみる。

さて、78L05を取付けなおして再試験開始。78L05を含め12Vが、がつんと当たってしまったが焦げた匂いはしないので、壊れていないと信じて再度12Vを通電。

すると赤LEDは予定通り点灯。そして各部の電圧を測ってみると、 PICには5Vが来ており、ほかも予定通りの電圧が出ている。

ためしに5Vを予定しているPICの出力に当ててみると、赤LEDが消灯。FETの動作についても予定通りの動作をしている。 これでハード側は完成だ。あとはPICのソフトが組みあがれば出来上がる。

PICのプログラムはMPLABをいうソフトを使用して行う。同梱されているCコンパイラがあるので、 C言語での作成が可能。またはアセンブラでの作成も出来る。

どっちも得意ではないので、難しいプログラムは出来ないが、LEDの点灯程度はたいした事はない。ただしPIC特有のお作法があるので、ネットでいろいろ調べながら作成する。

ウインカーの入力検知と状況に合わせてFETの制御および動作のウェイトといった処理を作成。基本処理としては、ウインカー入力を検知したら、ちょっと待ってもう一度検知。

入力中ならウインカー中途判断して、ポジションは消灯。ウインカー入力がなくなって1秒位してもまだ信号がなければポジション再開といったもの。

実験してみると、そこそこいい感じで動作するが、タイミングによってはおかしな動作になる。状態検知タイミングとウインカー入力開始、終了タイミングは一致しないので、なかなかうまくはいかないようだ。

ということで、PICの機能にある「割り込み」というのを使用してみようと思う。これを使うと、 状態変化したタイミングでの動作が可能になる。だいぶ高度な機能になるので、タッチアンドトライでいろいろ試してみよう。

かなりの試行錯誤を行った結果、偶然だがいい感じの動作となった。 プログラムを頭で考えてなぜそうなるのか理屈がわからないのだが、動かしてみると予定通りの動作をするので、ひとまずこれでいってみる。机上確認はひとまず出来たので、あとは実車チャレンジだ。