ITСooky

IT-рецепты съедобные и не очень!

[не покупайте это] X725 Power Management Board так себе шильд под аккумуляторы 18650 для Raspberry Pi!

дата 26.08.2020

X725 Power Management Board плата под два аккумулятора 18650 для Raspberry Pi в целом она работает и не работает!

Что не работает
— полностью не работают функция которые можно актировать джамперами — защита батареи от переразряда, включение или не включение при возвращении питания
— не работает зарядка при включенной малинике если напряжение акуумуляторов уже около 3V (если например 3.6V то заряжается)
— Постоянно моргает огонек CHG, то есть постоянно разряжается и заряжается аккумулятор, даже если питание подключено — по моему этого не должно быть
— Питание включается от чего угодно — на выключенной вынимаю Ethernet кабель из Raspberry Pi — x725 включается!

Что работает
— Если установить скрипты работает кнопка выключения
— Работает передача значения напряжения
— 99% успешных переходов на питание от батареи

Не тестировал
— Wake on LAN (но если на выключенной системе подключить кабель (подключенный к switch’у) к Ethernet порту на x725 то он включает все, хотя не должен по настройкам джамперов)
— Сетевая карта 10/100 если подключить шильд еще и по USB к малинке.


Разработчики конечно знают об этих недостатках и уже выпустили внешне очень похожий на x725 но под другим названием X728 Power Mgt + UPS Board на джамперах повешены другие функции… может даже работают…

Как можно использовать
У меня пару раз с чего то перезагружалась малинка когда включал и отключал кабель питание, батареи были при этом полностью заряжены. Но в качестве резервного питания на время коротких(2 часа например) отключений электричества вполне можно использовать x725. При этом надо быть готовым что в выключенном состоянии он может включиться сам от любого действия с кабелями и разъемами.

Блок питания использую вот такой — подключаю к круглому разъему на x725

Аккумулятор 18650 без защиты SONY 3000mah 18650 VTC6 написано на коробке, на них слова SONY нет, есть MURATA INR19/66

На Raspberry Pi надо включить I2C все делают через меню, я сделаю через консоль.

Надо отредактировать файл
sudo vi /boot/config.txt
раскоментить строки

dtparam=i2c_arm=on
dtparam=i2s=on

А так же в файл
sudo vi /etc/modules
добавить

i2c-dev
i2c-bcm2835

И устанавливаем
sudo apt-get install -y python-smbus i2c-tools

Перезагружаемся смотрим
lsmod | grep i2c_
все есть

i2c_bcm2835            16384  0
i2c_dev                16384  0

что у нас подключено
sudo i2cdetect -y 1
что-то одно подключено и это он x725

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- 36 -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- -- 

Теперь по инструкциям производителя www.suptronics.com/miniPCkits/x725-software.html ставим

wget https://raw.githubusercontent.com/suptronics/x750_x725-script/master/x750.sh
sudo bash x750.sh
printf "%s\n" "alias x750off='sudo x750shutdown.sh'" >> ~/.bashrc
sudo reboot

Он устанавливает скрипты
sudo python /home/pi/x750ups.py
этот показывает напряжение и процент зарядки, результат выводит постоянно в консоль

******************
Voltage: 4.22V
Battery:  104%
******************
******************
Voltage: 4.22V
Battery:  104%
******************

А это команда выключает малинку и x725
x750off
из консоли срабатывает из скриптов нет, но можно вот так выключить
sudo /usr/local/bin/x750shutdown.sh

мне нужно просто один раз получает значение напряжения, так что я убираю все лишнее создаю срипт
sudo vi x725bv.py

с кодом

#!/usr/bin/env python
import struct
import smbus
import sys
import time


def readVoltage(bus):

     address = 0x36
     read = bus.read_word_data(address, 2)
     swapped = struct.unpack("<H", struct.pack(">H", read))[0]
     voltage = swapped * 1.25 /1000/16
     return voltage



bus = smbus.SMBus(1) # 0 = /dev/i2c-0 (port I2C0), 1 = /dev/i2c-1 (port I2C1)

while True:
 print ("{0}".format(readVoltage(bus))) 
 exit()

Питон оказался таким смешным — в других языках ломаешь голову как сделать цикл — тут как запустить только один раз. И пробел в питоне не просто пробел!

И баш срикпт, который будет записывать значения напряжения и выключать все когда напряжение батарей станет меньше 3,5 это около двух часов работы малинки под нагрузкой
vi /home/pi/smqqt.sh
с кодом

#!/bin/bash
a=`sudo python /home/pi/x725bv.py`
date=`/bin/date +"%Y.%m.%d %H:%M:%S"`
/bin/echo "$date;$a" >> /home/pi/voltage.log

compare=`echo "$a>3.5" | bc`
if [ $compare -eq 0 ]
then
sudo /usr/local/bin/x750shutdown.sh
fi

Чтобы он запускался сам раз в минуту добавляем в
sudo crontab -e
строку

* * * * * sh /home/pi/smqqt.sh


Время работы от аккумулятора под нагрузкой

Которую создаю командой
stress -c 6

За 4 часа 20 минут разрядился до 3V с 4.22V — чтобы зарядить батарии пришлось выключить Raspberry Pi, при включенной -батареи не заряжались…. при 3,6V нормально заряжаются при включенной Raspberry Pi!

UPD: Программное отключение Raspberry Pi и X725 Power Management Board
Проблема, с X725 Power Management Board идет скрипт который отключает её саму, но не Raspberry Pi!

После устноавки скриптом от производителя он появляется тут /usr/local/bin/x750shutdown.sh он посылает 1 на 18 пин и X725 выключается, обрывая питание Raspberry Pi, что не очень хорошо… что очень плохо!

Второй скрипт /etc/x750pwr.sh слушает нажатие кнопки на пин 4, и посылает на пин 17 сигнал 1 — так что когда кнопка нажимается достаточно долго, запускает отключение Raspberry Pi, а x725 отключается когда пропадает сигнал на 17 что значит что малинка выключалась — это супер правильное выключение! Проблема в том что нельзя послать на пин 4 сигнал 1 с другого пина малинки чтобы запустить это отключение программно(малинка отключает на X725 нет)… надо полностью как-то нажать кнопку, это можно сделать транзистором!

Беру транзистор 2N3904 подсоединяю по схеме

В транзисторах путаюсь так что смотрите как на картинке. Красный провод от транзистора подпаиваю к красному на кнопке, у самой кнопки а не как на схеме.
На малинке транзистор подключен к пин 27 и земле, на схеме эти пины перекинуты на X725.

И надо нажимать кнопку всего от 3 до 6 секунд, если нажимать 8 должно жестко выключится. Поэтому делаем скрипт
sudo vi bshut.sh
с кодом

#!/bin/bash
shdown=27
echo "$shdown" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio$shdown/direction
echo "1" > /sys/class/gpio/gpio$shdown/value
shtdownstart=$(date +%s%N | cut -b1-13)
while true; do
if [ $(($(date +%s%N | cut -b1-13)-$shtdownstart)) -gt 600 ]; then
exit
fi
done

Запускаем
sudo bash ./bshut.sh

И сработывает нормальное выключение как с кнопки!


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *