Программирование AVR: работа с USB usb-Relay - маленькое USB-устройство, управляющее включением и выключением реле Sat, October 05 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

usb-Relay - маленькое USB-устройство, управляющее включением и выключением реле Печать
Добавил(а) microsin   

usb-Relay – маленькое аппаратное устройство, которое служит для включения и выключения различной электроники с помощью компьютера. Устройство usb-Relay подключается к компьютеру через USB.

Проект usb-Relay лицензирован под защитой GNU Affero General Public License. 

[Hardware (аппаратура устройства)]

usb-Relay-common-view.jpg
usb-Relay-DIP-and-SMD-3D.jpg
usb-Relay-DIP-and-SMD-PCB.png
usb-Relay-SCH.png

[Firmware (программное обеспечение микроконтроллера)]

Firmware основано на библиотеке V-USB (см. [2]). С помощью этой библиотеки устройство USB может быть полностью реализовано программно практически на любом микроконтроллере AVR, который не имеет специальной аппаратуры для поддержки шины USB. Устройство видится на компьютере как бесклассовое устройство (classeless device), и управляется через команды, определяемые вендором (vendor type commands). Протокол поддерживает до 256 управляемых реле, однако в описанном устройстве поддерживается только одно реле. Имеется две команды. Команда 0, работающая в направлении от устройства к ПО хоста, возвращает количество реле, поддерживаемых устройством (так как наше устройство поддерживает только одно реле, то оно всегда возвращает 1). Команда 0 передается через ПО хоста (утилита командной строки) count.exe. Команда 1, работающая в направлении от хоста к устройству, указывает нужное состояние реле (включить его или выключить). Старший байт в передаваемой команде указывает на номер нужного реле (от 0 до 255, эта реализация реагирует только на реле номер 0), а младший байт указывает нужное состояние реле (0 выключить реле, 1 включить реле). Команда 1 передается с помощью ПО хоста (утилита командной строки) set.exe.

[Software (ПО хоста, работающее на компьютере)]

ПО хоста основано на библиотеке libusb [7]. Все части программного обеспечения используют библиотеку libusb для взаимосвязи с устройством USB usb-Relay. Программное обеспечение включает две утилиты командной строки count.exe и set.exe, а также пример маленькой GUI-программы (программы с графическим интерфейсом). Утилита count.exe (./count для *nix) возвращает количество реле, имеющихся в устройстве. Утилита set.exe (./set для *nix) устанавливает состояние одного реле. Первый параметр set.exe указывает номер реле (0..255), а второй параметр указывает состояние реле (0 выключено, 1 включено).

Маленькая GUI-утилита позволяет пользователю установить состояние реле только с помощью мыши. GUI-программа не настолько полезна, как и утилиты командной строки.

usb-Relay-gui.png

Программное обеспечение и libusb может быть скомпилировано под операционными системами Linux, FreeBSD, NetBSD, OpenBSD, Darwin, MacOS X, и Windows.

[Проект usb-Relay, выполненный на макетной плате AVR-USB-TINY45]

Проект usb-Relay был портирован на макетную плату AVR-USB-TINY45 (см. [3]). Функционально порт ничем не отличается от оригинала, он точно так же может управлять только одним реле, подключенным на порт светодиода (PB1).

usb-Relay-conn-AVR-USB-TINY45.jpg

На макетной плате остаются свободными ножки ~RESET, PB3 и PB4 (выводы 1, 2, 3 соответственно) чипа AVR (ATtiny45 или ATtiny85), которые тоже потенциально можно использовать для управления реле (однако нужно будет доработать firmware микроконтроллера). Чтобы можно было использовать ножку ~RESET (вывод 1), нужно соответствующим образом запрограммировать фьюзы микроконтроллера. Исходный порт и скомпилированные бинарники firmware можно скачать по ссылке [1], см. папку usb-relay\firmware-tiny45\ архива. Текущий порт поддерживает только одно реле (сигнал управления реле снимается с ножки PB1), ножки ~RESET, PB3 и PB4 микроконтроллера не используются. Запрограммированные байты фьюзов для микроконтроллера должны иметь значения LOW FUSE BYTE: 0xD1, HIGH FUSE BYTE: 0xDD, EXT FUSE BYTE: 0xFF.

Принцип работы утилит командной строки count.exe и set.exe не поменялся  (исходный код утилит и скомпилированные бинарники для Windows см. в папке архива по ссылке [1]). Утилита count.exe возвращает 1 (поддерживается только одно реле). Утилита set.exe может управлять состоянием реле. Вот пример команды включения реле (при этом светодиод D1 на макетной плате AVR-USB-TINY45 зажигается):

set.exe 0 1

Пример команды выключения реле (при этом светодиод D1 на макетной плате AVR-USB-TINY45 гаснет): 

set.exe 0 0

[Проект usb-Relay, выполненный на макетной плате AVR-USB-MEGA16]

Проект usb-Relay был портирован на макетную плату AVR-USB-MEGA16 (см. [4]). Функционально порт отличается от оригинала тем, что может управлять не одним, а 23 различными реле. Сигнал на включение реле 0 подается от порта PB0, управляющим светодиодом на макетной плате. Остальные реле с номерами от 1 до 22 могут управляться от портов P1..P22 макетной платы.

usb-Relay-conn-AVR-USB-MEGA16.jpg

Исходный порт и скомпилированные бинарники firmware можно скачать по ссылке [1], см. папку usb-relay\firmware-mega16\ архива. Запрограммированные байты фьюзов для микроконтроллера должны иметь значения LOW FUSE BYTE: 0xCF, HIGH FUSE BYTE: 0x98, LOCKOPT BYTE: 0xEF.

Принцип работы утилит командной строки count.exe и set.exe не поменялся (исходный код утилит и скомпилированные бинарники для Windows см. в папке архива по ссылке [1]). Утилита count.exe возвращает 23 (поддерживается 23 разных реле). Утилита set.exe может управлять состоянием любых их 23 подключенных к макетной плате реле. Вот пример команды включения реле 0 (при этом светодиод D1 на макетной плате AVR-USB-MEGA16 зажигается):

set.exe 0 1

Пример команды выключения реле (при этом светодиод D1 на макетной плате AVR-USB-MEGA16 гаснет): 

set.exe 0 0

Пример включения реле 14 (сигнал на его управление снимается с порта P14 макетной платы): 

set.exe 14 1

Пример выключения реле 14:  

set.exe 14 0

[Замечания по принципиальным схемам]

В схемах usb-Relay можно применить любые биполярные транзисторы структуры N-P-N (например BC848).

BC846-BC848-pinout.jpg 

В качестве реле подойдет любое электромеханическое реле на номинальное напряжение на обмотке 5 вольт - например FINDER 32.21.7.005.2300 или 34.51.7.005.0010, а также TRIL-5VDC-SD-1CH, TRS-5VDC-SB-L15-R.

Finder-Relay-30-22S-5V.gif Finder-Relay-34-51-7-005-0010-5V.jpg Finder-Relay-36-11-5V.gif TRIL-5VDC-SD-1CH.jpg TRS-5VDC-SB-L15-R.jpg

Для электромагнитных реле нужны защитные диоды, которые блокируют обмотку реле (для ограничения выброса напряжения ЭДС самоиндукции при выключении реле), они могут быть типа 1N4001 или аналогичные кремниевые (ток 1 А или более, напряжение 50 вольт или более). Можно также применить и твердотельное реле (см. [5]), тогда блокирующие диоды не нужны. В случае твердотельного реле последовательно с его входом нужно поставить токоограничивающий резистор, см. даташит на соответствующее реле, а также пример подключения такого реле в [6]. 

Макетная плата AVR-USB-MEGA16 может управлять большим количеством реле (целых 23 штуки), однако нужно помнить, что непосредственно от шины USB можно запитать только ограниченное количество реле, так как максимальный нагрузочный ток питания от USB можно получить не более 500 мА. Например, если обмотка одного реле потребляет 40 мА, то можно запитать от шины USB только 11 реле. Для того, чтобы снять ограничения по питанию от шины USB, применяйте внешний дополнительный источник питания для реле.

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

[Ссылки]

1. 111025usb-relay.zip - исходный код оригинального проекта usb-Relay (firmware и ПО хоста), принципиальная схема и разводка платы, а также исходный код портов проекта usb-Relay на макетные платы AVR-USB-TINY45 и AVR-USB-MEGA16. См. также оригинальный код на GitHub, строка для поиска usb-Relay site:github.com.
2. V-USB site:ru.wikipedia.org - краткое описание библиотеки V-USB на русском языке.
3. Макетная плата AVR-USB-TINY45 (AVR микроконтроллер ATtiny45 или ATtiny85).
4. Макетная плата AVR-USB-MEGA16 (AVR микроконтроллер ATmega16 или ATmega32).
5Все о твердотельных реле site:kippribor.ru.
6AVR-USB-MEGA16: hardctrl - управляемый сторожевой таймер (watchdog) для компьютера.
7. libusb-win32 site:sourceforge.net - ссылки на закачку релизов библиотеки libusb.

 

Комментарии  

 
-1 #1 Лев 07.03.2012 08:35
На самом деле можно подключить не 11 реле, а как минимум на 30% меньше - нужно еще учитывать броски тока при коммутации. Ну и плюс поставить кондёры пожирнее, но с резистором, ограничивающим ток зарядки. Для разрядки ток ограничивать не надо, соответственно надо еще применить пару диодов.
При превышении 500мА комп отключит USB порт (по крайней мере на моем ноуте так, но вроде это общий принцип).
Цитировать
 

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


Защитный код
Обновить

Top of Page