Питание, стабилизация и проблема старта.

DmitryN
Offline
Зарегистрирован: 23.04.2018

Arduino питается от аккумулятора 2.8—4.2v через повышатель напряжения на VIN. При этом выходное напряжение можно регулировать. Сейчас установил 9v, но как будет оптимально?

Еще между VIN—GND вставил конденсатор. Он выполняет важную функцию: после отключения питания микроконтроллер (MK) еще работает доли секунды и успевает выполнить некоторые действия.

Но возникла проблема: МК перестал включаться с первого раза. Насколько я понял, если конденсатор не заряжен, то он забирает питание и MK не может сразу включиться, но и потом почему то не работает. Если теперь выключить, и сразу включить, то МК запускается (конденсатор заряжен). При этом без переферии (без OLED экрана) MK запускается в любом случае. Не совсем понимаю причину подобного поведения: ведь и при первом включении, в конце концов конденсатор насыщается, и питание МК обеспечивается. Почему он не запускается?

Думаю попробовать такие варинты:

1. конденсатор соединить через резистор

2. запитать экран не от постоянного источника, а от управляемого пина, и отсрочивать его включение.

Пока не знаю, что получится. Может быть кто еще что посоветует?

 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Есть несколько путей решения.

Судя по вопросам в ветке про "запоминание состояния вывода", вы не сильно подкованы в теме, это не "обида", надеюсь?

В зависимости от задачи любой путь будет "правильным".

1. источник должен давать достаточный ток, а конденсатор иметь ограничивающий резистор для выполнения нужных условий - отсутствие провала при заряде и достаточный ток при разряде на нагрузку.

2. использовать UP преобразователь и питать плату через линейный регулятор - это ... ну не то, что "плохо", просто не очень логично. Имеет смысл только при необходимости одновременно питать нагрузку с большим напряжением, ради уменьшения количества деталей... хоть это и не совсем верно, скорее чтобы использовать те модули, что под рукой... ну и при полном безразличии к энергоэффективности.

3. Ну и самое главное - разработчики МК давно о нас позаботились. Нужна правильная конфигурация фьюзов, касательно BODLEVEL  и Ttout. Чтобы дать кристаллу достаточно время на старт, при любом способе подачи питания. Если что, то кристалл умеет ждать ажно 65 мс, после подачи питания ;) ;) ;).

--------------------

Разбираться в даташите и фьюзах, и, возможно, перекомпилировать загрузчик, вы, очевидно, не станете.... ;) Хотя я пошел бы этим путем.

Поставьте резистор на 100-200 Ом перед конденсатором, это ограничит ток заряда в 50-100 мА, надеюсь ваш UP конвертер не просядет от такого тока.

Но, повторю, что решений много и "каждый  др..чит, как он хочет".

DmitryN
Offline
Зарегистрирован: 23.04.2018

wdrakula пишет:

 использовать UP преобразователь и питать плату через линейный регулятор - это ... ну не то, что "плохо", просто не очень логично.

Как будет логично запитать устройство от одного аккумулятора 18650?

wdrakula пишет:
Если что, то кристалл умеет ждать ажно 65 мс, после подачи питания

Это "умение" реализуется перекомпиляцией загрузчика?

А вообще мне прежде всего хотелось бы понять что происходит после включения. Запускается загрузчик и он пытается инициализировать МК. Если питания не хватает, MK не запускается, а загрузчик уже отработал, он не будет делать повторные попытки. Поэтому, даже когда питание нормализуется, МК так и останется незапущенным до ручного рестарта загрузчика. Это примерно так?

 

triac
triac аватар
Offline
Зарегистрирован: 03.05.2018

DmitryN пишет:
Arduino питается от аккумулятора 2.8—4.2v через повышатель напряжения на VIN. При этом выходное напряжение можно регулировать. Сейчас установил 9v, но как будет оптимально?

Оптимально будет Vcc + (падение напряжения на внутреннем регуляторе Ардуино). То есть, примерно 6 В для Ардуино с Vcc=5В, или примерно 4.5В для Ардуино с Vcc=3.3В.

DmitryN пишет:
Не совсем понимаю причину подобного поведения: ведь и при первом включении, в конце концов конденсатор насыщается, и питание МК обеспечивается. Почему он не запускается?

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

DmitryN пишет:
1. конденсатор соединить через резистор

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

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

DmitryN пишет:

Как будет логично запитать устройство от одного аккумулятора 18650?

UP конвертер на 5 и напрямую на +5, минуя внутренний линейный стабилизатор.

wdrakula пишет:
Если что, то кристалл умеет ждать ажно 65 мс, после подачи питания

Это "умение" реализуется перекомпиляцией загрузчика?

[/quote]

Нет. Это задается фьюзами, которые прошиваются при перезаписи загрузчика. Еще нужно поменять БОДлевел, тоже во фьюзах, а в загрузчике подкорректировать проверку на тип ресета: у вас, при падении напряжения на конденсаторе, происходит БОД ресет, а на него бутлоадер не расчитан, там буквально "два бита" поменять. Вместо того, чтобы гадать "почему виснет" можно, поймав "БОД ресет" прописать конкретное поведение - например задержку и запуск основной программы или еще что. И да, компилируйте обычный бутлоадер, а  не оптибут. Он пусть больше на 500 байт, но проще и надежнее.

DmitryN пишет:

А вообще мне прежде всего хотелось бы понять что происходит после включения. Запускается загрузчик и он пытается инициализировать МК. Если питания не хватает, MK не запускается, а загрузчик уже отработал, он не будет делать повторные попытки. Поэтому, даже когда питание нормализуется, МК так и останется незапущенным до ручного рестарта загрузчика. Это примерно так?

 

Загрузчик ничего, ероме порта для чтения кода, не инициализирует. Если вы хотите понять, что происходит при включении - просто откройте код загрузчика и читайте. Могу дать совет - сперва сотрите все строки, которые не относятся к вашему типу процессора, так будет легче смотреть и читать код.

DmitryN
Offline
Зарегистрирован: 23.04.2018

wdrakula пишет:

UP конвертер на 5 и напрямую на +5, минуя внутренний линейный стабилизатор.

Есть у меня штуки такие:  MT3608 DC DCи вот такие: 5V DC DC Converter.

Значит, лучше использовать 5V DC-DC, и питание подавать не на VIN, а на 5v ?

 

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

1. Ардуино вполне может питатьтся от 3в и выше до 5в. Там только надо смотреть тактовую частоту, на которой она способна работать при меньшем питании. Это - в даташит и ваши потребности. Применьшем питающем могут потребоваться "преобразователи уровня", но зато можно питать прямо с аккумулятора без повышайки. Есть как свои плючы так и свои минусы - посмотрите что перевесит.

2. Если обязательно надо дуньку кормить +5в, то зачем поднимать повышайкой аж до 9в и кормить её через Vin? Можно же поднять только до +5в и подавать сразу на внутренние 5в платы. Это не только "выход", оно и "входом" может работать точно также.

3. Какой емкости поставили конденсатор, какой ток способна отдавать ваша повышайка? Скорее всего емкость слишком велика, а ток явно недостаточен чтобы быстро зарядить этот конденсатор .. "кэп очевидность". Проблема при подключенном ЛСД скорее всего в нем, читайте даташит, что делает контроллер ЛСД при медленном нарастании напруги .. вполне возможно он уходит в какой-нить режим "коротыша" или повышенного прожорливости, что ещё больше замедляет зарядку конденсатора. В общем, надо обеспечить нарастание +5в быстрее чем того хотят как Ардуинка, так и дисплей.

ИМХО, некоторое уменьшение емкости конденсатора, только для обеспечения необходимыъх действий, переход на +5в совместно должны исправить ситуацию...

Сколько времени дляться эти "необходимые действия"? Насколько грамотно (помню про предыдущую тему с чтением пина) они прописаны? Собственно, вот вам и ответ на ваши возражения в той теме .. всё закономерно.

DmitryN
Offline
Зарегистрирован: 23.04.2018

Arhat109-2 пишет:

Сколько времени дляться эти "необходимые действия"? Насколько грамотно (помню про предыдущую тему с чтением пина) они прописаны? Собственно, вот вам и ответ на ваши возражения в той теме .. всё закономерно.

При чем тут одно к другому? Необходимые действия - это запись данных в постоянную память. Прописаны они в стандартной библиотеке EEPROM (функция put).

nik182
Offline
Зарегистрирован: 04.05.2015

А можно ещё конденсатор на ножке ресет увеличить, для согласования времён заряда конденсаторов при включении.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

DmitryN пишет:
Arhat109-2 пишет:

Сколько времени дляться эти "необходимые действия"? Насколько грамотно (помню про предыдущую тему с чтением пина) они прописаны? Собственно, вот вам и ответ на ваши возражения в той теме .. всё закономерно.

При чем тут одно к другому? Необходимые действия - это запись данных в постоянную память. Прописаны они в стандартной библиотеке EEPROM (функция put).

Вы не ответили на вопрос, ни на один. Сильно опасаюсь, что ответов Вы просто не знаете и это - закономерно и есть "одно к другому". В таком разе приведите хотя бы тот код, который это делает, по нему можно будет и оценить отсутствующие ответы.

DmitryN
Offline
Зарегистрирован: 23.04.2018

Arhat109-2 пишет:

Вы не ответили на вопрос, ни на один. 

Дело в том, что вы пытаетесь решить мне проблему, которой у меня нет. У меня нет проблем быстродействия, оптимизации кода, и т.п. Вопрос был об организации питания и аппаратных проблемах при старте.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Это взаимосвязанные вопросы и вполне возможно что, то что Вы нагородили из конденсатора - решается куда как проще. Но, "безграмотность становится всё более агрессивной в копроэкономике" .. в таком разе продолжайте копать в сторону почему лсд экран ТЕПЕРЬ у вас жрет слишком много .. :) Может какую errata в нем и откопаете .. (* дураков учить - бестолку *)

DmitryN
Offline
Зарегистрирован: 23.04.2018

Arhat109-2 пишет:

вполне возможно что, то что Вы нагородили из конденсатора - решается куда как проще.

Конечно. Достаточно переписать стандартные библиотеки, тогда программа сможет выполняться без электричества.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

То есть "расписались". Ваше право. Может тогда разьясните что я делал не так (тут где-то есть мои посты за это решение), когда ставил кондер на 1000мкф с диодом на вход Ардуино Мега 2560 для защиты её от просадки полудохлых аккумов на хороших моторах и даже вместе с ЛСД1602 оно заводилось вполне нормально и без ваших проблем, а выключалось аж чуть ли не через секунды? Вам этого времени все ещё мало? Или может проблема в ином .. :)

P.S. Почему ваще, у меня работает практически всё, и глупых вопросов от меня сюда как-то не поступает? И датчики температуры работают и моторы крутятся и энкодеры успевают и даже конденсаторы на входе пашут как надо и осцил в режиме оверсэмплинга выдает и 4Мгц оцифровки с точностью в 8 бит (благо у него памяти вагон) .. вот что я делаю не так?

DmitryN
Offline
Зарегистрирован: 23.04.2018

Arhat109-2 пишет:

То есть "расписались". Ваше право. Может тогда разьясните что я делал не так (тут где-то есть мои посты за это решение), когда ставил кондер на 1000мкф с диодом на вход Ардуино Мега 2560 для защиты её от просадки полудохлых аккумов на хороших моторах и даже вместе с ЛСД1602 оно заводилось вполне нормально и без ваших проблем, а выключалось аж чуть ли не через секунды? 

Да вы не обижайтесь, я ни в коем случае не пренебрегаю Вашими советами, но всему свое время. Сейчас мне хотелось бы не столько получить сиюминутный результат, сколько разобраться: как оно работает, начиная с аппаратной составляющей.

Сейчас запитал Arduino Nano от 5v прямо на вход 5v. Конденсатор между 5v—GND, как раз 1000мкФ. Ток зарядки кондентатора ограничил резистором аж 10k, а для быстой оттачи - параллельно резистору диод. Насыщается конденсатор секунд 10, но это не критично, как раз здесь спешить некуда. Вроде бы стало включаться нормально. 

Вот ваше время работы: "аж чуть ли не через секунды", конечно, впечатляет сам я пока могу похвастаться только долями секунды. Что я делаю не так: возможно ток с конденсатора утекает не в ту сторону, и нужен еще один диод на выходе 5v (еще перед конденсатором). Попробую.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Я вас по-прежнему не понимаю, поскольку код Вы не выкладываете, объемы и потребное время по shutdown не пишите .. что в таком разе можно посоветовать?

Ну прикидывайте сами, раз даташит Вам не по зубам: скорость записи в EEPROM составляет около 3.3мсек на байт. Ну и вот эта тема Вам в помощь http://arduino.ru/forum/apparatnye-voprosy/sokhranenie-dannykh-v-pamyati-pri-kratkovremennykh-poteryakh-elektrichestva

triac
triac аватар
Offline
Зарегистрирован: 03.05.2018

Arhat109-2 пишет:

скорость записи в EEPROM составляет около 3.3мсек на байт.

Что это за странное число "3.3 мс на байт", откуда вы такое взяли?

Запись в I2C EEPROM ведется "страницами", размер страницы зависит от конкретной микросхемы EEPROM, типично в диапазоне от 8 до 256 байт. При записи вы должны заполнить буфер, по сигналу STOP содержимое буфера переписывается в EEPROM, обычно это занимает 5 или 10 мс, это тоже зависит от конкретной микросхемы EEPROM.

Таким образом, если все, что надо записать в EEPROM, умещается на одной странице, то на это потребуется:

- на пересылку  данных в буфер, даже при низкой I2C скорости 100 kbps, нужно порядка 100 мкс на байт

- на переписывание буфера в EEPROM - не более 10 мс

Скажем, если размер записи составляет 32 байта, то на все потребуется не более 15 мс.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Вы про внешнюю EEPROM, а я Вам про внутреннюю ардуинок. :)

А уж в какую пишет ТС - нам опять жеж - неведомо..