PICAXEでパワーLEDをPWM調光 2:検討

    PICAXE
    11 /17 2014
    前回の続きで検討です。

    その前に、前回触れなかった点についてです。
    追記
    ・電池と並列に電解コンデンサを入れていないのは、充放電が繰り返されるので通常の電解コンだと容量抜けを起こすので耐リップルな電源用かマザーボード用にする必要があるためです。
     因みに昔は耐リップル コンデンサといっていて確か倍電圧整流には必須だった。
     半波でしか充電されない為と思われる。
     今は普通の電解コンでも昔より耐リップル量が増えているならこの限りではないし放電量(出力電流)が少ないなら普通のでもいいかもしれない。
    これを知っている方はかなりの年齢(私もか)でネットに書く方がいないようではっきりとした情報は見つけれなかったが半波整流で注意例はあったので間違いないようである。
     ネットの世界には昔の人の知識、経験は少ないといえる。
    追記終わり
    ・ADC入力の抵抗値が6.8kΩと微妙なのは3.3V時にADCの読み取り誤差を1/2LSBに抑える信号源インピーダンスの上限値だからです。(個人的計算値)
    まあ、多少読み取り誤差があっても問題ないので10kΩでもいいんですけど余っているもので。

    ・定電流回路は「トランジスタ2個でパワーLEDを定電流駆動」を流用しています。 R4を記事より低くしているのはPICAXEのVohが電源電圧より少し低いからです。

    ・電源に直列に入れるD1
    1S1588、1N4148等の小信号高速スイッチング・ダイオードを想定しています。 120Hzより高い周波数が掛かるためです。
    個数は1個になっていますが2個直列の方がよいかもしれません。(要実験)
     PICのローパワー品でないものの絶対最大定格は6.5Vなので1個でも直ぐに壊れることはありません。

    以下、前回の順番通りではありませんが検討です。

    5.Brown-out Detect (BOD)
    PIC自体の機能で正確にはBrown-Out Reset (BOR) detect。
    BORは電源電圧の瞬間的な低下で発生するリセット。 電源OFF時にも有効なはず。
     一方、Power-On Reset (POR)は本当にパワーオン時しか有効でないもよう。
    電池の接触不良が想定されるし、普通はイネーブルでよい
    EEPROMの記憶内容の保護のためにもイネーブルの方がよいと思われる。
    コマンドはenablebod。

    4.明るさは何段階にすればよいか。 あまり多いとSWを押すのが面倒。
    明るさの刻みは2倍だと少し荒いので1.4142倍(2段階で2倍)とすると、
    100%(155mA) 70.7%(110mA) 50%(77.5mA) 35.4%(54.8mA) 25%(38.8mA) 17.7%(27.4mA) 12.5%(19.4mA) 8.84%(13.7mA) 6.25%(9.7mA) 4.42%(6.9mA) 3.13%(4.8mA) 2.21%(3.4mA)
     これ以下は暗過ぎるはず。 ( )内は実効電流値。
    12段階。11回押せば最少~最大間を可変できるのであまり面倒ではないだろう。
     SW押しっぱなしでのインクリメント、デクリメントは行わない。
     (上がり下がりさせる最適な速度(時間)も個人によって異なるという問題もあるし。)
    ソフト的には2~15の変数値を使って明るさ、フラッシュの動作を決める。(0,1は予備)
    IF文を並べるのは無粋なので branch か on goto か on gosub 命令を使う。
     追記
      select 命令もある。
     追記終わり
    EEPROMに2~15の値に応じたduty値のデータテーブルを持つ方法もあるがメンテナンスが面倒なのでプログラムに値を組み込んだ方が分かり易い。
    (プログラム容量は大したことないはずなので。)

    3.フラッシュ(点滅)は+の最大輝度の先に実装しようと思ったがウザくないか。
    確かにウザいが使った誰もがフラッシュ機能があることが分かるのでよい
    一方、SW2個同時押しだと知っている人がいないと使えない(無い)機能になってしまう。
    +の最大輝度の先に明るさ100%フラッシュ(基本昼間)と25%フラッシュ(夜に長時間を想定)を実装する。
    点滅速度は秒速2~2.5回位? 
     車のウインカーの法定上限~ハイフラシャーの速度。
     相手が人なら遅くてもよいが、航空機だとある程度速くないと通り過ぎてしまうかも?
    dutyは目(暗視カメラも?)の残像時間を考慮すると消灯時間を長くした方がよい。
    点灯100~150ms → 残像(消灯)100ms → 消灯200msかな(要実験)
    ソフト的にはPWM100/25%のdutyで点灯させ、一定周期でduty0%にすればよいはず。

    ・明るさデータ用EEPROMのウェアレベリング
    検討予定になかったが思いついたの忘れないうちに書いておく。
    EEPROMの書き換え回数は10万回(Min.)だがウェアレベリングの必要があるか?
     1日100回記憶させたとする1000日で寿命と微妙。
     タクトスイッチの寿命が先では?
      5万~100万回で結構持つものもあるし、+と-あるので2倍。
       メモ:タクトスイッチには10uA以上流すこと。
    やっておいた方が良さそう。(特にPICAXEを使い回すつもりなら絶対。)
    方法:
    EEPROMの後半の64バイトを使う。(前半64バイトは予備に空けておく)
     127番地:ポインター。有効なデータの番地を書き込んでおく。
     64~126番地:データ。
    動作概要は
     電源オン直後に127番地のポインターを読む。
     ポインターが示す番地(64~126)のデータ(前の明るさ)を読み、明るさの初期値とする。
     ポインター値に+1した値を127番地に書き込む。
     以後、ポインター値に+1番した番地に新しい明るさのデータを上書きしていく。
    要は電源オンする度にデータを書き込む番地を1づつずらして行くということ。
    例外処理
     もし、ポインター値が64~126以外の値ならば64を書き込み、
     明るさの初期値は7にする。
     ポインター値が126まで行ったら64に戻す。

    2.PWM周波数とCPUクロックの関係
    ・PWM周波数はLED照明では200Hz以上。
     本当にこれで良いのか再度調べてみたがやはり最低は200Hzでよい。
    ・フラッシュ(点滅)時の最少点灯時間(ON)を100msとし、
     この時間で10回PWMさせるとするとPWM周期は10ms=100Hz。これは問題ない。
    ・最少PWM dutyは「4.」で述べた2.21%だが余裕をみて1%までとする。
     一方、定電流回路の応答時間は1us位ではないかと思う。
     余裕をみて10usとし、これがPWMの1%とすると100%PWM周期は1ms、1000Hz。
     →PWM周波数は200~1000Hzの範囲となる。
     CPUクロック4MHz、1/16プリスケーラーを使うと
     250Hz(0.1%分解能)か、500Hz(0.2%分解能)が分解能的に切りがよい。
      ちらつきの問題がなければ250Hzの方がトランジスタの
      スイッチングロスが少ないし発熱が少ない。
     →250Hzにする。(やってみてちらつくなら500Hzにする。)
    CPUクロックは標準の4MHzで問題有りませんでした
     (恐らくCPUクロックは4MHzも要らない。)
     PWM 250Hz 100%の命令は pwmout pwmdiv16, C.2, 249, 1000

    1.SW部の回路
    基本的には通常は中間電位でSW押すと電源、GND方向に電位が変わるのが安全。
    PICAXE_PWM_LED_02.png
    Fig.1が基本だがSW2個を同時に押されると電源、GNDがショートする。
     人が同時に押すというより何かが倒れて押されたとか、落としたとか、
     バッグ?入れていて何かの拍子に電源が入りさらにSWも2個押されて
     しまったとかのアクシデントを想定。

    Fig.2、3はFig.1をショートしないようにしたもの。 抵抗が1本増える。

    Fig.4は前回の回路図で示したもので抵抗は増えないがメリットだが
     -のSWを押した時に+を押した時の電位をまたぐのが弱点。
     余談:たかが抵抗1本の節約費用だが大量生産する場合、例えば10万台生産する場合は1円の節約で10万円利益が増えるとマスで考える。

    PICAXE_PWM_LED_03.png
    Fig.5はPICAXEのDACで中間電位出して使うもの。
     信号源インピーダンスが高く、ノイズを拾い易いのとタクトスイッチへの電流が少ない。
     DACの抵抗値はTyp値しか記述がない。
     最大値はPICのWeak Pull-up Currentから推測すると2.14倍になる可能性がある。
     仮に3倍だとすると240kΩ。
      タクトスイッチに流れる電流は電源3Vで12.5uAなので最小電流(10uA)を一応上回る。
      ADCの入力容量50pFだとして時定数を計算すると12us。
      安定するのに5倍見込んだとしても60usなので問題ない。
      ノイズに関してはソフトで対処する。
     あとはDACの抵抗の誤差のために本当に中間電位になるのかということだが
     DACとしての精度は1/2 LSbなので問題ないはず。
     (抵抗通しの相対誤差は少ないだろうということ。)
     面白そうだがリスキーである。 (傍で無線機を使ったら誤動作しそう。)
     DAC出力に0.01uF位のCを入れる方法もあるが部品点数が増えて、この回路のメリットが薄れる。

    結局、Fig.2、3が無難だったようである
    基本的にFig.3が抵抗値を決め(分かり)やすいのでこれにし、具体的に抵抗値を決めたのがFig.6である。 (つまらない結論で申し訳ありません。m(_ _)m)

    ソフト
    ADCを複数回読んで平均化しノイズキャンセリングする。
    SWを押しっぱなしでもインクリメント、デクリメントし続けないようにする。
     一旦、中間電位に戻ったのを確認してからADCのスキャンにいくようにする。

    続 く
    関連記事

    コメント

    非公開コメント

    Friendship 7

    浅く広くのハード屋です。
    コメントへの返信には過大な期待をしないで下さい。 非公開コメントは停止しております。 不適切なコメントはFC2で自動的にはじかれます。
    リンクフリーですが盗作は禁止です。
    本ブログの内容を参考にされる場合はあくまで自己責任でお願い致します。