В данной статье речь пойдет о создании счетчика расхода энергии батарейки.

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

Но время шло и устройство, которое запитывалось от данной батарейки было выпущено в новой модификации и одним из улучшений стало увеличение дальности работы беспроводной связи. В следствии чего пиковое потребление выросло с 50 мА до 160 мА и чудесный кулоновский счетчик работать перестал, так как его верхний диапазон 100 мА.

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

  • Организовать подсчет потребляемой энергии от батарейки

  • Отслеживать уровень напряжения элемента питания

  • Вписаться в старые габариты печатных плат

  • Потребление разрабатываемого счетчика не должно превышать 2 мА в рабочем режиме и 5 мкА во сне

  • В качестве интерфейса обмена с "материнской платой" должен быть использован интерфейс I2C

  • Обеспечение искрозащиты

  • Минимизировать повышение стоимости готового изделия

Для подсчета затрачиваемой энергии было решено использовать "классическую" схему с АЦП и шунтом, а для ее реализации был выбран МК STM32l031G6U6TR. Он решает сразу несколько задач.

  1. Во первых - потребление. Данная серия МК выпущена специально для приложений в которых требуется пониженное энергопотребление, что от нас и просили. Заглядывая вперед, потребление во сне меньше 1 мкА, а в рабочем режиме порядка 1 мА.

  2. Интерфейс. Как и все современные МК, мы имеем на борту I2C, а еще, мы умеем по нему выходить из сна, как раз то что надо.

  3. Габариты. Данный МК выпускается в корпусе UFQFPN28, который имеет весьма скромные размеры, что позволяет нам спокойно влезть в старые габариты платы.

Cхема работы изделия будет выглядеть примерно следующим образом: Материнская плата просыпается и сразу будит "батареечную плату", та в свою очередь начинает измерять потребляемый ток и записывает его в так называемый "банк" потраченной энергии. Перед уходом в "сон", материнская плата запрашивает данные из батарейки. Это если коротко.

Начинаем разрабатывать схему, тут все прям очень просто.

Рисунок 1 - Схема принципиальная
Рисунок 1 - Схема принципиальная
Рисунок 2 - топология ПП
Рисунок 2 - топология ПП

Микроконтроллер питается напрямую от батарейки, тактируется от внутренней цепочки. В качестве шунта используются те же резисторы, что и для искробезопасной цепи (R7 в дальнейшем заменил на 100 Ом, а то возникли ожидаемые неприятности).

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

Рисунок 3 - Зависимость емкости от тока и температуры
Рисунок 3 - Зависимость емкости от тока и температуры
Рисунок 4 - Зависимость напряжения от тока и температуры
Рисунок 4 - Зависимость напряжения от тока и температуры

Температура будет отслеживаться при помощи сенсора имеющегося в микроконтроллере, точности сенсора, для решения данной задачи, хватает с лихвой ±3°C.

Стараюсь во всех проектах, в которых принимаю участие, дать доступ к как можно большему числу пинов МК, поэтому использую test point-ы, ну и как-то исторически сложилось, что для отладки изделий использую UART, просто подключаю его к преобразователю USB/UART и кидаю данные в терминальную программу(я использую hTerm, прям нравится).

АЦП

У данного МК, в выбранном корпусе, отсутствуют контакты для опорного напряжения аналоговой периферии и в качестве опорного напряжения используется напряжение питания. Естественно, напряжение питания будет меняться в зависимости от тока потребления, температуры и вообще деградации элемента питания. На этот случай в данном МК есть внутреннее референсное напряжение, оно подается на один из каналов АЦП. И вот это не совсем «классическая» схема (я столкнулся впервые). Тут получается следующий алгоритм, мы знаем, что на входе канала АЦП, подключенного к внутреннему референсному напряжению, всегда присутствует 1.224 В (значение хранится в определенном регистре), дальше все как всегда, составляется пропорция и узнаем напряжение питания МК, а заодно и напряжение элемента питания, так как питаю на прямую. Теперь данные поступающие из АЦП будут преобразованы верно, несмотря на изменяющееся напряжение питания.

Данные из температурного сенсора также поступают на вход канала АЦП.

Перед испытаниями

Проанализировав графики в документации на батарейку, можно вывести формулу зависимости емкости от температуры. График не имеет сильных отклонений, поэтому аппроксимировав его по двум конечным точкам, критической потери в точности данных не произойдет. В итоге формула зависимости емкости от температуры примет вид линейной функции:

y=kx+b

Вычислив значения коэффициентов k и b, а в качестве x подставляя температуру, по этой функции будет выводиться остаточная емкость элемента питания зависимая от температуры.

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

Рисунок 5 - Профиль потребления реального изделия
Рисунок 5 - Профиль потребления реального изделия

Поэтому, для большей чистоты испытаний, необходимо приблизить профиль тестовой нагрузки к реальному изделию. И сделать это не сложно, достаточно собрать токовую нагрузку на ОУ и управлять ей используя генератор сигналов. В итоге получается, что-то подобное.

Рисунок 6 - Электронная нагрузка на ОУ LM358
Рисунок 6 - Электронная нагрузка на ОУ LM358
Рисунок 7 - Имитация импульсной нагрузки
Рисунок 7 - Имитация импульсной нагрузки

Во время испытаний, батарейки и платы, будут анализироваться следующие параметры:

  • Температура

  • Текущее потребление тока

  • Использованная энергия

  • Оставшаяся расчетная емкость батарейки без учета температуры

  • Оставшаяся расчетная емкость батарейки с учетом температуры

  • Напряжение питания МК (напряжение элемента питания)

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

Сначала я наткнулся на интересную программу, но что-то не срослось, настроек оказалось слишком мало. Программа умеет сроить несколько графиков, но только настройка одна на всех, а как вы понимаете, у меня будут графики и с большими числами, и с небольшими но отрицательными, плюс нужно сохранять архив, чтобы его анализировать не в реальном времени, все это она потянуть не смогла. Ну и тут меня осенило - да я же в Matlab умею, всяко Simulink легко справится с моими пожеланиями. Собственно, я не ошибся, в итоге получилась следующая программа.

Рисунок 8 - Программа в Simulink
Рисунок 8 - Программа в Simulink
Рисунок 9 - Визуализация получаемых данных из МК
Рисунок 9 - Визуализация получаемых данных из МК

Испытания

Рисунок 10 - Испытания
Рисунок 10 - Испытания

Испытания проводились в климатической камере. Критическими и самыми интересными температурами являлись, естественно, отрицательные. Элемент питания не плохо себя показывает на отрицательных температурах до -50°C, дальше напряжение на нем при нагрузке опускается ниже 1.5V и тут уже отваливается сам МК. При температуре в -45°C ЭП держит напряжение 2.4V, которых как раз достаточно и необходимо, для работы модуля беспроводной связи. Во время дальнейшего повышения температуры до +25°C, а в дальнейшем и +85°C, стабилизируют напряжение "свежего" ЭП до 3.4V под нагрузкой. При этом емкость на критической отрицательной температуре разряжалась практически до нуля процентов, заявленных в документации производителя, то есть порядка 2 А*ч. При возвращении в плюсовые температуры, батарейка показывала стабильное напряжение еще порядка 10 А*ч.

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

Комментарии (16)


  1. vassabi
    05.11.2023 12:16

    а вы не смотрели (возьмем идеальные условия приема и +20С) - как отличается время жизни батарейки с датчиком и без датчика?


    1. Ringenium Автор
      05.11.2023 12:16

      А можно чуть точнее, с каким датчиком?)


  1. Kudriavyi
    05.11.2023 12:16
    +3

    Сам хотел такое реализовать, но останавливало всегда то, что stm32L0 не будет работать от Li-po аккумулятора, так как макс напряжение 3.6 вольта. Но почитав вашу статью родилась идея сделать на ch32v003. Заявляют сопоставимое потребление с stm32L0 но диапазон напряжений до 5.5 вольта. И цена в 20 рублей за корпус привлекает. Статье однозначно плюс.


    1. SuperTEHb
      05.11.2023 12:16

      Li-po 4,2 Вольта имеет в максимуме. 3,6 это номинальное напряжение. Так что всё ещё хуже, чем казалось.


  1. VT100
    05.11.2023 12:16

    В предпоследнем абзаце - массовое несовпадение единиц измерения.


    1. Ringenium Автор
      05.11.2023 12:16

      Перечитал, вроде все правильно. Возможно, что оборот речи ввел в заблуждение. Здесь имеется в виду, что при минусовой температуре, я "вытягивал" из батарейки 2Ач, после чего, напряжение проседало до 1.5V. После чего, эта же батарейка нагревалась до комнатной температуры и "отдавала" еще порядка 10Ач.


  1. sdy
    05.11.2023 12:16

    Почему не скрипт, а симулинк? Скрипт намного проще потом переиспользовать, можно даже скомпилировать и гуй полноценный сделать при желании. Причем ран тайм библиотека от матлаба вроде без лицух раньше ставилась на любой комп. Можно запускать будет скомпилированную прогу даже на компе без установки самого матлаба. Чисто вспомнил былое.


    1. yarmolinskiyam
      05.11.2023 12:16

      А как это сделать? Можете информацию покидать пожалуйста?


      1. Ringenium Автор
        05.11.2023 12:16
        +1

        Вот тут можно посмотреть


      1. sdy
        05.11.2023 12:16

        Раньше пользовался Matlab compiler. Им можно было скомпилировать все, начиная от простого скрипта, до скрипта с gui, который также в матлабе создавался, в исполняемый файл или библиотеку. В матлабе очень хороший хелп и примеры прям готовые были для создания приложений с гуем и без, вот надо их искать.


    1. Ringenium Автор
      05.11.2023 12:16
      +1

      Да мне просто так удобнее было и быстрее)

      А так-то да, можно прям приложки на нем делать с GUI-хой и будет запускаться на любом компе, даже без установленного матлаба)


  1. arthuru1
    05.11.2023 12:16
    +1

    На морозе не падает емкость, а возрастает внутреннее сопротивление батки. Если потребление импульсное можно поставить паралельно емкость с энергией = одному импульсу, это может сильно продлить жизнь батарейки на больших минусах. Полимерные алюминиевые электрооиты отлично подходят. А как вы измеряли ток батарейки, я так и не понял, ну шунт, а дальше что?


    1. Ringenium Автор
      05.11.2023 12:16

      Да, все верно, увеличивается сопротивление но в итоге ЭП, не сможет отдать на данном токе 13Ач, а отдаст примерно 2Ач

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

      Про измерение тока: в качестве шунта используются резюки, которые стоят для искробезопасной цепи, туда подключен канал АЦП ну и раз в миллисекунду меряем напряжение, переводим в ток и записываем в "банк", вроде классика)


    1. GidraVydra
      05.11.2023 12:16
      +1

      Сопротивление растет, но оно на емкость не влияет, только на мощность.

      У аккумов именно что падает емкость как таковая, то есть кол-во электричества, которое аккум способен воспринять, из-за затрудненной интеркаляции/деинтеркаляции ионов. У литий-ионных аккумов страдает в основном анод, поэтому в "низкотемпературных" аккумах обычно тупо берут избыточный анод.


  1. Nick_Shl
    05.11.2023 12:16
    +1

    В следствии чего пиковое потребление выросло с 50 мА до 160 мА и чудесный кулоновский счетчик работать перестал, так как его верхний диапазон 100 мА.

    Два в парралель?


    1. Ringenium Автор
      05.11.2023 12:16

      Ага, у них есть такая схема включения, но что-то решил не городить и сделать на одном МК, это дешевле)