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
И сработывает нормальное выключение как с кнопки!
Добавить комментарий