Питание, стабилизация и проблема старта.
- Войдите на сайт для отправки комментариев
Arduino питается от аккумулятора 2.8—4.2v через повышатель напряжения на VIN. При этом выходное напряжение можно регулировать. Сейчас установил 9v, но как будет оптимально?
Еще между VIN—GND вставил конденсатор. Он выполняет важную функцию: после отключения питания микроконтроллер (MK) еще работает доли секунды и успевает выполнить некоторые действия.
Но возникла проблема: МК перестал включаться с первого раза. Насколько я понял, если конденсатор не заряжен, то он забирает питание и MK не может сразу включиться, но и потом почему то не работает. Если теперь выключить, и сразу включить, то МК запускается (конденсатор заряжен). При этом без переферии (без OLED экрана) MK запускается в любом случае. Не совсем понимаю причину подобного поведения: ведь и при первом включении, в конце концов конденсатор насыщается, и питание МК обеспечивается. Почему он не запускается?
Думаю попробовать такие варинты:
1. конденсатор соединить через резистор
2. запитать экран не от постоянного источника, а от управляемого пина, и отсрочивать его включение.
Пока не знаю, что получится. Может быть кто еще что посоветует?
Есть несколько путей решения.
Судя по вопросам в ветке про "запоминание состояния вывода", вы не сильно подкованы в теме, это не "обида", надеюсь?
В зависимости от задачи любой путь будет "правильным".
1. источник должен давать достаточный ток, а конденсатор иметь ограничивающий резистор для выполнения нужных условий - отсутствие провала при заряде и достаточный ток при разряде на нагрузку.
2. использовать UP преобразователь и питать плату через линейный регулятор - это ... ну не то, что "плохо", просто не очень логично. Имеет смысл только при необходимости одновременно питать нагрузку с большим напряжением, ради уменьшения количества деталей... хоть это и не совсем верно, скорее чтобы использовать те модули, что под рукой... ну и при полном безразличии к энергоэффективности.
3. Ну и самое главное - разработчики МК давно о нас позаботились. Нужна правильная конфигурация фьюзов, касательно BODLEVEL и Ttout. Чтобы дать кристаллу достаточно время на старт, при любом способе подачи питания. Если что, то кристалл умеет ждать ажно 65 мс, после подачи питания ;) ;) ;).
--------------------
Разбираться в даташите и фьюзах, и, возможно, перекомпилировать загрузчик, вы, очевидно, не станете.... ;) Хотя я пошел бы этим путем.
Поставьте резистор на 100-200 Ом перед конденсатором, это ограничит ток заряда в 50-100 мА, надеюсь ваш UP конвертер не просядет от такого тока.
Но, повторю, что решений много и "каждый др..чит, как он хочет".
использовать UP преобразователь и питать плату через линейный регулятор - это ... ну не то, что "плохо", просто не очень логично.
Как будет логично запитать устройство от одного аккумулятора 18650?
Это "умение" реализуется перекомпиляцией загрузчика?
А вообще мне прежде всего хотелось бы понять что происходит после включения. Запускается загрузчик и он пытается инициализировать МК. Если питания не хватает, MK не запускается, а загрузчик уже отработал, он не будет делать повторные попытки. Поэтому, даже когда питание нормализуется, МК так и останется незапущенным до ручного рестарта загрузчика. Это примерно так?
Оптимально будет Vcc + (падение напряжения на внутреннем регуляторе Ардуино). То есть, примерно 6 В для Ардуино с Vcc=5В, или примерно 4.5В для Ардуино с Vcc=3.3В.
Возможно потому, что скорость нарастания напряжения питания уменьшилась ниже критического значения, при котором схема сброса перестает правильно работать.
Угу, а параллельно резистору поставить диод. Конденсатор будет медленно заряжаться через резистор и быстро разряжаться через диод.
Как будет логично запитать устройство от одного аккумулятора 18650?
UP конвертер на 5 и напрямую на +5, минуя внутренний линейный стабилизатор.
Это "умение" реализуется перекомпиляцией загрузчика?
[/quote]
Нет. Это задается фьюзами, которые прошиваются при перезаписи загрузчика. Еще нужно поменять БОДлевел, тоже во фьюзах, а в загрузчике подкорректировать проверку на тип ресета: у вас, при падении напряжения на конденсаторе, происходит БОД ресет, а на него бутлоадер не расчитан, там буквально "два бита" поменять. Вместо того, чтобы гадать "почему виснет" можно, поймав "БОД ресет" прописать конкретное поведение - например задержку и запуск основной программы или еще что. И да, компилируйте обычный бутлоадер, а не оптибут. Он пусть больше на 500 байт, но проще и надежнее.
А вообще мне прежде всего хотелось бы понять что происходит после включения. Запускается загрузчик и он пытается инициализировать МК. Если питания не хватает, MK не запускается, а загрузчик уже отработал, он не будет делать повторные попытки. Поэтому, даже когда питание нормализуется, МК так и останется незапущенным до ручного рестарта загрузчика. Это примерно так?
Загрузчик ничего, ероме порта для чтения кода, не инициализирует. Если вы хотите понять, что происходит при включении - просто откройте код загрузчика и читайте. Могу дать совет - сперва сотрите все строки, которые не относятся к вашему типу процессора, так будет легче смотреть и читать код.
UP конвертер на 5 и напрямую на +5, минуя внутренний линейный стабилизатор.
Есть у меня штуки такие: MT3608 DC DC, и вот такие: 5V DC DC Converter.
Значит, лучше использовать 5V DC-DC, и питание подавать не на VIN, а на 5v ?
1. Ардуино вполне может питатьтся от 3в и выше до 5в. Там только надо смотреть тактовую частоту, на которой она способна работать при меньшем питании. Это - в даташит и ваши потребности. Применьшем питающем могут потребоваться "преобразователи уровня", но зато можно питать прямо с аккумулятора без повышайки. Есть как свои плючы так и свои минусы - посмотрите что перевесит.
2. Если обязательно надо дуньку кормить +5в, то зачем поднимать повышайкой аж до 9в и кормить её через Vin? Можно же поднять только до +5в и подавать сразу на внутренние 5в платы. Это не только "выход", оно и "входом" может работать точно также.
3. Какой емкости поставили конденсатор, какой ток способна отдавать ваша повышайка? Скорее всего емкость слишком велика, а ток явно недостаточен чтобы быстро зарядить этот конденсатор .. "кэп очевидность". Проблема при подключенном ЛСД скорее всего в нем, читайте даташит, что делает контроллер ЛСД при медленном нарастании напруги .. вполне возможно он уходит в какой-нить режим "коротыша" или повышенного прожорливости, что ещё больше замедляет зарядку конденсатора. В общем, надо обеспечить нарастание +5в быстрее чем того хотят как Ардуинка, так и дисплей.
ИМХО, некоторое уменьшение емкости конденсатора, только для обеспечения необходимыъх действий, переход на +5в совместно должны исправить ситуацию...
Сколько времени дляться эти "необходимые действия"? Насколько грамотно (помню про предыдущую тему с чтением пина) они прописаны? Собственно, вот вам и ответ на ваши возражения в той теме .. всё закономерно.
Сколько времени дляться эти "необходимые действия"? Насколько грамотно (помню про предыдущую тему с чтением пина) они прописаны? Собственно, вот вам и ответ на ваши возражения в той теме .. всё закономерно.
При чем тут одно к другому? Необходимые действия - это запись данных в постоянную память. Прописаны они в стандартной библиотеке EEPROM (функция put).
А можно ещё конденсатор на ножке ресет увеличить, для согласования времён заряда конденсаторов при включении.
Сколько времени дляться эти "необходимые действия"? Насколько грамотно (помню про предыдущую тему с чтением пина) они прописаны? Собственно, вот вам и ответ на ваши возражения в той теме .. всё закономерно.
Вы не ответили на вопрос, ни на один. Сильно опасаюсь, что ответов Вы просто не знаете и это - закономерно и есть "одно к другому". В таком разе приведите хотя бы тот код, который это делает, по нему можно будет и оценить отсутствующие ответы.
Вы не ответили на вопрос, ни на один.
Дело в том, что вы пытаетесь решить мне проблему, которой у меня нет. У меня нет проблем быстродействия, оптимизации кода, и т.п. Вопрос был об организации питания и аппаратных проблемах при старте.
Это взаимосвязанные вопросы и вполне возможно что, то что Вы нагородили из конденсатора - решается куда как проще. Но, "безграмотность становится всё более агрессивной в копроэкономике" .. в таком разе продолжайте копать в сторону почему лсд экран ТЕПЕРЬ у вас жрет слишком много .. :) Может какую errata в нем и откопаете .. (* дураков учить - бестолку *)
вполне возможно что, то что Вы нагородили из конденсатора - решается куда как проще.
Конечно. Достаточно переписать стандартные библиотеки, тогда программа сможет выполняться без электричества.
То есть "расписались". Ваше право. Может тогда разьясните что я делал не так (тут где-то есть мои посты за это решение), когда ставил кондер на 1000мкф с диодом на вход Ардуино Мега 2560 для защиты её от просадки полудохлых аккумов на хороших моторах и даже вместе с ЛСД1602 оно заводилось вполне нормально и без ваших проблем, а выключалось аж чуть ли не через секунды? Вам этого времени все ещё мало? Или может проблема в ином .. :)
P.S. Почему ваще, у меня работает практически всё, и глупых вопросов от меня сюда как-то не поступает? И датчики температуры работают и моторы крутятся и энкодеры успевают и даже конденсаторы на входе пашут как надо и осцил в режиме оверсэмплинга выдает и 4Мгц оцифровки с точностью в 8 бит (благо у него памяти вагон) .. вот что я делаю не так?
То есть "расписались". Ваше право. Может тогда разьясните что я делал не так (тут где-то есть мои посты за это решение), когда ставил кондер на 1000мкф с диодом на вход Ардуино Мега 2560 для защиты её от просадки полудохлых аккумов на хороших моторах и даже вместе с ЛСД1602 оно заводилось вполне нормально и без ваших проблем, а выключалось аж чуть ли не через секунды?
Да вы не обижайтесь, я ни в коем случае не пренебрегаю Вашими советами, но всему свое время. Сейчас мне хотелось бы не столько получить сиюминутный результат, сколько разобраться: как оно работает, начиная с аппаратной составляющей.
Сейчас запитал Arduino Nano от 5v прямо на вход 5v. Конденсатор между 5v—GND, как раз 1000мкФ. Ток зарядки кондентатора ограничил резистором аж 10k, а для быстой оттачи - параллельно резистору диод. Насыщается конденсатор секунд 10, но это не критично, как раз здесь спешить некуда. Вроде бы стало включаться нормально.
Вот ваше время работы: "аж чуть ли не через секунды", конечно, впечатляет сам я пока могу похвастаться только долями секунды. Что я делаю не так: возможно ток с конденсатора утекает не в ту сторону, и нужен еще один диод на выходе 5v (еще перед конденсатором). Попробую.
Я вас по-прежнему не понимаю, поскольку код Вы не выкладываете, объемы и потребное время по shutdown не пишите .. что в таком разе можно посоветовать?
Ну прикидывайте сами, раз даташит Вам не по зубам: скорость записи в EEPROM составляет около 3.3мсек на байт. Ну и вот эта тема Вам в помощь http://arduino.ru/forum/apparatnye-voprosy/sokhranenie-dannykh-v-pamyati-pri-kratkovremennykh-poteryakh-elektrichestva
скорость записи в EEPROM составляет около 3.3мсек на байт.
Что это за странное число "3.3 мс на байт", откуда вы такое взяли?
Запись в I2C EEPROM ведется "страницами", размер страницы зависит от конкретной микросхемы EEPROM, типично в диапазоне от 8 до 256 байт. При записи вы должны заполнить буфер, по сигналу STOP содержимое буфера переписывается в EEPROM, обычно это занимает 5 или 10 мс, это тоже зависит от конкретной микросхемы EEPROM.
Таким образом, если все, что надо записать в EEPROM, умещается на одной странице, то на это потребуется:
- на пересылку данных в буфер, даже при низкой I2C скорости 100 kbps, нужно порядка 100 мкс на байт
- на переписывание буфера в EEPROM - не более 10 мс
Скажем, если размер записи составляет 32 байта, то на все потребуется не более 15 мс.
Вы про внешнюю EEPROM, а я Вам про внутреннюю ардуинок. :)
А уж в какую пишет ТС - нам опять жеж - неведомо..