目次PIC回路集飾りランプ


飾りランプ制御回路 トラブル・シューティング

装置を組み上げて動作をさせましたが、最初は正常に動作しませんでした。以下に発生した現象と対処について書きます。

ランプの明るさ制御ができず、トライアックが早い周期でON/OFFを繰り返す

現象確認1

この現象はトライアックを4回路以上動作させたときに発生し、3回路以下の場合には発生しません。

現象確認2



同期信号をオシロスコープで観測すると信号が出ていないときがあります。


原因--電源電圧降下



トライアックの駆動回路を増やしたときに発生する現象なので、電源電圧の低下が考えられます。電源電圧を観測した結果、瞬間的に約1V低下し、その時点から約60ミリ秒間、同期信号が停止することが分かりました。


対処1--電圧レギュレータを大きな容量のものに交換


今回の回路では5Vの電源に必要な電流を以下のように想定し、100mAタイプの電圧レギュレータ(78L05)を使用しました。
・PIC : 2mA・パイロットランプ : 10mA
・トライアック駆動回路 : 14mA × 5 = 70mA
・その他 : 数mA

しかし、トライアック駆動が全てONになると容量ぎりぎりになり、電圧が下がる可能性があります。
そこで、電圧レギュレータを1Aタイプの7805に交換しました。
結果は変化無し。電圧レギュレータの容量不足による現象ではありませんでした。

対処2--PICの電圧降下検出機能を停止


PIC16F628には電源電圧を監視し、電圧の低下を検出するとリセットをする低電圧リセット機能があります。今回の現象はこの機能が働いている可能性があります。トライアック駆動回路が同時に動作すると多くの電流が流れ、電源電圧が瞬間的に低下し、PICがリセットされたのではないかと思われます。同期信号はPIC内のプルアップ電圧で+5Vに引っ張っています。PICがリセットされたときにプルアップ電圧が無くなり、同期信号が見えなくなったとするとつじつまが合います。
PICの低電圧リセット機能の制御はコンフィグレーションワードの BODEN ビットで制御することができます。このビットのデフォルト値は 1 で「検出する」という設定になっています。これを 0 に変更し、「検出しない」としてみました。
 __config _hs_osc & _wdt_off & _pwrte_on & _lvp_off & _boden_off
結果は同期信号が停止することは無くなり、正常に動作するようになりました。電源の電圧降下が原因だったようです。

対処3--電源電圧安定化のために電解コンデンサを追加



対策2で正常に動作するようにはなりましたが、電源電圧の変動が気になります。そこで、電圧レギュレータの出力側に電解コンデンサを入れて5Vの電源電圧を安定させることにしました。少し大きめですが、2200μF/10Vのコンデンサを使いました。

対処4--トライアック駆動回路への駆動電流を減らす


今回使用したTLP560というフォト・トライアックは数mAの駆動電流で動作が可能です。今までは約14mAで駆動していましたが、駆動回路の抵抗値を変更し、約5mAで駆動するようにしました。変更後、正常に駆動できることを確認しています。

以上でこの現象は解決できました。


BCDスイッチの値が、他の回路のBCDスイッチ設定値によって影響を受ける

現象確認1

特に回路5のBCD値が回路4のBCDスイッチの設定値の影響を受けています。頻度は少ないですが他の回路でも影響が出ています。

現象確認2


回路の配線をテスターで綿密に調べましたが異常はありません。特に後から追加したフロント・パネルのBCDスイッチへの配線も確認しましたが、異常はありません。
ハードウェアの異常でないとするとソフトウェア?


ソフトウェアのバグでした。

原因--スイッチ選択のデコーダ指定をしてからスイッチの状態を読み出すまでのタイミングを設けていない


sw_mode_sub
        movwf   portb           ;Write scan data
        movfw   portb           ;Read PORTB
初期のBCDスイッチ値を読み出すプログラムは上記のようにしていました。デコーダを制御するデータをPORTBレジスタに書き、次のステップでPORTBを読み出してスイッチ値を取り込んでいます。今回の回路では4MHzのクロックを使っているので、1ステップの実行時間は1μ秒です。ですから、デコーダが1μ秒以内に動作すれば正常にスイッチの値を読み出すことができます。今回の回路で回路5に誤動作が多く発生した理由はよく分かりませんが、デコーダの動作速度ぎりぎりなようです。

対処--デコーダ指定からスイッチ値読み出しまでタイミングを設ける


sw_mode_sub
        movwf   portb           ;Write scan data
        movlw   d'2'            ;Set 7us wait
        movwf   s_count         ;Save count
loop
        decfsz  s_count,f       ;7us ?
        goto    loop            ;No.
        movfw   portb           ;Read PORTB
上記のようにデコーダを指定してからスイッチの値を読み出すまでに7μ秒のタイミングを設けました。4μ秒でも今回の事象は解決されましたが、安全のために長くしました。以下の現象を考えるとあまり長くできません。

以上でこの現象は解決できました。


ランプの明るさ制御がスムーズでない

現象確認

この現象は負荷に接続したランプを徐々に暗くしていくとその途中で時々フラッシュのように一瞬明るくなり、また元の暗さに戻るという現象です。要は徐々に暗くなっていくランプがチラチラとまばたきながら暗くなるということです。

制御が乱れた瞬間の負荷電圧を観測してみました。本来は55%の制御をしている状態です。中央の線が太くなっている時間(45%)は電圧が0VでトライアックがOFFになっているはずの時間です。ところが、その時にも電圧がかかっている時があることが分かります。
トライアックがOFFになっている状態と異常制御の状態とが重なって見えるのは、オシロが電圧を繰り返し観測していて、残像があるためです。(簡単に説明するのは難しい)

この現象はランプが閃くように光ります。面白いので直さなくても良いかもしれません。一応、以下の対処1を実施してこの現象の発生頻度を少なくしました。


原因--同期信号の処理待ちによりフォト・トライアックのOFFタイミングがずれる


AC電圧の極性反転(0V)を検出して作られる同期信号をRB0ポートに入力して割り込み処理をさせています。しかし、PICでは2重割り込みはできないので、RB0の割り込みが発生したときにTMR0またはTMR1の割り込み処理が行われているとRB0の割り込み処理はそれらの処理が終わるまで待たされることになります。今回のソフトではフォト・トライアックをONにしたあとRB0の割り込みが発生するまでOFFにしていません。そのため、RB0の割り込み処理が遅れるとAC電圧の次の周期の始まりの時点ですでにフォト・トライアックがONになっていることになり、トライアックによる電圧制御は行われず、点灯状態になります。


対処1--スイッチ読み取りの待ち時間を短くする


最初はこの現象の原因が分からなかったのでスイッチの読み取りの待ち時間を750μ秒としていました。これを7μ秒に短くして発生の頻度を抑えました。

対処2--フォト・トライアックの駆動信号をパルスにする(未処置)


フォト・トライアックをパルス信号で駆動することにより上記の現象を軽減することができるはずです。すなわち、フォト・トライアックを駆動したあと、一定時間で駆動信号を停止するということです。その場合でも、パルスの幅とRB0の処理待ち時間により次の周期にかかってしまうことはあり得ます。駆動信号をパルスにした場合、R1-4を少し小さな値にする必要があると思います。
私の場合、今回発生している現象が面白いので、対処はしていません。