Всем знакома такая ситуация: открываешь дверь в темном помещении и судорожно ищешь кнопку выключателя что бы зажечь свет… Или наоборот, уютно устроившись в теплом кресле, начинаешь дремать, и так не охота вставать и выключать свет…
А если снабдить выключатель специальной приставкой, то достаточно всего лишь хлопнуть в ладоши и свет погаснет сам. Идея такого автомата не нова. Я лишь попытался сделать его компактным и легко повторяемым.
В основе автомата-приставки микроконтроллер серии Microchip – PIC12F629. Аналоговая часть – усилитель звуковой частоты и исполнительная цепь – ключевой транзистор и реле, коммутирующее питание нагрузки. В качестве реле я использовал TRM3003 на 110 В с гасящим резистором (R8)16 kOm (2 Вт). Устройство питается от параметрического стабилизатора, собранного на стабилитроне и сглаживающих пульсации конденсаторах.
Устройство работает так: в режиме ожидания на порту GP0 микроконтроллера присутствует лог. «1», а на порту GP2 – лог. «0». Таким образом аналоговая часть работает в режиме усилителя звуковой частоты. Сигнал от пьезоэлемента подается на базу первого транзистора КТ3102Б. Смещение на базу подается через резистор 3,3 М. С коллекторной нагрузки первого транзистора сигнал через развязывающую емкость подается на базу второго транзистора обратной структуры. Его база приоткрыта резистором 2 М. С коллекторной нагрузки второго транзистора усиленный сигнал подается через емкость 510 пФ на порт GP1 контроллера. Резистор 20 К совместно с емкостью выполняет роль дифференцирующей цепочки, что снижает реакцию усилителя на посторонние шумы.
При поступлении громкого сигнала свиста либо хлопка в ладоши на выходе усилителя появляется напряжение, которое поступает на порт GP1 контроллера. Контроллер «просыпается», изменяет напряжения на порту GP0 на противоположные, а через порт GP2 начинает генерировать сигнал звуковой частоты – пакеты длительностью 200 mS, заполненные частотой 5000 Гц, с интервалами в 100 mS. Это своего рода сигнал о том, что команда принята. Всего 3 пакета общей длительностью около 1 S. Затем на GP5 формируется лог.«1» и включается нагрузка. Наличие диода в базовоколлекторном переходе первого транзистора позволяет сигналу проходить через пьезоизлучатель. Диод необходимо подобрать по наименьшему сопротивлению в прямом состоянии, в этом случае сигнал будет звучать громче.
Устройство питается от сети 220 В. Напряжение выпрямляется двухполупериодным выпрямителем и гасится на резисторе 100 кОм, затем стабилизируется стабилитроном КС 106 Б.
О программе: в контроллере задействован внутренний тактовый генератор на 4 МГц. В режиме ожидания контроллер находится в спящем состоянии и потребляет ток примерно 4 мкА, не считая потребления от портов питания усилителя и ключевого транзистора. В общем, суммарный ток потребления в режиме ожидания не превышает 100 мкА. В программе реализовано прерывание по изменению состояния порта GP1. Сразу после пробуждения и сброса флага прерывания от порта, запрещаются дальнейшие прерывания от порта, изменяется уровень логики на GP0 и начинается генерация частотнозаполненных пакетов. Пакеты формируется посредством простых циклов. После окончания формирования звуковых пакетов контроллер включает нагрузку, устанавливает первоначальное состояние на портах питания усилителя, разрешает прерывания от GP1 и уходит в сон… Последующая подача сигнала в виде хлопка и свиста повторяет алгоритм и приводит к выключению нагрузки.
Основные моменты программы
Для разрешения прерываний от периферии необходимо настроить регистр INTCON.
Это можно сделать сразу в подпрограмме инициализации:
MOVLW B'10001000' MOVWF INTCON ; разрешаем глобальные прерывания и прерывания от портов
Здесь установлен быт разрешения глобальных прерываний и прерываний от портов
Непосредственно разрешить прерывания от конкретного порта можно в регистре IOCB.
Нужно, при этом, помнить что IOCB находится в первом банке памяти!
START_ BSF GPIO,0 ; УСТ. В "1" BCF GPIO,2 ; УСТ. В "0" BSF STATUS, RP0 ; банк 1 bsf IOCB,1 ; вкл. прервывание от GP1 BCF STATUS, RP0 ; банк 0 ;******************ОЖИДАНИЕ****************** SLEEP NOP ;********************ОТВЕТ******************* BSF STATUS, RP0 ; банк 1 bcf IOCB,1 ; выкл. прервывание от GP1 BCF STATUS, RP0 ; банк 0 BCF GPIO,0 ; УСТ. В "0"
Программа устанавливает GP0 в «1», GP2 в «0», т.е. включает аналоговую часть устройства в режим микрофона, разрешает прерывания от порта GP1 и уходит в сон.
При пробуждении от прерывания программа запрещает прерывание от GP1 и устанавливает на GP0 «0», т.е. отключает питание усилителя.
Вход в прерывание
; ВХОД В ПРЕРЫВАНИЕ ОТ ПОРТОВ PER MOVF GPIO,0 BCF INTCON,0 ; сбросим флаг прерывания от портов RETFIE
Необходимо выполнить чтение порта, чтобы исключить несоответствие и сбросить флаг прерывания.
Генерирование сигнала (отклик брелка)
Происходит чисто программно, без использования прерываний. Задержки формируются посредством вложенных циклов. Цикл реализованный на переменной «TEMP» формирует задержку, равную половине периода частоты 500 Гц (т.е. 1 миллисекунда). После выполнения задержки порт GP2 изменяет свое состояние на противоположное и т.д…
Цикл реализованный на переменных «TEMP1» и «TEMP2» формирует повторение внутреннего цикла на «TEMP» в течении 200 миллисекунд.
;**********СИГНАЛ 5000 Гц (100 mS)*********** MOVLW .9 MOVWF TEMP1 MOVLW .10 MOVWF TEMP2 MOVLW .30 MOVWF TEMP DECFSZ TEMP GOTO $-1 BTFSS GPIO,2 ; ЕСЛИ ПОРТ В "0" GOTO $+2 GOTO $+3 BSF GPIO,2 ; УСТ. В "1" GOTO $+2 BCF GPIO,2 ; УСТ. В "0" DECFSZ TEMP2 GOTO $-.11 DECFSZ TEMP1 GOTO $-.13 ;******************************************
Пауза формируется все теми же вложенными циклами:
;*************ПАУЗА (100 mS)*************** MOVLW .200 MOVWF TEMP1 MOVLW .170 MOVWF TEMP2 DECFSZ TEMP2 GOTO $-1 DECFSZ TEMP1 GOTO $-5 ;******************************************
Объединив оба блока (звук + пауза) в один и задав количество повторений через переменную «TEMP3» равную 3 получаем:
;**********ЦИКЛ ПОВТОРА - 3 РАЗ*********** MOVLW .10 MOVWF TEMP3 ;**********СИГНАЛ 5000 Гц (100 mS)*********** MOVLW .9 MOVWF TEMP1 MOVLW .10 MOVWF TEMP2 MOVLW .30 MOVWF TEMP DECFSZ TEMP GOTO $-1 BTFSS GPIO,2 ; ЕСЛИ ПОРТ В "0" GOTO $+2 GOTO $+3 BSF GPIO,2 ; УСТ. В "1" GOTO $+2 BCF GPIO,2 ; УСТ. В "0" DECFSZ TEMP2 GOTO $-.11 DECFSZ TEMP1 GOTO $-.13 ;****************************************** ;*************ПАУЗА (100 mS)*************** MOVLW .200 MOVWF TEMP1 MOVLW .170 MOVWF TEMP2 DECFSZ TEMP2 GOTO $-1 DECFSZ TEMP1 GOTO $-5 ;****************************************** DECFSZ TEMP3 GOTO $-.27
Таким образом будет сформирован прерывистый звуковой сигнал частотой 500 Гц, длительностью 200 миллисекунд с интервалом следования 100 миллисекунд. Всего 10 пакетов. Общей длительностью: (0,2+0,1)х3 = 0,9 секунды
Далее следует блок, включающий или выключающий нагрузку:
;************ВКЛ./ОТКЛ. нагрузку*********** BTFSS GPIO,5 ; ЕСЛИ ПОРТ В "0" GOTO $+2 GOTO $+3 BSF GPIO,5 ; УСТ. В "1" GOTO $+2 BCF GPIO,5 ; УСТ. В "0" ;******************************************
Переключение состояния порта происходит по принципу: если был «0» - установить «1», если был «1» - установить «0». Я называю такой принцип переключения – триггерным.
При повторении устройства крайне важно подобрать транзисторы по наибольшему коэффициенту усиления: КТ3102 – не менее 500, КТ3107 – не менее 1000. Допускается использовать любые другие маломощные низкочастотные транзисторы с подобными коэффициентами усиления. Наладка устройства сводится к подбору резисторов смещения на базы усилительных каскадов по наибольшему усилению сигнала.
Список радиоэлементов
Обозначение | Тип | Номинал | Количество | Примечание | Магазин | Мой блокнот |
---|---|---|---|---|---|---|
МК PIC 8-бит | PIC12F629 | 1 | Поиск в магазине Отрон | |||
Биполярный транзистор | КТ3102Б | 1 | Поиск в магазине Отрон | |||
Биполярный транзистор | КТ3102Е | 1 | Поиск в магазине Отрон | |||
Биполярный транзистор | KSE13003 | 1 | Поиск в магазине Отрон | |||
Стабилитрон | КС106Б | 1 | Поиск в магазине Отрон | |||
Диод | КД512А | 1 | Поиск в магазине Отрон | |||
Выпрямительный диод | 1N4007 | 5 | Поиск в магазине Отрон | |||
R* | Резистор | 16 кОм | 1 | Поиск в магазине Отрон | ||
Резистор | 100 кОм | 1 | Поиск в магазине Отрон | |||
Резистор | 10 кОм | 1 | Поиск в магазине Отрон | |||
Резистор | 3.3 МОм | 1 | Поиск в магазине Отрон | |||
Резистор | 100 кОм | 1 | Поиск в магазине Отрон | |||
Резистор | 2 МОм | 1 | Поиск в магазине Отрон | |||
Резистор | 47 кОм | 1 | Поиск в магазине Отрон | |||
Резистор | 20 кОм | 1 | Поиск в магазине Отрон | |||
Конденсатор | 100 мкФ х 6 В | 1 | Поиск в магазине Отрон | |||
Конденсатор | 100 нФ | 1 | Поиск в магазине Отрон | |||
Конденсатор | 1000 пФ | 1 | Поиск в магазине Отрон | |||
Конденсатор | 510 пФ | 1 | Поиск в магазине Отрон | |||
Пьезоизлучатель | 1 | Поиск в магазине Отрон | ||||
Реле | TRM 3003 | 1 | Поиск в магазине Отрон | |||
Скачать список элементов (PDF)
Прикрепленные файлы:
- Avtomat_svist.asm (4 Кб)
- Avtomat_svist.HEX (1 Кб)
Комментарии (17) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация
Дмитрий, вот такое бестрансформаторное питание - дикость! Я бы еще понял перед мостом пару 0,47мкФ/470кОм, а потом стабилизацию нужных напряжений. Но гасить выпрямленное сетевое резистором - это что-то!
[Автор]
Посмотрите прикрепленную к ответу схему. Там такой же источник питания и все прекрасно работает.
[Автор]
второго каскада:6 В/ 47 000 Ом = 0,00013 А
ток потребления пика в спящем режиме: 0,000004 А
суммарный ток: 0,00006 + 0,00013 + 0,000004 = 0,000194 А = 194 мкА
тепловыделение на резисторе:
I*I*R = 0,000194 * 0,000194 *100 000 = 0,004 Вт
в схеме стоит резистор на 0,125 Вт
[Автор]
при этом тепловыделение на резисторе составляет
0,002*0,002*100 000 = 0,4 Вт
поэтому в схеме
установлен резистор мощностью: 0,125 - 0,5 Вт
[Автор]
[Автор]
Данная схема есть прекрасный пример как не надо организовывать питание. Дмитрий, Вы привели пример по ссылке: i0075rp.jpg. Подобных опусов очень много, где описываются устройства эксплуатация которых просто опасна для пользователя!
[Автор]
[Автор]
[Автор]
[Автор]