Перейти к содержанию

Ирримат

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

Предыстория

Чуть больше года назад я собрал простенькое устройство, которое замеряет уровень влажности грунта в цветочном горшке и включает водяную помпу, если эта самая влажность достигает некоторого минимального уровня. Устройство выводит данные об уровне влажности на встроенный дисплей, управляется маленькой пяти-позиционной кнопкой (джойстик) и питается от обычного 5-вольтового источника питания (такого как зарядка от телефона).

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

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

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

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

Я написал начальные требования к будущему устройству:

  • Питание от сменных батарей типа АА (4 шт.) или аккумуляторов типоразмера 14500 (4 шт.), или аккумуляторов типоразмера 18650 (2 шт.);
  • Питание от внешнего источника 5 В (например, бытовых зарядных устройств для сотовых телефонов и т.п.);
  • Автоматическое переключение питания на батареи или аккумуляторы при отключении внешнего источника питания;
  • Автоматический режим заряда аккумуляторов при подключении внешнего источника питания;
  • Индикация при помощи светодиода (красный, мигание) во время заряда аккумуляторов;
  • Индикация при помощи светодиода (зеленый, свечение) во время работы от внешнего источника, после окончания заряда аккумуляторов;
  • Индикация при помощи светодиода (синий, мигание) о необходимости полива в режиме ручного полива или при нехватке воды в контейнере;
  • При работе от батарей или аккумуляторов индикация питания отсутствует;
  • Автоматическое измерение влажности почвы с установленным интервалом;
  • Автоматический контроль уровня воды в контейнере перед каждым включением помпы;
  • Включение помпы только при достижении нижней границы установленного минимального уровня влажности почвы и при достаточном объеме воды в контейнере;
  • Сохранение значений настроек режимов работы в энергонезависимой памяти (см. "Требования к ПО");
  • Управление работой и настройками при помощи 5-позиционного джойстика (см. "Требования к ПО");
  • Вывод информации о работе на графический дисплей при нажатии на кнопку джойстика и отключение дисплея через настраиваемое время (см. "Требования к ПО");
  • Включение/продление подсветки дисплея при нажатии на кнопки джойстика (см. "Требования к ПО").

Далее, я буду вести записи в форме журнала по датам.

08.02.2026

На сегодняшний день у меня есть микроконтроллер STM32L431CCT6, на базе которого я начал разработку схемы устройства.

Я нашел документ (далее - AN4555), описывающий основные требования к разработке устройств на базе указанного микроконтроллера. Используя этот документ совместно с другим (далее - Datasheet), изучаю, как правильно обеспечить питание.

Цепи питания

Выяснил, что имеются цепи питания:

  • VDD/VSS ("силовая" часть, питание основных цифровых узлов микроконтроллера);
  • VDDA/VSSA (питание узлов обработки аналоговых сигналов: АЦП, операционные усилители и т.п.);
  • VBAT (резервное питание для обеспечения работы некоторых узлов при потере основного источника).

В AN4555 я нашел базовую схему обвязки, которую решил использовать.

Насколько я понимаю, керамические конденсаторы на 100 нФ между пинами VDD и VSS нужны в качестве буферов, сглаживающих возможные высокочастотные помехи. Это обуславливает, в том числе, их емкость. Эти конденсатоты надо будет не забыть установить как можно ближе к пинам, а лучше на обратной стороне под микроконтроллером. Кстати, именно такую рекомендацию дает разработчик микроконтроллера в AN4555: "These capacitors need to be placed as close as possible to, or below, the appropriate pins on the underside of the PCB.".

Единый для всей цепи VDD/VSS керамический конденсатор на 4.7 мкФ здесь играет роль более грубого фильтра, снижающего влияние низкочастотных помех. Для этого он имеет большую емкость и низкое сопротивление. Нужно не забыть установить этот конденсатор на плате непосредственно перед всеми керамическими конденсаторами на 100 нФ в упомянутой цепи.

Также, в AN4555 сказано о том, что в цепь VDDA/VSSA следует добавить, кроме керамического конденсатора еще дроссель (ИИ посоветовал, например, BLM18PG121SN1) для снижения влияния электромагнитных помех и еще один конденсатор на 10 мкФ перед ним.

Еще раз: керамический конденсатор рекомендуют устанавливать на каждую из цепей питания: "In addition, each power supply pair should be decoupled with filtering ceramic capacitors (100 nF) and a Tantalum or ceramic capacitor of about 10 μF connected in parallel on the STM32L4/STM32L4+ Series devices.".

BOOT0

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

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

14.02.2026

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

Номер Идентификатор
1 VBAT
3 PC14-OSC32_IN
4 PC15-OSC32_OUT
5 PH0-OSC_IN
6 PH1-OSC_OUT
7 NRST
8 VSSA/VREF-
9 VDDA/VREF+
23 VSS
24 VDD
27 PB14 (SWCLK)
28 PB15 (SDWIO)
35 VSS
36 VDD
44 PH3/BOOT0
47 VSS
48 VDD

С пинами VDD, VSS, VDDA, VSSA и BOOT0 я вроде бы разобрался выше.

NRST

Пару слов про NRST. И в AN4555, и в Datasheet есть схемы подключения этого пина. А в Datasheet даются электрические характеристики и меры защиты пина. Вот такая схема, например:

В документе AN4555 сказано: "A system reset is generated when one of the following events occurs:... A low level on the NRST pin (external reset)". Буквально, это означает, что при низком уровне на пине выполняется сброс (один из вариантов сброса, на самом деле).

Примечание: конденсатор около кнопки RESET рекомендуют устанавливать как можно ближе к пину NRST.

SWD

В AN4555 сказано, что для SWD следует использовать пины PA13 (SWDIO) и PA14 (SWCLK). Кроме этого, на разъем для программирования нужно подвести линию NRST. Рекомендуемая схема из документа:

OSC32 (LSE)

Можно присмотреться к такому резонатору. Каждый вывод резонатора подключается к соответствующему пину и также через конденсатор на землю:

OSC (HSE)

Такой резонатор в аналогичном корпусе. Схема тоже отличается только номиналом конденсаторов и наличием резистора:

15.02.2026

VBAT (дополнение)

Решил систематизировать информацию об этом пине и всем "аппаратном", что с ним связано. Буду рассматривать уже известные документы - Datasheet и AN4555, а также посмотрю, где еще встречаются сведения.

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

Сначала рассмотрим Datasheet. Среди общих возможностей микроконтроллера упоминатеся: "200 nA in VBAT mode: supply for RTC and 32x32-bit backup registers". Потребление 200 наноампер при поддержке работы RTC и регистров резервирования (пока назову так).

Отдельные разделы посвящены:

  • VBAT operation
  • VBAT battery voltage monitoring
  • VBAT monitoring characteristics
  • Таблица 39: Current consumption in VBAT mode
  • Таблица 78: VBAT monitoring characteristics
  • Таблица 79: VBAT charging characteristics

Общее описание

В общем описании сказано, что "...A VBAT input allows to backup the RTC and backup registers." - вход VBAT позволяет резервировать питание RTC и регистров резервирования. Это я уже видел ранее :)

Диаграмма 1

Тут указано напряжение VBAT: от 1.55 до 3.6 В. Дополнительно нарисован функциональный модуль, который может быть запитан от этого источника. В этот модуль, если я правильно понимаю, входят внешний тактовый резонатор на 32КГц, RTC, AWU (пока не знаю, что это) и регистры резервирования. Также данный функциональный модуль связан с шиной APB1 и сигналами OSC32_IN, OSC32_OUT, RTC_TS, RTC_TAMPx, RTC_OUT. Далее, наверное, я лучше пойму, что это значит.

Параграф 3.9.1 "Схемы источников питания"

В списке схем снова приводятся общие сведения: "VBAT = 1.55 to 3.6 V: power supply for RTC, external clock 32 kHz oscillator and backup registers (through power switch) when VDD is not present." (напряжение VBAT от 1.55 до 3.5 В, питает RTC, внешний тактовый резонатор и регистры резервирования, при отсутствии питания через VDD).

Схема 2 "Обзор источников питания"

Здесь изображен VBAT, активирующийся при помощи некоего "Low voltage detector" и питающий так называемый "Backup domain" (пусть будет "Область резервирования"), в который входят "LSE crystal 32 K osc, BKP registers, RCC BDCR register, RTC".

Таблица 5 "Функциональность, зависящая от режима работы".

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

  • Backup Registers: функционируют полностью
  • Low Speed External (LSE): функционирует опционально, по-умолчанию отключено
  • RTC / Auto wakeup: функционирует опционально, по-умолчанию отключено
  • Число RTC Tamper pins: The SRAM clock can be gated on or off (что бы это ни значило)

Параграф 3.9.5 "VBAT operation"

Вывод VBAT позволяет запитать резервную область от внешней батареи, внешнего суперконденсатора (ионистора) или от VDD, когда нет внешней батареи и внешнего суперконденсатора. Вывод VBAT обеспечивает питанием RTC, LSE и резервные регистры. В режиме VBAT доступны три контакта для защиты от несанкционированного доступа (anti-tamper detection).

VBAT активируется автоматически, когда VDD отсутствует.

Встроенная внутренняя схема зарядки аккумулятора VBAT может быть активирована при наличии питания от VDD.

Примечание

Когда микроконтроллер питается от VBAT, внешние прерывания и сигналы RTC не выводят его из режима работы VBAT.

Параграф 3.11 "Тактирование и запуск"

Контроллер тактовой частоты распределяет тактовые сигналы, поступающие от различных генераторов, на ядро и периферийные устройства. Он также управляет синхронизацией в режимах с низким энергопотреблением и обеспечивает устойчивость тактовой частоты. Он оснащен, в числе прочего, LSCO (low speed clock output или низкоскоростной тактовый выход). LSCO выводит LSI или LSE во всех режимах с низким энергопотреблением, вплоть до режима ожидания. LSE также может выводиться на LSCO в режиме выключения. LSCO недоступен в режиме VBAT.

Параграф 3.15 "Аналого-цифровой преобразователь" (ADC)

Если я правильно понял, тут сказано, что пин VBAT можно использовать как вход АЦП: "5 internal channels: internal reference voltage, temperature sensor, VBAT/3, DAC1_OUT1 and DAC1_OUT2".

Параграф 3.5.3. Мониторинг напряжения батареи VBAT

Встроенная аппаратная функция мониторинга позволяет измерять напряжение батареи VBAT с помощью внутреннего канала АЦП ADC1_IN18. Поскольку напряжение VBAT может быть выше, чем VDDA, и, следовательно, находиться за пределами входного диапазона АЦП, вывод VBAT подключается к делителю на 3. Как следствие, преобразованное цифровое значение составляет одну треть от напряжения VBAT.

Параграф 3.23. RTC и резервные регистры

RTC - это независимый таймер/счетчик. Он поддерживает следующие функции:

  • Функция метки времени, которая может использоваться для сохранения значения календаря. Она может быть активирована/деактивирована событием на пине, событием на пине защиты от несанкционированного доступа или переключением в режим VBAT.

RTC и 32 резервных регистра подключаются через коммутатор, который получает питание либо от источника питания VDD, если таковой имеется, либо от вывода VBAT.

RTC работает в режиме VBAT и во всех режимах с низким энергопотреблением, когда он синхронизирован с LSE. При синхронизации с LSI, RTC не работает в режиме VBAT, но работает во всех режимах с низким энергопотреблением, кроме режима выключения (Shutdown).

Рисунок 12. Распиновка STM32L431Cx в корпусе LQFP48

Ну, тут просто сказано, что пин VBAT - это пин 1.

Таблица 15. Определение пинов STM32L431xx

Здесь тоже все понятно: VBAT явояется пином типа S (относится к подсистемам питания - supply).

Рисунок 18. Схема питания

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

Рисунок 19. Схема измерения потребления тока

На схеме указаны точки, которыми следует воспользоваться для измерения потребления тока. А так как в разных режимах работы потребление будет разным, нужно сверяться при этом с значением IDD_ALL в таблицах с 26 по 38.

Таблица 19. Характеристики напряжения

Напряжение внешнего питания (включая VDD, VDDA, VBAT): минимальное -0,3; максимальное - 4 В.

  1. Все контакты основного питания (VDD, VDDA, VBAT) и заземления (VSS, VSSA) всегда должны быть подключены к внешнему источнику питания в разрешенном диапазоне.

таблица 22. Общие условия эксплуатации

В очередной раз тут можно увидеть требования по напряжению для VBAT: от 1.55 до 3.6 В.

Таблица 39. Потребляемый ток в режиме VBAT

А вот в этой таблице много справочного материала для соблюдения условий функционирования устройства. Приводятся значения потребления тока резервной областью при условии использования RTC и без него, при разных температурах. Например, в условиях комнатной температуры, при выключенном RTC и резервной батарее на 3 В, потребление должно быть от 5 до 12.5 наноампер. А вот при включенном RTC и тех же прочих условиях, потребление уже составит от 316 наноампер.

Параграф 6.3.24 Характеристики мониторинга VBAT

Таблица 78. Характеристики мониторинга VBAT

Символ Параметр Мин. Тип. Макс. Ед.изм.
R Резистор для VBAT - 39 - кОм
Q Коэффициент при измерении VBAT - 3 - -
Er Ошибки Q -10 - 10 %
tS_vbat Время дискретизации АЦП при считывании VBAT 12 - - мкс

Таблица 79. Характеристики зарядки VBAT

Символ Параметр Условие Мин. Тип. Макс. Ед.изм.
RBC Резистор для зарядки батареи VBRS = 0 - 5 - кОм
RBC Резистор для зарядки батареи VBRS = 1 - 1.5 - кОм

В последней таблице указано значение, как я понял, бита VBRS, который отвечает за использование внутреннего сопротивления на 5 или 1.5 кОм для зарядки батареи. Если бит установлен, то зарядка будет идти быстрее.

Больше в Datasheet про VBAT ничего нет.

Теперь посмотрим, что есть в AN4555.

Параграф 2.1 "Источники питания"

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

  • напряжение VBAT от 1.55 до 3.6 В
  • VBAT служит источником питания для RTC, внешнего генератора тактовой частоты 32 кГц и резервных регистров, когда VDD отсутствует.

На рисунках 1 и 2 (Power supply overview: STM32L4 Series, Power supply overview: STM32L4+ Series) приведены общие схемы для VBAT - коммутатор и питаемые модули.

Параграф 2.1.6 "Область резервирования"

Для сохранения содержимого резервных регистров и обеспечения функции RTC при выключенном VDD вывод VBAT может быть подключен к дополнительному резервному питанию, подаваемому от батареи или другого источника.

Вывод VBAT обеспечивает питание блока RTC, LSE и пинов PC13-PC15, что позволяет RTC работать даже при отключенном основном источнике питания. Переключение на питание VBAT осуществляется при отключении питания, с помощью встроенного блока управления сбросом.

Во время задержки при запуске VDD (tRSTTEMPO) или после обнаружения сбоя PDR (Power Down Reset - сброс при выключении питания) переключатель питания между VBAT и VDD остается подключенным к VBAT.

На этапе запуска, если VDD устанавливается за время, меньшее чем tRSTТЕМПО (значение tRSTТЕМПО приведено в техническом описании), и VDD > VBAT + 0,6 В, в VBAT может подаваться ток через внутренний диод, подключенный между VDD и выключателем питания (VBAT).

Если источник питания или аккумулятор, подключенный к выводу VBAT, не может поддерживать подачу такого тока, настоятельно рекомендуется подключить внешний диод низкого напряжения между этим источником питания и выводом VBAT.

Если не используется внешняя батарея, рекомендуется подключить VBAT к VDD с помощью керамического разделительного конденсатора емкостью 100 нФ.

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

  • PC13, PC14 и PC15 могут использоваться в качестве выводов GPIO или могут быть сконфигурированы для RTC или LSE (см. раздел Reference manual: Функциональное описание RTC).
  • PA0/RTC_TAMP2 и PE6/RTC_TAMP3 (на моем корпусе нет такого), если они сконфигурированы RTC в качестве контрольных контактов.

Примечание: В связи с тем, что аналоговый коммутатор может передавать только ограниченное количество тока (3 мА), использование пинов PC13-PC15 в режиме вывода ограничено: частота должна быть ограничена 2 МГц при максимальной нагрузке 30 пФ, и эти операции ввода-вывода не должны использоваться используется в качестве источника тока (например, для питания светодиода).

Доступ к резервной области

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

  1. Включите синхронизацию интерфейса питания, установив биты PWREN в регистре включения периферийных синхронизаторов APB1 (RCC_APB1ENR1).
  2. Установите бит DBP в Power control register 1 (PWR_CR1) для включения доступа к резервной области.
  3. Выберите источник синхронизации RTC в реестре управления резервной областью (RCC_BDCR).
  4. Включите синхронизацию RTC, установив бит RTCEN в регистре управления резервной областью (RCC_BDCR).

Программирование я тут особо глубоко пока не рассматриваю, поэтому не буду разбирать эти нюансы.

Зарядка батареи VBAT

При наличии VDD можно заряжать внешнюю батарею от VBAT с помощью внутреннего сопротивления.

Зарядка VBAT осуществляется либо через резистор 5 kΩ, либо через резистор 1,5 kΩ, в зависимости от значения бита VBRS в регистре PWR_CR4. Зарядка аккумулятора осуществляется путем установки бита VBE в регистре PWR_CR4. Он автоматически отключается в режиме VBAT.

Параграф 2.2 "Схемы питания"

Схема питается от стабилизированного источника питания VDD.

  • Вывод VBAT может быть подключен к внешнему аккумулятору для сохранения содержимого резервной области. При наличии VDD можно заряжать внешний аккумулятор от VBAT с помощью внутреннего резистора сопротивлением 5 kΩ или 1,5 kΩ. Если не используется внешняя батарея, рекомендуется подключить VBAT к VDD с помощью керамического разделительного конденсатора емкостью 100 нФ.

Параграф 2.4.4 Сброс резервной области

Резервная область имеет два специфических режима сброса.

Сброс генерируется при возникновении одного из следующих событий:

  1. Программный сброс, запускаемый установкой бита BDRST в регистре управления резервной областью (RCC_BDCR).
  2. Включение питания VDD или VBAT, если оба источника питания ранее были отключены.

Сброс резервной области влияет только на генератор LSE, RTC, резервные регистры и управляющий регистр резервной области RCC.

Вывод сегодняшнего дня

Вот такая схема обвязки "служебных" пинов у меня получается:

Если я правильно понимаю изложенную выше информацию, то пин VBAT "обвязан" достаточно правильно. И таким образом все "служебные" контакты микроконтроллера вроде как могут уже быть размещены на плате. А значит, далее, можно переходить к проектированию функциональной части устройства.