Сброс по питанию, BOD и супервизор
Микроконтроллер должен стартовать только при нормальном питании и уходить в сброс, как только оно просело. Внутри для этого есть сброс по включению питания и детектор пониженного напряжения (BOD), снаружи — RC-цепь на выводе сброса или микросхема-супервизор. Разбираем, что из этого нужно ATmega328P и STM32F103 и как выбрать порог.
Обновлено Редакция GAW
Сброс по питанию удерживает микроконтроллер неподвижным, пока напряжение не дошло до рабочего, а детектор пониженного напряжения (brown-out detector, BOD) возвращает его в сброс, если питание просело. Без них при медленном нарастании или провале питания процессор исполняет программу при напряжении, на котором не гарантированы ни тактовая частота, ни запись во флеш, ни EEPROM: портятся настройки, «зависают» периферийные микросхемы.
Коротко
- ATmega328P, BOD
- 1,8 / 2,7 / 4,3 В, фьюзы BODLEVEL
- Подтяжка RESET
- 30–60 кОм внутри, снаружи от 4,7 кОм
- STM32F103, POR/PDR
- 1,8–2,0 В, всегда включены
- NRST STM32
- 30–50 кОм внутри, 0,1 мкФ снаружи
- Супервизор
- пороги 2,6–4,6 В, сброс от 120 мс
- Для STM32
- только открытый сток
Как устроен сброс внутри
У ATmega328P четыре источника сброса: включение питания, низкий уровень на выводе RESET, сторожевой таймер и BOD (DS40002061B, разд. 11.2). Схема сброса по питанию срабатывает, пока VCC ниже порога VPOT — 1,1–1,6 В на нарастании, — а после него внутренний счётчик держит сброс ещё время tTOUT, которое задают фьюзы SUT: 4,1 или 65 мс при 5 В (табл. 9-2 и 9-4). Даташит прямо оговаривает, что задержка не следит за напряжением: её выбирают длиннее времени нарастания питания, а если это невозможно, нужен BOD (разд. 9.2.2).
BOD сравнивает VCC с порогом, который задают фьюзы BODLEVEL. Порог имеет гистерезис 50 мВ: сброс включается сразу, как только напряжение опустится ниже VBOT−, и снимается через tTOUT после подъёма выше VBOT+ (разд. 11.5). Короткие провалы короче tBOD (около 2 мкс) детектор не замечает (табл. 29-11).
| BODLEVEL[2:0] | Минимум | Типично | Максимум |
|---|---|---|---|
| 111 | BOD выключен | — | — |
| 110 | 1,7 В | 1,8 В | 2,0 В |
| 101 | 2,5 В | 2,7 В | 2,9 В |
| 100 | 4,1 В | 4,3 В | 4,5 В |
Коды 011–000 зарезервированы (табл. 29-12). Фьюзы удобно собрать в калькуляторе фьюзов AVR. Значения таблицы 29-11 Microchip помечает как ориентировочные, а пороги BOD проверяет при производстве при 25 и 85 °C (примечания к табл. 29-11 и 29-12).
У STM32F103 сброс по питанию и по снижению (POR/PDR) включён всегда, внешняя цепь для старта ему не нужна (DS5319, разд. 2.3.10). Порог — 1,80–1,96 В на спаде и 1,84–2,0 В на нарастании, гистерезис 40 мВ, после порога сброс держится ещё 1,0–4,5 мс (табл. 11). Программируемый детектор PVD с восемью уровнями от 2,18 до 2,88 В (типично, на нарастании; на спаде на 100 мВ ниже) сам сброс не вызывает: он выдаёт прерывание, в котором программа успевает сохранить данные и остановить периферию.
RC-цепь на выводе RESET
Вывод RESET ATmega328P уже подтянут к питанию резистором 30–60 кОм (табл. 30-1) и проходит через фильтр. В обычных условиях его можно оставить свободным или соединить с питанием. Microchip в AN2519 (рис. 3-1) рекомендует внешнюю цепь для шумных условий:
- R1 — подтяжка. От 4,7 кОм, чтобы программатор мог опустить линию; для отладки через debugWIRE — не меньше 10 кОм.
- C1 — конденсатор 100 нФ на общий провод. Это дополнительная защита от помех; при отладке через debugWIRE или PDI его не ставят, иначе линия не успевает переключаться.
- VD1 — диод от RESET к VCC. Своего защитного диода у вывода RESET нет, потому что на него подают 12 В при высоковольтном программировании. Если оно не нужно, диод защищает вывод от разрядов и выбросов.
Постоянная времени R1 · C1 = 4,7 кОм · 100 нФ = 0,47 мс. Отпускание сброса определяют порог вывода (от 0,2 до 0,9 VCC, табл. 29-11) и внутренняя задержка tTOUT — 4,1 или 65 мс, то есть в 9–140 раз длиннее, поэтому RC-цепь здесь фильтрует помехи, а не формирует задержку. Внешний импульс сброса должен быть не короче 2,5 мкс.
Кнопку сброса включают между RESET и общим проводом через небольшой резистор: без него кнопка мгновенно разряжает C1, ток через контакты и индуктивность дорожек даёт выбросы напряжения на выводе (AN2519, разд. 3.1).
Порог BOD и тактовая частота
Порог выбирают по самому высокому напряжению, при котором микроконтроллер ещё работает на своей частоте. Для ATmega328P допустимая частота растёт линейно: 4 МГц при 1,8 В, 10 МГц при 2,7 В и 20 МГц при 4,5 В (разд. 29.3).
- 16 МГц от 5 В (как на Arduino Uno). Минимальное напряжение для 16 МГц: 2,7 + (16 − 10)/10 · 1,8 = 3,78 В. Подходит только BODLEVEL = 100: его порог не ниже 4,1 В. С порогом 2,7 В процессор будет работать с превышением частоты в диапазоне 2,7–3,78 В.
- 8 МГц от 3,3 В. Частота 8 МГц допустима, пока VCC выше 1,8 + (8 − 4)/6 · 0,9 = 2,4 В. BODLEVEL = 101 (2,5–2,9 В) подходит с запасом.
С включённым BOD задержку tTOUT можно отключить (SUT «BOD enabled» в табл. 9-4): тогда после превышения порога остаются только 14 тактов и время запуска генератора — 16K тактов у кварца, около 1 мс при 16 МГц (табл. 9-4 и 9-6). BOD работает во всех режимах сна и всё это время потребляет ток (разд. 10.10.3) — в батарейных устройствах это нужно учитывать.
Внешний супервизор
Микросхема-супервизор сравнивает питание с точным порогом и держит выход сброса активным, пока напряжение ниже порога, и ещё 120–560 мс после его восстановления — в зависимости от типа. Она нужна, когда встроенного детектора нет или его порог не подходит: например, STM32F103 продолжает работать до 2,0 В, а другие микросхемы на шине 3,3 В отключаются раньше, или нужно сбрасывать несколько микросхем одним сигналом.
| Супервизор | Выход | Пороги | Время сброса | Особенности |
|---|---|---|---|---|
| MAX809 (ADI) | двухтактный | L 4,63, M 4,38, T 3,08, S 2,93, R 2,63 В | 140–240–560 мс (SOT23), 140–240–460 мс (SC70) | верный уровень с VCC = 1 В |
| MAX803 (ADI) | открытый сток | те же, только SC70 | 140–240–460 мс | для двунаправленных выводов сброса |
| MCP1316 / MCP1316M (Microchip) | двухтактный / открытый сток с подтяжкой 4,7 кОм | стандартно 2,9 и 4,6 В | 140–200–280 мс | вход сторожевого таймера и кнопки |
| TPS3839 (TI) | двухтактный | L30 2,63, K33 2,93, G33 3,08, K50 4,38 В | 120–200–350 мс | ток 150 нА |
Значения порогов — типичные; минимум и максимум у MAX809L — 4,56–4,70 В при 25 °C и 4,50–4,75 В в диапазоне −40…+85 °C, у MAX809S — 2,85–3,00 В в том же диапазоне. У MCP1316 точность порога ±1,5 % при 25 °C и ±2,5 % во всём диапазоне: для варианта на 4,6 В это 4,485–4,715 В. ADI советует ставить у вывода VCC конденсатор 0,1 мкФ — он повышает устойчивость к коротким провалам.
Порог супервизора выбирают между минимальным напряжением питания в работе и минимальным напряжением, при котором работают все микросхемы схемы. Порог не должен заходить в допуск самого источника, причём сброс снимается не на пороге, а на пороге плюс гистерезис. Стабилизатор 7805 выдаёт 4,75–5,25 В (MC7805C, см. линейный стабилизатор). У MAX809L порог до 4,75 В в диапазоне −40…+85 °C — ровно на нижней границе. У MCP1316 на 4,6 В гистерезис 1–6 % порога (0,046–0,276 В), и напряжение, при котором он снимает сброс, может доходить до 4,95 В уже при 25 °C — выше минимума 7805. Поэтому за 7805 ставят MAX809M: порог 4,25–4,50 В в том же диапазоне, выше 3,78 В, которые нужны ATmega328P на 16 МГц, и ниже 4,75 В. MAX809L и MCP1316 на 4,6 В годятся для источника с допуском лучше ±2–3 %.
NRST у STM32F103
Вывод NRST подтянут к VDD резистором 30–50 кОм, сигнал проходит через фильтр: импульсы короче 100 нс он подавляет, импульсы длиннее 300 нс гарантированно вызывают сброс (DS5319, табл. 39). ST рекомендует конденсатор 0,1 мкФ от NRST на общий провод — он защищает от ложных сбросов (рис. 31). Внешняя схема должна опускать NRST ниже 0,8 В, иначе сброс не будет воспринят.
Главная особенность — NRST двунаправленный. Любой внутренний сброс (сторожевые таймеры, программный сброс, сброс по питанию) выводится на NRST, и генератор держит его низким не меньше 20 мкс (RM0008, разд. 7.1). Поэтому супервизор, кнопку и программатор подключают только выходами с открытым стоком: MAX803, MCP1316M или MCP1320 с внешней подтяжкой. ADI прямо приводит MAX803 как вариант для микроконтроллеров с двунаправленным выводом сброса.
Детали
| Позиция | Деталь | Примечание |
|---|---|---|
| R1 | 4,7–10 кОм | подтяжка RESET у AVR, для debugWIRE от 10 кОм |
| C1 | 100 нФ, керамика | у вывода RESET или NRST |
| VD1 | маломощный диод | от RESET к VCC, если не нужно высоковольтное программирование |
| DA1 (AVR, 5 В) | MAX809M за 7805; MAX809L — при точном 5 В | двухтактный выход допустим |
| DA1 (STM32, 3,3 В) | MAX803S, MCP1316M на 2,9 В | только открытый сток |
| C2 | 0,1 мкФ | у вывода питания супервизора |
Варианты
- Без внешних деталей. ATmega328P с включённым BOD и STM32F103 со встроенными POR/PDR стартуют сами. Внешнюю цепь добавляют против помех и для общего сброса нескольких микросхем.
- Супервизор со сторожевым таймером. MCP1316 сбрасывает микроконтроллер, если на вход WDI не приходили импульсы 1,12–2,4 с. Это независимый от кристалла сторожевой таймер — он сработает, даже если встроенный отключён ошибочной программой. Встроенные таймеры: AVR и STM32.
- Прерывание по снижению питания. PVD у STM32 и аналоговый компаратор у AVR позволяют до сброса сохранить данные: порог PVD ставят выше порога сброса, а запас энергии на сохранение дают конденсаторы питания.
Почему не работает
- Микроконтроллер не стартует или стартует через раз при медленном нарастании питания. У AVR задержка tTOUT короче времени нарастания, или питание нарастает медленнее 0,01 В/мс, для которых рассчитан сброс по питанию (табл. 29-11): выберите 65 мс в SUT или включите BOD.
- Портится EEPROM при выключении. BOD выключен или порог ниже того, при котором процессор сохраняет работоспособность на своей частоте. Для 16 МГц — только 4,3 В.
- AVR не прошивается программатором. Подтяжка RESET меньше 4,7 кОм или стоит конденсатор при debugWIRE.
- STM32 не перезагружается от сторожевого таймера, хотя флаг сброса выставлен. На NRST висит двухтактный выход супервизора или логики и не даёт опустить линию.
- Ложные сбросы от касания или помех. Нет конденсатора на RESET или NRST, длинная дорожка до кнопки.
- Сброс не снимается на исправном питании. Порог супервизора с учётом разброса и гистерезиса заходит в допуск стабилизатора: сброс снимается при пороге плюс гистерезис (у MCP131X до 6 % порога). Сравните это напряжение с минимумом выходного напряжения стабилизатора.
Частые вопросы
Нужен ли внешний конденсатор на RESET у ATmega328P?
Не обязательно. Внутри есть подтяжка 30–60 кОм, фильтр и задержка сброса 4,1 или 65 мс после включения питания. Microchip в AN2519 советует добавить внешнюю подтяжку от 4,7 кОм и конденсатор 100 нФ в шумной обстановке. Конденсатор нельзя ставить, если плата отлаживается через debugWIRE: он мешает обмену по выводу RESET.
Какой BODLEVEL выбрать для ATmega328P на 16 МГц?
4,3 В (BODLEVEL = 100, порог 4,1–4,5 В). При 16 МГц ATmega328P работает только от 3,78 В и выше — это следует из графика частоты от напряжения в даташите. Порог 2,7 В допускает работу между 2,7 и 3,78 В, где тактовая частота уже выше допустимой, и программа может сбиться.
Можно ли подключить супервизор с двухтактным выходом к NRST STM32?
Лучше не надо. STM32 сам опускает NRST при сбросе от сторожевого таймера, программы и питания — импульс не короче 20 мкс. Двухтактный выход супервизора в это время держит высокий уровень, и выходы спорят. Нужен выход с открытым стоком: MAX803, MCP1316M, MCP1320.
Зачем диод от RESET к питанию?
Внутри AVR его нет: вывод RESET выдерживает 12 В для высоковольтного программирования. Внешний диод защищает вывод от разрядов и выбросов, если высоковольтное программирование не нужно (AN2519). Заодно при выключении он быстро разряжает конденсатор RC-цепи в шину питания, и при быстром повторном включении сброс снова сработает.
Почему ATmega328P иногда не сбрасывается при быстром выключении и включении?
Внутренний сброс по питанию срабатывает, только если VCC перед этим опустился ниже порога VPOT на спаде — 0,6–1,6 В (DS40002061B, табл. 29-11, примечание 2). Если питание пропало ненадолго и конденсаторы не разрядились, POR не сработает. Даташит также задаёт скорость нарастания питания 0,01–10 В/мс. Включённый BOD закрывает оба случая: он сбрасывает при любом снижении ниже своего порога.
Источники
- Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P Data Sheet (DS40002061B) — разд. 9.2.2, табл. 9-2 и 9-4 — задержка сброса 4,1 или 65 мс по фьюзам SUT, при включённом BOD — 14 тактов; табл. 9-4 и 9-6 — запуск генератора 16K тактов у кварца; разд. 11.2–11.5, рис. 11-1–11-5 — источники сброса, сброс по питанию, внешний сброс, BOD с гистерезисом; разд. 29.3 — частота от напряжения питания; табл. 29-11 — пороги сброса по питанию, условие срабатывания POR и скорость нарастания 0,01–10 В/мс, порог вывода RESET, импульс 2,5 мкс, гистерезис 50 мВ; табл. 29-12 — коды BODLEVEL; табл. 30-1 — подтяжка RESET 30–60 кОм
- Microchip. AN2519: AVR Microcontroller Hardware Design Considerations (DS00002519B, 2018) — разд. 3, рис. 3-1 — подтяжка 4,7 кОм и больше, не меньше 10 кОм для debugWIRE, конденсатор 100 нФ необязателен и мешает debugWIRE и PDI, внешний диод от RESET к VCC, если не нужно высоковольтное программирование; разд. 3.1 — резистор последовательно с кнопкой
- STMicroelectronics. STM32F103x8, STM32F103xB datasheet (DS5319 Rev 20, July 2025) — разд. 2.3.10 — встроенные POR/PDR и PVD; табл. 9 — питание 2,0–3,6 В; табл. 11 — уровни PVD, POR/PDR 1,8–2,0 В, гистерезис, задержка 1,0–4,5 мс; табл. 39 и рис. 31 — NRST: подтяжка 30–50 кОм, фильтр 100/300 нс, конденсатор 0,1 мкФ
- STMicroelectronics. RM0008 Reference manual: STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and STM32F107xx (Rev 21, February 2021) — разд. 7.1, рис. 7 — внутренние сбросы выводятся на NRST, импульс не короче 20 мкс
- Analog Devices (Maxim Integrated). MAX803/MAX809/MAX810: 3-Pin Microprocessor Reset Circuits (19-0344, Rev 11, 10/17) — Electrical Characteristics — пороги L/M/J/T/S/R/Z, сброс 140–560 мс в SOT23 и 140–460 мс в SC70 (−40…+85 °C); Pin Description — выводы SOT23/SC70; Applications Information — конденсатор 0,1 мкФ у VCC, выход до VCC = 1 В, открытый сток MAX803 для двунаправленного вывода сброса
- Microchip. MCP131X/2X Voltage Supervisor (DS21985D, 2012) — с. 1 — типы выходов MCP1316/16M/20, стандартные пороги 2,9 и 4,6 В; DC Characteristics — пороги ±1,5 % при 25 °C и ±2,5 % в диапазоне, гистерезис 1–6 % (для -46 — 0,046–0,276 В), подтяжка выхода MCP131XM 4,7 кОм; табл. 1-1 и 1-2 — сброс 140–280 мс, сторожевой таймер 1,12–2,4 с
- Texas Instruments. TPS3831, TPS3839: 150-nA, Ultralow Power, Supply Voltage Monitor (SBVS193D, revised July 2015) — с. 1 — ток 150 нА, двухтактный выход; разд. 7.5 — пороги вариантов L30, K33, G33, K50; разд. 7.6 — задержка 120–350 мс
Нашли ошибку?
Смотрите также
- Фьюзы AVRБиты фьюзов, заводские значения и avrdude
- ATmega328PРаспиновка, фьюзы, Optiboot, периферия, питание, схема и код на C
- STM32F1Cortex-M3: F100, F101, F102, F103, F105/107 — линейки и распиновки
- Сброс при включении питанияВнутренний сброс до роста питания: пороги, скорость нарастания, примеры
- Детектор пониженного питанияBrown-out detector: сброс МК при просадке питания
- Сторожевой таймерWatchdog: сброс МК при зависании программы
- Стабилизатор 78xx и LM11177805, 7905, LM1117: конденсаторы, падение, радиатор, защитные диоды