落穂ひろいの電子工作とRaspiの自動電源制御装置の改良
Raspi3は簡単に動いた。しかし、もともと目的なしに衝動買いしたアイテムである。適当なアプリケーションはまだ思いつかない。画像処理は高速で、ネットサーフィンもそれほどストレスなく楽しめる。これをサブマシンのPCにしても良いのだが、今、特にそれが必要だということでもない。
ということで、今まで懸案だったが、手をだしていなかった細々した周辺の工作やトラブルシューティングにいそしんでいた。そのうちひょんなことから新しいテーマが見つかり、連休はそれに夢中になっていた。この話はあとで詳しくするとして、その前のいくつかの作業についてご報告しておこう。
LM380革命アンプのケース入れ(4/15/2016)
現在、当研究所のPCデスクには、4年前に作ったアナログオーディオチップLM380を使ったステレオアンプが、お菓子の空きプラケースに入って載っている。ケースのサイズが小さすぎ、スピーカー端子がはみ出してしまったため、未完成のままだ。
このあと作ったカナデンのデジタルアンプがちゃんとしたケースに入っているのに(といってもタカチの安物だが)比べると、少々扱いが雑で前から気にはなっていたが、そのままになっていた。
机の上に置いたままにしているのは、たまにスピーカーコードを切り替えて、こちらで聴くときがあるからだ。透明感のあるすっきりした音で、気分が乗らないときはこのアンプでバロック(それも初期)を聞くと、カマデンより疲れない気がする。
このアンプは革命アンプと言われ、この制作記事は、今も当ブログで結構アクセスの多い記事のひとつだ。手が空いたので、折角だからこれをまともなケースに入れてやることにした。手を動かしていないと落ち着かない性分になっている。
どんなケースにするのか、あれこれ迷ったが、結局、カマデンと同型(SW-125)のケースに落ち着いた。うーむ、創造力が落ちているなあ。まあ、形を統一するというのも環境を美しくみせるコツのひとつだと無理やり理屈をつける。
こんどは、カマデンのとき失敗した送風孔の位置を正確に開ける工夫をしてみよう。まず、1.2ミリ程度のドリルで下穴をあけ、錐やアートワークナイフで微調整する。そのあと2回くらいドリル穴を換えて所定の大きさ(3ミリ)にする。この結果、完全ではないが、前に較べれば格段に揃った穴があいた。
基板の固定方法では苦労した。アンプ基板はケースのことを全く考えずにレイアウトしてあるので、可変抵抗器や、入力ジャックが外に出るようにしたら、ケースの側板と基板が干渉して、ケースがはまらなくなってしまった。
本来なら基板の実装を変えるところだが、無精して、可変抵抗器の軸をパネルに固定することにした。こうすると今度は基板の固定が非常に難しくなる。正確に穴あけをしないと基板固定ポストの接着がすぐ外れるし、開け方を忘れて無理にはずそうとするとポストは簡単に破壊されてしまう。
基板の固定は、このままでは可変抵抗器の軸だけなので、フォンジャックを差し込むときはぐらぐらするし、いずれは可変抵抗器は壊れるだろう。どうしたら合理的な固定法があるか頭を捻った。
色々考えた挙句、ケースには可変抵抗の軸だけで固定し、裏蓋をはめたあと、裏蓋から基板を釣る形で固定した。これでフォンジャックを差し込んでもぐらぐらしなくなった。
こういう実装方法を考えるのは、実はとても楽しい。参考にする情報もないし基準もないので自己満足そのものだが、うまく行った時の快感はソフトでしつこいバグを見つけた時くらい大きいものがある。
沢山の実用品の修理。腕時計の自動巻き機の修理にはまる(4/21/2016)
これまで作った数多くの電子工作品が年を経て次々に故障を始めている。プリンターのLAN電源制御1号機がまた故障した。こいつはモジュラージャックの終端抵抗が内部で断線していることを、一年前、長い間かかってやっと突き止めたものだ。
件(くだん)の抵抗器はリード線を強く押えたところ復帰したので横着して交換せず、そのまま動かしていたのだがやっぱり再発した。この交換は結構面倒なのでそのままになっている(プリンターの遠隔制御が必要なくなったこともある)。
メトロノームの正確な時間間隔を測定するリズムキャプチャーも最近ノイズが出てうまく動かなくなった。電池を交換したが症状は変わらない。どうも電圧不足ではなさそうだ。今急にこれが必要ということもない(保有するメトロノームの補正は済んでいる)ので、これも手がついていない。
そのうち、ここ4年近く毎日動いていた腕時計の自動巻き機もおかしくなった。ソフトパワースイッチを装備し、スイッチの長押しでスタート、さらに長押しでパワーが切れるようになっている。毎日、定期的に動かすため、昔FMのエアーチェックに使っていたタイマーで電源が入るようになっている。
電源が入った時はソフトパワースイッチでなくても動くようにしてある。一日2回動かしているのだが、このところ時計の時刻が大幅に遅れることが多くなった。電源が入っても動かないときがあるようだ。
試しに、タイマーではなく単に電源を入れてみる。ちゃんと動く。タイマーでスタートさせてみる。今度は動かない。ふーむ、接触不良か。重い腰を上げて、工作テーブルに持ち込みUARTを付けて様子を見た。すると問題なく動く。いつもの場所に戻す。動かない。何か馬鹿にされている感じだ。
この装置のUARTはISPケーブルを使ったChaNさんのUARTを改良したものだ。どうもこいつを接続しているときはエラーが起きない。調べるうち現象がだんだん見えてきた。整理すると次のようになる。
パワーダウンモードでスリープしているときに電源が切られると、そのあと電源を入れても復帰しないことが多いということがわかった。タイマーがONになっている時間は、この装置の1セットの運転時間より長く、必ずパワーダウンモードでスリープに入る。UARTをつないでいるときは全くトラブルは起きない。
これまで順調に動いていたのが何故こういう現象になるのかが謎である。接触不良ではない。片手間で調べられなくなった。すこし本腰を入れることにする。ISPケーブルがつながっているのは、MOSI、MISOなどのピンでこれらが全体に影響が出てくるとは考えにくい。あとは、VccとGNDそれにRSTだが、やはり、RST(リセットピン)が一番臭い。
オシロに接続する。パワーダウンスリープに入ってもRSTはHighのままではある。ここまでは当然だ。しかし、電源コネクターをはずしても、RSTは下がらない。何と、これはどういうことだ。
早速ウェブに助けを求める。スリープでは、すべてのピンの状態を保持すると書いてある。しかし、電源を切ってもRSTを含めたピンが続くとはどこにも書いていない。この電力はどこから来ている?わけがわからない。
スリープでなく通常に動いているときに電源を切れば、すべてのピン(RSTを含めて)はあっさりLowレベルに落ちる。ところがスリープ状態では、電源をはずしても、信じられないことにRSTはHighのままなのだ。
AVRのパワーダウンスリープはVccまで保持される!(4/24/2016)
あわててAVRのデータシートを見るが、そんなことはどこにも書いていない。I/Oピンが保持されるとはあるが、リセットピンまでがそうだとはどこにも書いていない。そのうち、もっと思いがけないことが分かった。そもそもVccが下がっていないのである。オシロを2現象にしてみて初めて分かった。
確かに、このシステムには、モーターの突発的な駆動電流の影響を考慮して、Vccには100μFとインダクターのフィルターが入っているが、パワーダウンスリープでないときは、電源を切ると、一気にVccは下がるのに、パワーダウンスリープではなかなか下がらない。
それではと、このコンデンサーを接続からはずしてみた。驚いたことに症状に変わりがない。パワーダウンモードでないときは一気に下がるし、ISPケーブルを差した場合はどちらも簡単に0にもどるのに、パワーダウンスリープ中での電源断では下がらないのだ。
信じられない。とにかく、この影響でおかしくなっていることは明らかだ。Vccとリセットが0に戻らないので、再度電源を入れると、CPUは不安定な動きになる(暴走状態)。
試しに、10KΩでVccピンをシャントすると、あっさり落ちる。しかし、これではパワーダウンスリープ中も、この電流は流れ続け、なんのためのソフトパワースイッチかわからなくなる。なんとかならないか。
しかもこの問題がなぜ顕在化せずにここまできたのかというのも謎である。少なくとも、ここ半年前までは、全く順調に動いていた。最初の長期動作テストでは、UARTを入れて調べているので、この問題がわからなかったのは当然だが、最近起きはじめたというのが、どうも解せない。
パワーダウンスリープ中の電源断は想定外のことなのか(4/28/2016)
さらに、もっとおかしいことがわかった。パワーダウンスリープのとき、ACアダプターのジャックをはずして、再度、電源を入れ直すと正常に復帰することが多いのだが、ACアダプターをつけたまま、AC側で電源を切ると(現行タイマーの使用状態)、ほぼ確実にAVRはハングアップする。これは一体どういうことか。
不思議なことに、ISPケーブルをつけたままでは、この症状は起きない。オシロで見ている限りでは、Vcc、RSTピンの電圧は、2分もすれば、0Vまで低下している。タイマー運転は1日に2回だけ。パワーオンリセットには十分な低電位だと思うのだが、ハングアップが起きているようだ。
それにしても、経年変化でこういうことが起きている。パワーダウンスリープにしたまま電源を切ってしまうと、どういう動作になるかというのは、調べた限りウェブ上に情報は見つからなかった。
確かに、ソフトパワースイッチの前提は電池駆動で電源は常時ONであることが前提だ。OFFになることは想定していない。従って、ここでの追及はどうも、CPU内部の話に行き着きそうで、余り深く詮索することは無理なような感じがしてきた。
完全に暗礁に乗り上げた。こればっかりやっているわけにも行かない、移りたい次のテーマが見つかっている。残念だが、これは少し棚上げにしよう(少し閃いていることがあるが)。
Raspiの電源制御装置2号機の準備(5/1/2016)
Raspi3周辺でやりたいことが見つかっている。それは以前、初代のRasPiで作った電源制御装置である。スイッチを押すだけで電源が入り、shutdownすると電流量の減少を検知してリレーで電源を切る。一般のPC と同じ操作イメージである。
ただ、問題なのは以前のプログラムではshutdown時の電流量が決めうちなので、ペリフェラルをつないだりすると(例えばHDD)、うまくshutdownと認識してくれない。個別にコンパイルし直さなければならない。これを何とかしたい。これが汎用化されれば使いみちはぐっと広がる。
初代のRaspiに較べ、RasPi3は2.5Aが最大電流なので、前の2Aのリレーでは不安である。もう一台作ることにする。部品箱から手持ちのリレーを探す。たまたまあった3Aは少し大きく、これまでのケースには入らない。
今度はUSBソケットを入れる予定だが、手持ちの少し大きいケース(タカチSW55)では何か間抜けな感じだ。ということで久しぶりに秋葉原に行って部品を調達することにした。
久しぶりのAVRの開発とケース工作にはまる(5/3/2016)
連休中の秋月は大混雑していた、RasPi3が店頭に平積みで山のように並んでいた。値段は前と同じ¥6200で、どこよりも安い。早まってよそで買ってしまったことを少し後悔する。
それはともかく秋月で見つけた3Aのリレーは前と同じ大きさで、余り小型化に寄与しない。諦めきれずに千石本店の2Fに行く。さすが千石だ。沢山のリレーがあった。値段は、秋月の4倍以上するが、スイッチング最大電流は2Aで最大通電電流3Aの国産オムロンのものが見つかった。
しかも、こちらの方が格段に小さい。これだけ小さくなれば、USBソケットを入れても前と同じケースに入るかもしれない。4倍といっても単価は¥400台だ。迷わず買い込んだ。リレーがこんなに高くても、この装置の部品代の総額は¥1000以下で押えられるはずだ。
ただ、本当にこれまでのケースに入るか心配なので、これまでの小さいもの(タカチSW-40)に加えて、これより少し大きく、今までのものより小さいSW-50というのも念のため買っておいた(¥120)。
帰ってきて部品合わせをしてみると、これが大正解だった。今度の装置はUSBのAタイプのジャックを入れることにしたのでSW-40はとても入らない。SW-40の1.5倍の大きさのこのSW-50がぴったりだった。
小さなケースの工作は久しぶりである。楽しい。アートワークを念入りにやる。この前のときは、しっかり誤配線をした。ピンとピンの間隔が少ししかないので間違いやすい。回路図は前と全く同じにする(ソフトをこの前の無印Raspi用と共用したいため)。
ケースの固定でまた遊ぶ。この前のものは2.6ミリの小さな固定ネジを4つも使っていたが、今度は裏蓋は単に蓋にするだけで、ケース上蓋に全てを実装することにした。
考えているだけでは、先に進まないので、基板を切りだして、実際にソケットやプッシュスイッチを仮止めして、ケースと現物合わせをしながら入るかどうか試してみる。対象が小さいので自由度が極度に制限されるが、これが楽しみの要因になっている。箱庭、盆栽と同じような気分である。
ケースに少しづつ穴をあけ、部品がうまく入るか何度も調整を重ねて先に進める。USBソケットが出る穴を少し大きめに広げると、ちょっと見栄えが悪くなるが、きれいに入ることが分かった。ケースはABS樹脂なので加工が容易なのが助かる。
配線は間違っていなかったがTiny13を2回も逆ざし、一個失う(5/5/2016)
ハードの実装は見通しがついた。次はソフトの方である。大分前から考えている(ソフト開発は紙と鉛筆さえあれば、いつどこでも出来る)。ターゲットはTiny13なので沢山ロジックは詰め込めないが、通電中の電流値をEEPROMに蓄積し、これが1/3や、1/2になったときshutdownと判定するロジックで良いはずだ。ただ、1KB以内に収めたい。Tiny85でも良いが少し勿体ない。
最終的に決まったロジックは以下の通りである。EEPROMは使う必要がなかった。まず、Raspiの消費電流をシステムが立ち上がった一定の時間の後から計測を始め、この平均値から一定量以下の電流値をシャットダウン時の電流とみなして、この値で待機する。
このロジックの根拠は、沢山のペリフェラルがあっても、シャットダウンのときとアクティブなときの間の電流差は一定という考え方に基づいている。比率でシャットダウン電流を推測するより汎用性があるはずだ。
擬似コードでは、簡単に「一定時間待ったあと電流の平均値をとる」と書いたが、実際のコーディングはどうしたら良いのだろう。 プログラムは考えたようには動かない、書いた通りにしか動かない。まあ、あまり深刻に考えてみても仕方がない。コーディングしてみよう。
書き始めると思ったより簡単に実現できた。もともとこのシステムは電源を入れた後、定期的(0.5秒毎)にADコンバーターを動かして電流値を測定している。この回数を記録しておいて、一定の期間の電流値をしまっておくだけである。それまでは、強制終了以外の電源断は行わない。途中で止めれば、最初からやり直すだけである。
さあ、出来た。考えたようにコンピューターは動いてくれるのか、ドキドキの瞬間である。
無印Raspiの2機とRaspi3で完動(5/7/2016)
始めは、慎重にセメント抵抗を負荷にしてテストを始める。おやあ、頼りのUARTが出ない。同じ配線なのに、おかしい、何か虫が知らせたので、すぐ電源を切り、部品を触る。アッチッチ、CPUがやけどしそうに熱い。これはいけない誤配線だ。
8ピンのCPUの配線を前回に続いて間違えるとは情けない。基板を裏返して最初から配線チェックをする。間違っていない。うーむ、どうしてだ。まさか、CPUを逆差ししているのでは、はい、逆になっていました
あの熱さでは、息が絶えているか心配だったが、幸い、Tiny13はけなげに生き返ってレスポンスを返し、ファームの書き込みも無事に終わった。祈る気持ちで再度電源ON。よーし、ボタンを押すと、SCKを使ったUARTからメッセージが出て、1秒ごとの電流値を表示し始めた。(実はこのあと実装でまた逆差しし、ひとつをお釈迦にしたことは秘密)。
秋月でついでに面白がって買ってあったUSBメーター(積算値つき)をつけて、本番のRaspi3に接続する。1分後から計測を始める。30秒の平均値を出し、それより200mA低い場合はshutdownとみなすロジックにした。USBメーターは0.27Aを示し、shutdown時は0.04Aなので、これでぴったりマシンの電源が切れた。
次は問題のSAMBAサーバーにしている無印Raspiのテストである。このRaspiにはハブ経由で2.5インチHDDがついている。HDDだけで0.2Aは常時流れる。最初作った電源制御装置は、この待機電流にそなえるため、コンパイルしなおして初期値を設定した。
新しい制御装置に切り替えて、つまりRaspi3の設定のままで、テストする。何事もなく立ち上がった。shutdownである。こいつは、GPIOピンを見てshutdownコマンドを送る機能がついているので、所定のスイッチを長押しする。LEDの点滅が激しくなり、shutdown処理に入った。
少し長い間、高負荷の電流が流れた後、「チッ」と小さな音がして、無事電源は切れた。よーし、それでは、もうひとつの無印Raspiはどうだ。こいつは今動かしていないが、ウェブカメラのサーバーになっている。
こいつも問題なく、スイッチひと押しで電源ON、shutdownコマンドで電源OFFが実現した。うーむ、今度は売り物になるかもしれないな。今までのものは機械にあわせてコンパイルしなおす手間が必要だったので、みんなに使ってもらうことを躊躇っていたのだが、これなら問題ない。
こちらにTiny13による電源制御装置2号機のソース一式をAtmelStudio7のフォルダーの形でzipにかためたものを置きます。回路図は前の1号機と全く同じで、ソフトは共用できます。
| 固定リンク
「AVR」カテゴリの記事
- ソフトI2Cはクロックストレッチまで手を出してあえなく沈没(2017.09.02)
- オシロのテストどころかソフト開発で大はまり(2017.07.26)
- 超音波方式の人感センサーI2C化と新しいオシロ(2017.06.29)
- motionの動体検知はRaspi3の電源が安定しない(2017.04.16)
- 赤外線学習リモコンはデータ再現で挫折したまま進まず(2016.07.21)
「電子工作」カテゴリの記事
- 生存証明2(2022.10.19)
- 生存証明(2022.01.23)
- パソコン連動テーブルタップの修理を諦めて自作(2021.02.16)
- 半年ぶりのブログ更新に漕ぎつけた(2019.09.19)
- 研究所活動は停滞したままでCCDカメラ顕微鏡導入など(2019.02.08)
「Raspberry」カテゴリの記事
- 脱線が止まらない。RaspiでPythonに熱中(2018.03.12)
- CNCマシン(2) 切削を始めるも、Raspi Zero Wへ思わぬ脱線(2018.02.21)
- RaspberryPi3の電源問題はOSの不具合だった(2017.06.12)
- RaspberryPi 3の電源事情好転せず。ESP32に手を出す(2017.05.19)
- motionの動体検知はRaspi3の電源が安定しない(2017.04.16)
コメント
RIONさん、コメントありがとうございました。
また、ソースを活用していただきありがとうございます。
平均値決定のロジック、こちらの方が正しいロジックに思えます。オリジナルはテストが不十分でした(たまたま動きましたが)。
投稿: がた老 | 2017年2月15日 (水) 14時03分
Raspiの自動電源装置の記事を参考にし,早速作成させていただきました.
旧バージョンのコードではうまく動いていたのですが,私の手持ちのRaspi3では平均値自動測定のオリジナルのコードでは電源遮断がうまくいきませんでした.
平均値決定の条件判断を
active_crnt = (active_crnt > STANDBY)? active_crnt : STANDBY;
とし,STANDBYを50に設定することでうまく動作しました.
微妙な部品の違いやRaspiの個体差,環境の違いが影響しているのかもしれません.
本来であれば電流値を測定すべきかもしれませんが,まずは御礼とフィードバックを兼ねてコメントさせていただきます.
投稿: RION | 2017年2月14日 (火) 22時02分