
こちらのテスト用にRaspbian Buster ( Raspberry Pi OS )を初めて使ってみたところ、ログに「 Under-voltage detected! 」が頻発していてびっくり。給電には気を遣っていただけに、これはどういうことなのか、調査してみました。電力不足を検知するシステムは、HDMIモニタを繋いで運用していると画面右上に出る稲妻アイコンで以前よりお馴染みなのですが、ログに記録すると言う仕組みはBusterになってからのようです。
この時、基板上の赤いLEDが点いたり消えたり、もしくはずっと消えていたりするのですが、これが電圧低下のサインだと知り、改めてその定義を再確認しました。
Raspberry Piで特にWiFi周りのシステムが不安定になる原因の多くが不安定な電源にあることは、過去の経験から身を以って痛感しているので、日頃使う電源をANKERの高出力品(PDとはいかないまでも)としたり、ケーブルも比較的信頼性の高そうな物を出来るだけ短い長さで使ったりしているのですが、以下のように頻発し、赤LEDも点滅状態に。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
raspberrypi kernel: [ 22.477140] Voltage normalised (0x00000000) raspberrypi kernel: [ 28.717108] Under-voltage detected! (0x00050005) raspberrypi kernel: [ 32.877118] Voltage normalised (0x00000000) raspberrypi kernel: [ 68.237119] Under-voltage detected! (0x00050005) raspberrypi kernel: [ 1243.435249] Voltage normalised (0x00000000) raspberrypi kernel: [ 1245.515251] Under-voltage detected! (0x00050005) raspberrypi kernel: [ 1312.075343] Voltage normalised (0x00000000) raspberrypi kernel: [ 1314.155349] Under-voltage detected! (0x00050005) raspberrypi kernel: [ 1349.515391] Voltage normalised (0x00000000) raspberrypi kernel: [ 1353.675403] Under-voltage detected! (0x00050005) raspberrypi kernel: [ 1559.595528] Voltage normalised (0x00000000) raspberrypi kernel: [ 1561.675537] Under-voltage detected! (0x00050005) raspberrypi kernel: [ 1651.115517] Voltage normalised (0x00000000) raspberrypi kernel: [ 1657.355525] Under-voltage detected! (0x00050005) raspberrypi kernel: [ 1680.235495] Voltage normalised (0x00000000) raspberrypi kernel: [ 1682.315530] Under-voltage detected! (0x00050005) raspberrypi kernel: [ 1881.995474] Voltage normalised (0x00000000) raspberrypi kernel: [ 1886.155478] Under-voltage detected! (0x00050005) |
初代Raspberry Piの頃、電源が弱くてぶら下げるUSB機器によっては不安定になる傾向に有り、対策としてキャパシタを増設したことがありました。そこで手持ちの部品でこんなキャパシタ群をmicroUSB前段に噛ませてみたものの、あまり効果は無し。
ここで使っていたケーブルが断線したので、同じ商品の新品と交換。すると、あれ。起動が済んでシステムが安定すると、電力も安定し、赤LEDも基本的に点灯のまま。時折消えますがすぐまた点灯。
1 2 3 4 5 6 |
raspberrypi kernel: [ 8.077254] Under-voltage detected! (0x00050005) raspberrypi kernel: [ 26.797114] Voltage normalised (0x00000000) raspberrypi kernel: [ 39.277140] Under-voltage detected! (0x00050005) raspberrypi kernel: [ 43.437133] Voltage normalised (0x00000000) raspberrypi kernel: [ 47.597127] Under-voltage detected! (0x00050005) raspberrypi kernel: [ 53.837113] Voltage normalised (0x00000000) |
ここでどうもmicroUSBへの給電系に原因有り、と考えます。そして、比較的大きな直流電力を流せる電線でUSBケーブルを作りました。ちょっと被覆が硬いのでコネクタへ負担が掛かり、別の問題が心配ですが容量は抜群です。
1 2 3 4 |
raspberrypi kernel: [ 8.077206] Under-voltage detected! (0x00050005) raspberrypi kernel: [ 22.637110] Voltage normalised (0x00000000) raspberrypi kernel: [ 60.077133] Under-voltage detected! (0x00050005) raspberrypi kernel: [ 64.237111] Voltage normalised (0x00000000) |
起動時の電圧低下も少なくなり、それ以上に赤LEDも明らかに安定点灯。ただやはり硬いケーブルなので、microUSB端子に接触不良が発生しやすく、実際に長時間放置すると電圧低下(コネクタ接触不良)を生じていました。
もうここまで来ると、もはやmicroUSBのか細い接点に数Aの電力を託すことが出来ない、というのが正直な感想。GPIOの5Vに直接注入してみるのはどうでしょう。まずは手軽にブレッドボードに使うJPワイヤを使って給電してみましたが、全く論外。起動時からずっと電圧低下のまま、もちろん赤LEDも消灯のまま。
1 |
raspberrypi kernel: [ 7.997547] Under-voltage detected! (0x00050005) |
そこで20AWGワイヤで繋いでみました。microUSBの時と異なり、ケーブルをいくらこじっても電圧低下を生じることはありません。長期安定運用の信頼性向上に、GPIO給電は有効です。
1 2 3 4 5 6 |
raspberrypi kernel: [ 8.157380] Under-voltage detected! (0x00050005) raspberrypi kernel: [ 22.717120] Voltage normalised (0x00000000) raspberrypi kernel: [ 39.357110] Under-voltage detected! (0x00050005) raspberrypi kernel: [ 58.077094] Voltage normalised (0x00000000) raspberrypi kernel: [ 72.636688] Under-voltage detected! (0x00050005) raspberrypi kernel: [ 76.795705] Voltage normalised (0x00000000) |
ただ、Raspberry Piの電源付近の回路図を見ると、microUSB端子から入った電力は、保護回路を経てGPIOを含む機器内部へ渡されるので、もしGPIOから直接給電する場合は、同等の保護回路を自作する必要があるでしょう(過電流防止のリセッタブルヒューズや、逆接防止のショットッキーバリアダイオード)。Raspberry Piに搭載されている保護回路は、公式サイトに公開されているSchematicsから確認することが出来ることから、次回はGPIO給電と保護回路の自作に取り組みたいと思います。