Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Контроль разряда батареи
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
ValBag
Имеется устройство на AVR, выполняющее определенные функции, инициируемые внешними прерываниями, после чего следует переход в спящий режим Power Down, для экономии энергопотребления от аккумулятора. Хотелось бы возложить на МК также, контроль разряда батареи, не применяя внешний компаратор. Т. к. период перехода в активный режим весьма случаен - от десятков секунд, до нескольких часов и более, то попутный контроль - при рабочем режиме - отпадает, т. к. в период долгой пассивности, не будет ни контроля, ни информации о текущем состоянии батареи.
Первое, что приходит в голову, использовать сброс по сторожевому таймеру, измеряя затем напряжение батареи и выдавая импульс на индикатор, в случае разряда. Затем снова в спящий режим.
Прошу опытных проектировщиков подсказать альтернативные варианты.
sKWO
Power Down - останавливается не только процессор, но и тактовый генератор. Вернуть МК в нормальный режим можно внешним сбросом, сбросом сторожевого таймера или внешним прерыванием по уровню. При этом надо иметь в виду, что на "раскачку" тактового генератора требуется время!
tyro
Цитата(ValBag @ Mar 4 2010, 19:45) *
Первое, что приходит в голову, использовать сброс по сторожевому таймеру, измеряя затем напряжение батареи и выдавая импульс на индикатор, в случае разряда.

Если нет других путей по доставке информации до "заинтересованных лиц", и минимизации аппаратных затрат, то как говорится "при всем богатстве выбора альтернативы нет", или почти нет (поскольку к расмотрению предложен только МК и АБ).
yarunt
Можно по таймеру в асинхронном режиме работающем на часовом кварце 32768. Пробуждение можно настроить на каждые 8 секунд.2-х солевых батареек хватало на 8 месяцев .
Son Of Stone
Однажды решил такую проблему с помощью супервизора MCP111, подключенного к одному из PCINT'ов ATTiny2313. Все про все - один корпус SOT23-3 и 100нА потребления.
stells
а встроенный компаратор не работает случайно в режиме Power Down? он же вроде как является асинхронным модулем?
ValBag
Цитата(yarunt @ Mar 5 2010, 02:27) *
Можно по таймеру в асинхронном режиме работающем на часовом кварце 32768. Пробуждение можно настроить на каждые 8 секунд.2-х солевых батареек хватало на 8 месяцев .
Да, спасибо, я тоже попозже рассмотрел этот вариант. Только тогда придется обойтись, для основного режима, встроенным калиброванным генератором, т. к. в подходящих мне МК, выводы "XTAL" и "TOSC" - совмещенные. Добавка по току от таймера 2, наверное будет небольшая в таком режиме ?
В принципе, возможен еще один вариант: Если "отловить", при очередном активном режиме, разряд батареи, то в основной программе, только с этого момента запускать сторожевой таймер, который периодически выводит из спящего режима, с выдачей затем импульса на индикацию о состоянии батареи.


Цитата(stells @ Mar 5 2010, 13:51) *
а встроенный компаратор не работает случайно в режиме Power Down? он же вроде как является асинхронным модулем?
В спящем режиме он, к сожалению, не работает (насколько мне известно).
stells
Цитата(ValBag @ Mar 5 2010, 12:51) *
В спящем режиме он, к сожалению, не работает (насколько мне известно).

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

вроде бы не видно на схеме ни клоков, ни триггеров:
Нажмите для просмотра прикрепленного файла
V_N
Код
проверить бы это... в спящем режиме отключаются все модули, работающие в синхронном режиме, т.е. те, которые тактируются. но компаратору такт не нужен, поэтому не исключено, что он может сгенерить прерывание, если только само прерывание не формируется каким-нибудь D-триггером

С режима Power Down возможен выход только по NT0, INT1 and р in Change USI Start Condition иWDT по крайнер мере для ATtiny2313
ValBag
Цитата(stells @ Mar 5 2010, 16:57) *
проверить бы это... в спящем режиме отключаются все модули, работающие в синхронном режиме, т.е. те, которые тактируются. но компаратору такт не нужен, поэтому не исключено, что он может сгенерить прерывание, если только само прерывание не формируется каким-нибудь D-триггером
Проверить можно, но вот что написано в датшите:
Перед входом в режим холостого хода аналоговый компаратор необходимо выключить, если он не используется. Перед входом в режим уменьшения шумов АЦП аналоговый компаратор должен быть отключен. При входе в другие режимы сна аналоговый компаратор отключается автоматически. Однако, если к неинвертирующему входу аналогового компаратора выбрано подключение встроенного источника опорного напряжения, то перед входом в любой режим сна аналоговый компаратор необходимо отключать. В противном случае встроенный источник опорного напряжения останется включенным независимо от режима сна
А как он себя дальше поведет - неизвестно. Раз отключаются порты, тем более входные шунтируются на землю, то наверное работа компаратора в этом режиме не состоится. Но вообще, ...можно проверить. rolleyes.gif
stells
Цитата(ValBag @ Mar 5 2010, 13:15) *
Раз отключаются порты, тем более входные шунтируются на землю, то наверное работа компаратора в этом режиме не состоится

порты не отключаются, иначе подсистема обработки внешних прерываний не будет работать
ValBag
Цитата(stells @ Mar 5 2010, 17:23) *
порты не отключаются, иначе подсистема обработки внешних прерываний не будет работать
Не отключаются только внешние:
Сигнал SLEEP игнорируется по входам внешних прерываний. Если запросы на внешнее прерывание отключены, то SLEEP действует и на эти выводы.
Остальные шунтируются сигналом SLEEP: в режимах (Power-down), экономичный режим, дежурный режим и расширенный дежурный режим.
Itch
А если прицепить на пин внешнего прерывания INT0 маленький конденсатор, заряжать его и уходить в PowerDown. Конденсатор со временем разрядится, произойдет прерывание по низкому уровню на пине. Период пробуждения будет гулять, но не очень сильно.
stells
Цитата(Itch @ Mar 5 2010, 14:33) *
А если прицепить на пин внешнего прерывания INT0 маленький конденсатор

так это тоже самое, что и сторожевой таймер

кстати, а если на INT0 завести сигнал с делителя напряжения АКБ?
Itch
Цитата(stells @ Mar 5 2010, 17:37) *
так это тоже самое, что и сторожевой таймер

ну не совсем, WD кушает ~8uA ибо внтренняя частота у него ~1МГц, а тут можно значительно меньше сделать наверное, надо посчитать.

Цитата
кстати, а если на INT0 завести сигнал с делителя напряжения АКБ?

если надо нанотоки, то делитель надо делать строго подключаемым на время измерения.
rx3apf
Цитата(Itch @ Mar 5 2010, 14:45) *
ну не совсем, WD кушает ~8uA ибо внтренняя частота у него ~1МГц, а тут можно значительно меньше сделать наверное, надо посчитать.

Цифровой вход вблизи порога переключения сожрет в разы больше.
ValBag
Цитата(rx3apf @ Mar 5 2010, 20:29) *
Цифровой вход вблизи порога переключения сожрет в разы больше.
Конечно, это "оригинально" - ловить порог таким способом, но разве вход не обладает триггерной характеристикой ?
stells
Цитата(ValBag @ Mar 5 2010, 16:51) *
Конечно, это "оригинально" - ловить порог таким способом, но разве вход не обладает триггерной характеристикой ?

по идее да, причем с небольшим гистерезисом
rx3apf
Цитата(stells @ Mar 5 2010, 16:53) *
по идее да, причем с небольшим гистерезисом

Обсуждается все еще AVR ? Что-то мне там не припоминаются входы с гистерезисом. А вот резко растущее потребление при висящих входах - очень даже припоминается...
ValBag
Цитата(rx3apf @ Mar 5 2010, 21:08) *
Обсуждается все еще AVR ? Что-то мне там не припоминаются входы с гистерезисом. А вот резко растущее потребление при висящих входах - очень даже припоминается...
Полюбопытствуйте в схеме порта в датшите. Там на входе триггер Шмитта. А повышенное энергопотребление, это хаотичное переключение портов в результате воздействия шумового напряжения на неподтянутых входах.
rx3apf
Цитата(ValBag @ Mar 5 2010, 17:20) *
Полюбопытствуйте в схеме порта в датшите. Там на входе триггер Шмитта. А повышенное энергопотребление, это хаотичное переключение портов в результате воздействия шумового напряжения на неподтянутых входах.

А, вообще-то да, нарисован... Но что-то мне странно, что уровень шума на никуда не подключенном входе столь велик, что устойчиво превышает гистерезис. Или гистерезис все равно не спасает от повышения тока потребления вблизи точки переключения. Никогда не интересовался, что там реально считывается с ноги в такой ситуации, контролировал лишь факт нестабильности потребления (полезно, чтобы удостовериться, что все настроено как надо)...
stells
Цитата(rx3apf @ Mar 5 2010, 17:28) *
что-то мне странно, что уровень шума на никуда не подключенном входе столь велик, что устойчиво превышает гистерезис

гистерезис очень маленький, что-то милливольт 50 (вот у ПИКов он несколько больше), но этого было-бы достаточно, чтобы использовать вход INT0 как компаратор

входное сопротивление порта 100МОм, так что делитель, скажем, 10+10МОм съест как-раз наноамперы
ValBag
yarunt, хотелось бы услышать, как от практически применявшего асинхронный таймер с кварцем 32768, каков добавочный ток при его использовании в спящем режиме ?
rx3apf
Цитата(ValBag @ Mar 5 2010, 17:34) *
хотелось бы услышать, как от практически применявшего асинхронный таймер с кварцем 32768, каков добавочный ток при его использовании в спящем режиме ?

Вот по моим записям, таймер у mega8 (@3.6V) жрет 8 uA, без обработки прерываний. Обработка (16 Hz) забирала еще 4..5 uA (там есть тонкость, из обработчика нельзя выходить раньше одного такта генератора), при RC-тактировании 3.6 MHz. Новые камни (скажем, mega88) - помнится, потребляют заметно меньше.
ValBag
Цитата(rx3apf @ Mar 5 2010, 21:51) *
Вот по моим записям, таймер у mega8 (@3.6V) жрет 8 uA, без обработки прерываний. Обработка (16 Hz) забирала еще 4..5 uA (там есть тонкость, из обработчика нельзя выходить раньше одного такта генератора), при RC-тактировании 3.6 MHz. Новые камни (скажем, mega88) - помнится, потребляют заметно меньше.
Не совсем понял. 16 Hz - это внешнее тактирование асинхронника? На такой частоте? Впрочем вы имеете в виду очевидно период прерывания. А частота таймера какая ?
rx3apf
Цитата(ValBag @ Mar 5 2010, 18:00) *
Не совсем понял. 16 Hz - это внешнее тактирование асинхронника? На такой частоте?

Нет, это кварц 32768 Hz, прескалер 8, прерывание по переполнению 16 раз в секунду (используется у меня для опроса датчиков).
ValBag
Цитата(rx3apf @ Mar 5 2010, 22:04) *
Нет, это кварц 32768 Hz, прескалер 8, прерывание по переполнению 16 раз в секунду (используется у меня для опроса датчиков).
Понятно, спасибо. Величины приемлимы. Только при 5 В, возрастет наверное вдвое. Но всё равно, допустимо.
Александр Куличок
Просыпаться от таймера 32кГц возможно Power-save режиме. Потребление контроллера в этом режиме в виде графика описано в разделе "Typical Characteristics" даташита.
При переходе в спящий режим нельзя оставлять ноги в 3-м состоянии, так как потребление при этом увеличивается в разы.
В случае периодического просыпания от асинхронного таймера, свою долю в общее потребление будет также вносить потребление контроллера при восстановлении из спящего режима. А оно по длительности сравнительно большое и определяется временем, отведенным под запуск кварца или внутреннего генератора (до 16000 тактов для меги88)
rx3apf
Цитата(Александр Куличок @ Mar 6 2010, 23:21) *
А оно по длительности сравнительно большое и определяется временем, отведенным под запуск кварца или внутреннего генератора (до 16000 тактов для меги88)

Поскольку кварцевый генератор у M8/M88 только один, то при использовании кварца 32768 Hz речь может идти только о тактировании от внутреннего RC-генератора, а он запускается практически мгновенно (6 тактов).
adc
Почему Вы не рассматриваете вариант озвученный ранее с использованием Watchdog Reset? Использовал подобное решение в устройстве работающем на батареях. По WDT контроллер просыпался каждые 2 секунды, делал быстренько свои дела и баиньки. biggrin.gif
rx3apf
Цитата(adc @ Mar 7 2010, 09:36) *
Использовал подобное решение в устройстве работающем на батареях. По WDT контроллер просыпался каждые 2 секунды, делал быстренько свои дела и баиньки. biggrin.gif

Отмечу, что решение с WDT в разы прожорливее... К тому же, бонусом к варианту с часовым кварцем будет возможность реализовать RTC без отдельного чипа (хотя в данном случае о этом речь не шла, просто напоминаю)...
adc
Цитата(rx3apf @ Mar 7 2010, 10:46) *
Отмечу, что решение с WDT в разы прожорливее...

Для многих задач "прожорливость" в 25мкА (вместо 2мкА без wdt) вполне приемлема.
ILYAUL
Цитата(ValBag @ Mar 4 2010, 19:45) *
..... для экономии энергопотребления от аккумулятора. .....Т. к. период перехода в активный режим весьма случаен - от десятков секунд, до нескольких часов и более, то попутный контроль - при рабочем режиме - отпадает, т. к. в период долгой пассивности, не будет ни контроля, ни информации о текущем состоянии батареи.


То , что контроля нет это и понятно , не понятно , раз уж проц проснулся , почему не проверить батарею и спать дальше

Цитата
Первое, что приходит в голову, использовать сброс по сторожевому таймеру, измеряя затем напряжение батареи и выдавая импульс на индикатор, в случае разряда. Затем снова в спящий режим.

Зачем экономя батарею дёргать проц проверить эту батарею , не важно каким методом Вы это будите делать , чтобы Вы не оставили вкл. WD или таймер Вы всё равно повышаете расход той же батарейки , которую и хотите сэкономить.
Может проще чуть повысить порог предупреждения о заряде батареи и выдавать импульс. И уж в этом случае сигнализировать , кому это надо , используя методы предложенные Вам в топике т.е постоянно напоминать.
adc
Цитата(ILYAUL @ Mar 7 2010, 16:53) *
Зачем экономя батарею дёргать проц проверить эту батарею , не важно каким методом Вы это будите делать , чтобы Вы не оставили вкл. WD или таймер Вы всё равно повышаете расход той же батарейки , которую и хотите сэкономить.

Повышаем, но насколько?! Автор говорит:
Цитата
Имеется устройство на AVR, выполняющее определенные функции, инициируемые внешними прерываниями, после чего следует переход в спящий режим Power Down, для экономии энергопотребления от аккумулятора.

Экономия будет и в том и другом случае.. А вот насколько разница в 20мкА принципиальна топикпастеру можно спросить у него. rolleyes.gif
ValBag
При стремлении к максимальной экономии аккумулятора, может получиться обратный эффект, вследствие частых проверок, как отмечено в замечаниях многих. Поэтому, напрашивается промежуточный логический вариант: не "дергать" потребление на проверку в спящем режиме, когда это еще и не нужно, т. е., когда акумулятор еще более-менее "здоров", а измерять в рабочем цикле (который всегда "нужен" smile.gif). При очередной проверке, обнаружив, что подошел порог разряда, включать периодически индикацию, а для того, чтобы она была доступна и в спящем режиме, с этого момента задействовать сторожевой таймер для пробуждения с информацией о критическом пороге разряда. Т. к. периоды активного и пассивного режимов различаются многократно, такой подход, наверное, будет разумным?
Можем только потерять информацию о состоянии АКБ, когда "уйдем в спячку" перед самым порогом разряда и до момента пробуждения. Ну, это уже, как говорят - "издержки производства". А для того, чтобы не оказаться "у разбитого корыта" - с неработоспособным АКБ, порог разряда можно выбрать упреждающим.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.