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

Управление питанием устройства с помощью одной кнопки

 В портативных устройствах, как известно, важной составляющей является время автономной работы. Кому понравится пользоваться устройством, которое приходится очень часто заряжать?  Поэтому к различным способам снижения энергопотребления полезно добавлять еще одну функцию - автоматическое отключение питания, которое поможет спасти заряд батареи если пользователь забыл отключить устройство.  А для того чтобы это реализовать, нужно чтобы устройство включалось и выключалось от кнопки без фиксации. Мне как раз понадобилось реализовать подобное и испытав несколько схем найденных в интернете, остановился на самом интересном решении. Поэтому сейчас покажу, как можно включать и выключать устройство на микроконтроллере одной кнопкой без фиксации и реализацию такого алгоритма в Bascom-AVR.

 Схема строится на небольшом количестве дискретных элементов и использует одно прерывание контроллера:

  При нажатии на кнопку S1 транзистор Q1 открывается и напряжение от батареи идет в схему. Для того чтобы после отпускания кнопки транзистор Q1 не закрылся, необходимо открыть транзистор Q2, подав на затвор единичку. И пока на затворе Q2 будет высокий уровень напряжения, схема будет запитана. Когда же нужно будет обесточить схему и отключить устройство, просто снимаем напряжение с этого вывода, оба транзистора закроются и полностью обесточат схему.  Светодиод D3 для индикации работы.

  Транзисторы необходимо использовать с логическим уровнем отпирания (Logic Level), чтобы они полностью открывались от напряжения батареи. Хотя я собрал и тестировал схему на том, что попало под руку: в качестве Q1 я использовал IRF5305, а в качестве Q2 - IRF530. Оба транзистора от 5 вольт открываются почти полностью. Взял я их потому что они в больших корпусах и их можно использовать в макетке. Заместо диодов D1 и D2 воткнул диодный мост :)

 

 Первый пример. Включение и выключение питания происходит простым нажатием на кнопку.

$regfile = "m8def.dat"
$crystal = 1000000

Dim flag as Byte             'переменная для выполнения основной программы

Config PORTB.0=OUTPUT        'выход светодиода
Led alias portb.0

Config portd.=OUTPUT       'управление питанием
pwr alias portd.3

Config INT0=low level        'кнопка включения/выключения
On Int0 Zapusk:

Enable int0                  'разрешаем прерывания
Enable interrupts

'основной цикл
Do

  If flag=then             'выполнение основной программы
   Led=1
  End if


Loop

end


'прерывание при нажатии на кнопку
zapusk:

toggle pwr                   'включение / выключение

flag=1                       'поднимаем флаг

do
loop until pind.2=1          'пока нажата кнопка крутимся здесь

waitms 100
Gifr = 64

return

 

 

 

 

 

 

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

$regfile = "m8def.dat"
$crystal = 1000000

dim flag as Byte             'переменная для выполнения осовной программы
dim a as Byte                'для организации задержки
config PORTB.0=OUTPUT        'выход светодиода
led alias portb.0

config portd.=OUTPUT       'управление питанием
pwr alias portd.3

config INT0=low level        'кнопка включения/выключения
On Int0 Zapusk:

enable int0                  'разрешаем прерывания
enable interrupts

'основной цикл
do

  if flag=then             'выполнение основной программы
  '....
  '....
  end if


loop

end


'прерывание при нажатии на кнопку
zapusk:

flag=1                       'поднимаем флаг

do
 incr a
 wait 1

   if a=then               'если прошло 3 секунды
    toggle pwr               'включение / выключение
    toggle led
    goto ext                 'выход из цикла
   end if

   loop until pind.2=1       'пока нажата кнопка крутимся здесь
ext:
a=0
waitms 100
Gifr = 64

return

 

 

 

 

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

 

Категория: Полезная информация | Добавлено: 09.10.2016
Просмотров: 1592 | Комментарии: 5 | Рейтинг: 5.0/7
Всего комментариев: 5
0  
5 exersizze   (19.11.2016 23:13)
В easyeda.com. Конкретно на эту схему https://easyeda.com/exersizze/____-9YWG2MwuP

4 CortexDen   (18.11.2016 09:48)
Подскажите в чём нарисована схема?

0  
3 RD3AVJ   (20.10.2016 08:20)
Спасибо, Вить! Прикручу к счетчику моточасов. Мне китайцы вместо радиаторов для Raspberry Pi как раз прислали антивандальную кнопку без фиксации, да еще и бабки вернули за недопоставленные кулеры, так что вот и пригодится))

0  
2 exersizze   (11.10.2016 20:01)
всегда пожалуйста )

1 Scorpushka   (11.10.2016 17:56)
спасибо!

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






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

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

   Нарисуй свою схему прямо сейчас!
   Изготовление печатных плат   https://easyeda.com/order
авторизация
Логин:
Пароль:
Комментарии
Когда не хватает ног. Часть 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 второй микросхемы? С...
Помни об усадке!
29.11.2016 - exersizze:
Можно даже без резистора их включать, если на ленте уже стоят. Но если опасаешьс...
Помни об усадке!
28.11.2016 - AlekS:
Да,пла, из абс как-то грубовато идет. (((
Самое главное, наверное и для т...


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


Prusa i3

Prusa i3 от 12500 р.



Rostoсk

Rostock от 15000 р.