PICAXEでパワーLEDをPWM調光 5:完

    PICAXE
    11 /30 2014
    あ~トラブル続きで精神的に疲れました。 これを書き終わったらしばらく休もうかな。

    最終回路図
    PICAXE_PWM_LED_05.png
    SBDはSS2040F  LEDはOSW4XME3C1S

    変更点
    ・Brown-Out Resetを停止させた。(disablebod)
    電圧が低下して行くとBrown-Out ResetでPICAXEがリスタートを繰り返す為。
    PICAXEはリセット要因を知る術がないようで簡単には対処できない。
     PIC自体とか普通のCPUにはリセット要因を知るレジスタがある。
    もし、やるとするとADCの1個で自身の電源電圧を監視してプログラムを止めるしかない。
    が、今回のように他にもADCを使っているとADCの基準電圧を一々切り替える必要があるしそもそもハードリセット以外では暴走を防げる保障はない。
     余談だが(まただよ)某CPUを電源の下限電圧近くで使っていて突然停止するのに苦労したことがある。 ICEを使って詳しく調べると特定の命令で死んでいた。
     さらに詳しく調べるとその命令で瞬間的に電源電圧が僅かに下がり動作下限を下回るのである。 つまり、その命令は電気を食うのである。 電源電圧を上げたら死ななくなった。
     パスコンを強化した。 ま~、稀な例ですけどね。

    ・電源の直列ダイオードはSBDにした。
    SWダイオードだと電圧が降下し過ぎ(0.8V位)、電源電圧が低いときにPICAXEの電源電圧が下がり過ぎるため。
    実際はSBDでも低く過ぎた。(詳細は巻末の表を参照)
    心配なのはPICAXEの暴走とEEPROMへの書き込み不良。
    仕様以下の電圧になるのだが実力で動いており問題はなかった。(本当はダメ)
     それにしてもPICのPORは本当にパワーオン時(実測2.7V)しか役に立たない。
     Brown-Out Resetを有効にしてリセット要因を分析すれば対応できるので問題ないということらしいが、PICAXEでは知る術がないので大変。
    なお、仕様以下の電圧でも一応EEPROMに書かれてはいるがいつまで覚えているか保証はない。 ソフト的にEEPROMのデータがおかしい場合はデフォルトを記憶し使うようにしてある。

    ・電源の電解コンデンサは330uFに増やした。
    PWM周波数を250Hzと低い値に決定した為。
    この1/10のカットオフ周波数になるように330uFにした。21.9Hz。
    PICAXEが定電流回路をPWMでドライブする電流やEEPROMへの書き込み時に瞬間的に電流が上昇するのに対応するためもある。
    特に低電圧時に瞬間的に電流が増えた時に電圧が低下するのはまずい。

    ・EEPROMの明るさデータの書き込み(ウェアレベリング)には0~127番地を使うことにした。
    0~63番地を空けていたが、より書き込みを分散することにした。

    PICAXE_PWM_LED_07.jpg

    書いていなかったずっと悩んでいたトラブル

    実はタイマーがおかしいのである。
    フラッシュ(点滅)で50msのタイマー(pause 50)を使うのだが短か過ぎるのである。
    pause値  実時間(約である)
      40    36ms
      50    35ms位(ばらつきが大きい)
      55    36ms
      56    37ms
      58    37ms
      59    37ms

      60    56ms
    pause値40、60も僅かに短いのだが50(ms)台がひど過ぎるし値を変えても変わらない。
    (前回の記事のGIF動画の点滅は短い状態でのもので酷く速い。)

    試してみたこと
    ・10us刻みのpauseus命令にしてみたがさらに悪化した。
    ・ダミーのタスク1個追加して4タスクにしてみたが変わらず。
    ・PICAXE Programming Editor(ソフト)のバージョンを色々替えてみたが変わらず。
    お手上げです orz

    マルチタスクにした場合のタイマーのバグじゃないかという気がしています。
    50msの設定で値がかなりばらつくのもおかしいし、単純に設定値を間違えるということではなく、タイマーの仕組みとしてバグっているような気がします。
    以前、マルチタスクでpause命令の影響を調べた時にも一部不連続で妙な現象が観測されています。
    仕方ないのでpause 60 (56ms)を使いました。

    プログラム
    ・キーの読み取り積算時間
    50Hz(20ms)と60Hz(16.7ms)の時間の公倍数の100msが良いのだがキーを速く押すと取り損なうので55msにした。
    ・SWのLow、Mid、Highの判断は抵抗値の誤差も含めて決めてある。(当たり前)
    ・改善点
    もう一段暗いのを付けた方がよいかも。
    諧調1.4142倍はもう少し少なくした方がよいかもしれない。
     例えば3回押して2倍=1.2599倍

    参考資料
    PICAXEの電源電圧はグラフにしても何だかよく分からないので表のままです。
    電源電圧2.75Vでdisablebodにしないとリスタートで点滅を繰り返す。
    2.25VでLEDが消灯するがPICAXEは動いていおりEEPROMにも書ける。(未保証)
      PICAXE電源電圧(V)   SBD+R 電圧降下(V)
     電源電圧(V) 100%点灯 2.2%点灯  100%点灯 2.2%点灯
    2.25 1.96 1.99 0.29 0.26
    2.50 2.20 2.23 0.30 0.27
    2.75 2.44 2.48 0.31 0.27
    3.00 2.69 2.72 0.31 0.28
    3.25 2.93 2.96 0.32 0.29
    3.50 3.17 3.20 0.33 0.30
    3.75 3.41 3.45 0.34 0.30
    4.00 3.65 3.69 0.35 0.31
    4.25 3.89 3.94 0.36 0.31
    4.50 4.13 4.18 0.37 0.32
    4.75 4.37 4.43 0.38 0.32
    5.00 4.61 4.67 0.39 0.33
    5.25 4.85 4.92 0.40 0.33
    5.50 5.10 5.16 0.40 0.34
    5.75 5.34 5.41 0.41 0.34
    6.00 5.58 5.66 0.42 0.34
    6.25 5.83 5.90 0.42 0.35
    6.50 6.07 6.15 0.43 0.35

     SBD+R部分での電圧降下 テスターの分解能不足で段々です。
    PICAXE_PWM_LED_08.png
    以上
    関連記事

    コメント

    非公開コメント

    Friendship 7

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