Реле на COM-порт

Из приведенной статьи вы узнаете как управлять реле через COM-порт компьютера. Для переключения реле используется DTR-сигнал, находящийся на 4 ножке 9-ти контактного разъема D-SUB 9.

Как видно из вышеприведенной схемы, реле подключен не напрямую к последовательному интерфейсу, а через составной (дарлингтоновский) транзистор. Для лучшей защиты COM-порта, рекомендуется заменить транзисторы оптопарой (IC ≥ 100 mA). Разумеется, тогда резистор R2 нужно будет подобрать к оптопаре.

Транзистор BC517 можно заменить отечественным КТ645А.

Причиной присутствия в схеме транзистор (оптопары) является то, что выходная мощность COM-порта недостаточна для переключения катушки реле и требуется дополнительно питание. Напряжения питания 5В здесь будет достаточно, плюс его можно взять с блока питания компьютера. Только не рекомендую брать питание от USB! Это может привести к выходу из строя USB-порта или контроллера.

В Windows системах есть небольшой недостаток: во время загрузки винды реле будет щелкать несколько раз. Количество переключений зависит от версии Windows, к примеру в XP щелкает около 7 раз.

После того, как вы собрали конструкцию, возникает резонный вопрос: а как же управлять реле?

В операционных системах Windows прямой доступ к регистрам запрещен, поэтому для управления последовательным портом, мы пойдем другим путем. В C++ можно использовать функции Windows API. Для примера приведу несколько строчек кода:

// Объявление переменных
HANDLE hcom;
DCB dcb; // «DCB» — структура, в которой содержится статус порта
char *portname;
portname=»COM1″;

// Открываем дескриптор порта
hcom=CreateFile(portname, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);

// Считываем статус порта
GetCommState(hcom, &dcb);

// Устанавливаем DTR в «HIGH»
dcb.fDtrControl=DTR_CONTROL_ENABLE;

// Записываем новый статус
SetCommState(hcom, &dcb);

// Закрываем дескриптор (Это установит DTR в «LOW»!)
CloseHandle(hcom);

В Linux системах можно использовать функции модема:

#include
#include
#include

// Открываем порт (в моем случае это порт ttyS0)
int fd = open(«/dev/ttyS0», O_RDWR);

// Устанавливаем DTR в «HIGH»
int state = TIOCM_DTR; ioctl(fd, TIOCMSET, &state);

// Устанавливаем DTR в «LOW»
state = ~TIOCM_DTR; ioctl(fd, TIOCMSET, &state);

// Закрываем порт
close(fd);

Исходники и программы можно скачать здесь

Скачать список элементов (PDF)

Прикрепленные файлы:

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

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