Товарищ, добрый день, зашита аккумулятора стандартная на микросхеме dw01a, взаимодействие по i2c обеспечивается самой микросхемой ip5306. Разработка наша. 3.3v даёт ldo. Товарищ, там всегда по умолчанию есть 5в. Стоит тактирование микросхемы, 3.3в вообще не отключаются и не зависят от 5в. Конечно. Пишешь в яндексе "CG_Charger_IP datasheet" - ведет на наш GIT с даташитом.
Главная особенность микросхем IP5306 в том, что она по умолчанию отключается при очень низком потреблении тока (обычно ниже 45 мА в течение 32 секунд), чтобы экономить заряд аккумулятора. Кнопка нужна, чтобы «разбудить» плату и подать питание на подключенное устройство, например, на микроконтроллер ESP32 или Arduino.
Интересно, что в I2C-версии этой микросхемы, кнопка является не только физическим элементом, но и программно доступным объектом. Микроконтроллер по шине I2C может не только имитировать её нажатие, но и считывать её реальное состояние, определяя, было ли короткое, длинное или двойное нажатие. Это позволяет использовать одну кнопку для управления сразу несколькими функциями вашего проекта.
Я по-простому юзаю, без библиотек, ИИ код дал #ifndef POWER_MANAGER_H
#define POWER_MANAGER_H
#include
#include
// Адреса IP5306
#define IP5306_ADDR_1 0x75 // M5Stack адрес
#define IP5306_ADDR_2 0xEA // Заводской адрес по умолчанию
// Регистры IP5306
#define IP5306_REG_SYS_CTL0 0x00
#define IP5306_REG_SYS_CTL1 0x01
#define IP5306_REG_SYS_CTL2 0x02
#define IP5306_REG_CHG_CTL0 0x20
#define IP5306_REG_CHG_CTL1 0x21
#define IP5306_REG_READ0 0x70
#define IP5306_REG_READ1 0x71
#define IP5306_REG_READ3 0x78
// Структура с данными питания
typedef struct {
bool usb_connected; // USB подключен
bool is_charging; // Идёт зарядка
bool battery_full; // Аккумулятор заряжен полностью
bool low_power_off; // Режим отключения при малой нагрузке
int battery_level; // Уровень заряда (0, 25, 50, 75, 100)
float battery_voltage; // Напряжение аккумулятора (если доступно)
} power_status_t;