起動回路
2025.02.10
スイッチング電源の制御回路はどんな電源で動くかと言うと、何種類かあるけど、たとえばトランスの補助巻線から自分の電源を得て動いている。
しかしそれはスイッチングが始まらないと電圧が出てこないわけで、その最初はどうしているか。
AC電源を整流してそのプラス側から抵抗を通して、制御回路のICなどに電源が供給されている。これで最初の動きがスタートする。
以後は補助巻線から電源を得て動き続ける。
従って、この起動回路は最初だけ働く事になる。エンジンのセルモーターのようなもの。
電源は連続通電で働き続ける。定期点検で久しぶりに電源を落とす。再び電源を入れたが動かない。
これは、たとえば起動回路の電解コンデンサが干からびてしまっているのが原因だったりする。(干からびる: ドライアップ、容量抜け)
前に書いたように、最初だけ働く回路だから、以後おかしくなっても通常運転には影響しない。ところが、再びその出番が来た時にダメピョーンというわけ。
どこの何の製品かは書かないが、とある製品ではその起動回路の電解だけチップ形で、ほかはみんなラジアル品。
どういう意図でそこだけチップ形にしたのかはナゾ。
チップ形というと寿命が比較的短いような印象がある。昔からやっているが、あまり良い印象はない。液漏れしたのをせっせと交換していた経験ばかり。
邪推といいましょうか、意図的に寿命の短い部品を組み込んだのではないかという、そんな気がしています。
しかしそれはスイッチングが始まらないと電圧が出てこないわけで、その最初はどうしているか。
AC電源を整流してそのプラス側から抵抗を通して、制御回路のICなどに電源が供給されている。これで最初の動きがスタートする。
以後は補助巻線から電源を得て動き続ける。
従って、この起動回路は最初だけ働く事になる。エンジンのセルモーターのようなもの。
電源は連続通電で働き続ける。定期点検で久しぶりに電源を落とす。再び電源を入れたが動かない。
これは、たとえば起動回路の電解コンデンサが干からびてしまっているのが原因だったりする。(干からびる: ドライアップ、容量抜け)
前に書いたように、最初だけ働く回路だから、以後おかしくなっても通常運転には影響しない。ところが、再びその出番が来た時にダメピョーンというわけ。
どこの何の製品かは書かないが、とある製品ではその起動回路の電解だけチップ形で、ほかはみんなラジアル品。
どういう意図でそこだけチップ形にしたのかはナゾ。
チップ形というと寿命が比較的短いような印象がある。昔からやっているが、あまり良い印象はない。液漏れしたのをせっせと交換していた経験ばかり。
邪推といいましょうか、意図的に寿命の短い部品を組み込んだのではないかという、そんな気がしています。
EEPROMで失敗した話(続)
2025.02.09
電源電圧低下の対策も最初から設計に織り込んであるし、これからは安心してバッテリーバックアップSRAMやEEPROMが使えると思ったら、まだ安心するのは早い。
落とし穴は意外と有る。
言われてみればそうだねと思うけど、言われないとなかなか最初気づかないこともある。
たとえばEEPROMに設定値を入れておく。端末番号とか、通信パラメータとか、IPアドレス等いろいろあるだろう。よくある使い方だ。
ところが・・・デバッグに使っていた試作機は正しく動くのに、量産で作った物に書き込んだら正常に動かない。なぜ?
そこで、EEPROMやバックアップRAMの初期値について考えたか?
EEPROMの話に絞って書くと、まっさらの新品のEEPROM、マイコンに内蔵されているEEPROMも、たいていは全番地FFhだと思う。
一方、設定値は例えば0~4の範囲だとする。もし初期化ルーチンでFFhを読み込んでプログラムが走ったらどうなる? 想定外の値でどうなるやら。
まあ分かっている人には当たり前なんだが、まずEEPROMの値を読み込んで範囲チェックをする。このパラメータについては0~4の範囲で、FFhは有り得ないから異常と判断する。日付だとしたら、0月とか13月とか32日は無いから、異常となる。
そこでデフォルト値に書き換えてやるといった処理が必要になる。
バックアップSRAMも、いまの保存データが本当に正しいものか、整合性をチェックしてから利用するという手順は欠かせない。
製作されて一度も動かしておらず、バックアップ処理をしたことのない状態のSRAMの内容をそのまま飲み込むわけにはいかない。初期化が必要だ。
色々な事態を想定するとややこしくなってくるが、たとえば同じデータを離れた番地にも置いて二重化するとか、それを読み込み時に照合して一致したら採用するとか。
もし特定の番地が書き込めなくなったらどうする、代替処理をするとしても、その処理の中で使っている番地が書き換えられなくなったり化けてしまったら・・・なんてところまで考えると心配で夜も眠れないが・・・
そういえば修理の仕事の中でもEEPROMの初期値について考慮されていなかった製品があり、他社さんが部品を交換しても何をどうやっても動かなかったものがあった。
自分もなかなか最初わからなかったが、ひょっとして?と思って、確か中古か借用した別の個体からEEPROMを差し替えてみると動いたので、確信した。
だからデータが異常かどうかをチェックして、自分でデフォルト値に書き換えるようなプログラムにしておけば、こんなふうに使えなくなることもなかったのに。
この時は正常な個体のデータを書き込み、さらにキャリブレーションが必要だったので手順を確認しながら実行して、正常な状態へ持っていった。
さらに、やはりリセット回路がモロに手抜きだったので、電圧検出ICを組み込んだ回路を追加して化け対策をした。
落とし穴は意外と有る。
言われてみればそうだねと思うけど、言われないとなかなか最初気づかないこともある。
たとえばEEPROMに設定値を入れておく。端末番号とか、通信パラメータとか、IPアドレス等いろいろあるだろう。よくある使い方だ。
ところが・・・デバッグに使っていた試作機は正しく動くのに、量産で作った物に書き込んだら正常に動かない。なぜ?
そこで、EEPROMやバックアップRAMの初期値について考えたか?
EEPROMの話に絞って書くと、まっさらの新品のEEPROM、マイコンに内蔵されているEEPROMも、たいていは全番地FFhだと思う。
一方、設定値は例えば0~4の範囲だとする。もし初期化ルーチンでFFhを読み込んでプログラムが走ったらどうなる? 想定外の値でどうなるやら。
まあ分かっている人には当たり前なんだが、まずEEPROMの値を読み込んで範囲チェックをする。このパラメータについては0~4の範囲で、FFhは有り得ないから異常と判断する。日付だとしたら、0月とか13月とか32日は無いから、異常となる。
そこでデフォルト値に書き換えてやるといった処理が必要になる。
バックアップSRAMも、いまの保存データが本当に正しいものか、整合性をチェックしてから利用するという手順は欠かせない。
製作されて一度も動かしておらず、バックアップ処理をしたことのない状態のSRAMの内容をそのまま飲み込むわけにはいかない。初期化が必要だ。
色々な事態を想定するとややこしくなってくるが、たとえば同じデータを離れた番地にも置いて二重化するとか、それを読み込み時に照合して一致したら採用するとか。
もし特定の番地が書き込めなくなったらどうする、代替処理をするとしても、その処理の中で使っている番地が書き換えられなくなったり化けてしまったら・・・なんてところまで考えると心配で夜も眠れないが・・・
そういえば修理の仕事の中でもEEPROMの初期値について考慮されていなかった製品があり、他社さんが部品を交換しても何をどうやっても動かなかったものがあった。
自分もなかなか最初わからなかったが、ひょっとして?と思って、確か中古か借用した別の個体からEEPROMを差し替えてみると動いたので、確信した。
だからデータが異常かどうかをチェックして、自分でデフォルト値に書き換えるようなプログラムにしておけば、こんなふうに使えなくなることもなかったのに。
この時は正常な個体のデータを書き込み、さらにキャリブレーションが必要だったので手順を確認しながら実行して、正常な状態へ持っていった。
さらに、やはりリセット回路がモロに手抜きだったので、電圧検出ICを組み込んだ回路を追加して化け対策をした。
EEPROMで失敗した話(昔)
2025.02.09
はるか昔、慣れない頃は失敗もありました。
とある装置、
RS-485でバス接続された端末がたくさんあって、1台ずつに端末番号を割り当てていました。
各々を区別するのはその端末番号というわけです。
その端末番号はEEPROMに記憶される仕組みで、番号を打ち込む装置を作り、現場設置のときに一台ずつ設定していきました。
よし、これで設定が終わった。通信テストしてみると、1番、2番、・・・ちゃんとできてるね、よかったね。
ところが後日、「動かない」とクレーム。
持ち帰って調べると、確かに動かない。通信に反応しない。
おかしいなあ、なんでだろう。プログラムのバグか? さんざん調べたけどバグではなさそう。
番号設定に入るには起動時に特殊な操作が必要だから、通常のプログラムのループからその書き換え操作へ入るような道はプログラム全体を見直しても、他になかった。
色々試して気づいたのは電源のON/OFFを繰り返した後に通信に反応しなくなる事でした。どうやら番号が化けてしまっているようだ。
つまり、こういうことです。電源が落ちる時にマイコンが暴走している。電圧が不安定な状態だから、動作は保証されないのは当たり前。意外と見過ごしている。
この経験をするまでは、リセット回路なんか抵抗とコンデンサとダイオードで(よくある回路)済むものだとばかり思っていました。
なぜ暴走しているか、暴走しているというならどうやって確かめるか、などと難しく考えてはいけない。知識と経験とカンで、おそらくそれだろうと、それしか考えられない。
そういえば駆け出しの頃、(その前の勤務先の)当時の上司がその有名な?回路について何やらゴニョゴニョ言っていた事を思い出したのです。
もろにオタクで、何かを聞きに行くと何でも答えるし、しかも5分では終わらない。色々話してくれるが、結局こちらの頭では受け流すばかりで何も残らない。
そう、あのゴニョゴニョが・・・なんて言ってたっけ?
瞬間停電だったらどうする?
電圧が徐々に下がっていったらリセットはちゃんと効くか?
短時間に電源をON/OFFした時にちゃんとリセットはかかるか?
これらを解決するには、
要するにリセットICを入れれば良い。電圧検出のICがある。こいつは昔から存在は知っていたが、何に使うのかいまいちピンと来ていなかった。その時までは。
ただそれだけのこと、と言ってしまえば終わりですが・・・
当時はPST518とかPST600Cが有りました。PST518は廃止になったので600Cにしたっけ。これらは現在どちらも廃止になって久しいけど、代わりの物は各社色々ある。
TO-92形で一般的なトランジスタと同じ形状だから、リードを曲げて既存の基板にくっつけるのが容易だった。次の基板改版からは基板の中に表面実装タイプを組み込んだ。
それから、電源ON/OFFを自動的に繰り返すテスト装置をPICマイコンで作り、十分に耐久試験をして念には念を入れた。もちろんデータが化けることはなかった。
電源OFFで電圧はいきなりゼロにならない。人間には一瞬で消えたように見えても、特にマイコンの速度から見れば、とてもスローモーションに見えているだろう。
電源OFFで電圧が落ちる途中、マイコンの動作保証電圧を下回る前にリセットを押さえてくれるので、暴走しないわけだ。
これはファミコンのデータセーブと同じことで、なぜリセットボタンを押しながら電源スイッチをOFFにするのか、つまりこういうことだったのだ。この操作をリセットICは自動的にやってくれる。逆にいうと、ファミコンは簡易リセット回路だから面倒な操作が必要だった。
ファミコンの場合はバッテリーバックアップのSRAMだけど、電源が落ちる時の暴走で書き換わる可能性については共通点がある。
あー疲れた、よし今日はこれくらいにしようとゲームを終わってスイッチをバチンと切ってしまってから、あっしまった、リセットを押しながらOFFにしないとだめだったと気づく。
とある装置、
RS-485でバス接続された端末がたくさんあって、1台ずつに端末番号を割り当てていました。
各々を区別するのはその端末番号というわけです。
その端末番号はEEPROMに記憶される仕組みで、番号を打ち込む装置を作り、現場設置のときに一台ずつ設定していきました。
よし、これで設定が終わった。通信テストしてみると、1番、2番、・・・ちゃんとできてるね、よかったね。
ところが後日、「動かない」とクレーム。
持ち帰って調べると、確かに動かない。通信に反応しない。
おかしいなあ、なんでだろう。プログラムのバグか? さんざん調べたけどバグではなさそう。
番号設定に入るには起動時に特殊な操作が必要だから、通常のプログラムのループからその書き換え操作へ入るような道はプログラム全体を見直しても、他になかった。
色々試して気づいたのは電源のON/OFFを繰り返した後に通信に反応しなくなる事でした。どうやら番号が化けてしまっているようだ。
つまり、こういうことです。電源が落ちる時にマイコンが暴走している。電圧が不安定な状態だから、動作は保証されないのは当たり前。意外と見過ごしている。
この経験をするまでは、リセット回路なんか抵抗とコンデンサとダイオードで(よくある回路)済むものだとばかり思っていました。
なぜ暴走しているか、暴走しているというならどうやって確かめるか、などと難しく考えてはいけない。知識と経験とカンで、おそらくそれだろうと、それしか考えられない。
そういえば駆け出しの頃、(その前の勤務先の)当時の上司がその有名な?回路について何やらゴニョゴニョ言っていた事を思い出したのです。
もろにオタクで、何かを聞きに行くと何でも答えるし、しかも5分では終わらない。色々話してくれるが、結局こちらの頭では受け流すばかりで何も残らない。
そう、あのゴニョゴニョが・・・なんて言ってたっけ?
瞬間停電だったらどうする?
電圧が徐々に下がっていったらリセットはちゃんと効くか?
短時間に電源をON/OFFした時にちゃんとリセットはかかるか?
これらを解決するには、
要するにリセットICを入れれば良い。電圧検出のICがある。こいつは昔から存在は知っていたが、何に使うのかいまいちピンと来ていなかった。その時までは。
ただそれだけのこと、と言ってしまえば終わりですが・・・
当時はPST518とかPST600Cが有りました。PST518は廃止になったので600Cにしたっけ。これらは現在どちらも廃止になって久しいけど、代わりの物は各社色々ある。
TO-92形で一般的なトランジスタと同じ形状だから、リードを曲げて既存の基板にくっつけるのが容易だった。次の基板改版からは基板の中に表面実装タイプを組み込んだ。
それから、電源ON/OFFを自動的に繰り返すテスト装置をPICマイコンで作り、十分に耐久試験をして念には念を入れた。もちろんデータが化けることはなかった。
電源OFFで電圧はいきなりゼロにならない。人間には一瞬で消えたように見えても、特にマイコンの速度から見れば、とてもスローモーションに見えているだろう。
電源OFFで電圧が落ちる途中、マイコンの動作保証電圧を下回る前にリセットを押さえてくれるので、暴走しないわけだ。
これはファミコンのデータセーブと同じことで、なぜリセットボタンを押しながら電源スイッチをOFFにするのか、つまりこういうことだったのだ。この操作をリセットICは自動的にやってくれる。逆にいうと、ファミコンは簡易リセット回路だから面倒な操作が必要だった。
ファミコンの場合はバッテリーバックアップのSRAMだけど、電源が落ちる時の暴走で書き換わる可能性については共通点がある。
あー疲れた、よし今日はこれくらいにしようとゲームを終わってスイッチをバチンと切ってしまってから、あっしまった、リセットを押しながらOFFにしないとだめだったと気づく。