Главная » Статьи » Полезная информация |
При питании устройств от автономных источников питания – батареек, аккумуляторов (и яблок с воткнутыми электродами ;) ) приходиться заботиться о снижении энергопотребления, с целью увеличения срока службы без замены элементов питания. Само по себе энергопотребление зависит от многих факторов: от типа используемого микроконтроллера, напряжения питания, выбранной частоты работы, от сконфигурированной периферии и даже от температуры окружающей среды. Для управления энергопитанием все микроконтроллеры AVR имеют несколько режимов работы, позволяющие существенно снизить собственное энергопотребление – это режим сна (Sleep mode) и остановка (Power-down) Как меняется энергопотребление в зависимости от выбранного
режима работы наглядно продемонстрировано в таблице ниже (при 1 MHz, 3V, 25°C): Тип микроконтроллера Видно, что рулят ситуацией микроконтроллеры новых ревизий (те что выпускаются с индексом "а" на конце) и новые модели (atmega48/88/168 и подобные). Теперь посмотрим, как работать с режимами пониженного энергопотребления.
Режим сна (Sleep mode) При этом режиме останавливается тактовый генератор, но остальная периферия продолжает работать, и микроконтроллер будет реагировать на внешние прерывания, прерывания по UART и прерывания по счетчикам/таймерам. Довольно полезно использовать например при ожидании каких-нибудь преобразований - пока внешняя периферия думает (как в случае с датчиками 18b20), чтобы микроконтроллер попусту не жрал лишнюю энергию, можно на время его усыпить и разбудить через определенный промежуток времени с помощью таймера. Для погружения микроконтроллер в режим сна в Bascom-AVR используется команда Idle. Пример использования режима сна. Тут сконфигурирован таймер на прерывание через 4 секунды, как только таймер переполниться он вызовет прерывание и разбудит микроконтроллер.
$regfile = "m8def.dat"
$crystal = 1000000 '$sim 'конфигурируем таймер для генерации прерываний 'прерывания от таймера будут происходить примерно раз в 4 секунды Config Timer1 = Timer , Prescale = 64 On Timer1 Awake: Enable Interrupts Enable Timer1 Start Timer1 Do Print "Hello" 'печатаем приветствие Print "Sleep now" Idle 'погружаем в сон Loop Awake: 'случилось прерывание по таймеру Print "Awake!" Return End
Остановка (Power-down mode) Самый экономный режим, и, по сути, микроконтроллер обесточивается полностью. В этом режиме останавливается тактовый генератор и отключается вся периферия за исключением обработчика внешних прерываний, который при приходе прерывания возвращает микроконтроллер к нормальной работе. Чтобы задействовать этот режим даем команду Powerdown.
$regfile = "m8def.dat"
$crystal = 1000000 '$sim 'конфигурируем прерывание на INT0 'происходящее по низкому уровню на ножке МК Config Int0 = Low Level On Int0 Button: Enable Interrupts Enable Int0 Do Print "Hello" 'печатаем приветствие Print "Powerdown now" Powerdown 'грузим мк в энергоcберегающий режим Loop Button: 'пришло прерывание Print "Start" 'контроллер очнулся и напечатал сообщение Print "" Wait 1 Gifr = 64 Return 'возвращаемся в главный цикл End Обесточь меня полностью! В устройствах, где
микроконтроллер подолгу должен бездействовать (например, в термометрах которые большую часть времени никто не видит), можно
применить одно очень интересное решение с применением внешнего полевого
транзистора. Суть вот в чем: транзистор включен в разрыв цепи
питания устройства и открывается самим микроконтроллером во время выполнения
программы. Пока выполняется программа, на ножке PD0 держится высокий уровень напряжения и полевик
находится в открытом состоянии, пропуская через себя ток. После выполнения
необходимой программы, микроконтроллер закрывает транзистор, тем самым
обесточивая схему полностью. За счет огромного сопротивления полевого транзистора в
закрытом состоянии, ток будет очень мал (намного меньше тока саморазряда
батарейки).
$regfile = "m8def.dat"
$crystal = 1000000 Config Portd.0 = Output Portd.0 = 1 'даем на ножку единицу, тем самым открываем транзистор Config Portc.0 = Output 'а тут у нас светодиод Led Alias Portc.0 'делаем свое дело, например помигаем светодиодом Led = 1 Waitms 80 Led = 0 Waitms 80 Led = 1 Waitms 80 Led = 0 'ок, все сделали Portd.0 = 0 'закрываем транзистор End Чтобы включить устройство достаточно нажать на кнопку, на микроконтроллер снова поступит питающее напряжение, он в свою очередь откроет транзистор и дальше начнет выполнять свою программу, и по завершению которой, снова обрубит собственное питание. | |||||||||||||||||||||||||||||
Просмотров: 48715 | Комментарии: 22
| Теги: |
Всего комментариев: 22 | ||||||||||||||||||||
| ||||||||||||||||||||
Проекты [46] |
Как подключить [32] |
Инструменты [3] |
Полезная информация [18] |
Объявления [3] |