UPS-Plus教程

【产品简介】

[] UPS Plus是新一代的UPS电源管理模块,支持OTA固件升级并支持板载RTC时钟。

[] 板上有两个INA219芯片,可以检测电池电压以及从UPS Plus到Raspberry Pi的电压输出。

[] 并且支持来电自动启动功能及电池温度检测,支持树莓派端Python编程获取电流电压信息,方便用户DIY自己的不间断电源,同时支持USB Type-C快速充电及MicroUSB充电口充电。

[]适用于Raspberry Pi A/A+/B/B+/2B/3B/3B+/4B

【产品特点】

[] 易于安装

[] 增强的电源管理

[] 远程OTA固件升级

[] 可编程BACK-TO-AC自动加电

[] 可编程采样周期

[] I2C通讯

[] 独立RTC时钟

[] 支持堆叠式电池设计可扩展电池容量

注意:堆叠电源板需要为特殊配件。不能支持None官方配件。

【规格特性】

[] Raspberry Pi电源端口的电流/电压监控。

[] 电池端子电流/电压监控,支持双向充电和放电监控。

[] 功率估算

[] 注意:必须完成至少一个完整的充电和放电周期!

[] 支持FCP,AFC,SFCP快速充电协议。

[] 支持BC1.2充电协议。

[] 电池温度监控


注意:强制温度保护功能无法关闭,保护阈值:65度


[] 可编程电源电压检测器(PVD)功能,默认值:3.6V

[] 来电自动启动功能。

[] 掉电记忆功能。

[] 可编程关机/强制重启。

[] 运行时间统计

[] 静电防护。

[] 线性补偿范围放电容量:5V 4.5A。

[] 非线性补偿范围放电容量:5V 8A。

[] 充电容量4.5V 5A / 5V 2.5A / 9V 2A / 12V 1.5A。

[] 使用I2C通信而不占用其他端口。

[] 支持4.2V 4.35V 4.4V 4.5V锂电池


注意:不能混用不同类型的电池!


【资源简介】


【寄存器表】

USB Plus V5.0寄存器映射表

寄存器为0x17时为: OTA固件升级模式



寄存器为0x18时为: OTA固件升级模式

Address

Function

0x01 - 0x10

加密缓冲区

0x11 - 0xEF

[保留]

0xF0 - 0xFB

序列号

0xFC - 0xFF

工厂测试


【产品外观】


【应用场景】


【PCB图纸】


【功能区域显示】
功能细节:


【LED 灯状态定义】
放电状态:


充电状态:



【组装方式

【如何使用】
一般设置:
1. 从 https://www.raspberrypi.org/software/operating-systems/ 下载最新的 Raspbian 操作系统镜像。

2. 解压缩镜像文件,并使用 Etcher 映像工具将其刻录到 MicroSD 卡(TF 卡)上。https://www.balena.io/etcher/

3. 按照安装方法组装 Raspberry Pi 和 UPS Plus。

4. 启动后确保 Raspberry Pi 能够访问互联网。

5. 使用 "raspi-config" 工具启用 I2C 功能。导航到 "界面选项",选择 "I2C" 并按照说明启用它。

注意:在 Raspberry Pi 上启用 I2C 功能非常重要,如果跳过此步骤,Raspberry Pi 将无法检测到 UPSPLUS 模块。

sudo raspi-config

6. 安装 smbus2 库。

pip install smbus2

7. 从 GitHub 下载存储库并进入包含演示代码的文件夹。

cd ~
git clone https://github.com/geeekpi/upsplus.git
cd upsplus/

【自动关机保护】
[] 如果您想使用一个脚本来安装upsplus的演示代码,请按照以下步骤进行。
[] 通过按下 "Ctrl+ALT+T" 打开终端,或者只需单击任务栏上的终端图标。

curl -Lso- https://git.io/JLygb | bash

或者

curl -Lso- https://raw.githubusercontent.com/geeekpi/upsplus/main/install.sh | bash

[] 在电池电量低时,它将自动关闭并关闭UPS,当交流电供电时将重新启动。

【如何通过OTA更新UPS固件】
[] 进入OTA固件升级模式:

方法1
注意:在升级过程中不要关闭电源或断开网络。如果升级失败,UPS Pro 将无法正常工作。

[] 关机树莓派。
[] 切断外部充电电源(MicroUSB和USB-C)。
[] 取出所有电池。
[] 按住UPS Pro的开关键,将电池插入电池仓。
此时,设备将被强制进入OTA模式。
此时,开关按钮的功能将不再可用。

树莓派将运行,请在系统终端中执行以下Python脚本以完成升级。

从GitHub下载Python脚本:

cd ~
git clone https://github.com/geeekpi/upsplus.git
cd ~/upsplus
python3 OTA_firmware_upgrade.py

第一次运行时,可能会提示设备未注册。如果是合法设备,请等待几秒然后重试。
[] 升级后UPS Pro将关闭,请断开电源,从UPS Pro中取出电池。然后将电池重新插入UPS Pro,再次连接电源并按电源开关启动。

方法2
打开终端并输入以下命令:
i2cset -y 1 0x17 50 127 b

1. 关机树莓派并取出所有电池和电源供应。
2. 将电池重新插入电池槽中。
3. 在终端中执行 OTA_firmware_upgrade.py Python 脚本。
4. 升级后,UPS Pro 将关闭。请断开电源,从 UPS Pro 中取出电池。然后将电池重新插入 UPS Pro,再次连接电源,并按电源开关打开。

【如何收集数据】
数据收集:
[] 数据收集将仅通过UPS在设备运行期间收集关于异常电压变化和电池充电和放电状态的信息,以提供更好的售后服务,并不会收集您的私人信息。
请放心,我们销售的每个UPS都将具有唯一的序列号,以便我们可以提供电池质量分析和反馈。
它通过一个Python脚本将您的UPS Pro操作状态信息提交到我们提供的服务器。

下载存储库并执行以下命令:
cd ~
curl -Lso- https://git.io/JLygb | bash

当遇到电池电量低时,UPS会自动关闭并断开电源,当交流电源恢复时,它将重新启动。

【如何设置RTC】
使用叠加(Overlays):
[] 叠加是使用 "dtoverlay" 在 config.txt 中设置的。
以I2C实时时钟驱动程序为例。在使用设备树之前,可以通过将包含设备标识符和I2C地址的特殊字符串写入/sys/class/i2c-adapter中的文件来加载这些驱动程序,首先加载I2C接口和RTC设备的驱动程序,类似于以下内容:
注意:sudo su 表示使用 root 用户来操作系统文件,否则可能会遇到 "Permission denied" 错误。


sudo modprobe i2c-bcm2835
sudo modprobe rtc-ds1307
sudo su
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device

[] 启用设备树(DT)后,这将成为 config.txt 中的一行:
通过终端使用 vim.tiny 工具或 nano 编辑 /boot/config.txt 文件:sudo vim.tiny /boot/config.txt
然后添加以下参数:

dtoverlay=i2c-rtc,ds1307

[] 这将加载文件 /boot/overlays/i2c-rtc.dtbo,并在树莓派的设备树中添加一个描述DS1307 I2C设备的 "节点"。默认情况下,它使用地址0x68,但可以使用额外的DT参数进行修改:

dtoverlay=i2c-rtc,ds1307,addr=0x68

[] 参数通常具有默认值,尽管某些参数是强制性的。查看下面的叠加列表以了解参数及其默认值的描述。

【对于树莓派4B】
在这里,我们假设您已经将Raspbian映像刻录到TF卡中并连接到您的PC,已登录。打开终端并使用您喜欢的编辑器,如vim.tiny或nano,修改/boot/config.txt文件,添加以下参数,如下图所示:


您可以阅读/boot/overlay/README文件,并找到如何为ds1307 I2C实时时钟设备添加支持的信息。



请确保/boot/config.txt文件包括以下两个参数:
dtoverlay=i2c-rtc,ds1307 
dtparam=i2c_arm=on

之后,请确保你已经禁用了“假硬件时钟”(fake hwclock),因为它会与“真正的硬件时钟”发生冲突:
sudo apt-get -y remove fake-hwclock
sudo update-rc.d -f fake-hwclock remove

现在假的硬件时钟关闭了,你可以启动原始的'硬件时钟'脚本。
使用nano或vim编辑器编辑脚本文件/lib/udev/hwclock-set,并注释掉以下三行:
if [ -e /run/systemd/system ] ; then
 exit 0
fi

最终的结果如上。

保存更改并重新启动您的树莓派。

【如何测试实时时钟】
[] 打开终端并输入以下命令:
sudo hwclock -w 

sudo hwclock 

[] 结果将类似于:
pi@upstest:~ $ sudo hwclock -w
pi@upstest:~ $ sudo hwclock
2021-05-12 11:41:23.601270+08:00

【对于树莓派3B】
我们假设您已经将Raspbian映像烧录到TF卡中,然后将TF卡插入树莓派并连接到您的PC,登录系统。接下来,打开终端并使用您喜欢的文本编辑器(如vim.tiny或nano)来修改/boot/config.txt文件,添加以下参数。请注意,以下是一个示例,你可以根据需要进行自定义:
你可以阅读/boot/overlay/README文件,找到添加对DS1307 I2C实时时钟设备支持的信息。
以下是根据提供的信息在/boot/config.txt文件中添加的参数:
Name:   i2c-rtc
Info:   Adds support for a number of I2C Real Time Clock devices
Load:   dtoverlay=i2c-rtc,<param>=<val>
Params: ds1307                  Select the DS1307 device

请确保/boot/config.txt文件包含以下三个参数:
device_tree=bcm2710-rpi-3-b.dtb
dtoverlay=i2c-rtc,ds1307
dtparam=i2c_arm=on

接下来,请确保已经禁用了“fake hwclock”,因为它会干扰“真实”的硬件时钟。您可以使用以下命令来禁用它:

sudo apt-get -y remove fake-hwclock
sudo update-rc.d -f fake-hwclock remove


禁用了"fake-hwclock"后,您可以启动原始的硬件时钟脚本。您需要编辑位于/lib/udev/hwclock-set路径下的脚本文件,并将其中的三行代码进行注释处理。您可以使用nano或vim文本编辑器来编辑此文件。

下面是如何使用nano编辑器来注释掉这三行代码的步骤:

if [ -e /run/systemd/system ] ; then
 exit 0
fi

最终结果如下:

保存对文件的更改并重新启动您的树莓派(RPi)


如果您想要更改采样间隔,您可以使用以下Python示例代码进行调整。请注意,更改SAMPLE_TIME的数值将调整采样周期,单位为分钟,范围从2到60分钟。如果充电器的质量不好,您需要增加采样周期,例如调整为3~5分钟。如果电池的质量不好,您需要减小采样周期,例如1~2分钟。

以下是示例代码:

import smbus

DEVICE_BUS = 1
DEVICE_ADDR = 0x17
SAMPLE_TIME = 2  

bus = smbus.SMBus(DEVICE_BUS)

aReceiveBuf = []
aReceiveBuf.append(0x00)  

bus.write_byte_data(DEVICE_ADDR, 21,SAMPLE_TIME & 0xFF)
bus.write_byte_data(DEVICE_ADDR, 22,(SAMPLE_TIME >> 8)& 0xFF)

print("Setting Sampling Period to: %d Min" % SAMPLE_TIME)


为了保存示例代码到文件并执行它,您可以执行以下步骤:
python3 ups_change_sample_period.py

【如何检测电池是否已经耗尽】
在执行命令“curl-Lso-https://raw.githubusercontent.com/geeekpi/upsplus/main/install.sh|bash”,如下图所示:

通过以下命令执行“upsPlus.py”脚本2-3次,以确定电池是否持续放电,如果充电量小于放电量,电池将很快低于设置的关闭阈值并关闭。
此时,您需要更换电池,或更改采样周期,或更换高质量的快速充电器插头

python3/home/pi/bin/upsPlus.py

例如:


如图所示的电池:电池电流(放电)速率:1553.902 mA,但最后的信息是:当前通过Micro USB端口充电。插入了充电端口,但显示电池放电,这意味着电池坏了。


【如何手动设置回ac功能】
登录Raspberry Pi并打开终端,键入以下命令:

i2cset-y 1 0x17 25 1

通过读取寄存器值检查命令是否启用了功能:

i2cget-y 1 0x17 25

【如何手动设置关机倒计时功能】
登录Raspberry Pi并打开终端,键入以下命令:

i2cset-y 1 0x17 24 20

PS:20表示倒计时是20秒,你可以换成另一个整数。

通过读取寄存器值检查命令是否启用了功能:
i2cget-y 1 0x17 25

【如何自我诊断UPS PLUS】
请在浏览器中访问此URL:[https://api.52pi.com/]

用您的Deivce UID(可以从/home/pi/bin/upsPlus_iot.py脚本获得)填充空白,打开一个终端并键入:

python3/home/pi/bin/upsPlus_iot.py



将UID0、UID1、UID2复制到浏览器中,然后按页面上的“诊断”按钮:


然后你会在页面上得到测试结果和建议。


粉红色意味着它是关键信息,蓝色意味着建议。

【参数冻结问题】
根据我们的跟踪测试,大约0.8%的用户在一段时间后,读取UPS参数后发现该值不再变化,原因很复杂,而且用户数量很少,我们正在努力解决这个问题,如果您遇到这个问题,请尝试完全重新安装电池、电源和树莓派,并再次观察,通常问题已经解决,如果仍有问题,请与我们联系。

【电池记录器】
UPS Plus电池记录器:[https://github.com/Nordln/upsplusv5-battery-logger.git]

【发货清单】
[] 1个用于树莓派的UPS Plus
[] 4 x M2.5铜柱
[] 4 x M2.5螺钉
[] 4 x M2.5长铜棒
[] 4 x M2.5螺母
[] 1 x亚克力防护罩
[] 1 x说明


【常见问题】
Q: 为什么我的UPS没用,刚放了十几天,电池就没电了

A: 这是因为默认情况下,电池本身会缓慢放电。如果将电池插入UPS,则UPS无法完全关闭,因此它将继续放电。当UPS长时间不使用时,不要将电池放入电池槽中。

Q: 如何设置电池容量,满电压,低电压?

A: 它只影响充电方法和充电水平、保护阈值的计算,不会改变实际的电池参数。更多信息请参考:[https://github.com/geeekpi/upsplus/issues/80]

Q: 为什么一旦我把电源插入充电端口,它就会打开我的树莓派?

A: 当树莓派的BACK-TO-AC功能打开时,当外部电源连接到充电端口时,树莓派将自动激活。此设置适用于一些将树莓派用作服务器场景的应用程序,因为外部电源在供电后,UPS检测充电状态并执行自动启动操作,以便在一些将树莓派放置在机房的场景中可以轻松启动树莓派,无需按下按钮即可启动UPS,如果您想要使用BACK-to-AC,也可以关闭此功能。关闭此功能后,每次启动时都需要再次按下电源按钮。

Q: 为什么我的UPS突然关闭,而我却无法打开它?

A: 请使用符合QC协议的电源,并尝试更换质量更好的电池。我们建议您在UPS需要7x24提供服务时连接QC电源。

Q: 为什么电池灯有时会熄灭,过一段时间就会亮起来?

A: 这是因为电源芯片进行电池重新采样,目的是在采样过程中劣质电池的数据不准确。

Q: 为什么每隔一段时间就会断电?

A: 请检查电池充电电流、数据放电方向或充电方向。如果负载太大,充电可能不够,这将导致此问题。

Q: 我应该使用哪种壁式充电器?

A: 如果负载正常,建议使用普通5V@2A充电头。如果您需要携带稍高的负载,建议使用快速充电电源。我们支持FCP、AFC、SFCP协议快速充电电源。

Q: 我可以直接将9V和12V输入到USB端口吗?

A: 不可以,如果必须这样做,则必须卸下DP、DM和其他相关检测引脚,并确保电源稳定。

Q: 我听到啸声,这是为什么?

A: 由于有空载保护机制,安装负载后啸声将消失。

Q: 使用固件v.4,当AC电源在关机倒计时期间重新打开时,我意识到树莓派的5V电源在倒计时结束时没有关闭。因此,在操作系统关闭后,树莓派将永远不会自动重新启动。

IMHO以下方法会更好:一旦关机倒计时开始,并且我们设置了Back To AC Auto Power UP(返回AC自动电源上升)标志,那么:关机顺序应该进行到结束,关闭5V电源一段时间(可能几秒钟),而不考虑AC电源。当交流电源恢复时,将5V重新接通。除此之外,我对这个产品很满意。还有一件事:如果能为新的固件版本和发布说明提供一些警告,那就太好了。

A: 请参考此URL:https://github.com/geeekpi/upsplus/issues/7