Загрузка на малой мощности не работает

9

У меня есть собственная плата Arduino ATMega328, которая обычно работает на частоте 5 В при 8 МГц (используя профиль и загрузчик Arduino Pro 3.3 В 8 МГц). Основная причина, по которой я использую эту настройку, заключается в том, что я могу перевести плату в спящий режим, когда основное питание отключено, и она начинает работать от батареи (3 В от батарейки). Источники 5В и 3В соединены диодом ИЛИ, а вход 5В связан с INT0. В коде, когда он обнаруживает, что INT0 упал до низкого уровня, он инициализирует спящий режим, и все отключается, за исключением сторожевого таймера, который поддерживает цикл 1 Гц, чтобы сохранить внутренний счетчик и проверить, что чип должен быть восстановлен. Это прекрасно работает, когда сначала подается питание 5 В, затем вставляется батарея, затем5В отключен. Он засыпает, и когда возвращается 5V, он просыпается, и я вижу, что он не потерял счет.

Тем не менее, проблема возникает, когда 3V применяется в первую очередь . Я, честно говоря, не уверен, загружается ли он вообще. Но то, что он должен сделать, это загрузиться, проверить, низкий ли INT0 (Digital 2), и, если это так, перейти в режим сна. Наблюдая за током, я вижу, что в течение нескольких секунд он достигает нескольких мА, а затем падает примерно до 0,3 мА (все еще выше, чем должно быть в режиме ожидания). Но когда я снова подать 5V, ничего . Отключение питания возобновляется, но оно не отвечает (по серийному протоколу FTDI).

Может быть, мне чего-то не хватает, что он не может быть загружен на 3V ... теоретически он должен работать просто отлично.

Обновление: я бросил светодиод на D13 и попробовал эскиз моргания. Работает нормально при запуске от 3В или 5В. Однако, когда я запускаю свою прошивку и запускаю ее от 3В, светодиод просто начинает дико мигать. Я понятия не имею, что вызывает это, так как я никогда не настраивал D13 как что-либо в моем коде. Но это заставляет меня думать, что это как-то связано с загрузчиком ...

Адам Хейл
источник
1
Какое значение установлено для BOD, и каково текущее потребление при запуске?
Игнасио Васкес-Абрамс
Он установлен на 2,7 В. Потребляемая мощность при 3 В составляет около 4 мА в течение первых нескольких секунд, затем падает, и светодиод гаснет.
Адам Хейл
Вы пробовали без загрузчика, т.е. через провайдера?
Игнасио Васкес-Абрамс
Нет, я еще не пробовал. Что странно, так это хорошо, когда просто запускаешь эскиз моргания
Адам Хейл,
2
Можете ли вы добавить диаграмму, чтобы показать «точно», как подключена ваша проводка, включая любой датчик или нагрузку на аккумулятор. Какую ячейку монеты вы используете, литиево-ионную (перезаряжаемую) или щелочную?
Рон Дж.

Ответы:

6

Итак ... оказалось, что все происходило в коде. Оказывается, я инициализировал прерывание на INT0, когда оно было низким, в самом начале моего кода. Проблема заключалась в том, что при запуске с резервным питанием 3 В INT0 всегда был низким, потому что INT0 привязан к линии 5 В (это то, как он знает, чтобы идти спать). Поскольку INT0 был низким, а прерывание срабатывало на низком уровне, это вызывало постоянное прерывание, никогда не давая остальной части программы времени для запуска. Перешел на включение этого прерывания только после того, как я вошел в режим полного пробуждения, и теперь он работает нормально.

Адам Хейл
источник
4

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

Вы сказали, что используете диоды для выбора источника питания, а один источник питания - это аккумулятор 3В. Если вы используете стандартные диоды, которые падают на ~ 0,6 В, то напряжение питания на MCU составляет всего ~ 2,4 В. Если вы используете диоды Шоттки с падением напряжения между 0,15-0,45, напряжение питания потенциально может быть всего 2,5В. Напряжение BOD установлено на уровне 2,7 В, поэтому теоретически MCU никогда не будет загружаться с батареей.

Что касается того, почему вы можете запустить его на 5 В, опустить на 3 В и снова включить - я не уверен. Вы можете отключить BOD в коде ... может быть ... Не уверен, почему он работает, но, скорее всего, он не гарантированно работает.

Я установил схему диодного переключателя с 5 В и 3,3 В, чтобы увидеть, как она выглядит на моем осциллографе, когда напряжение переключается. Когда при напряжении 3,3 В до 5 В напряжение изначально колеблется совсем немного. Это может потенциально вызвать некоторые проблемы, когда MCU пытается выйти из режима сна. Размещение заглушки между VCC и GND очень хорошо сгладило сигнал. При переключении с 5 В на 3,3 В на самом деле не было никаких колебаний, только чистое падение.

Из этой информации кажется, что вам следует снизить порог BOD или отключить BOD и установить разъединяющий колпачок между VCC и GND. Вы, вероятно, также должны убедиться, что у вас есть понижающий резистор на INT0, и прочитать разделы таблицы данных MCU, объясняющие различные режимы сна, все аспекты сна и пробуждения - это довольно сложно. ура

imjosh
источник
2

Я думаю, что проблема с вашим загрузчиком, но не так, как вы думаете.

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

Я думаю, что причина, по которой ваш Arduino не запускается, заключается в том, что для загрузчика требуется точный источник тактовых импульсов, но применение 3v к нему испортит эти часы и, возможно, приведет к сбою или подождет, пока 3.3v будет применено для стабильного источника.

Глядя на таблицу:

авторское право ATMEL

Мы видим, что потребление тока во время пробуждения (запуска загрузчика), вероятно, будет около 2 мА, в то время как спящий ток составляет около 0,8 микроампер . Это, безусловно, может привести к отключению при запуске без надлежащего тока.

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

Доктор
источник
Разве это не значит, что Блинк тоже не будет работать? Кроме того, я запускаю больше, чем несколько Arduino из монетных клеток без проблем. Они могут обеспечить много тока в течение короткого времени.
Cybergibbons
-5

Попробуйте перезагрузить Arduino, выбрав Инструменты> Записать загрузчик

DeveloperACE
источник
1
Можете ли вы добавить более подробную информацию о том, как это сделать дальше? Это не очень конкретно: что вы можете подключить к Arduino? Есть ли риски? Спасибо!
Анонимный Пингвин
Я бы отключил все, чтобы быть в безопасности, но не должно быть никакого риска
DeveloperACE
Вот как можно записать загрузчик: arduino.stackexchange.com/a/474/37 . Ваш ответ не объясняет все, как это сделать.
Парень со шляпой