Подключение оптопары к микроконтроллеру AVR ATmega8

В этой статье мы рассмотрим подключение оптопары к микроконтроллеру ATmega8 (семейство AVR). Оптопары представляют собой устройства, предназначенные для изоляции электронных и электрических схем. Это простое устройство может изолировать чувствительную электронику от «грубой» электроники такой, к примеру, как электродвигатели, при этом сохраняя контроль над источником.

Подключение оптопары к микроконтроллеру AVR ATmega8: внешний вид

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

Оптоэлектронные устройства, как следует из их названия, имеют в своем составе триггерную систему, управляемую с помощью света. Мы передаем сигнал на светоизлучающее устройство на источнике, а на приемном конце мы имеем триггерный переключатель, работающий от света. В данном проекте мы будем подключать оптопару 4N25 к микроконтроллеру ATmega8. Когда выключатель на стороне контроллера будет нажат, светодиод оптопары будет зажигаться.

Необходимые компоненты

Аппаратное обеспечение

Микроконтроллер ATmega8
Источник питания с напряжением 5 Вольт
Программатор AVR-ISP, USBASP или другой подобный
Оптопара 4N25
Светодиод
Резистор 1 кОм (3 шт.)

Программное обеспечение

Atmel Studio версии 6.1 (или выше)
Progisp или flash magic (необязательно)

Работа схемы

Схема устройства приведена на следующем рисунке.

Схема подключения оптопары к микроконтроллеру AVR ATmega8

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

Внутренняя схема оптопары

Контакты PINA и PINC подсоединяются к источнику. Контакты PINB, PINC, PINE подсоединяются к нагрузке.

Из представленного рисунка видно, что оптопара состоит из светодиода на стороне источника и фототранзистора на стороне нагрузки. Система заключена в замкнутый корпус, что увеличивает эффективность работы фототранзистора.

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

Эквивалентную электрическую схему оптопары можно изобразить следующим образом.

Эквивалентная электрическая схема оптопары

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

Исходный код программы на языке С (Си) с пояснениями

Программа для рассматриваемой схемы подключения оптопары к микроконтроллеру AVR ATmega8 представлена следующим фрагментом кода на языке С (Си). Комментарии к коду программу поясняют принцип работы отдельных команд.

#include <avr/io.h> // заголовок чтобы задействовать контроль данных на контактах
#define F_CPU 1000000UL // задание тактовой частоты микроконтроллера
#include <util/delay.h> // заголовок чтобы задействовать функции задержки в программе
int main(void)
{
DDRD = 0x00; // установка portd на ввод данных
DDRB = 0xFF; // установка PORTB на вывод данных
while(1)
{
if (bit_is_set(PIND,0)) // если кнопка нажата
{
PORTB^=1<<0; // переключаем логический уровень на контакте pin0 PORTB
_delay_ms(200); // задержка 200ms
_delay_ms(200);
}
}
}

Видео, демонстрирующее работу схемы



Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *