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

Почему 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 А он может сработать, и напряжение на плате упадёт, а при нагреве он срабатывает и при меньшем токе.

Источники

  1. 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
  2. Arduino. ArduinoCore-avr, коммит 11b9130: boards.txt — для UNO: low_fuses 0xFF, high_fuses 0xDE, extended_fuses 0xFD, загрузчик optiboot, 16 МГц
  3. Bourns. MF-MSMF Series — PTC Resettable Fuses, datasheet (Rev. BE, 09/26) — MF-MSMF050: ток удержания 0,50 А и ток срабатывания 1,00 А при 23 °C; при нагреве ток удержания снижается
  4. Arduino. UNO R3 schematic (A000066) — самовосстанавливающийся предохранитель MF-MSMF050-2 на 500 мА в цепи питания от USB
  5. Panasonic. Relays Cautions for Use — при коммутации индуктивных нагрузок постоянного тока выбросы нужно поглощать, например диодом

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