Аккумулятор для ардуино своими руками

Создание зарядного устройства, управляемого Arduino

Arduino и добавленная к ней схема заряда могут быть использованы для мониторинга и управления зарядкой никель-металл-гидридных аккумуляторов, например, так:

Законченное устройство

Аккумуляторные батареи являются отличным способом для питания вашей портативной электроники. Они могут сэкономить вам много денег при правильной зарядке. Для того, чтобы вы могли получить максимальную отдачу от ваших аккумуляторных батарей, их необходимо правильно заряжать. Это означает, что вам необходимо хорошее зарядное устройство. Вы можете потратить кучу денег, купив готовое зарядное устройство, а можете получить удовольствие, сделав его сами. В данной статье мы рассмотрим, как можно создать зарядное устройство, управляемое Arduino.

Во-первых, важно отметить, что не существует универсального способа зарядки, который подходил бы для всех аккумуляторов. Разные типы аккумуляторов используют разные химические процессы, обеспечивающие их работу. В результате, разные типы аккумуляторов необходимо заряжать по-разному. В этой статье мы не сможем охватить все типы аккумуляторных батарей и методы зарядки. Поэтому для простоты мы сосредоточим внимание на наиболее распространенном типе аккумуляторных батарей размера AA, на никель-металл-гидридных аккумуляторах (NiMH).

Комплектующие

Список комплектующих слева направо:

  • контроллер Arduino;
  • держатель батареи размера AA;
  • NiMH аккумулятор;
  • мощный резистор 10 Ом (минимум 5 ватт);
  • резистор 1 МОм;
  • конденсатор 1 мкФ;
  • MOSFET транзистор IRF510;
  • датчик температуры TMP36;
  • источник питания 5 вольт;
  • макетная плата;
  • перемычки.

Как заряжать NiMH AA аккумуляторы

Существует много способов зарядки NiMH аккумуляторов. Выбор используемого вами метода главным образом зависит от того, как быстро вы хотите зарядить аккумулятор. Скорость заряда измеряется по отношению к емкости батареи. Если ваша батарея обладает емкостью 2500 мАч, и вы заряжаете ее током 2500 мА, то вы заряжаете ее со скоростью 1C. Если вы заряжаете этот же аккумулятор током 250 мА, то вы заряжаете его со скоростью C/10.

Во время быстрой зарядки аккумулятора (со скоростью выше C/10), вам необходимо тщательно контролировать напряжение на батарее и ее температуру, чтобы не перезарядить ее. Это может серьезно повредить аккумулятор. Тем не менее, когда вы заряжаете аккумулятор медленно (со скоростью ниже C/10), у вас гораздо меньше шансов повредить батарею, если случайно перезарядите ее. Поэтому медленные методы зарядки, как правило, считаются более безопасными и помогут вам увеличить срок службы батареи. Поэтому в нашем самодельном зарядном устройстве мы будем использовать скорость заряда C/10.

Цепь заряда

Для данного зарядного устройства основой является схема для управления источником питания с помощью Arduino. Схема питается от источника напряжения 5 вольт, например, от адаптера переменного тока или компьютерного блока питания. Большинство USB портов не подходит для данного проекта из-за ограничений по току. Источник 5В заряжает батарею через мощный резистор 10 Ом и мощный MOSFET транзистор. MOSFET транзистор устанавливает величину тока, протекающего через батарею. Резистор добавлен как простой способ контроля тока. Контроль величины тока выполняется подключением каждого вывода резистора к аналоговым входным выводам Arduino и измерением напряжения с каждой стороны. MOSFET транзистор управляется выходным ШИМ выводом Arduino. Импульсы сигнала широтно-импульсной модуляции сглаживаются до постоянного напряжения фильтром на резисторе 1 МОм и конденсаторе 1 мкФ. Данная схема позволяет Arduino отслеживать и управлять током, протекающим через батарею.

Датчик температуры

В качестве дополнительной меры предосторожности в зарядное устройство добавлен датчик температуры TMP36 для контроля температуры батареи. Данный датчик выдает напряжение, которое линейно зависит от температуры. Поэтому он, в отличие от термисторов, не требует калибровки или балансировки. Датчик устанавливается в просверленном отверстии в корпусе держателя батареи и приклеивается в отверстии так, чтобы он прижимался к батарее, когда та будет установлена в держатель. Выводы датчика подключаются к шине 5В, к корпусу и к аналоговому входному выводу Arduino.

Держатель AA батареи перед и после установки на макетную плату

Код для данного проекта довольно прост. Переменные в начале исходного кода позволяют настроить зарядное устройство путем ввода значений емкости батареи и точного сопротивления мощного резистора. Также добавлены и переменные безопасных порогов. Максимально допустимое напряжение на батарее устанавливается в значение 1,6 вольта. Максимальная температура батареи установлена на 35 градусов по Цельсию. Максимальное время заряда установлено на 13 часов. Если какой-либо из этих порогов безопасности будет превышен, зарядное устройство выключается.

В теле программы вы можете увидеть, что система постоянно измеряет напряжения на выводах мощного резистора. Это используется для расчета значений напряжения на батарее и протекающего через нее тока. Ток сравнивается с целевым значением, которое составляет C/10. Если рассчитанный ток отличается от целевого значения более, чем на 10 мА, система автоматически подстраивает выходное значение, чтобы подкорректировать его.

Arduino использует последовательный интерфейс для отображения всех текущих данных. Если вы хотите проконтролировать работу вашего зарядного устройства, то можете подключить Arduino к USB порту компьютера, но это необязательно, так как Arduino питается от источника напряжения 5В зарядного устройства.

Скачиваемую версию исходного кода вы можете найти по ссылке, приведенной ниже.

Читайте также:  Готовим роллы своими руками

Теперь вы можете создать собственное зарядное устройство. Но обязательно контролируйте скорость заряда и соблюдайте технику безопасности, так как избыточная зарядка аккумулятора может быть опасна.

Источник

Контроллер батарейного питания для arduino

В ходе экспериментов и сборок различных устройств на arduino мне часто приходили мысли добавить в них аккумулятор. Однако решения от «китайцев» доступные на рынке мне не сильно нравились. Я решил сделать простой модуль, позволяющий добавить в любое ваше устройство аккумулятор, да и еще и с кучей всевозможных защит. Для построения такого модуля я выбрал микросхему BQ25606 от Texas Instruments. Ссылка на datasheet (https://www.ti.com/lit/ds/symlink/bq25606.pdf). В ней есть все функции, которые могут быть полезны диайвайщику.

Микросхема имеет два режима работы. Первый режим — зарядка. В этом режиме напряжение Vbus используется как входное напряжение для зарядки аккумулятора. При этом, входной ток можно регулировать подбором сопротивления R_Ilim, а ток зарядки сопротивлением R_Ichg. Контроллер мониторит уровень заряда батареи и температуру (сопротивление термистора). Во втором режиме — boost, микросхема умеет генерировать из напряжения батареи 5.1 В на линию Vbus с максимальным током в 1.2 А. То есть, к этой микросхеме можно не добавлять повышающий модуль, она и так умеет повышать напряжение до 5В, чтобы запитать, например, arduino. Ниже привел блок схему BQ25606 из datasheet’а.

Собрал тестовый модуль для проверки всех заявленных возможностей микросхемы. В качестве батареи использовал сборку из 6 литий ионных аккумуляторов подключенных параллельно, каждая батарея емкостью примерно в 3500 мА/ч, т.е. общая емкость около 21000 мА/ч.

Качество изготовления плат мне понравилось, советую. Лак держит нагрев, дорожки не отрываются. Все красиво и четко. В комплекте еще брелок положили)

Для начала, проверим регулировку тока потребления и заряда батареи. Для этого на плате предусмотрены подстроечные резисторы. Если взглянуть на datasheet микросхемы BQ25606, то можно увидеть, что входной ток и ток заряда задается резисторами, которые считаются по простой пропорции: R = K / I, где коэффициент K для входного тока это 478, а для тока зарядки 677. Резистор для входного тока будет использоваться микросхемой только в том случае, если ей не удастcя опознать мощность подключенного по usb блока питания и по сути он ограничивает входной ток потребляемый схемой от источника питания. Ниже я привел таблицу всех возможных вариантов ограничения входного тока.

Резистор в цепи регулирования заряда ограничивает максимальный ток, с которым будет заряжаться батарея. Получается сначала ограничивается входной ток, а дальше уже ток зарядки, т.е. при выставленном токе заряда в 2 ампера, если входной ток будет ограничен на уровне 1 ампер, то и ток зарядки будет не больше 1 ампера (по факту чуть меньше ибо КПД не идеальный).

Я выставил ток заряда в 2.5 ампера и запустил тест зарядки. Микросхема ощутимо нагревается и в определенный момент начинает сбрасывать ток зарядки, чтобы не перегреться. При этом изменяя входное напряжение заряда, которое можно повысить до 13.5 вольт, можно увидеть изменение потребляемого тока.

Я думаю, оптимальным решением станет установка резистора для ограничения входного тока номиналом 470 Ом. При этом входной ток будет ограничен на уровне около 1 А, а ток зарядки 1.44 А. И как я писал выше, ток зарядки поднимется до 1.44 А только когда микросхема задетектит мощный блок питания, во всех остальных случаях зарядка будет также не больше одного ампера.

Вообще, микросхема BQ25606 очень умно заряжает батареи, контролирует нагрев через NTC и способна определять аккумуляторы, которые уже непригодны к работе и сообщать об этом.

После тестирования макета, я модифицировал принципиальную схему и решил привести модуль к более практичному виду.

По схеме, диод D1 предотвращает утечку 5В в блок питания при подключении зарядки с включенным режимом boost в BQ25606 (когда микросхема генерирует 5В). При подключении блока питания к USB разъему, транзистор Q1 притягивает вывод микросхемы OTG к земле и переводит её в режим зарядки вне зависимости от включенного режима с помощью тумблера SW1.

Ну и тестирование на уровень пульсаций по 5В выходу.

Для начала запуск преобразователя, слева без нагрузки, справа с нагрузкой в 1А. Емкость на выходе преобразователя 22 мкФ.

Пульсации при нагрузке в 1А и емкости на выходе 22 мкФ составили 1.5 В, поэтому емкость выхода необходимо увеличить, до 220-470 мкФ. Ниже график пульсаций, слева емкость выхода 22 мкФ, справа 220 мкФ.

Ну и запуск преобразователя с емкостью в 220 мкФ и током потребления в 1А выглядит следующим образом

При работающем boost режиме, если подать питание на схему, то на выходной линии 5В наблюдаются выбросы, связанные с переключением режимов. Слева — запуск зарядки, справа — отключение зарядки, где видно некоторую паузу, которая необходима контроллеру для запуска boost режима, а дальше софт старт. Картинки сняты при подключенной нагрузке в 1А. Эти осциллограммы были сняты с тестового образца без индуктивности на выходе. Тем не менее, видно, что при подключении зарядки к такому модулю произойдет кратковременное отключение , что надо учитывать. Хотя на малых потреблениях, эта просадка напряжения сгладится емкостью питания.

Также стоит отметить, что при значениях емкости на 5В выходе больше 1000 мкФ микросхема не сможет запустить boost режим, так как начальный ток зарядки конденсатора будет триггерить схему защиты по току. При этом будет мигать светодиод подключенный в выводу STAT. Частично для уменьшения этого эффекта в схему была добавлена индуктивность L1.

Читайте также:  Гидроизоляция гипсокартона своими руками

Печатную плату для итогового устройства развел на стриме: https://youtu.be/zd9VTNEoVy0

В общем, получилась платка, к которой можно подключить аккумулятор, лежащий под руками и получить полноценное батарейное питание для вашего устройства. Плата будет контролировать заряд и разряд, не позволяя аккумулятору переразрядиться, или перезарядиться, или нагреться. Надеюсь проект будет кому-то полезен, если так, то поставьте статье лайк. Вам не сложно, а мне приятно, спасибо!

Хочется сказать большое спасибо Lightning666 за помощь в тестировании проекта.

Пишите ваши вопросы в комментариях. Спасибо за внимание, пока!

Источник

Battery Shield для автономного и резервного питания Arduino

Общие сведения:

Battery Shield — это источник автономного питания для 5В плат Arduino, позволяющий сделать Ваши устройства по настоящему мобильными. Battery Shield устанавливается на Arduino снабжая её питанием, как обычный аккумулятор снабжает питанием Ваш смартфон, планшет и т.д. Если к шинам питания Arduino подключены иные устройства, они также получат питание от Battery Shield. Уровень заряда LiPo (литий-полимерного) аккумулятора можно контролировать либо программно (по шине I2C), либо визуально (по светодиодному индикатору на плате). При необходимости аккумулятор можно зарядить через порт micro USB (питание Arduino не исчезнет во время заряда аккумулятора), блок зарядного устройства автоматически включается, выключается и выбирает тип заряда аккумулятора в зависимости от уровня его разряженности.

Источник автономного питания выполнен в виде Shield, что удобно при его использовании с платами Arduino Uno, Arduino Mega, Arduino Leonardo и им подобных плат Arduino с рабочим напряжением питания 5В. Если Вы используете платы Arduino Nano или Arduino Pro Mini 5V 16MHz, то их так же можно запитать от Battery Shield, без проводов, предварительно установив Arduino в модуль Trema Shield NANO. Использование Battery Shield не только превратит Ваши устройства в мобильные, но и избавит Вас от необходимости использования силовых проводов, блоков питания, батарейных отсеков с аккумуляторами, преобразователями и т.д.

Видео:

Спецификация:

  • Входное напряжение питания зарядного устройства: 5 В (порт micro USB).
  • Выходное напряжение питания модуля: 5 В (постоянного тока).
  • Напряжение заряда аккумулятора: 4,2 В.
  • Тип аккумулятора: LiPo (литий-полимерный) 3,7 В.
  • Ток заряда аккумулятора: до 2,1 А.
  • Ток на выходе модуля: до 1 А (в пиках до 1,5 А).
  • Время обнаружения перегрузки по току: 30 мс.
  • Время обнаружения КЗ нагрузки: до 200 мкс.
  • Время пробуждения: 50 мс.
  • Порог срабатывания защиты от перегрева: 125 °С.
  • Порог срабатывания защиты от пониженного питания на входе micro USB: 4,5 В.
  • Частота повышающего DC-DC преобразователя: 650 кГц.
  • Интерфейс: I2C.
  • Адрес на шине I2C: 0x75.
  • Рабочая температура: 0 . 70 °С.
  • Габариты: Shield.

Подключение:

  • Перед установкой Battery Shield дважды нажмите кнопку на плате, что бы выключить модуль.
  • Battery Shield устанавливается на Arduino или Trema Shield NANO, так чтобы все штекеры разъёмов модуля установились в гнёзда разъемов Arduino.
  • Колодка «POWER» на плате модуля должна совпадать с одноимённой колодкой на плате Arduino или Trema Shield NANO.

Отключение спящего режима:

Для предотвращения случайной разрядки батареи в модуле предусмотрена функция автоматического выключения при простое без нагрузки. Функция по умолчанию включена, если микроконтроллер не подключён или подключён, но не инициировал модуль или переключатель модуля находится в положении LED. Для отключения этой функции необходимо:

1) Перевести переключатель в положение I2C:

2) Подключить Shield к Arduino

3) Скачать и установить библиотеку Battery_Shield. О том как устанавливать библиотеки можно узнать здесь.

4) Добавить следующие строки в скетч:

Подробнее о Battery Shield:

Battery Shield построен на базе чипа IP-5108 оснащенным блоком управления заряда/разряда аккумулятора блоком управления повышающего DC-DC преобразователя, многоканальным управлением питанием, 14-ти битным АЦП для чтения напряжений в различных цепях схемы, защитой от перегрузки по току (на входе и выходе), от короткого замыкания, от перенапряжения, от перезарядки аккумулятора, от перегрева чипа. При срабатывании защиты, выходное напряжение отключается, для возобновления работы Battery Shield, необходимо подать питание на порт micro USB. Для согласования логических уровней шины I2C используется чип PCA9306. Контролировать текущее состояние аккумулятора и процесса его заряда, можно как программно (по шине I2C), так и визуально (посредством светодиодов на плате модуля). Установить подходящий Вам метод контроля можно используя переключатель на плате модуля.

Специально для Battery Shield, нами разработана библиотека Battery_Shield, которая позволяет управлять источником автономного питания по шине I2C. Для работы библиотеки, переключатель на плате должен находиться в положении «I2C». Библиотека позволяет: выключать модуль, включать/выключать зарядное устройство, получать силу тока аккумулятора, получать силу тока в цепи нагрузки, получать напряжение на аккумуляторе, получать напряжение на аккумуляторе без нагрузки, получать напряжение в цепи нагрузки, получать % заряда аккумулятора, получать используемый тип заряда аккумулятора (заряд не осуществляется, TK — заряд малым током, CC — заряд постоянным током, CV — заряд постоянным напряжением, Time Over). Дополнительно можно получить текущее КПД повышающего DC-DC преобразователя, а так же точное сопротивление резистора в цепи аккумулятора, используемого для расчёта силы тока аккумулятора.

Для включения модуля необходимо однократно нажать на единственную кнопку на плате.
Выключить модуль можно либо двойным нажатием на ту же кнопку, либо программно (по шине I2C).

  • Перед первым включением Battery Shield (после покупки), подайте питание на порт micro USB (не менее чем на 2 секунды).
  • Для включения модуля необходимо однократно нажать на единственную кнопку на плате.
  • Для выключения модуля необходимо выполнить двойное нажатие на единственную кнопку на плате (выключайте модуль перед его установкой на Arduino).
  • Для заряда аккумулятора подайте питание на порт micro USB (при наличии питания от micro USB, модуль включится и не будет выключаться при нажатии на кнопку).
  • При срабатывании защиты Battery Shield (перегрузка по току, КЗ, перегрев и т.д), выходное напряжение модуля отключается, для возобновления работы Battery Shield, необходимо его включить, однократно нажав на кнопку.
  • При срабатывании защиты аккумулятора, его схема отключит питание на выходе, для возобновления работы аккумулятора необходимо подать питание на порт micro USB.
  • Для визуальной индикации (посредством светодиодов) состояния аккумулятора и его зарядки, переведите выключатель на плате модуля в положение «LED».
  • Для управления модулем и получения данных по шине I2C, переведите выключатель на плате модуля в положение «I2C».
  • Обратите внимание на то, что в режиме «LED» светодиодная индикация потребляет ток.
  • Если модуль находится без нагрузки (ток на выходе ниже 120 мА) дольше 32 секунд, то он автоматически выключится.
  • Для работы с Battery Shield по шине I2C предлагаем воспользоваться библиотекой Battery_Shield.
  • Библиотека Battery_Shield запрещает автоматическое выключение модуля при отсутствии нагрузки.
Читайте также:  Как сделать трафарет фигурок своими руками

Примеры:

Вывод тока и напряжения:

Данный пример будет постоянно выводить IBAT, VBAT, IOUT, VOUT в монитор последовательного порта.

Вывод состояния и заряда аккумулятора:

Данный пример будет постоянно выводить состояние зарядного устройства, тип заряда и текущую ёмкость аккумулятора (в т.ч. и во время заряда).

Отключение Battery Shield:

Данный пример отключит Battery Shield через 5 секунд после его включения.
Отключение не будет работать, если подано питание на разъем mocro USB.

Программная защита от перегрузки по току:

Данный скетч отключит Battery Shield если сила тока потребляемая Arduino и другими устройствами превысит 700 мА.

Описание основных функций библиотеки:

Библиотека Battery_Shield позволяет управлять источником автономного питания по шине I2C. Для работы библиотеки, переключатель на плате должен находиться в положении «I2C». Библиотека позволяет: выключать модуль, включать/выключать зарядное устройство, получать значения IBAT, VBAT, IOUT, VOUT, % заряда аккумулятора, текущий тип заряда аккумулятора (TK, CC, CV).

Подключение библиотеки:

Функция begin();

  • Назначение: Инициализация работы с Battery Shield.
  • Синтаксис: begin( RES [, КПД] );
  • Параметры:
    • RES — значение сопротивления в цепи аккумулятора, указывается в Ом (тип float).
    • КПД — необязательный параметр, коэффициент полезного действия повышающего DC-DC преобразователя, указывается в % (тип float).
  • Возвращаемое значение: (bool) результат инициализации true/false.
  • Примечание:
    • RES — сопротивление RBAT значение указано на вкладыше к Battery Shield, оно используется для расчёта IBAT.
    • КПД — значение (по умолчанию 94%) используется для расчёта IOUT.
    • Значение RES выше чем номинал резистора, так как оно учитывает сопротивление дорожек, припоя.
    • Точные значения RES и КПД Вашего Battery Shield можно получить используя функции ohmmeter() и efficiency().
  • Пример:

Функция off();

  • Назначение: Выключение Battery Shield.
  • Синтаксис: off();
  • Параметр: отсутствует.
  • Возвращаемое значение: (bool) результат выключения true/false.
  • Примечание: Функция не работает при наличии питания на micro USB.
  • Пример:

Функция charging();

  • Назначение: Включение/выключение зарядного устройства.
  • Синтаксис: charging( ФЛАГ );
  • Параметр: (bool) флаг разрешающий работу ЗУ. true — разрешить / false — запретить.
  • Возвращаемое значение: отсутствует.
  • Примечание: Если разрешить работу ЗУ но не подать питание на micro USB, то аккумулятор заряжаться не будет.
  • Пример:

Функция getLevel();

  • Назначение: Получение уровня заряда аккумулятора в %.
  • Синтаксис: getLevel();
  • Параметр: отсутствует.
  • Возвращаемое значение: (uint8_t) уровень заряда (от 0% до 100%).
  • Примечание:
    • возвращаемое значение кратно 5%.
    • ёмкость аккумулятора рассчитывается по его напряжению без нагрузки.
    • функция работает вне зависимости от работы зарядного устройства.
  • Пример:

Функция getState();

  • Назначение: Получение состояния Battery Shield.
  • Синтаксис: getState();
  • Параметр: отсутствует.
  • Возвращаемое значение:
    • CHARGING_IDLE — в данное время аккумулятор не заряжается.
    • CHARGING_TK — аккумулятор заряжается в режиме TK — малым током.
    • CHARGING_CC — аккумулятор заряжается в режиме CC — постоянным током.
    • CHARGING_CV — аккумулятор заряжается в режиме CV — постоянным напряжением.
    • CHARGING_TO — аккумулятор не заряжается, так как истекло отведённое время заряда.
  • Пример:

Функция voltmeter();

  • Назначение: Получение напряжения.
  • Синтаксис: voltmeter( БЛОК );
  • Параметр БЛОК — определяет блок схемы на котором требуется измерить напряжение:
    • BATTERY — измерить напряжение на аккумуляторе (UBAT). Вместо BATTERY можно указать INPUT.
    • BATTERY_IDLE — измерить напряжение на аккумуляторе (UBAT) без нагрузки.
    • OUTPUT — измерить напряжение на выходе (UOUT).
  • Возвращаемое значение: (float) значение измеренного напряжения в В.
  • Пример:

Функция amperemeter();

  • Назначение: Получение силы тока.
  • Синтаксис: amperemeter( ЦЕПЬ );
  • Параметр ЦЕПЬ — ток которой требуется получить:
    • BATTERY — измерить ток в цепи аккумулятора (IBAT). Вместо BATTERY можно указать INPUT.
    • OUTPUT- измерить ток нагрузки в цепи выхода (IOUT).
  • Возвращаемое значение: (float) значение силы тока в А.
  • Примечание:
    • Значение IBAT может быть отрицательным (это значит что аккумулятор заряжается).
    • Значения IBAT и IOUT рассчитываются в библиотеке, а не измеряются чипом модуля.
    • Значение IBAT зависит от RBAT (от сопротивления указанного в качестве параметра функции begin).
    • Значение IOUT зависит от КПД повышающего DC-DC преобразователя (по умолчанию 94%).
    • Точные значения RBAT и КПД Вашего Battery Shield можно получить используя функции ohmmeter() и efficiency().
  • Пример:

Описание дополнительных функций библиотеки:

Дополнительные функции требуют ввода токов измеренных внешними приборами (амперметром или мультиметром). Для выполнения указанных измерений требуются технические навыки и приборы. Любые конструктивные изменения в Battery Shield (в т.ч. обрыв проводов, следы пайки и т.д.) исключают гарантию и работоспособность устройства. Помните что аккумулятор является пожароопасным устройством.

Источник

Оцените статью