LEDタイミングライト(回転数表示付き)~その2~

先日タイミングライトを作りましたが、エンジンの回転数を上げると揺れて見えるのが気になってきました。常にフライホイールが1度回る時間だけLEDを点灯する様にプログラムしたのですが、数千rpmで回ると1度といっても十数μSとかの時間になってくるのでうまくプログラムを作らないとずれてきてしまいます。

スケッチを書き直す。

という事でタイミングパルス入力→LED点灯までの遅延を最小にするため、割込み処理をインラインアセンブラで書き直してみました。
また前回はLEDの点灯時間をメインルーチン内のmicros()関数の値で判断していましたが、これもタイマー割込みにすることで正確に1度回転する期間だけLEDを点灯する事を目指します。
AVRのアセンブラは初だし、割込み/インラインアセンブラのオーバーヘッドを極力減らすため、レジスタの退避(pushやpop)も含めて手書きしたので色々調べながら作りましたが、もっと効率の良い書き方があるかもしれません。

しかしこれで動作させるとまだ揺れて見えます。むしろ酷くなったような。。。
うーん。では改めて下記回路図(前回と同じ)でのSigとMPULSEの波形を見ていきます。
(Sigはエンジンから来るタイミング信号、MPULSEはマイコンに入れる割込み信号。)

下がその波形でCH1(黄)がSig、CH2(青)がMPULSE。
思いっきりバウンドしていましたね。300μSもの間大きく揺れ、この間に何度も割込みが掛かっている様です。
前のプログラムでもこれが揺れる原因だったのかもしれません。

揺れが約300μS続く内、必要なのは先頭の瞬間のみです。この揺れを抑える為にフィルターを用いると遅延が大きく発生する可能性が高いので、ソフトウェア的に対処します。具体的にはタイミング信号による割込み発生後、次の割込み許可は800μS後にする事でバウンドをやり過ごしました。

スケッチはこちら。http://www.hoihoido.com/data/TimingLight2.zip

以上によってアイドリング~高回転までピタッと止まって見える様になりました!!

でもやっぱりLEDが暗い

しかしやっぱりLEDが暗いですね。前回電源を12V→9V(角型電池)に変更して少し暗くなっていたのが、9V電池が消耗すると更に効いてきて、曇りの日なら良いですが晴天だと日陰でも見えづらいのです。
まず9V電池にした時点で回路図の12Vライン(今は9V)にあるC6が1μFだと小さすぎるのでLED点灯の瞬間少し電圧が下がっていました。これを1000μFに変更して電圧降下は無視できるレベルになりましたが・・・体感光量は大きく変りませんね。
現在LED6個には以下の様な回路で電流を流しています。これに9Vの角型電池とパワーMOSFET(2SK2232)が直列に入ります。

LEDのスペック上のVf(順方向電圧)は3.1Vと記載されているので2個直列だと6.2V。電池が9Vだと5Ω抵抗(10Ωの2並列)には2.8Vが加わるので各LEDには560mAが流れる目論みでした。しかし考えてみると定格100mAのLEDに大幅な大電流を流すとVfも高くなってきますよね。そこで制限抵抗5Ωの両端電圧を測る(160μSのON期間中最後の瞬間をオシロで測定)と、1.76Vしか掛かっていません。電流にすると350mAなので想定よりかなり少ないです。

という事で定格を超える状態でのVfと電流の関係を大雑把に調べると下記グラフの様になっていました。
横軸はLEDを2個直列した合計のVf電圧です。また前半と後半で別個体のLEDで測ったりしているので凸凹しているのはそのあたりの影響だと思いますが大体の傾向はつかめます。

これによると9V電源なら抵抗など無くしても620mA程度でそれ以上は流せません。
当然ながら絶対最大定格を超えているので壊れない保証はないですがデューティーが1/360なので頑張ってくれる事を期待してもっと(1Aとか)流してみたいところです。
案としては現在の2個直列を止めて1個ずつにすればもっと電圧を掛けれますね。
これらはいずれ試すとして今回は制限抵抗無しにしてみました。これで620mAなので現状の約1.8倍になります。

動作しているところの動画・・・まだ暗いけどマシにはなりました。

回転数も問題なく測れています。

以上でだいぶマシになりましたがピーカンの屋外は厳しいですね。あまりそういうシーンはないですが。
・・・これで暫く使ってみて、まだ暗かったら配線(またはLEDの機種)を見直します。