05.12.2011 - Сопряжение периферийных устройств к ПК через USB(часть 2. USBkit)
Практика инженера часто заставляет обращать большее внимание на персональные компьютеры как на средство взаимодействия пользователя с агрегатами автоматических систем управления. Я не буду здесь заливать пустую воду о том, что это удобно, рационально и тд и тп… А рассмотрим мы здесь очень простой вопрос – как «загнать» физические величины (типа «сопротивление», «напряжение», «ток», «мощность», «температура» и тд) в программу на компьютере, где штатный программист может вертеть-крутить их для будущей программы.
За несколько лет практики у меня выработалась достаточно гибкая схемка на микроконтроллере PIC18F2550. Делюсь.
Решение довольно простое и не сложное, а возможностей более чем предостаточно.
Слева показаны ВХОДЫ устройства. Их аж десять штук. Они подключены к 10-разрядным АЦП контроллера. Это даёт возможность одновременного приёма на стороне ПК напряжений от 0 до 5 вольт(разрешение, соответственно, 5/1024 = 0.005 В ). Согласитесь, в данный предел при такой разрешающей способности не составляет труда преобразовать любую известную физическую величину (ну говорить о банальных логических НУЛЕ и ЕДИНИЦЕ вообще бестактно).
Справа лицезреем логические ВЫХОДЫ. Их восемь штук. Логические, – это значит, что принимают два логических состояния – ноль(0 в) и единицу(5 в). Эти выходы могут управлять внешними нагрузками при соответствующем включении через драйвер(например на транзисторе):
Если к внешним устройствами не предъявляется значительного быстродействия (более 1 сек), то количество выходов устройства можно увеличить до 14, используя принцип параллельного порта.
Единственным недостатком данной схемы мне видется необходимость при загрузке(рестарте) контроллера подавать логическую единицу на вход AN11 (вывод 25), иначе микроконтроллер загрузит не основную область программы, а т.н. загрузчик. Но этот недостаток, в принципе, пустяковый, ведь без AN11 в большинстве случаев можно ведь и обойтись.
Обещал же без воды. Так вот. Что надо, чтобы сделать сей девайс. По порядку.
Программируем контроллер программатором показанным ниже, и используя в качестве прошивки вот этой HEX-файл.
После сборки схемы (рис.1) с зашитым пиком, самое время её включить в наш комп и посмотреть как она работает. При подключении, комп затребует драйвера устройства.
Демо-программа для этого девайса написана мной на Borland Builder C++ 6.0. Исходники здесь, а сама откомпилированная прога тут. Выглядит она так:
Принцип построения программы для данного интерфейса заключается в следующем. Программа при своей загрузке подключает библиотеку mpusbapi.dll (см. исходный код, файл Unit1.cpp):
с этого момента мы можем отправлять(принимать) пакеты данных от нашего устройства( я использовал для наглядности таймер, срабатывающий каждые 0.2 сек):
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
BYTE send_buf[64],receive_buf[64];
DWORD RecvLength=21; // длина ответа от мк в байтах
send_buf[0] = 0x37; // Command
send_buf[1] = 0x00; // массив send_buf - это передаваемые мк данные
SendReceivePacket(send_buf,2,receive_buf,&RecvLength,150,150);
}
На подобных интерфейсах мной была внедрена автоматика на производственной линии ЖБИ для пропарочных камер. Устаревшее оборудование – в топку, а оператору даже очень понравилось, что ей поставили персоналку с простенькой программой.
Были на данном девайсе разработки и менее важные – так в одном лицее была запущена система автоматического звонка (на уроки и перемены), работающая с компьютера секретаря. Плюсы тоже очевидны – раньше она нажимала каждый раз на кнопку, а сейчас это делает программа.
В принципе примеров использования такого интерфейса много. Если Вам лень было читать много букв или было нифига не понятно, о чём я тут толковал – для Вас видео…