![](https://habrastorage.org/webt/im/yx/qs/imyxqslm2ovkfwehj2uztiwfjgu.jpeg)
Сегодня на нашем операционном столе очередное гениальное изобретение компании ClimateGuard — девайс под не менее гениальным названием CG Charger BQ. Расшифровке того, что же всё-таки скрывается под этими загадочными буквами BQ (что означают буквы CG постоянные читатели моего блога уже знают) и посвящена эта статья.
Перед нами умная зарядка для аккумулятора и модуль питания для различных DIY устройств с возможностью микроконтроллерного управления по интерфейсу I2C. Это формальное определение назначения этого модуля, но после ознакомления с даташитом BQ25895 и экспериментов с самим модулем я могу сказать, что это невероятно продвинутая микросхема управления питанием, которая при соответствующем подходе сможет удовлетворить любые ваши прихоти по обеспечению питанием ваших гаджетов.
Правда для осмысленной работы с BQ25895 вам понадобятся пара высших образований в Computer Science (смайл) и… эта статья...
❯ Немного теории
Перед тем, как переходить к знакомству с самим модулем CG Charger BQ, нужно сказать несколько слов о сердце этого модуля — микросхеме BQ25895. Как я уже заметил, это невероятно продвинутая микросхема с даташитом на 60+ страниц, множеством параметров и взаимозависимых режимов работы различных подсистем. Фактически это такой микроконтроллерный комбайн, который предназначен для связи источника питания (простого или с поддержкой протоколов быстрой зарядки), аккумуляторной батареи (ток заряда до 5А) и нагрузки в виде питания самого вашего гаджета и управляемой силовой линии 5В/3А для зарядки внешних устройств.
В целом, это можно назвать ультимативным решением для менеджмента и дистрибуции питания в системе из сетевого источника, аккумулятора, питаемого устройства (устройств). Изюминка в данном случае заключается в том, что микросхема BQ25895 является полностью программируемой и управляемой по интерфейсу I2C и вы, как системный программист, можете делать с ней всё, что угодно и реализовывать сколь угодно прихотливые сценарии энергораспределения в вашей системе.
Разумеется, столь замечательный чип как BQ25895 не мог пройти мимо профессиональных разработчиков электроники и решения на его основе применяются в современных смартфонах, блоках питания, видеокамерах, пауэрбанках, бесперебойниках, солнечных зарядках и прочих устройствах и гаджетах.
Обратной стороной этого праздника жизни является сложность. BQ25895 имеет множество подсистем, настроек и режимов работы и разобраться во всём этом не так просто. Ниже представлена максимально упрощённая блок-схема работы BQ25895.
![](https://habrastorage.org/webt/ad/t3/bu/adt3bux4zbpspat_kwwvbhglzdu.png)
Здесь наглядно видно, что чип BQ25895 является «распределяющим хабом» питающего и зарядного напряжения (тока) между сетевым источником питания (POWER), аккумулятором (BATTERY) и нагрузкой (LOAD). А вот логику этого распределения и режимы работы можно программировать при помощи микроконтроллера (MCU) с интерфейсом I2C.
❯ Характеристики
Ниже представлены основные характеристики BQ25895, которые дают хорошее представление о том, с чем мы имеем дело. Это далеко не полный перечень характеристик — для перечисления всех нужно было бы переписать тут весь даташит.
- Диапазон входных напряжений: 3,9–14В
- Ограничение тока по входу: 100мА–3,25А
- Автоматическое определение USB SDP, CDP, DCP и нестандартных адаптеров
- Определение максимальной входной мощности без перегрузки адаптера
- Преобразователь с зарядным током до 5А
- КПД преобразователя: 91–93%
- Boost Mode с регулируемым напряжением 4,5–5,5В (ток до 3,1А)
- Интегрированный АЦП для мониторинга напряжений, токов и температур
- Управление распределением мощности VDC, Narrow VDC (NVDC)
- Поддержка режимов Ship Mode (поставка/хранение), Wake Up и Full System Reset
- Автономный режим и режим управления по I2C
- Точность регулировки напряжения заряда: ±0.5%
- Точность регулировки тока заряда батареи: ±5%
- Точность регулировки входного тока: ±7.5%
- Встроенный датчик температуры чипа (с подсистемой реагирования)
- Подключение внешнего термодатчика для аккумулятора
- Режим Watchdog
Вышеприведённое краткое перечисление характеристик BQ25895 только подтверждает тезис о том, что при помощи этого чипа вы можете реализовать любой каприз по энергопитанию своего DIY гаджета.
❯ Немного подробнее
Теперь немного углубимся в богатый внутренний мир BQ25895 и тут прежде всего нужно сказать, что у этой микросхемы есть два режима работы — автоматический и «ручного управления» по I2C.
Автоматический режим (Default Mode). BQ25895 может работать полностью автономно, без какого-либо управления по I2C. В этом случае микросхема устанавливает набор настроек по умолчанию и применяет для работы стандартные (определённые производителем) алгоритмы взаимодействия между своими подсистемами.
Также BQ25895 имеет встроенный (и настраиваемый) Watchdog, который постоянно мониторит активность I2C интерфейса и в случае неактивности в течение определённого времени сбрасывает микросхему в автоматический режим работы.
Режим «ручного управления» (Host Mode). Как только по интерфейсу I2C приходит команда управления, BQ25895 переходит в режим Host Mode, когда программист (алгоритм в MCU) может управлять работой BQ25895 и как угодно её настраивать.
Конкретные значения настроек и алгоритмов в автоматическом режиме можно посмотреть в даташите. Если коротко — это типовые базовые «безопасные» настройки для обслуживания нагрузки при питании от сети и подключённом аккумуляторе.
Ниже представлена немного более подробная схема подключения основной периферии к BQ25895.
![](https://habrastorage.org/webt/2e/8q/xk/2e8qxkzh3sr1dh-en40zpckzwlk.png)
Здесь:
Input (VBUS) — входное питание от адаптера или USB с поддержкой протоколов быстрой зарядки 3,9-14 В (3 А).
Host — управляющий MCU с интерфейсом I2C и несколькими управляющими GPIO (наш контроллер).
OTG — линия для зарядки внешних устройств 5В, 3,1 А (например, телефонов или планшетов).
SYS — линия для питания собственно нашего девайса (настраиваемые 3,5-4,5 В)
BAT — линия зарядки подключённого аккумулятора с максимальным током до 5 А.
TS — контакт для подключения внешнего термодатчика (для контроля температуры заряжаемого аккумулятора).
❯ Режимы работы
Режимы работы BQ25895 — это очень обширная тема и если её рассматривать последовательно и во всей полноте, то ей придётся посвятить несколько статей или маленькую диссертацию. Но у нас с вами не учебный курс и в рамках одной статьи для этого просто нет места. Поэтому здесь я постараюсь кратко, «на пальцах» объяснить суть работы алгоритмики, заложенной в BQ25895.
Если кратко, то BQ25895 (динамически или по программе) проверяет и тестирует входную линию VBUS и определяет тип и качество подключённого питающего адаптера и его возможности по поддержке протоколов быстрой зарядки.
Одновременно BQ25895 контролирует состояние подключённого аккумулятора и его «фазовое состояние» во время зарядки.
Также BQ25895 контролирует состояние своих выходных линий.
На основе этих данных и в соответствии с заданными параметрами (по умолчанию или программно), BQ25895 поддерживает заданные кондиции на выходных линиях и линии зарядки аккумулятора. При изменении любых параметров в системе (например при отключении питающего адаптера), BQ25895 это определяет и старается поддерживать заданные параметры выходных линий (насколько это возможно).
Другими словами, BQ25895 — это такой специализированный «робот» по грамотному распределению и поддержанию питания в системе адаптер — аккумулятор — нагрузка. Плюс этого «робота» можно программировать под свои
Для того, чтобы читатель не «поплыл» и окончательно не потерял нить повествования, на этом мы с теоретической частью закончим и перейдём непосредственно к герою нашего повествования — CG Charger BQ.
❯ CG Charger BQ
Теперь переходим к рассмотрению творения компании ClimateGuard — «модулю бесперебойного питания CG Charger BQ v1.0», основанного как раз на микросхеме BQ25895(M). По старой доброй традиции, для CG Charger BQ в открытом доступе отсутствует принципиальная схема, поэтому все свои выводы и предположения нам придётся делать основываясь на партизанских методах, разглядывая модуль при помощи лупы, и тыкая в него щупами тестера.
Примечание. Насколько я понял, компания ClimateGuard сама пока не очень разобралась с тем, какую микросхему (BQ25895 или BQ25895M) запаивать в свои девайсы. В моём распоряжении имеется плата с установленным чипом BQ25895M, но это что-то вроде технологической ошибки и в дальнейшем ClimateGuard планирует устанавливать на платы микросхемы BQ25895 (но это не точно — лучше об этом справиться в самой компании ClimateGuard).
![](https://habrastorage.org/webt/ed/97/fi/ed97fibpix6mceycxctlv6cx4po.jpeg)
На обратной стороне платы радует монументальная маркировка внешних контактов — ошибиться и что-то спалить тут решительно невозможно (однозначно плюс).
![](https://habrastorage.org/webt/_v/sj/qh/_vsjqhba4phkewbbzj4e8axbr3s.jpeg)
Сам производитель презентует CG Charger BQ следующим образом:
«CG_bq — универсальная плата контролер питания для автономных высоконагруженных встраиваемых систем. Плата обеспечивает бесперебойную подачу питания от сети или аккумулятора.»
Ок, читаем дальше:
- Используемая микросхема Texas Instruments BQ25895
- Поддержка литий-ионных аккумуляторов 1S (3.7В)
- Максимальный ток заряда аккумулятора – 5А
- Наличие постоянно включенного выхода 3.3В – 500 мА
- Наличие управляемого выхода 5В – 3А
- Ток потребления в режиме покоя с включенной линией 5В – 1500 мкА
- Ток потребления в режиме покоя с выключенной линией 5В – 30 мкА
- Наличие I2C интерфейса для управления процессом заряда и питания
- Защита аккумулятора от переразряда
- Защита аккумулятора от переполюсовки
- Наличие USB-C разъема
- Расположение выходных разъемов совместимо с макетными платами
- Компактные размеры – 19*22 мм
Неплохо, но поскольку мы заранее подготовились и стали (пока несертифицированными) но уже специалистами по BQ25895, то у нас возникает несколько вопросов.
Вывод INT
Микросхема BQ25895 ведёт очень бурную жизнь и внутри неё постоянно возникает множество событий (например, изменение режимов различных подсистем и т. п.), которые требуют немедленного реагирования со стороны управляющего MCU. Постоянно опрашивать BQ25895 со стороны контроллера на предмет «а не произошло ли какое-то важное событие?», как вы сами понимаете, совершенно не комильфо.
На этот случай инженерами Texas Instruments (которые, определённо, знают своё дело и не зря едят свой хлеб) предусмотрен пин INT, который на плате CG Charger BQ… просто никуда не выведен и недоступен нам, что, мягко говоря, очень прискорбно.
Получается, что поуправлять режимами работы CG Charger BQ по интерфейсу I2C мы сможем, но сделать это полноценно и «по уму» у нас это без вывода INT не получится.
![](https://habrastorage.org/webt/dh/lp/hf/dhlphfvkzr1xd7uqjjq7vz_2wcc.png)
Выводы OTG и /CE
На плате CG Charger BQ также отсутствуют внешние выводы для подключения к микроконтроллеру OTG (разрешение Boost Mode) и /CE (разрешения зарядки, Charge Enable). Я пока не успел проверить, но скорее всего они «наглухо» установлены в разрешающее состояние, что принудительно ограничивает нашу свободу управления CG Charger BQ со стороны микроконтроллера.
Вывод TS
Как я уже отметил выше, у BQ25895 есть специальный вывод для подключения термодатчика контроля температуры заряжаемого аккумулятора. А вот у платы CG Charger BQ этот вывод отсутствует для подключения, что лишает нас удовольствия полностью безопасно заряжать аккумулятор.
В случае практического применения CG Charger BQ можно озаботиться и как-то подпаяться к выводам TS и REGN чипа BQ25895 (и навесить соответствующую обвязку), но лучше было бы, конечно, если бы производитель платы предусмотрел соответствующие контакты в разъёме на плате.
Вывод 3V3
Ну и ещё из замеченного по плате CG Charger BQ (напомню, что схема нам недоступна), судя по всему, производитель просто «навесил» линейный стабилизатор 3,3 В на выходную линию SYS и вывел на разъём пин «3V3».
❯ Программирование
Ок, с теорией мы более-менее разобрались, но как программировать это чудо техники? С какой стороны, собственно, надо подходить к BQ25895, чтобы запрограммировать её работу через интерфейс I2C?
Для программирования BQ25895 мы будем использовать библиотеку bq2589x. Она содержит все определения регистров и функции для доступа к основным настройкам BQ25895. По моим наблюдениям, эта библиотека содержит не полный список всех настроек BQ25895, но если вам не хватит стандартного набора функций библиотеки, то дополнить этот список при помощи информации из библиотеки и даташита не составит особых проблем.
Еще по поводу библиотеки bq2589x я могу заметить, что написана она, несомненно, грамотным специалистом, но почти полностью лишена комментариев и какой-либо систематизации, поэтому нам обо всём придётся догадываться самостоятельно (зато альцгеймер нам не будет страшен). Я, в свою очередь, постараюсь в этой статье в какой-то степени компенсировать этот недостаток.
Итак, чтобы грамотно (и в своих интересах) запрограммировать работу BQ25895, нужно понимать две основные вещи: назначение и смысл хранящихся в регистрах BQ25895 данных (настроек) и алгоритмику работы и взаимодействия между собой различных подсистем BQ25895.
Всего BQ25895 содержит 14 (HEX) 8-битных регистров, назначение и смысл хранимых в которых данных можно узнать из даташита. Алгоритмика работы BQ25895 также достаточно ясно описана в даташите. Всё это можно было бы перевести и прокомментировать, но это явно выходит за рамки одной статьи. Поэтому здесь я сосредоточусь на практических примерах программирования BQ25895 при помощи вышеозначенной библиотеки.
Собираем стенд
Для экспериментов соберём небольшой, но очень функциональный (смайл) стенд. В качестве управляющего контроллера будем использовать первую попавшуюся под руки плату (первой под руки попалась плата WeMos D1 mini на ESP8266). Разумеется, вместо ESP8266 можно было бы использовать любой другой микроконтроллер.
- Плата CG Charger BQ
- WeMos D1 mini (ESP8266)
- Аккумулятор 18650 3,7В 4000(1500) мАч
- Зарядка Baseus GaN5 Pro Fast Changer
- USB тестер Fnirsi FNB58
- Электронная нагрузка DL24
- Тестер UNI-T UT61E+
![](https://habrastorage.org/webt/1p/aw/ny/1pawnyp5o1i8pknjpmlkp5yvl5q.jpeg)
Общий принцип такой: подключаем к компьютеру ESP8266 и отслеживаем в Serial мониторе всю активность и все диагностические сообщения системы. Одновременно мы можем проводить различные эксперименты по подаче питания, его отключению, увеличению и уменьшению нагрузки, изменению настроек BQ25895 и т. д.
![](https://habrastorage.org/webt/13/mi/aq/13miaqulgh63vqvf-zybrqd_muc.jpeg)
Другими словами, мы имеем полную свободу действий и можем тестировать и отлаживать работу BQ25895 в различных режимах и с любыми программными настройками.
Приводим библиотеку bq2589x в порядок
Библиотека bq2589x совершенно не документирована и не систематизирована — там просто все функции накиданы в кучу без каких-либо комментариев. А учитывая, что BQ25895 — это довольно сложное устройство с развесистым даташитом, то разобраться во всём этом очень непросто.
Ниже я представляю (отсортированный по назначению) список функций библиотека bq2589x с осмысленными комментариями, из которых можно понять что же эти функции делают.
// BQ2589X
// -------------------------------------------------
bq2589x(args);
~bq2589x();
int begin();
int begin(TwoWire *theWire);
int begin(uint8_t addr);
int begin(uint8_t addr, TwoWire *theWire);
int init_device();
int detect_device(bq2589x_part_no *part_no, int *revision); // REG14 BQ25890=0x03, BQ25892=0x00, BQ25895 = 0x07
int reset_chip(); // REG14 Register Reset, сброс регистров
int enter_ship_mode(); // REG09 BATFET OFF управление ключом батареи для транспортировки устройства
// READ/WRITE
// -------------------------------------------------
int read_byte(uint8_t *data, uint8_t reg);
int write_byte(uint8_t reg, uint8_t data);
int update_bits(uint8_t reg, uint8_t mask, uint8_t data);
// WATCHDOG
// -------------------------------------------------
int set_watchdog_timer(uint8_t timeout); // REG07 настройка сторожевого таймера 00:запрет, 01:40сек*, 10:80сек, 11:160сек
int disable_watchdog_timer(); // REG07
int reset_watchdog_timer(); // REG03 сброс сторожевого таймера 0*:нормальный режим, 1:сброс (возврат счетчика таймера к 0 после сброса)
// ADC
// -------------------------------------------------
int adc_start(bool oneshot); // REG02 управление запуском преобразования АЦП, по умолчанию не активно
int adc_stop();
int adc_read_battery_volt(); // REG0E VBAT напряжение батареи от 2.304V* (0000000) до 4.848V (1111111)
int adc_read_sys_volt(); // REG0F VSYS напряжение питания системы от 2.304V* (0000000) до 4.848V (1111111)
int adc_read_vbus_volt(); // REG11 VBUS от 2.6V* (0000000) до 15.3V (1111111)
int adc_read_temperature(); // REG10 TS напряжения термодатчика в процентах от REGN. От 21% *(0000000) до 80% (1111111)
int adc_read_charge_current(); // REG12 IBAT ток зарядки (когда VBAT>VBATSHORT) от 0mA* (0000000) до 6350mA (1111111)
// VBUS
// -------------------------------------------------
bq2589x_vbus_type get_vbus_type(); // REG0B Регистр статуса VBUS 000:No (источник не подключен), 001:USB Host SDP, 010: CDP(1.5A), 011: DCP(3.25A), 100:AHVD (MaxCharge)(1.5A), 101:неизвестный (500mA),110:нестандартный (1A/2A/2.1A/2.4A), 111:OTG
// Cостояниt высокого сопротивления (HIZ)
int enter_hiz_mode(); // REG00 режим HIZ 0:запрещено 1:разрешено
int exit_hiz_mode();
int get_hiz_mode(uint8_t *state);
// Input Current Optimizer (ICO), определение точки максимальной мощности входного источника без его перегрузки
int enable_ico(bool enable); // REG02 разрешение оптимизатора входного тока
int force_ico(); // REG09 принудительный запуск оптимизатора входного тока
int check_force_ico_done(); // REG14 ICO work/done
int force_dpdm(); // REG02 принудительный запуск детектирования D+/D-
int enable_auto_dpdm(bool enable); // REG02 Automatic D+/D- Detection Enable, разрешение автоматического детектирования D+/D-
int use_absolute_vindpm(bool enable); // REG0D REG13 Установка предела входного напряжения
int set_vindpm_offset(int offset); // REG01 VINDPM_OS смещение предела входного напряжения. 600mV* (00110). От 0mV до 3100mV. Минимальный порог VINDPM 3.9V, максимальный порог 15.3V
int set_input_volt_limit(int volt); // REG0D Absolute VINDPM Threshold Offset, абсолютное смещение порога VINDPM 2.6V
int read_idpm_limit(); // REG13 Dynamic Power Management current limit. Ограничение входного тока при включенном ICO. От 100mA* (0000000) до 3.25A (1111111)
int set_input_current_limit(int curr); // REG00 Разрешить ножку ILIM
// Генерации протокола импульса тока VBUS, чтобы обмениваться данными с AHVA
int pumpx_enable(int enable); // REG04 Current pulse control Enable, разрешение управления импульсом тока
int pumpx_increase_volt(); // REG09 разрешение управления импульсом тока для повышения напряжения
int pumpx_increase_volt_done(); // REG09 PUMPX_UP work/done
int pumpx_decrease_volt(); // REG09 разрешение управление импульсом тока для понижения напряжения
int pumpx_decrease_volt_done(); // REG09 PUMPX_DN work/done
// OTG/BOOST
// -------------------------------------------------
int enable_otg(); // REG03 Boost (OTG) Mode Configuration 0:OTG запрещен, 1*:OTG разрешен
int disable_otg(); // REG03 Boost (OTG) off
void bq2589x_set_otg(int enable); // OTG on/off
int set_otg_volt(uint16_t volt); // REG0A BOOSTV смещение напряжения режима повышения напряжения. От 4.55V до 5.51V, по умолчанию 5.126V (1001)
int set_otg_current(int curr); // REG0A 500, 700, 1100, 1600, 1800, 2100, 2400, 1300*mA (REG00 IINLIM)
// CHARGE
// -------------------------------------------------
int enable_charger(); // REG03 разрешения зарядки. 0:запрещена, 1*:разрешена
int disable_charger(); // REG03 запрещение зарядки
int set_charge_current(int curr); // REG04 предел тока быстрой зарядки от 0mA (0000000) до 5056mA (1001111). 2048mA* (0100000)
int set_term_current(int curr); // REG05 предел тока завершения зарядки от 64mA до 1024mA. По умолчанию 256mA (0011)
int set_prechg_current(int curr); // REG05 IPRECHG смещение предела тока предварительной зарядки от 64mA до 1024mA. 128mA* (0001).
int set_chargevoltage(int volt); // REG06 смещение предела напряжения зарядки от 3.840V (000000) до 4.608V (110000). 4.208V* (010111)
int get_charging_status(); // REG0B Статус зарядки. 00: нет, 01: Pre-charge (< VBATLOWV), 10: Fast быстрая зарядка, 11: Done, зарядка завершена.
int enable_term(bool enable); // REG07 Charging Termination Enable, разрешение завершения зарядки
bool is_charge_done(); // REG0B Зарядка завершена
int enable_max_charge(bool enable); // REG02 разрешение детектирования адаптера MaxCharge, разрешение работы протокола DCP
Ок, переходим к практическим экспериментам с CG Charger BQ и BQ25895 и посмотрим как мы сможем применить на практике все полученные знания.
Базовый скетч
Начнём мы с простого, чтобы удостовериться, что вся эта система работает и может взаимодействовать с управляющим контроллером (ESP8266) — попробуем получить от микросхемы её тип и ревизию.
/*
BQ25895(M) info test
*/
#include <bq2589x.h>
#include <Wire.h>
bq2589x mycharger;
void setup() {
Serial.begin(115200);
Serial.println();
Serial.println(F("Start BQ25895(M) info test..."));
Wire.begin();
mycharger.begin(&Wire);
bq2589x_part_no part;
int rev = 0;
mycharger.detect_device(&part, &rev);
Serial.print(F("Part: ")); Serial.println(partNo(part));
Serial.print(F("Revision: ")); Serial.println(rev);
}
String partNo(byte pn) {
String s = "?";
switch (pn) {
case 0: s = "BQ25892"; break;
case 3: s = "BQ25890"; break;
case 7: s = "BQ25895"; break;
}
return s;
}
void loop() {
}
Ок, в принципе система работает, значит можем далее проводить эксперименты.
![](https://habrastorage.org/webt/3u/ma/-0/3uma-0g31zv9jp1myc4gxiuqadi.png)
Данные о напряжении (ADC)
Теперь попробуем получить информацию об уровне напряжения на основных линиях модуля питания (VBUS, BAT, SYS).
/*
BQ25895(M) ADC test
*/
#include <bq2589x.h>
#include <Wire.h>
bq2589x mycharger;
void setup() {
Serial.begin(115200);
Serial.println();
Serial.println(F("Start BQ25895(M) ADC test..."));
Wire.begin();
mycharger.begin(&Wire);
delay(10);
mycharger.adc_start(false);
Serial.print(F("VBUS: ")); Serial.println(mycharger.adc_read_vbus_volt());
Serial.print(F("BAT: ")); Serial.println(mycharger.adc_read_battery_volt());
Serial.print(F("SYS: ")); Serial.println(mycharger.adc_read_sys_volt());
Serial.print(F("TS: ")); Serial.println(mycharger.adc_read_temperature());
}
void loop() {
}
И это тоже работает. Здесь цифры 5100 на линии VBUS означают напряжение 5,1 В.
![](https://habrastorage.org/webt/ni/td/2b/nitd2biojosn3m1eoyzkbexhtfc.png)
Продвинутый пример
Теперь давайте создадим несколько более продвинутый пример работы с BQ25895. Попробуем повзаимодействовать с модулем питания в динамике и посмотреть как он реагирует на внешние воздействия.
/*
BQ25895(M) dynamic test
*/
#include <bq2589x.h>
#include <Wire.h>
unsigned long last_change = 0;
unsigned long now = 0;
bq2589x mycharger;
void setup() {
Serial.begin(115200);
Serial.println();
Serial.println(F("Start BQ25895(M) dynamic test..."));
Wire.begin();
mycharger.begin(&Wire);
delay(10);
}
String vbusType() {
String s = "?";
switch (mycharger.get_vbus_type()) {
case 0: s = "NONE"; break;
case 1: s = "USB_SDP"; break;
case 2: s = "CDP(1,5A)"; break;
case 3: s = "DCP(3,25A)"; break;
case 4: s = "MAXC"; break;
case 5: s = "UNKNOWN"; break;
case 6: s = "NONSTAND"; break;
case 7: s = "OTG"; break;
}
return s;
}
void loop() {
now = millis();
if (now - last_change > 5000) {
last_change = now;
mycharger.reset_watchdog_timer();
mycharger.adc_start(false);
delay(10);
Serial.print(F(" TYPE:")); Serial.print(vbusType());
Serial.print(F(" VBUS:")); Serial.print(mycharger.adc_read_vbus_volt());
Serial.print(F(" BAT:")); Serial.print(mycharger.adc_read_battery_volt());
Serial.print(F(" SYS:")); Serial.print(mycharger.adc_read_sys_volt());
Serial.print(F(" TS:")); Serial.print(mycharger.adc_read_temperature());
Serial.print(F(" Charging:"));
switch (mycharger.get_charging_status()) {
case 0: Serial.print(F("Not")); break;
case 1: Serial.print(F("Pre")); break;
case 2: Serial.print(F("Fast")); break;
case 3: Serial.print(F("Done")); break;
}
Serial.print(F(" ChargerCurrent:")); Serial.print(mycharger.adc_read_charge_current());
Serial.print(F(" IdmpLimit:")); Serial.print(mycharger.read_idpm_limit());
Serial.println();
}
}
Ниже представлен отчёт о реагировании BQ25895 на динамические воздействия и изменение состояния входных и выходных линий. (Нужно понимать, что это реакция при текущих настройках — вся прелесть BQ25895 заключается в том, что мы можем как угодно её программировать.)
![](https://habrastorage.org/webt/a2/j_/yc/a2j_ycue_ho8qu2yei0cbi3_oze.png)
Здесь:
1. Исходное состояние. Подключён адаптер питания Baseus GaN5 Pro Fast Changer и аккумулятор 18650 3,7В 4000(1500) мАч. Микросхема определяет входной источник (DCP) и выставляет остальные параметры в соответствии со своими настройками (которые мы можем в той или иной степени изменять при желании).
2. Отключаем адаптер питания. Отключаем адаптер питания и в системе остаётся один источник энергии — аккумулятор 18650 3,7В 4000(1500) мАч. Микросхема переходит в режим OTG и выставляет остальные параметры в соответствии со своими настройками.
3. Нагрузка 1 А. При помощи электронной нагрузки DL24 создаём ток потребления по линии 5 В в 1 А (система питается от одного аккумулятора).
4. Адаптер и нагрузка. Снова подключаем адаптер питания Baseus GaN5 Pro Fast Changer, не снимая нагрузки в 1 А по линии 5 В.
❯ Итого
Что тут можно сказать? Если вам нужен управляемый модуль питания для вашего гаджета, то BQ25895 — это то устройство, которое сможет удовлетворить любую вашу прихоть в этом отношении. Что же касается CG Charger BQ, то если компания ClimateGuard в следующих ревизиях этого модуля сделает доступными нам пины INT, OTG, /CE и TS, то его то мы и будем использовать в своих проектах.