Arduino контроллера заряда аккумулятора

Уровень заряда аккумулятора 18650 на arduino

Для каждого устройства, которое работает от автономного источника питания, основным показателем времени «жизни» до следующей подзарядки является уровень заряда аккумулятора. Без этой информации не представляется возможным ни одно электронное устройство. Много кто любит сюрпризы, но неожиданное прекращение работы девайса вряд ли кому-то понравится. Вот и я не отношусь к числу мазохистов, которые получают удовольствие от неожиданно переставшего работать устройства. Поэтому в новом проекте, который должен будет работать по 3-4 месяца автономно, было решено добавить контроль уровня заряда аккумулятора. Уровень заряда будет измеряться в процентном соотношении и периодически отправляться по сети интернет или в смс. В этой статье будет рассмотрено только определение уровня заряда аккумулятора и вывод информации на дисплей, чтобы не загружать текст лишней информацией.

Аккумулятор 18650 и arduino

Для питания электронных устройств можно использовать множество различных источников питания, но в данной статье будет использоваться аккумулятор 18650. Максимальный заряд такого аккумулятора 4.25 вольта, а минимальное напряжение, при котором аккумулятор не пострадает и сможет без проблем зарядиться – 2.75 вольта. Батареи 18650 имеют довольно большую емкость, до 3000 мАч, что позволяет питать устройства большое количество времени. Но, тем не менее, такие источники питания не вечные и необходимо следить за уровнем заряда. Если заряд будет ниже, чем 2.75 вольта, то реанимировать аккумулятор будет сложно, а иногда и невозможно.

Читайте также:  Volvo после отключения аккумулятора

Измерение уровня заряда аккумулятора с помощью arduino

Чтобы максимально точно измерить уровень аккумулятора с помощью arduino, нужно воспользоваться опорным напряжением микроконтроллера и сравнивать его с напряжением источника питания. Но тут появляется небольшая сложность, напряжение опорного питания составляет 1.1 вольт, а максимальное напряжение 18650 — 4.25 вольта. Чтобы замерить напряжение аккумулятора необходимо использовать простой делитель напряжения, который легко собрать с помощью двух резисторов. В данном примере, я использовал резисторы сопротивлением 1 и 10 кОм, в итоге получилось понизить уровень напряжения примерно в 10 раз.
Для расчета напряжения, которое получится на выходе делителя, используется формула: U(out) = U(in)*(R2/(R1+R2)). Получается, что при напряжении 4 вольта, на выходе делителя напряжение будет равно 0.36 вольт. Такое напряжение уже можно без проблем сравнивать с опорным. Это основная логика работы, остальное уже дело техники. Ниже будет приведена схема подключения аккумулятора и делителя напряжения к ардуино. Хочу только обратить внимание, что для более точного расчета делителя необходимо замерить сопротивление каждого резистора, поскольку их реальное сопротивление может немного отличаться от маркировки. В моем случае резисторы с маркировкой 1 и 10 кОм, на деле имели сопротивление 0.99 и 9.88 кОм.

Скетч arduino для определения уровня заряда аккумулятора

Чтобы установить опорное напряжение на аналоговых входах arduino на уровне 1.1В необходимо воспользоваться функцией analogReference и передать ей параметр INTERNAL. Работать с опорным напряжением 1.1В умеют микроконтроллеры ATmega168 и ATmega328, если будет использоваться ATmega8, то при вызове этой же функции, опорным напряжением будет 2.56В.
Для вывода уровня заряда аккумулятора будет использоваться 7-мегментный 4-х разрядный индикатор TM1637, как его использовать, можно почитать в более ранней статье: индикатор TM1637.
Ниже приведен код с подробными комментариями.

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

Что использовалось в проекте:

  • Arduino (я использовал arduino nano, но можно любую другую). Покупал тут: arduino nano
  • Аккумулятор 18650. Покупал тут: Аккумуляторы 18650 4 шт
  • Индикатор TM1637. Покупал тут: 7-сегментный 4-разрядный индикатор TM1637
  • Резисторы сопротивлением 1 кОм и 10 кОм. Покупал тут:набор резисторов 700 шт. От 10 Ом до 1 МОм

Послесловие

Использовать, приведенный в статье, код можно для любых аккумуляторов, не обязательно 18650. Достаточно только в коде скетча подправить переменные для максимального и минимального напряжения аккумулятора. А также можно использовать резисторы любого другого наминала, только не забыть подправить уравнение в коде: float del = 0.091; // R2/(R1+R2) 0.99кОм / (9.88кОм + 0.99кОм)

Уровень заряда аккумулятора 18650 на arduino: 2 комментария

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

Если через полевик включать периодически то всё будет гуд

Источник

Контроллер батарейного питания для 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 за помощь в тестировании проекта.

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

Источник

Мониторинг уровня заряда аккумулятора с помощью Arduino

Следите за уровнем заряда батареи с помощью этого простого устройства, отслеживающего заряд на базе платы Arduino. Этот урок научит вас создавать индикатор напряжения на основе Arduino.

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

Почему важен мониторинг уровня заряда батареи

Был ли у вас опыт создания устройства с питанием от батарей, когда в какой-то момент вдруг оно перестает работать, потому что его нужно зарядить?

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

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

  • Arduino Uno
  • 16 x 2 LCD Дисплей
  • Светодиодная гистограмма / 10 светодиодных ламп
  • Arduino IDE
  • 4 x 1.2В Батареи
  • Держатель батарей

Что такое светодиодная гистограмма?

Гистограмма светодиодов представляет собой матрицу из 10 отдельных светодиодов с 10 выходными контактами. Она имеет различное приложение, включая звуковое оборудование и промышленную панель управления.

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

Как этот проект измеряет уровень заряда батареи?

У любых батарей есть то, что мы называем уровнем заряда. Это можно понять как количество напряжения, содержащегося в батарее. Аналоговый вывод Arduino действует как простой вольтметр, на котором определяется значение напряжения. Затем мы можем преобразовать аналоговое значение в цифровое значение напряжения с помощью формулы преобразования АЦП.

Значения, которые мы конвертируем, будут отображаться на светодиодной гистограмме, где они могут проецировать силу. Таким образом, если все десять светодиодов горят, аккумулятор полностью заряжен. Если горят только пять светодиодов, то аккумулятор наполовину заряжен (или разряжен — для пессимистов).

АЦП Arduino Uno имеет 10-битное разрешение. АЦП преобразует входные напряжения от 0 до 5 вольт в целочисленные значения от 0 до 1023. Поэтому, если мы умножим входное аналоговое значение на (5/1024), то получим цифровое значение входного напряжения.

Схема соединений

Ниже приведена схема сборки нашего устройства мониторинга уровня заряда батареи на основе Ардуино.

В собранном виде всё может выглядеть примерно так:

Код проекта

Во-первых, нам нужно определить библиотеку LCD и указать контакты, которые мы собираемся использовать с Arduino. Мы назначили аналоговый контакт A4 в качестве аналогового контакта для проверки напряжения аккумулятора. Значения задаются с плавающей запятой, поэтому мы можем получить значения напряжения с точностью до двух десятичных разрядов.

Затем мы создаем массив для назначения выводов на светодиодную гистограмму. Массив номеров выводов, к которым прикреплены светодиоды.

Мы настроили ЖК-дисплей и аналоговые контакты как выходные контакты.

Далее мы создаем функцию LED_function для использования гистограммы светодиодов.

Когда у нас есть функция, нам нужен способ для преобразования аналоговых значений в цифровые значения напряжения. Используя встроенный аналого-цифровой преобразователь Arduino и формулу преобразования АЦП, мы сможем легко преобразовать значения. Мы также хотим отобразить эти преобразованные значения на нашем ЖК-дисплее.

Затем мы создаем некоторые условия для управления светодиодной гистограммой относительно значения входного напряжения, которое мы читаем с аналогового вывода A4.

На изображении ниже вы можете видеть, что почти полностью заряженная батарея показывает примерно 3,84 В.

Вы можете скачать или скопировать код целиком ниже:

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

Источник

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