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

Понижаем энергопотребление устройств на микроконтроллерах 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
Просмотров: 26942 | Комментарии: 19 | Теги: энергосбережение, Powerdown, avr, bascom-avr, Idle | Рейтинг: 4.8/13
Всего комментариев: 19
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)
Отличная статья!

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






   EasyEDA:  бесплатный редактор схем

   ✓ Создание схем
   ✓ Возможность симуляции
   ✓ Быстрое создание печатных плат
   ✓ Интуитивно понятный интерфейс

   Нарисуй свою схему прямо сейчас!
   Изготовление печатных плат   https://easyeda.com/order
авторизация
Логин:
Пароль:
Комментарии
Когда не хватает ног. Часть 2. Сдвиговый регистр 74HC595
08.12.2016 - exersizze:
yorx выдалось немного свободного времени, проверил в симуляторе. Проблема...
Логгер температуры 2.0
05.12.2016 - Evgeny6873:
Хотел повторить схему и долго ждал дисплей, два раза заказывал с Китая, пришел. ...
Когда не хватает ног. Часть 2. Сдвиговый регистр 74HC595
01.12.2016 - yorx:
Доброго времени суток, exersizze попробовал Ваш код все равно не работает как на...
Помни об усадке!
30.11.2016 - pchela5:
Автомобильные никакие не лезут?
Помни об усадке!
29.11.2016 - AlekS:
Виктор, спасибо.
С заменой транса в зиму, перестройка не комельфо) Валяет...
Управляем микроконтроллером с ПК по UART
29.11.2016 - exersizze:
Михаил, для работы с инфракрасными датчиками и диодами есть команды RC5SE...
Управляем микроконтроллером с ПК по UART
29.11.2016 - Михаил:
Всем привет.
Подскажите как переменную S передать по инфракрасному каналу...
Помни об усадке!
29.11.2016 - pchela5:
> Если ленту светодиодную порезать и соединить последовательно
Только ...
Когда не хватает ног. Часть 2. Сдвиговый регистр 74HC595
29.11.2016 - exersizze:
yorx, вывод Q7 ' первой микросхемы соединен с DS второй микросхемы? С...


Лучшие цены на 3D принтеры
успей сделать себе подарок к Новому Году! ;)


Prusa i3

Prusa i3 от 12500 р.



Rostoсk

Rostock от 15000 р.