Виртуальный USB-порт в лабораторной практике

С.В.Кухтецкий
Институт химии и химической технологии, СО РАН, г. Красноярск
ku@icct.ru
Подключение измерительного и контролирующего оборудования к компьютеру является неотъемлемым атрибутом любого современного физико-химического эксперимента. Виртуальный USB-порт – один из очень простых и эффективных способов решения такой задачи. В статье рассмотрены способы реализации таких портов на базе недорогих микроконтроллеров AVR, анализируются особенности аппаратного исполнения и программного обеспечения. Приводятся практические примеры решений нескольких типовых задач автоматизации эксперимента при помощи виртуальных USB-портов. В том числе - до сих пор еще актуальная задача замены бумажных самописцев в старых, морально устаревших, но еще функционирующих лабораторных приборах.


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

Большинство современных микроконтроллеров имеет набор последовательных интерфейсов для связи с внешним миром (например, USART). С другой стороны, последовательный интерфейс на основе стандарта RS-232 уже давно не удовлетворяет разработчиков по причине сравнительно низких скоростей передачи данных, невозможностью подключения устройств «на лету», недостаточным количеством (а часто просто отсутствием) соответствующих портов в современных ноутбуках и «нетбуках». Решением является использование интерфейса USB, свободного от перечисленных выше недостатков [1].

Возможные следующие варианты реализации USB для связи микроконтроллера с PC.
1. Применение отдельного специализированного контроллера шины USB, связанного с универсальным микроконтроллером по одному из доступных ему каналов.
2. Использование универсального микроконтроллера со встроенным USB-портом.
3. Эмуляция USB на обычных универсальных микроконтроллерах. При этом для физической связи с шиной USB используются две цифровые линии микроконтроллера (на одной должна быть возможность аппаратного прерывания), а сам USB-протокол реализуется программно на этом же микроконтроллере.

Недостаток первого подхода заключается в удорожании и усложнении аппаратной части устройства и необходимости организации внутреннего обмена данными между контроллером USB-шины и универсальным микроконтроллером. Слабым местом второго варианта является то, что микроконтроллеры со встроенным портом USB еще относительно дороги и дефицитны. Кроме этого, они часто имеют более ограниченный набор периферии, и поэтому приходится применять дополнительные микросхемы для ее расширения. Третий вариант интересен тем, что применим для широкого класса недорогих микроконтроллеров, обладающих необходимым быстродействием и программной памятью. Например, для микроконтроллеров AVR - это старшие модели MEGA и часть TINY с FLASH-памятью не менее 2K. Недостатком такого подхода является то, что быстродействие универсальных микроконтроллеров позволяет программно реализовать лишь низкоскоростной вариант стандарта USB-2 «Low speed», т.е. скорость - до 1.5 Мбит/сек. Необходимо также выделить около 1.6 Кбайт FLASH-памяти микроконтроллера для размещения драйвера шины. Тем не менее, для многих задач автоматизации лабораторных физико-химических экспериментов эта скорость оказывается вполне достаточной.

В первой части данной статьи кратко рассмотрены базовые схемы подключения и особенности программной реализации протокола USB на универсальных микроконтроллерах AVR, во второй - примеры устройств на основе такого подхода, которые разработаны и используются автором в лабораторных физико-химических экспериментах.


Технические детали реализации виртуальных портов USB на микроконтроллерах AVR достаточно подробно описаны на сайтах компаний Atmel [2] и Objective Development [3]. Виртуализация USB предполагает физическое подключение двух цифровых выводов микроконтроллера к сигнальным проводникам шины D+ и D- и программную реализацию самого протокола. Один из сигнальных проводников должен быть подключен к выводу, через который можно организовать аппаратное прерывание микроконтроллера, а второй может быть подключен к любому выводу этого же порта. Простейшая схема подключения (на примере микроконтроллера ATMega16) к шине USB показана на Риc.1. Для низкоскоростных устройств на линию D- необходимо подключить подтягивающий резистор R3, поскольку определение подключения/отключения USB устройства основано на контроле сопротивления линии.


Рис.1. Простейший вариант подключения микроконтроллера к шине USB.

Однако, не все контроллеры USB-шины будут работать с устройством, подключенным так, как показано на Рис.1, из-за несоответствия высоких уровней сигналов микроконтроллера стандарту USB. По стандарту USB высокий уровень сигнала должен составлять 3.0-3.6В, а высокий уровень сигналов микроконтроллера приближается к напряжению его питания. Например, для микроконтроллера ATMega16 рекомендованное напряжение питания составляет 4.5-5.5В. Существуют два подхода согласования уровней. Первый вариант – понижение напряжения питания микроконтроллера до такого значения, чтобы напряжение выходных сигналов микроконтроллера укладывалось в стандарт USB. Этот подход неудобен по двум причинам. Во-первых, кроме самого микроконтроллера в системе могут использоваться дополнительные микросхемы с 5-вольтовым питанием (например, дополнительные АЦП). Во-вторых, понижение напряжения питания микроконтроллера приводит к необходимости снижения тактовой частоты процессора, что часто нежелательно. Поэтому обычно используется другой вариант, а именно, непосредственное ограничение напряжения самих сигналов микроконтроллера, подаваемых на шину USB. Простейшее решение c использованием стабилитронов [4] показано на Рис.2.


Рис.2. Согласование уровней сигналов микроконтроллера с шиной USB.

Основной недостаток этой схемы - повышенный ток с соответствующих выходов порта микроконтроллера при высоких уровнях сигнала. Но это вполне компенсируется простотой и низкой стоимостью решения.

Для устранения ложных прерываний INT0 в схеме со стабилитронами рекомендуется включить также дополнительный резистор 1M между «землей» и сигналом D+.

Программная реализация протокола USB подробно описана в документе [2] и в исходных текстах программ, доступных на сайтах [2,3]. В связи с высокой скоростью передачи данных по шине USB требования к модулям программной реализации протокола USB очень жесткие. Поэтому разработчики драйверов были вынуждены пойти на некоторые упрощения, которые уменьшают помехозащищенность канала связи. В частности, упрощена проверка ошибок при передаче данных. Кроме этого, при приеме опрашивается только одна линия, т.е. используется недифференциальный приемник. Тем не менее, приблизительно годовая эксплуатация устройств с такими виртуальными USB портами в обычных лабораторных условиях показала их стабильную работу.

На указанных выше сайтах [2,3] свободно доступны исходные тексты драйверов для реализации нескольких классов USB-устройств. В частности, Custom class device, Standard HID class device, Custom HID class device и CDC class device. Также имеются многочисленные примеры радиолюбительских конструкций, построенных на основе виртуальных USB-портов.

Описанная выше реализация виртуального USB-порта является недорогим, но очень эффективным решением проблемы связи микроконтроллеров с персональным компьютером, особенно если ресурсы микроконтроллера не полностью загружены основной задачей. В данной работе это продемонстрировано на нескольких типовых задачах автоматизации эксперимента, часто возникающих в лабораториях физико-химического профиля.

Первая типовая задача это регистрация сравнительно медленных аналоговых или цифровых сигналов. Частота отсчетов здесь обычно не превышает сотен герц, а чаще всего она существенно меньше. Класс, приборов, для которых требуется такая регистрация, чрезвычайно широк – от современных цифровых датчиков до старых, вполне работоспособных, но морально устаревших приборов с самописцами в качестве регистраторов. Замена самописца на регистратор с виртуальным USB-портом на базе недорогого универсального микроконтроллера со встроенным АЦП придает этим приборам совсем другое качество. Задача упрощается еще больше, если в приборе предусмотрены средства для подключения цифрового регистратора. Несмотря на многообразие стандартов, сигналы с выхода разъема цифрового регистратора могут быть поданы непосредственно на цифровые порты микроконтроллера, программным способом легко приведены к современным стандартным представлениям и переданы по USB в персональный компьютер.

Первые два примера устройств, приведенные ниже, демонстрируют варианты таких регистраторов с виртуальным USB-портом. Первый вариант цифровой, а второй - аналоговый.

Вторая типовая задача, которая часто встречается в лабораторном физико-химическом эксперименте, в определенном смысле является обратной первой. Это - управление приводами, регулировка мощности нагревателей и манипулирование другими исполнительными устройствами. Недорогой универсальный микроконтроллер с виртуальным USB-портом, в сочетании с соответствующими модулями силовой электроники, дает очень гибкие варианты решения этих задач. Третий пример как раз иллюстрирует одно из таких решений.

Часто обе эти задачи встречаются вместе в том или другом сочетании. Последний, четвертый пример, иллюстрирует именно этот случай.

Устройства, описанные в этих примерах, разработаны и изготовлены автором для иллюстрации различных вариантов решения на базе виртуальных USB-портов. Тем не менее, они используются в реальной экспериментальной работе и могут быть легко модифицированы для других аналогичных задач. Поэтому подробные описания этих устройств, схемы и исходные тексты программ размещены в сети Интернет и свободно доступны по адресам [5-7].


Данный пример иллюстрирует простейший вариант использования микроконтроллера с виртуальным USB-портом в качестве регистратора цифровых сигналов. Такой регистратор подключен к старому, но еще вполне работоспособному отечественному жидкостному хроматографу Милихром (выпуска 1985 года). Общий вид прибора представлен на Рис.3. На задней стенке прибора (Рис.3, справа сверху) имеется разъем для подключения регистратора. На разъем выведены 15 двоичных разрядов сигнала ультрафиолетового детектора, знак сигнала, признак переполнения и два строба (конец преобразования АЦП и конец цикла развертки спектрометра). Кроме этого, на разъем выведено напряжение питания (+5В) и «земля». Уровни сигналов соответствуют TTL. Поэтому никаких проблем в физическом подключении и программном преобразовании данных не возникает.


Рис.3. Хроматограф Милихром. Цифровой регистратор на базе виртуального USB-порта.

В качестве контроллера USB-шины используется универсальный микроконтроллер ATMega16, включенный по схеме, приведенной на Рис.2. Плата с соответствующим разъемом представлена на Рис.3 внизу слева. Строб «Конец преобразования» вызывает аппаратное прерывание INT1, по которому данные, выставленные блоком управления «защелкиваются» в памяти микроконтроллера. После этого данные передаются в PC по виртуальному USB-порту. Частота отсчетов устанавливается блоком управления хроматографа.

Подробное описание этой разработки, схемы и исходные тексты программ приведены в [5].


Данный пример иллюстрирует комплексное использование ресурсов универсального микроконтроллера ATMega16. Здесь микроконтроллер выполняет следующие функции.
1. Контроллер шины USB для связи с персональным компьютером.
2. Контроллер шины 1-Wire для связи с датчиком температуры DS18B20. Т.е. фактически здесь микроконтроллер выступает как регистратор цифровых сигналов.
3. Аналого-цифровой преобразователь для оцифровки сигнала стеклянного электрода. Т.е. устройство используется в качестве регистратора аналоговых сигналов.

Общий вид устройства представлен на Рис.4. В качестве основы стенда использован стандартный штатив от портативного иономера И-102 со стеклянным электродом ЭСЛ-43-11 и электродом сравнения ЭВЛ-1М4. Для контроля температуры применен датчик температуры DS18B20, помещенный в стеклянную трубку соответствующего диаметра, заполненную маслом для улучшения теплового контакта датчика с раствором. Преобразование температуры в цифровой код происходит в самом датчике. Идентификация датчиков, запуск преобразования и считывание кода происходит по шине 1-Wire. В качестве виртуального контроллера этой шины выступает микроконтроллер ATMega16.


Рис.4. Регистрирующий pH-метр. Аналоговый и цифровой регистратор на базе виртуального USB-порта.

Для согласования высокого выходного сопротивления стеклянного электрода с АЦП микроконтроллера используется согласующий усилитель (Рис.4 вверху справа). На плате усилителя также находится реле, отключающее вход усилителя от стеклянного электрода в нерабочем состоянии, которое управляется по USB одной цифровой линией микроконтроллера ATMega16.

Программное обеспечение позволяет регистрировать изменение pH и температуры растворов в течение произвольного времени. Частота отсчетов – 1 Гц. Также предусмотрены средства для оперативной калибровки прибора по произвольному количеству буферных растворов и в различных температурных диапазонах.

Подробное описание этой разработки, схемы и исходные тексты программ приведены в [6].


В данном примере универсальный микроконтроллер ATMega16 используется для вывода данных из PC через виртуальный USB-порт, в частности, для управления шаговым двигателем. В качестве исполнительного устройства используется шприцевой насос от хроматографа. В насосе установлены шаговый двигатель ДШИ-200, концевой выключатель, срабатывающий при достижении поршнем нижнего предела, и датчик давления, выдающий логический сигнал при превышении заданного давления или достижении поршнем верхнего положения. На разъем насоса также подаются напряжения питания для датчика давления и «земля». В сочетании с универсальным микроконтроллером и небольшим силовым модулем этот насос легко превращается в микродозатор жидкостей, управляемый персональным компьютером через виртуальный USB-порт (Рис.5).


Рис.5. Макет микродозатора. Управление шаговым двигателем через виртуальный USB-порт.

Для управления шаговым двигателем насоса могут быть использованы любые четыре цифровых выхода микроконтроллера, которые не задействованы для шины USB. Сигналы с этих выводов подаются на базы составных транзисторов BD677 силового модуля и затем на обмотки двигателя. Для питания силового модуля используется отдельный блок питания (Рис.5, справа сверху). Сигналы с концевого выключателя и датчика давления подаются на две входных цифровых линии микроконтроллера и используются программой управления для блокировки шагов двигателя.

Таким образом, в данном примере универсальный микроконтроллер ATMega16 выполняет две основные функции, полностью заменяя соответствующие специализированные контроллеры.
1. Контроллер шины USB для связи с персональным компьютером.
2. Контроллер шагового двигателя.

Устройство позволяет дозировать жидкости в произвольных режимах, ограниченных только конструкцией насоса (максимальный разовый объем – 2.5 мл и максимальная скорость подачи – около 1 мл/мин). В данной версии программного обеспечения реализованы следующие режимы.
1. Подача жидкости с программируемой скоростью, в том числе и изменяющейся во времени.
2. Подача заданного объема жидкости с накоплением или без него. При этом скорость подачи тоже может контролироваться персональным компьютером.

Подробное описание этой разработки, схемы и исходные тексты программ приведены в [7].


Последний пример также иллюстрирует комплексное использование ресурсов универсального микроконтроллера для задач регистрации и контроля температуры. Здесь микроконтроллер ATMega16 выполняет следующие функции.
1. Контроллер шины USB для связи с персональным компьютером.
2. Контроллер шины 1-Wire для работы с датчиками температуры DS18B20.
3. Контроллер силового модуля регулировки мощности нагревателя.

Задача реализована в виде небольшого стенда, общий вид которого представлен на Рис.6. Он содержит макет водяной бани, состоящей из стакана с водой, нагревателя, датчика температуры DS18B20 и магнитной мешалки. Второй температурный датчик DS18B20 измеряет температуру окружающей среды и расположен непосредственно на плате микроконтроллера. Значение этой температуры необходимо для работы компенсатора тепловых потерь термостата в одном из алгоритмов регулирования температуры [8].


Рис.6. Макет водяной бани. Регистрация и управление температурой через виртуальный USB-порт.

Еще один компонент стенда – силовой модуль. Он предназначен для регулировки мощности нагревателя. Принцип работы – регулирование количества полупериодов, пропущенных в нагрузку. Модуль выполнен на симисторе BT137-600 с оптической развязкой в виде оптосимистора MOC3061, который снабжен детектором перехода напряжения через ноль (Zero Crossing). Это существенно упрощает схему модуля и управление им.

Для управления силовым модулем используется ШИМ (широтно-импульсная модуляция) сигнал таймера TIMER1 микроконтроллера ATMega16, причем частоту следования импульсов и скважность можно программировать. Эти параметры определяют мощность нагревателя и могут быть установлены через виртуальный USB-порт из программы на PC. Через этот же USB порт в персональный компьютер поступают данные с двух температурных датчиков. Это дает возможность реализовать практически любой закон изменения температуры бани (естественно, в рамках динамических характеристик самой бани).

Подробное описание этой разработки, схемы и исходные тексты программ приведены в [8]. Там же приведены результаты экспериментов с различными алгоритмами регулирования температуры и примеры различных режимов нагрева/охлаждения бани.


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


  1. J. Axelson. USB Complete: Everything You Need to Develop USB Peripherals, Lakeview Research, 2005, 572pp.
  2. AVR309: Software Universal Serial Bus (USB).
    http://www.atmel.com/dyn/resources/prod_documents/doc2556.pdf.
  3. Virtual USB port for AVR microcontrollers.
    http://www.obdev.at/products/vusb/.
  4. A Firmware-Only USB Driver for the AVR. Hardware Considerations.
    http://vusb.wikidot.com/hardware.
  5. С.В.Кухтецкий. AVR-USB-MEGA16: Новая жизнь старого Милихрома.
    http://microsin.ru/content/view/773/44/.
  6. С.В.Кухтецкий. AVR-USB-MEGA16: Простой регистрирующий pH-метр с USB интерфейсом.
    http://microsin.ru/content/view/903/44/.
  7. С.В.Кухтецкий. AVR-USB-MEGA16: Управление шаговым двигателем по USB.
    http://microsin.ru/content/view/826/44/.
  8. С.В.Кухтецкий. AVR-USB-MEGA16: Измеряем и контролируем температуру.
    http://microsin.ru/content/view/803/44/.