reComputer R1000 UPSを動かしてみた

Seeed K.K.の松岡です。

reComputer R1000のオプション製品「SuperCAP UPS LTC3350 Module for reComputer R1000」を動かしてみました。

SuperCAP UPS LTC3350 Module for reComputer R1000

reComputer R1000のオプション製品に「SuperCAP UPS LTC3350 Module for reComputer R1000」(以降、SuperCAP UPSと書きます)が出ました。

SuperCAP UPSは、reComputer R1000専用の無停電電源装置(UPS)です。reComputer R1000が電源電圧低下、短時間停電しても一定時間動かし続けることが出来るようになります。バックアップ電源に7[F]のスーパーキャパシタを4個使っています。

停電時に動かし続ける時間は、無負荷時に37秒、CPU高負荷時に18秒です。負荷や接続している機器によっては、もっと短くなります。

wikiのreComputer R1000 Getting Started - UPS:

加えて、停電したことを検知する機能があります。これにスクリプトを仕込んでおけば、電源喪失前にOSを安全にシャットダウンさせることができます。

reComputer R1000にSuperCAP UPSを取付

SuperCAP UPSはreComputer R1000のケースに完全に収まる形で取り付けることから、reComputer R1000を分解しなければいけません。wikiのDisassembly Guideを参考にバラバラにします。

reComputer R1000のメイン基板に、SuperCAP UPSに付属のスペーサー2個をネジ止めして、

SuperCAP UPSを載せてネジ止めします。

さすが専用品。メイン基板とヒートシンクの間に上手く収まっていますね。

電源バックアップ時間

無負荷とCPU高負荷(stress -c 4 -v)のときに元の電源をブチ切りして、どれくらい稼働し続けるか確認しました。 (充電不足にならないよう、電源を入れてから5分以上待ってブチ切り。)

  • 無負荷

    • 1回目 ... 44秒
    • 2回目 ... 43秒
    • 3回目 ... 43秒
  • CPU高負荷

    • 1回目 ... 19秒
    • 2回目 ... 18秒
    • 3回目 ... 19秒

CPU高負荷でも20秒弱、稼働していました。

充電時間

電源投入後、どれくらいの電流で、フル充電でどれくらい時間がかかるのか気になったので確認しました。 (電源電圧はDC12V。)

充電は+0.4A程度(DC12V時)で、35秒でフル充電しているようでした。

自動シャットダウン

停電したときに自動シャットダウンさせてみましょう。

config.txtにdtoverlayを1行追加する方法と、GPIOを監視するスクリプトを実行しておく方法があります。

dtoverlayで自動シャットダウン

/boot/firmware/config.txtに次の1行追加して再起動するだけです。とっても簡単。

dtoverlay=gpio-shutdown, gpio_pin=25,active_low=1

ごく短い瞬停のときにシャットダウンさせたくない場合は、debounceオプションを指定して反応を鈍くしましょう。

dtoverlay=gpio-shutdown, gpio_pin=25,active_low=1,debounce=5000

スクリプトで自動シャットダウン

停電したときに入力されるGPIO信号をスクリプトで検知すると、より柔軟に制御できます。

例えば、次のPythonスクリプトを動かしておくと、停電したときにsyncコマンドを2回実行してシャットダウンします。 必要に応じてデーモン化します。

#!/usr/bin/env python3

import RPi.GPIO as GPIO
import time
import os


def poweroff_detected(pin):
  print('...External power off...')

  print('...Data saving...')
  os.system('sync')
  time.sleep(3)
  os.system('sync')
  time.sleep(5)

  os.system('sudo shutdown -h now')


GPIO.setmode(GPIO.BCM)
GPIO.setup(25, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.add_event_detect(25, GPIO.FALLING, callback=poweroff_detected, bouncetime=500) 
while True:
  time.sleep(1)

上記Pythonスクリプトを実行したときに「RPi.GPIO RuntimeError: Failed to add edge detection」エラーが発生した場合は、下記コマンドでRPi.GPIOパッケージを変更してください。

sudo apt remove python3-rpi.gpio
sudo apt install python3-rpi-lgpio

参考リンク

変更履歴

日付 変更者 変更内容
2024/8/2 松岡 作成