Стыковка внешних устройств с персональным компьютером

Практика инженера часто заставляет обращать большее внимание на персональные компьютеры как на средство взаимодействия пользователя с агрегатами автоматических систем управления. Я не буду здесь заливать пустую воду о том, что это удобно, рационально и тд и тп… А рассмотрим мы здесь очень простой вопрос — как «загнать» физические величины (типа «сопротивление», «напряжение», «ток», «мощность», «температура» и тд) в программу на компьютере, где штатный программист может вертеть-крутить их для будущей программы.

За несколько лет практики у меня выработалась достаточно гибкая схемка на микроконтроллере PIC18F2550. Делюсь.

Интерфейс для связи устройств с ПК по USB на PIC18F2550

рис.1 — Интерфейс для связи устройств с ПК по USB на PIC18F2550

Решение довольно простое и не сложное, а возможностей более чем предостаточно.

Печатная плата для устройства в формате SLayout

Слева показаны ВХОДЫ устройства. Их аж десять штук. Они подключены к 10-разрядным АЦП контроллера. Это даёт возможность одновременного приёма на стороне ПК напряжений от 0 до 5 вольт(разрешение, соответственно, 5/1024 = 0.005 В ). Согласитесь, в данный предел при такой разрешающей способности не составляет труда преобразовать любую известную физическую величину (ну говорить о банальных логических НУЛЕ и ЕДИНИЦЕ вообще бестактно).

Справа лицезреем логические ВЫХОДЫ. Их восемь штук. Логические, — это значит, что принимают два логических состояния — ноль(0 в) и единицу(5 в). Эти выходы могут управлять внешними нагрузками при соответствующем включении через драйвер(например на транзисторе):

Драйвер для мощной нагрузки на транзисторе

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

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

Обещал же без воды. Так вот. Что надо, чтобы сделать сей девайс. По порядку.

Программируем контроллер программатором показанным ниже, и используя в качестве прошивки вот этой HEX-файл.

Схема программатора COMPIC

Программа для программатора COMPIC скачать. Подробности о программировании смотрите здесь.

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

Демо-программа для этого девайса написана мной на Borland Builder C++ 6.0. Исходники здесь, а сама откомпилированная прога тут. Выглядит она так:

Внешний вид программы USBkit v1.01

Принцип построения программы для интерфейса на рис.1 заключается в следующем. Программа при своей загрузке подключает библиотеку mpusbapi.dll (см. исходный код, файл Unit1.cpp):

void __fastcall TForm1::FormCreate(TObject *Sender)
{
    LoadDLL();
}

с этого момента мы можем отправлять(принимать) пакеты данных от нашего устройства( я использовал для наглядности таймер, срабатывающий каждые 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);
}

На подобных интерфейсах мной была внедрена автоматика на производственной линии ЖБИ для пропарочных камер. Устаревшее оборудование — в топку, а оператору даже очень понравилось, что ей поставили персоналку с простенькой программой.

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

По просьбам добавляю проект для PIC-а, написан в MPLab — usbkit.zip

В принципе примеров использования такого интерфейса много. Если Вам лень было читать много букв или было нифига не понятно, о чём я тут толковал — для Вас видео…

Запись опубликована в рубрике Радиолюбитель, Технологии с метками , . Добавьте в закладки постоянную ссылку.

7 комментариев: Стыковка внешних устройств с персональным компьютером

  1. carpUncopay говорит:

    очень интересно, спасибо

  2. lnx говорит:

    Интересная статья, мне необходимо разработать небольшое устройство, сможете помочь за некоторую оплату? lnx[a]tut.by

  3. Ermak говорит:

    А купить систему для подачи звонков? Сколько стоит?

    • admin говорит:

      Готового решения на данный момент нет, но могу собрать за пару-тройку дней. По стоимости — за 100 WMZ сделаю. Если интересно, то детали можем обсудить по тел: +375 29 7153616

  4. almoro говорит:

    Здравствуйте
    Спасибо за статью, она мне помогла. Собрал своё первое устройство по вашей схеме. Мигать светодиодами хорошо, но когда решил присоединить к выходам что-то более полезное понял что значения в портах выставляются не одновременно а побитно с задержкой. Поэтому моя переферия нк работает нормально. Просьба вышлете свой проект прошивки PIC или хотябы близкий пример, чтобы я смог сам его изменить под свою задачу. Мыло есть в профиле.

    Заранее Спасибо

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