§ 2. Управление внешними нагрузками через USB с помощью Ke-USB24A
|
Дмитрий Иванов, 15 Марта 2008
|
|
Файлы к статье скачать
|
Имя: KA002.zip (ZIP архив) |
Размер: 132 КБ |
|
USB модуль Ke-USB24A
|
Уважаемые
читатели, предлагаю Вашему вниманию USB модуль Ke-USB24A. Специализация
модуля - управление внешними нагрузками через порт USB. Он в чем-то
похож на порт LPT в режиме прямого управления пинами. Подаем команду -
определенный бит порта устанавливается в логическую еденицу, подаем
другую - сбрасывается в ноль. В этом модуле таких "битов", т.е. линий
управления, 24 штуки. Каждая из них может быть настроена либо на выход
(можем управлять светодиодами, реле, и др. нагрузками) либо на вход
(можем считывать информацию с ключей, кнопок и др. устройств).
|
С
точки зрения программирования модуль предлагает весьма интересное
решение. Во-первых, что следует указать, при подключении к компьютеру он
определяется ОС Windows (и Linux тоже) как виртуальный COM порт, т.е. в
диспетчере устройств у Вас появится дополнительный COM порт.
Соответственно, управление модулем осуществяляется через обычный
последовательный порт. Это означает, что для работы с модулем Вам вообще
нет необходимость даже вспоминать о USB - Вы работаете только с COM
портом. Значит для работы с модулем можно использовать любой язык /
среду / компонент прграммирования, главное только чтобы он поддерживал
работу с последовательными портами. Для непосредственного управления
модулем предусмотрен набор текстовых команд управления.
Т.е. выбираем нужную команду, записываем ее в COM порт и модуль
выполняет то что заказано. Весьма просто и удобно. Благодаря тому что
команды текстовые, модулем можно управлять из любой программы-терминала
для COM портов, например HyperTerminal, входящей в состав Windows.
Помимо
возможности управления линиями ввода/вывода модуль также имеет
встроенный 10-ти разрядный АЦП с частотой дискретизации до 400 Гц + еще
парочку интересных настроек и свойств, о которых мы поговорим позже.
Итак,
приступим к практическому использованию модуля. Первым делом необходимо
установить драйвера для него. Весть процесс установки модуля
подробнейшим образом описан в соответствующем оффициальном документе Руководство по установке.
Здесь я дублировать информацию не буду, обращю только внимание на то,
что фактически драйвер, требуемый для модуля уже находится в составе
Windows. Это так называемый стандартный драйвер виртуального COM порта.
Итого из файлов установки нам нужен только ke-usb24.inf в котором указаны параметры установки.
После
установки устройства, давайте создадим на основе модуля самую
простенькую схемку - будем управлять светодиодами, подключенными к
модулю, а именно зажигать или тушить их по нашей команде. Схема
подобного устройства показана на рисунке ниже. Схема расчитана на
маломощные светодиоды. Я использую L-934 фирмы Kingbright. Если
используемые Вами светодиоды помощнее и Вы чувствуете что корпус модуля
или светодиода изрядно нагревается, лучше между светодиодом и выводом
модуля включить токоограничивающий резистор номиналом в 200-600 Ом.
Вот эта же схема собранная мною на макетной плате. Я позволил тут себе не набирать все светодиоды.
Итак,
схему собрали. Пора взяться непосредственно за софт. Тут есть два
варианта. Первый, это использовать готовую терминальную программу и
подавать в ней команды модулю в ручную. К таким программам относятся,
например, HyperTerminal или KeTerm.
Последняя хороша тем, что для нее доступны исходные коды и при желании
ее можно модернизировать под свои нужды. Второй вариант, болле
интересный, разработка собственнго софта. Давайте так и сделам. Напишем
небольшую Windows программку на С++ в среде Microsoft Visual C++ 6.0 для
управления линиями модуля, настроенными на выход.
Внешне
она выглядит вот так. Т.е. вводим номер порта, нажимаем кнопку "Open".
Далее галочками выбираем каким светодиодам светиться, а каким нет. Все
весьма просто.
Посмотрим
на код этой программы. Начнем с функции открытия порта. Тут все уже
рассматривалось не раз. Единственное, на что я хотел бы обратить Ваше
внимание, так это на скорость порта. Для модуля Ke-USB24A она не имеет
НИКАКОГО значения. Можно было подключаться и на 1200 и 115200. Хоть мы и
работаем с COM портом, он всеже виртуальный, и реально данные
передаются по USB каналу. А ему знания о скорости виртуального COM порта
совершенно не нужны. Здесь они указываются только для поддержания
совместимости.
Рассмотрим код формирования команды модулю и ее отправки в порт. Для установки линии модуля Ke-USB24A служит текстовая команда $KE,WR,<Номер Линии>,<Значение: 0/1>.
Собственно в этой функции мы такую команду и формируем. Обратите
внимание на \r\n в конце команды. Таков синтаксис команд модуля - все
должно заканчиваться символами возврата каретки и перевода на новую
строку.
void CLineControlDlg::WriteDataToLine(int line, bool value) { if( line <0 || line > 24 || m_hFile == NULL ) { MessageBox("Can`t Write\nCommand", "Error", MB_ICONERROR); return; }
DWORD lpdwBytesWritten; char buf[32]; int len = sprintf(buf, "$KE,WR,%d,%d\r\n", line, value);
WriteFile(m_hFile, buf, len, &lpdwBytesWritten, NULL); }
Итак,
с кодом наверное все понятно. Запускаем программу, не забыв при этом
подключить модуль. Открываем порт (номер порта можно посмотреть в
диспетчере устройств). Щелкаем галочками - управляем светодиодами.
Вот
таким вот образом можно за минимальный срок собрать схему управления
светодиодами через USB. Ke-USB24A может использоваться и для управления
нагрузками помощнее, но для этого к нему будет необходимо добавить
дополнительную внешнюю схему в виде реле или мощного транзистора. Об
этом мы поговорим позже.
|