Логотип

Если Вы хотите обучаться программированию микроконтроллеров, но попали, сюда не прочитав предыдущих уроков, то советую начать изучение материала с самого начала.

Программирование микроконтроллеров. Урок 7
Задержка включения реле (повторяя пройденное)

Урок 7 (Задержка включения реле (повторяя пройденное))

На прошлом занятии мы с вами научились делать подпрограммы и организовывать библиотеки, а по ходу еще и узнали о втором и последнем операторе ветвления «switch». Хороший оператор, но используется на порядок меньше чем «if». «IF наше всё!». На этом уроке мы закрепим пройденный материал организовав задержку для реле. При этом будем использовать светодиодную индикацию для контроля работы нашего устройства.

Но перед тем, как мы начнем, я хочу остановиться на прошлом домашнем задании. В нем надо было доработать нашу подпрограмму управления светодиодом таким образом, чтобы при передаче в нее управляющего значения (2) светодиод моргал в два раза быстрее чем по значениям от 3 до 255.

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

Блок-схема 1

Из блок-схемы видно, что для выполнения задачи необходимо вставить две строчки добавив условие присвоения переменной «c_pausa_led» значение счетчика, при котором оно уменьшено в половину. Реализацию вы можете посмотреть в прилагаемом к уроку файле «lib_led_driver.c» находящимся в папке с проектом. Более того делитель можно устанавливать любой, а значит светодиод может моргать и в три, и в четыре раза быстрее. В общем при таком подходе у нас появляются широкие возможности регулировки индикации.


Ну вот теперь можно приступать к нашей задержке включения реле. Вот схема, которую надо собрать на макетной плате. Хочу обратить Ваше внимание на то, что питание устройства будет не 3.3v как раньше, а 5v. Поэтому сопротивление R2 необходимо поменять с 330 Ом на 500 Ом.

Схема подключения реле

Схема подключения реле

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

Транзисторы — это полупроводниковые приборы, которые делятся на две большие группы: биполярные и полевые. О полевых мы поговорим в другой раз, а биполярные делятся в свою очередь по своей структуре на npn и pnp. На схеме их легко отличить по обозначению. Если стрелочка эмиттера идет от базы, значит это npn, а если стрелочка идет к базе значит pnp. Управление биполярными транзисторами осуществляется током, проходящим через базу и эмиттер. Поэтому в этой цепи, особенно когда транзистор работает в режиме ключа, необходимо ставить токоограничивающее сопротивление. В нашей схеме это R4. В зависимости от структуры, для открытия транзистора, необходимо приложить к базе либо положительное (в случае npn) либо отрицательное (в случае pnp) напряжение. Запомнить легко - положительное (positive) значит в центре «p». Отрицательное (negative) значит в центре «n». Соответственно приложив нужное напряжение через переход база/эмиттер пойдет ток, который и откроет наш транзистор.

У транзисторов есть два основных режима. Первый - это режим усиления, когда на базу подается напряжение открывающее переход база / эмиттер, но транзистор не входит в режим насыщения, то есть не открыт полностью. В этом режиме очень важен коэффициент усиления транзистора, который выражается через отношения тока в цепи коллектора к току в цепи базы. Второй, режим ключа т.е. в зависимости от подаваемого на коллектор напряжения транзистор либо полностью открыт (находится в режиме насыщения), либо закрыт (находится в режиме отсечки).

В данной схеме транзистор работает как мощный ключ для управления реле. Назначение выводов необходимо будет посмотреть в спецификации транзистора, которую легко найти в интернете. Когда на управляющем выводе МК появляется единица, то транзистор полностью открывается и активирует работу реле. До этого управляющий вывод МК замкнут на землю и транзистор полностью закрыт. Вместо реле в эту схему можно вставить какой-нибудь пятивольтовый клапан или двигатель. Диод стоящий параллельно катушки реле необходим для защиты транзистора. Он гасит ЭДС самоиндукции при выключении реле. Реле же хорошо тем, что может коммутировать уже совсем другие напряжения. При этом схема управления и схема управляемого устройства могут быть полностью электрически развязаны. Например, к контактам реле можно подключить лампочку на 220 вольт или пускатель, который будет запускать насос скважины, систему полива, проветривания, или еще Бог знает, чего.

Но вернемся к сборке схемы на макетной плате.

Вид макетной платы 1 Вид макетной платы 2 Вид макетной платы 3

Вид макетной платы 1

Вид макетной платы 2

Вид макетной платы 3

Ничего особенного в этой схеме нет, на что можно обратить особое внимание. Единственное, о чем бы хотелось сказать, так это о том, что при переключении МК на пятивольтовое питание будьте внимательны и не перепутайте плюс и минус питания. И еще когда полностью соберете схему проверьте ее работу вручную. Т.е. выньте проводник из гнезда, подключающего резистор R4 к порту МК РВ1 и замкните его на плюс питания. При этом должно сработать реле и загореться светодиод HL 2. Если этого не происходит ищите ошибку в монтаже, а если все работает как до'лжно, то можно приступить к программированию. Но сначала разберем блок схему работы устройства.

Блок-схема

Как всегда, в начале мы определяем переменные и устанавливаем начальные значения.
После чего войдя в бесконечный цикл «W» проверяем наш таймер.
Если он не нулевой, то декрементируем его, а также указываем подпрограмме индикации о том, что надо «моргать» передавая необходимый параметр (2).
Если счетчик достиг нуля, то мы устанавливаем единицу в нужный бит регистра порта (активируем реле) и указываем программе индикации о том, что надо «гореть» передавая необходимый параметр (1).
После чего программа будет работать по кольцу где будет повторятся последовательность блоков включения реле т.к. счетчик больше не будет менять своего значения.


Листинг программы выглядит таким образом.

/*
Уроки по изучению основ программирования микроконтроллеров
Тестовая программа к уроку 7
Задержка реле
Сайт: red-resisror.ru
*/
    #include <mega8.h>			//апноты
    #define CLEAN 0			//Очистка
    #define PAUSA_RELE_MAX 200000	//максимальная пауза
    #define LED_IND_ON     1		//Cветодиод горит
    #define LED_IND_BLINC  2		//Cветодиод моргает

//Процедуры и функции
    #include <lib_led_driver.c>		//Процедура управления светодиодом

//----------------------------------------------------------------------------------
    void main(void){
//Рабочие переменные и настройки
    unsigned long int c_pausa_rele_max = PAUSA_RELE_MAX;//объявление переменной паузы

    DDRB.0 = 1; 					//Инициализация вывода порта как выход
    DDRB.1 = 1; 					//Инициализация вывода порта как выход

while (1){						//Тело программы
        if (!(c_pausa_rele_max)){			//если счетчик равен нулю
            PORTB.1 = 1;				//Включаем реле
            lib_driver_led(LED_IND_ON);			//процедура управления светодиодом
        }
        else {						//если счетчик не равен нулю
            c_pausa_rele_max--;				//декремент счетчика
            lib_driver_led(LED_IND_BLINC);		//процедура управления светодиодом
        };
    } //END while
} //END main
//---------------------------------------------------------------------------------- 

Изменение переменной «c_pausa_rele_max» будет менять время задержки. Вы видите, что для таймера мы взяли 32 битную переменную типа long int. С ее помощью можно устанавливать вполне ощутимые задержки. Также не надо забывать про переменную нашей подпрограммы управление светодиодом. С ее помощью, как вы помните, можно задавать темп морганию.

Теперь компилируем нашу программу и прошиваем в контроллер. Вот, что из этого получилось.

Домашнее задание.
1. Доработать программу чтобы реле не только включалось, но и отключалось по установленному времени без повтора. И не забудьте про индикацию.
2. Самостоятельно сделать обработчик нажатия кнопки "по нажатию" т.е. нажал, сигнал прошел. Нажал и держишь сигнал проходит через некоторые промежутки времени.


К следующему уроку необходимо почитать:

Все о цикле «FOR»
   К. Поляков «Программирование на языке Си» 1995-2012. Страницы 19…20.
   М.Б. Лебедев «CodeVisionAVR пособие для начинающих» 2008г. Страницы 219…220.
   Майк МакГрат «Программирование на С для начинающих» 2016. Страницы 78…79.

Про методы нахождения ошибок в программах.
   К. Поляков «Программирование на языке Си» 1995-2012. Страница 27…30.

О константах.
   Майк МакГрат «Программирование на С для начинающих» 2016. Страницы 42…47.

О логических устройствах.
   С.А. Никулин, А.В. Повный «Энциклопедия начинающего радиолюбителя» 2011 год. Страницы 121…127.

Также необходимо почитать все о подключении кнопок к МК. По этой теме много чего в интернете написано.


На следующим занятии мы будем изучать системы счисления и наблюдать счет воочию. Для этого нам понадобиться:
   Резисторы 300Ом – 8 шт.
   Светодиоды – 8 шт.

А на сегодня всё. Удачи.


15.06.18


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




Приложение:
Блок-схемы, проект CV_AVR.