Почему Arduino перезагружается?
Обновлено Редакция GAW
Перезагрузка Arduino — это сброс микроконтроллера. Причин немного, и у каждой свой почерк.
| Причина | Когда проявляется | Что делать |
|---|---|---|
| Просадка питания ниже порога BOD | при включении реле, двигателя, светодиодной ленты | отдельное питание нагрузки, конденсатор, диод на катушке |
| Срабатывание предохранителя USB 500 мА | при большом токе от USB, плата горячая | питать нагрузку не от USB |
| Сторожевой таймер | с постоянным интервалом, независимо от нагрузки | сбрасывать сторож в программе |
| Кнопка RESET или сигнал на выводе RESET | при нажатии или если к выводу RESET что-то подключено | проверить, что подключено к RESET |
Детектор пониженного питания
У UNO в расширенном фьюзе записано 0xFD (boards.txt ядра ArduinoCore-avr): это включённый детектор пониженного питания с порогом BODLEVEL = 101 — по таблице 29-12 даташита от 2,5 до 2,9 В. Пока напряжение ниже порога, микроконтроллер удерживается в сбросе, и программа начинается заново. Детектор защищает от сбоев при плохом питании, поэтому его не отключают, а устраняют просадку.
Нагрузка и предохранитель USB
Реле, двигатели и мощные светодиоды берут ток от той же шины 5 В. Сколько катушек реле выдержит питание от USB, считает ответ «Сколько реле можно подключить к Arduino?»: в цепи USB у UNO стоит предохранитель MF-MSMF050 на 500 мА, и при нагреве его ток удержания снижается — подробно в ответе «Как выбрать самовосстанавливающийся предохранитель?». Катушки реле гасят диодом — так Panasonic рекомендует поглощать выбросы индуктивной нагрузки.
Сторожевой таймер
Если программа включает сторожевой таймер и перестаёт его сбрасывать, он перезапускает контроллер через заданное время. Как выбрать время и почему старый загрузчик может уйти в бесконечные перезагрузки, разбирает калькулятор сторожевого таймера AVR.
Похожие вопросы
Почему Arduino перезагружается при включении реле?
Катушка реле и нагрузка берут ток от той же шины 5 В, и напряжение на мгновение проседает. Если оно опускается ниже порога детектора — у UNO 2,5–2,9 В, — микроконтроллер сбрасывается. Помогают отдельный источник для реле, конденсатор у модуля и защитный диод на катушке.
Как понять, что виноват сторожевой таймер?
Если перезагрузки идут с одинаковым интервалом и не зависят от нагрузки, вероятно, сработал сторож: программа не успевает его сбрасывать. Причину сброса показывает регистр MCUSR — флаги сброса по питанию, внешнему сигналу, BOD и сторожу; сторожевой таймер разбирает калькулятор сторожевого таймера AVR.
Может ли перезагрузку вызвать питание от USB?
Да: на UNO в цепи USB стоит самовосстанавливающийся предохранитель MF-MSMF050 на 500 мА. При токе больше 0,5 А он может сработать, и напряжение на плате упадёт, а при нагреве он срабатывает и при меньшем токе.
Источники
- Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P Data Sheet Complete (DS40002061B) — табл. 29-12: порог детектора пониженного питания BODLEVEL — 110: 1,7–2,0 В, 101: 2,5–2,9 В (типично 2,7 В), 100: 4,1–4,5 В, 111 — выключен; регистр MCUSR — флаги источника сброса PORF, EXTRF, BORF, WDRF
- Arduino. ArduinoCore-avr, коммит 11b9130: boards.txt — для UNO: low_fuses 0xFF, high_fuses 0xDE, extended_fuses 0xFD, загрузчик optiboot, 16 МГц
- Bourns. MF-MSMF Series — PTC Resettable Fuses, datasheet (Rev. BE, 09/26) — MF-MSMF050: ток удержания 0,50 А и ток срабатывания 1,00 А при 23 °C; при нагреве ток удержания снижается
- Arduino. UNO R3 schematic (A000066) — самовосстанавливающийся предохранитель MF-MSMF050-2 на 500 мА в цепи питания от USB
- Panasonic. Relays Cautions for Use — при коммутации индуктивных нагрузок постоянного тока выбросы нужно поглощать, например диодом
Нашли ошибку?
Смотрите также
- Детектор пониженного питанияBrown-out detector: сброс МК при просадке питания
- Сторожевой таймер AVRВремя WDT по WDP, режимы, константы WDTO, код с последовательностью WDCE
- Сколько реле можно подключить к Arduino?20 выводов, но от USB — не больше четырёх катушек
- Как выбрать самовосстанавливающийся предохранитель?Ток удержания при максимальной температуре, Vmax и Imax