Altinkaya: турецкие корпуса для РЭА

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

STMicroelectronics STM32F030xx

Журнал РАДИОЛОЦМАН, апрель 2017

Tommaso Angelino

Electronic Design

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Внутренний АЦП микроконтроллера не мог правильно измерять напряжение собственной шины питания, поэтому была разработана измерительная схема на стандартных дискретных компонентах, управляемая единственным выводом микросхемы

Эта схема помогла решить проблему, возникшую при разработке портативного устройства на процессоре ARM Cortex-M0. Требовалось информировать пользователя о состоянии источника питания, состоящего из двух 1.5-вольтовых батарей типоразмера AA. Cortex-M0 работает до тех пор, пока номинальное напряжение 3.3 В не упадет до 2.0 В, а батарея AA считается разряженной, когда ее напряжение снизится до 1.1 В, и, таким образом, для питания процессора еще остается 2.2 В. Устройство, потреблявшее исключительно низкую мощность, могло работать при напряжении, просевшем до 2.2 В, поэтому предупреждать пользователя о необходимости замены батарей прежде, чем будет достигнут этот уровень, не требовалось.

На первый взгляд, простейшим способом измерения напряжения батареи было использование аналого-цифрового преобразователя (АЦП) микроконтроллера. Однако в данном случае такое решение не годилось, поскольку, согласно технической документации на Cortex-M0, для правильной работы АЦП микроконтроллера требуется, чтобы напряжение его питания VDDA было больше 2.4 В. (Диапазон напряжений питания 3.3 В … 2.0 В является допустимым для ядра ARM, но не для всей периферии). Тесты показывали хорошие результаты лишь тогда, когда напряжение VDDA было не ниже 2.65. Очевидным решением было взять другой микроконтроллер, скажем, маломощную версию того же прибора, но это означало необходимость переписывания и перепроверки кода, разводки и изготовления новых печатных плат, и недопустимо увеличивало цену серийного изделия.

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

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

На Рисунке 1 показано, как с помощью единственного вывода PA0 микроконтроллер реализует различные функции контроля батарей, управляя переключателем S для перехода из пассивного режима в активный, читая статус, предоставляемый Монитором батареи, и возвращаясь обратно из активного режима в режим ожидания.

Микроконтроллер управляет монитором батареи с помощью единственного вывода
Рисунок 1. На упрощенной блок-схеме показана взаимосвязь функций схемы,
управляемой единственным выводом микроконтроллера.

Вся схема получает питание от двух элементов AA (Рисунок 2). Каждые n минут (или даже часов) микроконтроллер проверяет, превышает ли напряжение батареи уровень 2.2 В, или нет. Когда измерение напряжения микроконтроллеру не требуется, он устанавливает «лог. 1» на выводе PA0, и Q5 находится в выключенном состоянии. Этим гарантируется, что ток, потребляемый Монитором батареи (синий блок на Рисунке 1) будет очень низким, что крайне важно для портативных устройств. Измеренный в этом состоянии ток равен примерно 4 мкА.

Микроконтроллер управляет монитором батареи с помощью единственного вывода
Рисунок 2. В схеме монитора батареи, управляемой одним выводом
микроконтроллера, используются пять распространенных
транзисторов и пассивные компоненты.

Когда микроконтроллеру требуется узнать напряжение батареи, он на 20 мс выставляет уровень «лог. 0» на выводе PA0, открывая транзистор Q5. Это время необходимо для заряда конденсатора C1 до напряжения, равного разности VDD и напряжения насыщения транзистора Q5. По истечении 20 мс микроконтроллер переключает вывод PA0 в режим ввода, вследствие чего транзистор Q5 выключается, и на конденсаторе C1 в течение некоторого времени, зависящего от постоянной времени RC, сохраняется напряжение, равное VDD.

Если VDD больше 2.2 В, то напряжение база-эмиттер транзистора Q3 выше 0.7 В, и Q3 открыт. Это напряжение зависит от подстроенного резистора RV1 и включенных диодами транзисторов Q1, Q2. Регулировкой RV1 мы можем изменять величину напряжения в точке B и, соответственно, в точке A до уровня открывания транзистора, и обратно. При испытаниях схемы сопротивление резистора RV1 было выбрано равным 12 кОм. Затем, благодаря тому, что VDD ≥ 2.2 В, Q3 включается, и уровень напряжения в точке C становится высоким, в то время как транзистор Q4, необходимый для того, чтобы изолировать цепочку R3, C2 от точки E на те 20 мс, пока на выводе PA0 присутствует «лог. 0», инвертирует это напряжение, и уровень точки E становится низким. Таким образом, если VDD ≥ 2.2 В, на входе PA0 будет напряжение низкого уровня.

Через 50 мс после начала процедуры измерения микроконтроллер будет проверять состояние входа PA0, поэтому спустя 20 мс после установки «лог. 0» он переключает вывод PA0 в режим ввода. По истечении 50 мс (относительно начального момента времени) микроконтроллер считывает напряжение с входа PA0 (нижняя осциллограмма на Рисунок 3). Процедура заканчивается переключением PA0 в режим вывода и установкой на нем высокого логического уровня, выключающего транзистор Q5 и уменьшающего ток, потребляемый секцией Монитора батареи.

Микроконтроллер управляет монитором батареи с помощью единственного вывода
Рисунок 3. Нижний луч показывает выборку микроконтроллером напряжения на
выводе PA0 через 50 мс после начала процедуры измерения при VDD ≥ 2.2 В.
(Канал 1: 25 мс/дел по горизонтали, 1 В/дел по вертикали).

Теперь посмотрим, что будет происходить, если VDD меньше 2.2 В. Как и в предыдущем случае, последовательность начинается с установки на 20 мс низкого уровня на выводе PA0 для включения транзистора Q5 и зарядки конденсатора C1.

Затем, микроконтроллер переключает PA0 в режим ввода, вследствие чего Q5 закрывается и дает возможность конденсатору C1 в течение некоторого времени сохранять напряжение VDD. Но теперь VDD меньше 2.2 В, и поэтому Q3 остается закрытым, так как напряжение база-эмиттер этого транзистора меньше 0.7 В, в то время как напряжение в точке C остается низким, а в точках D и E становится высоким. Поэтому при VDD < 2.2 В уровень напряжения на входе PA0 будет также высоким. Напомним, что выборку напряжения на выводе PA0 микроконтроллер будет производить через 50 мс после запуска процедуры измерений, как это видно из нижней осциллограммы на Рисунке 4.

Микроконтроллер управляет монитором батареи с помощью единственного вывода
Рисунок 4. Нижний луч показывает выборку микроконтроллером напряжения
на выводе
PA0 через 50 мс после начала процедуры измерения при VDD < 2.2 В.
(Канал 1: 25 мс/дел по горизонтали, 1 В/дел по вертикали).

Необходимо отметить, что сопротивления резисторов R1, R2, R3, R4 и R7 оптимизированы не для получения наилучших электрических характеристик, а для воспроизводимости устройства в условиях массового производства. Скоростные характеристики схемы можно улучшить, сократив время заряда конденсатора C1 с 20 мс до 5 мс, и выполняя выборку через 2…4 мс. Это снизит ток, потребляемый в активном режиме, что важно в том случае, если проверять состояние батареи требуется более часто.

Для проверки схемы можно использовать фрагмент кода, приведенный в конце статьи.

Материалы по теме


Init(GPIO,Clock,и т. д.);
void Test_BattMon(void)

{
   // Использование вывода PA0 для управления и выборки напряжения батареи
   while(l)
   {
      SetPA0Mode("OUT");  // PA0 в режим вывода
      ClrPA0;             // Установить низкий уровень на PA0
      Delay(20);          // Время 20 мс для заряда C1
      SetPA0Mode("IN");   // PA0 в режим ввода
      Delay(30);          // Задержка на 50 мс для выборки
      if(ReadPA0==High)   // Напряжение батареи меньше 2.2 В
        LedR_ON;          // Включить красный светодиод
      else                // Напряжение батареи больше 2.2 В
        LedG_ON;          // Включить зеленый светодиод
      SetPA0Mode("OUT");  // PA0 в режим вывода
      SetPAO;             // Установить высокий уровень на PA0

      Delay(1000);
      LedR_OF;LedG_OF;
   }
}

Перевод: AlexAAN по заказу РадиоЛоцман

На английском языке: Microcontroller Battery Monitor Circuit Needs Only One Pin

Электронные компоненты. Бесплатная доставка по России
Для комментирования материалов с сайта и получения полного доступа к нашему форуму Вам необходимо зарегистрироваться.
Имя
Фрагменты обсуждения:Полный вариант обсуждения »
  • "...и уровень точки E становится высоким". Неправильно. В оригинале "...low voltage at point E".
  • А чем не устраивает "трёхногий" монитор (пониженого,/повышеного напряжения? [COLOR="RoyalBlue"]Можно горчицей намазывать Ж..... Можно! Но нужно ли это[/COLOR]
  • Спасибо, kilometrix, исправлено.
  • Ппц...наворотить такое...при том что у контроллера куча незадействованных выводов! Даже если сделать одной ногой контроль напряжения, второй управление ключом было бы гораздо проще и схема и программа. Можно даже без ключей: имеем делитель из двух резисторов, верхний на питании, нижний на ножке порта. Средняя точка делителя на вход АЦП. Вот и вся схема)) Первая ножка работает как open drain Output. Когда она в "1" делитель ничего не потребляет. Когда нужно померить напряжение записываем в нее "0" и читаем АЦП. Вуаля.