Главная » Статьи » Полезная информация

Понижаем энергопотребление устройств на микроконтроллерах AVR

 При питании устройств от автономных источников питания – батареек, аккумуляторов (и яблок с воткнутыми электродами ;) ) приходиться заботиться о снижении энергопотребления, с целью увеличения срока службы без замены элементов питания. Само по себе энергопотребление зависит от многих факторов: от типа используемого микроконтроллера, напряжения питания, выбранной частоты работы, от сконфигурированной периферии и даже от температуры окружающей среды.

 Для управления энергопитанием все микроконтроллеры AVR имеют несколько режимов работы, позволяющие существенно снизить собственное энергопотребление – это режим сна (Sleep mode) и остановка (Power-down)

 Как меняется энергопотребление в зависимости от выбранного режима работы наглядно продемонстрировано в таблице ниже (при 1 MHz, 3V, 25°C):


 Тип микроконтроллера

 Active mode  Sleep mode Powerdown mode 
Attiny2313 2.5 mA 0.5 mA 0.5 μA
 Attiny2313a190 μA 24 μA  0.1 μA 
 Atmega48250 μA15 μA0.1 μA
 Atmega83.6 mA1.0 mA0.5 μA
 Atmega8a 250 μA50 μA 0.1 μA
 Atmega32a 0.6 mA 0.2 mA< 1 μA

 Видно, что рулят ситуацией микроконтроллеры новых ревизий (те что выпускаются с индексом "а" на конце) и новые модели (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.= Output
Portd.= 1                   'даем на ножку единицу, тем самым открываем транзистор

Config Portc.= Output       'а тут у нас светодиод
Led Alias Portc.0

'делаем свое дело, например помигаем светодиодом

Led = 1
Waitms 80
Led = 0
Waitms 80
Led = 1
Waitms 80
Led = 0

'ок, все сделали

Portd.= 0                          'закрываем транзистор

End

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





Категория: Полезная информация | Добавлено: 04.02.2012
Просмотров: 48715 | Комментарии: 22 | Теги: энергосбережение, Powerdown, avr, bascom-avr, Idle | Рейтинг: 4.8/14
Всего комментариев: 22
0  
22 exersizze   (08.10.2019 22:08) [Материал]
Ну так схема без диода и не работает. По поводу всего остального - еще как работает, замерял микроамперметром в разрыве питания, потребление отсутствует. Я применял эту схему много где, и бывает натыкаюсь на собранные устройства, лежавшие по много месяцев в коробке, и если аккумулятор применялся изначально не дохлый, они включаются и рапортуют о высоком заряде.

21 vakulyuk   (27.09.2019 07:42) [Материал]
"Обесточь меня полностью" не работает в таком исполнении... Убрав землю с атмеги она становится проводником и на всех ножках появляется напряжение питания и через диод на полевик приходит небольшое напряжение, чуть чуть его открывая, тем самым схема не обестачивается и потребляет свои миллиамперы... Без диода так вообще 0.6 вольта приходит на полевик...

20 tyua   (02.10.2017 17:44) [Материал]
А нельзя ли сделать аналогично, только что бы вместо кнопки, обычный выключатель с фиксацией?

19 domrustika   (13.12.2013 01:17) [Материал]
я знаю что в этом очень большой смысл и очень хорошая идея. Но если нужно применить метод к другому устройству, возможно ли сделать так как я написал ниже?

18 sany2   (13.12.2013 00:46) [Материал]
Смысл этой полезной информации как раз отчасти и в том ,чтобы избавиться от фиксированного выключателя.Поставив выключатель-потеряется вообще весь смысл представленной здесь информации.

17 domrustika   (12.12.2013 22:45) [Материал]
огооо . т.е если я хочу чтобы допустим светодиод горел пока нажата кнопка с фиксацией, то всю обвязку с транзистором можно убрать? оставить только кнопку в разрыве питания?
и при этом когда цепь не замкнута(не нажата кнопка) энергия батарейки тоже не будет тратиться?

16 exersizze   (12.12.2013 21:10) [Материал]
Кнопка тактовая без фиксации.
Была бы с фиксацией, не нужно было бы заморачиваться с транзистором:))

15 domrustika   (12.12.2013 19:53) [Материал]
спасибо. а какую тут кнопку использовать надо? с фиксацией или тактовую без?

14 exersizze   (21.11.2013 11:09) [Материал]
Пойдет любой N-канальный полевик. Конечно желательно с логическим уровнями открывания, но по факту работает и со всеми остальными, так как от 5и вольт все  полевики открываются почти полностью. 
Вот можно выбрать из этого списка http://chipnn.ru/42.php

13 domrustika   (21.11.2013 00:44) [Материал]
а какие еще полевые транзисторы можно использовать вместо указанного здесь?

12 Valera18   (26.09.2013 22:21) [Материал]
Для exersizze

Про потребление при частоте 1МГц: на №1 и №3 тесте удалось добить потребление в активном режиме 0,50 мА, но при этом нужно учитывать, что все порты отключены и таймера остановлены.
Насчёт частоты 128кГц: для пульта на nRF24L01 - подойдёт. Единственное что понравилось потребление в активном режиме 120 мкА.

Даже не знаю, как производителям микросхем удалось замерить низкое потребление в активном режиме при частоте 1МГц. В Datasheet активный режим 1МГц = 190 мкА.
Пробовал режимы: stop и CONFIG POWER_REDUCTION, но добиться значения 120 мкА удалось только на частоте 128кГц.

11 exersizze   (26.09.2013 21:52) [Материал]
Спасибо за тесты. Тоесть потребление при 1МГц одинаковое - кушает 1мА.
Вот интересно есть смысл понижать частоту до 128кГц? Хоть и потребление почти что в 10 раз меньше, но и по времени программа будет выполняться примерно в 10 раз дольше smile

10 Valera18   (16.03.2013 09:18) [Материал]
Программирую Attiny2313A-SU, а программатор Bascom распознаёт как Attiny2313.
Компиляция при $regfile = "attiny2313a.dat" в Bascom проходит успешно, но при программирование в Bascom выдаёт ошибку (выходит только при $regfile = "attiny2313.dat").

Bascom V.2.0.7.1
Кто знает как это исправить?

9 exersizze   (21.02.2013 16:00) [Материал]
Ситуации бывают разные, не только измерение температуры. А если нужно чтобы устройство проработало минуту, держать кнопку все это время? Так что упростить до одной кнопки не всегда получится.

8 vovagvi   (21.02.2013 01:38) [Материал]
а не проще поставить кнопку прямо на питание? нажал, посмотрел температуру, отпустил и все обесточено....

7 stalkerk750   (10.12.2012 01:32) [Материал]
Большое спасибо, Вы мне очень помогли!

6 exersizze   (10.12.2012 00:08) [Материал]
Можно конечно, только у биполярного транзистора падение напряжение большое в сравнению с полевиком, поэтому заместо 5 вольт на микроконтроллер пойдет около 4,3 Вольта. А в случае батарейного питания и того меньше

вот аналогия на npn транзисторе

заместо ключа S1 любой порт микроконтроллера

5 stalkerk750   (09.12.2012 19:52) [Материал]
А можно полевой транзистор заменить на биполярный транзистор npn проводимости и как это можно организовать?

4 exersizze   (19.08.2012 09:20) [Материал]
Резистор для быстрого разряда затвора, а диод для перестраховки, чтобы защитить порт.

3 tenevikus   (13.08.2012 23:51) [Материал]
а зачем диод и резистор в цепи транзистора?

2 AlekS   (06.02.2012 15:48) [Материал]
Больше познавательных статей, об возможностях BASCOMA!!!!

1 Rosh   (05.02.2012 00:52) [Материал]
Отличная статья!

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]






авторизация