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

Детектор пониженного питания (BOD)

Детектор пониженного питания следит за напряжением питания микроконтроллера и сбрасывает его, если напряжение упало ниже порога. Без него при медленном включении или просадке батареи процессор может работать с ошибками и портить данные во флеш-памяти и EEPROM.

Обновлено Редакция GAW

Детектор пониженного питания (brown-out detector, BOD; в некоторых семействах — brown-out reset, BOR) — узел микроконтроллера, который сравнивает напряжение питания с порогом и удерживает микроконтроллер в состоянии сброса, пока напряжение ниже него. «Brown-out» — просадка напряжения в сети, в отличие от полного отключения (blackout). Детектор защищает от работы при недостаточном питании: при медленном включении, разряде батареи, кратковременной просадке под нагрузкой.

BOD у ATmega328P

Детектор включают и задают его порог фьюзами BODLEVEL в extended-байте:

BODLEVELПорог
1004,3 В
1012,7 В
1101,8 В
111выключен

Значения — из файла описания устройства Microchip ATmega328P.atdf. Arduino Uno включает детектор на 2,7 В (extended-фьюз 0xFD). Сброс по BOD — один из четырёх источников сброса ATmega328P наряду с включением питания, внешним сбросом и сторожевым таймером, подробнее — в статье об архитектуре AVR. Записать нужный порог поможет калькулятор фьюзов AVR.

BOD и энергопотребление

Детектор потребляет ток постоянно, в том числе во сне. В батарейных устройствах его либо выключают фьюзами, либо — у picoPower-кристаллов — отключают программно на время сна, как описано в статье о режимах сна AVR. Выключать BOD совсем стоит, только если питание надёжно и запись в EEPROM и флеш-память не может совпасть с просадкой.

Частые вопросы

Какой порог BOD выбрать для ATmega328P?

Ниже минимального напряжения, при котором схема должна работать, но выше напряжения, при котором микроконтроллер на выбранной частоте перестаёт работать надёжно. ATmega328P предлагает пороги 1,8, 2,7 и 4,3 В. Arduino Uno на 16 МГц использует 2,7 В — extended-фьюз 0xFD.

Почему без BOD портится EEPROM?

Когда питание медленно падает, процессор ещё выполняет команды, но уже с ошибками: может перейти не по тому адресу или записать не то значение. Если в этот момент идёт запись в EEPROM или флеш-память, данные портятся. Детектор держит микроконтроллер в сбросе, пока напряжение ниже порога, и такие сбои не происходят.

Сколько потребляет BOD и можно ли его отключить во сне?

Детектор работает постоянно, в том числе во сне, и в глубоких режимах сна его ток составляет заметную долю потребления. У picoPower-кристаллов ATmega48PA, 88PA, 168PA и 328P его можно отключить программно на время сна битами BODS и BODSE в регистре MCUCR; у ATmega328 без буквы P этих битов нет.

Источники

  1. Microchip. ATmega Series Device Support (ATmega_DFP) 3.6.299, файл ATmega328P.atdf — поле BODLEVEL: 4,3 В (0x04), 2,7 В (0x05), 1,8 В (0x06), выключен (0x07)
  2. Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P Data Sheet (DS40002061B) — источники сброса, в том числе BOD; 8.4.2 — предотвращение порчи EEPROM при низком напряжении питания; гл. 10 — отключение BOD на время сна битами BODS и BODSE у picoPower-кристаллов
  3. Arduino. ArduinoCore-avr: boards.txt — Arduino Uno: extended-фьюз 0xFD — BOD на 2,7 В

Нашли ошибку?