Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Не все старые технологии начала компьютерной эры забыты, и некоторые энтузиасты из ностальгии по тем временам реализуют с их применением практичные и экономичные решения даже сегодня. В данном случае мы немного вспомним историю появления стандарта GPIB и поговорим о проекте сборки автоматизированного измерительного стенда для калибровки цифрового потенциометра.
Несколько месяцев назад мы с коллегой обсуждали управление оборудованием, оснащённым интерфейсом GPIB. Опираясь лишь на внутреннее чутьё и беглое изучение вопроса, я сказал, что дорогостоящие и проприетарные решения можно легко заменить открытыми инструментами и Linux. Правда, в течение многих последующих недель я несколько раз чуть было не отказался от своей позиции.
Однако благодаря упорству, делению возникавших задач на части и активному поиску информации об опыте других людей мой план, в конце концов, сработал. Я не отказывался от своего изначального взгляда полностью, просто немного отступал назад и вносил необходимые корректировки.
▍ Что такое GPIB?
Пример схемы подключения устройств через HP-IB в 70-х. Источник: hp9845.net
В далёкие 60-е, если измерительное оборудование и соединялось, то никаких общепринятых методов для этого не существовало. К концу того десятилетия с появлением многосекционных контроллеров ситуация несколько улучшилась. В них устанавливалось несколько интерфейсных карт, по одной для каждого прибора, формируя общий интерфейс на задней панели.
Но, хоть такой подход и работал, инженеры HP поняли, что могут существенно улучшить его концепцию, если встроить все эти платы в приборы, избавившись от громоздкой многосекционной конструкции. Отсюда и началась разработка того, что в итоге воплотилось в Hewlett-Packard Interface Bus (HP-IB).
В 1972 году в октябрьском выпуске своего журнала компания HP представила HP-IB сразу двумя статьями: «A Practical Interface System for Electronic Instruments» и «A Common Digital Interface for Programmable Instruments: The Evolution of a System».
«Для преодоления многих проблем, связанных с соединением приборов и цифровых устройств, была разработана новая интерфейсная система. Эта система обеспечивает простоту и гибкость реализации внутрисистемных соединений. Взаимное подключение приборов для использования на лабораторном столе, а также в крупных системах, теперь становится практичным в экономическом смысле».
После этого HP представили свою разработку в международную электротехническую комиссию (IEC), которая в итоге зафиксировала их изобретение как международный стандарт. В течение нескольких последующих лет этот интерфейс превратился в то, что мы сегодня знаем как GPIB (интерфейсную шину общего назначения) или IEEE-488, официально зарегистрированную в 1975 году.
▍ Задача
Зачем мне понадобилось использовать интерфейс связи 50-летней давности? Ввиду того что GPIB в течение стольких лет являлся основным интерфейсом подключения, на рынке б/у электроники можно найти множество оснащённых им устройств, которые обойдутся намного дешевле современных аналогов. Кроме того, чем больше элементов измерительного оборудования оказывается на лабораторных столах, тем меньше их попадёт в утилизацию или на свалки. Но мне все эти оправдания не нужны — мной движет наслаждение и ностальгия от работы со всем этим старым железом.
Схема типичного цифрового потенциометра TPL0501. Источник: Digikey Article Library
Но что вообще может подтолкнуть к подключению приборов через компьютерный интерфейс? В моём случае речь шла о проекте, в котором нужно было откалибровать сопротивление потенциометра в каждой из программируемых позиций его движка.
Это бы позволило мне создать на основе полученных данных алгоритм калибровки, в который можно было бы подставлять нужное значение сопротивления и получать соответствующее значение регистра положения движка. Я, конечно, мог сделать эти измерения и вручную, но при 256 позициях это бы сильно утомило. Если вам интересно побольше узнать о цифровых потенциометрах, то рекомендую статью из библиотеки Digikey, в которой описываются принципы работы этих устройств и способы их использования.
Подержанный настольный мультиметр Keithley 195A, 1982 год
Для этой цели я приобрёл подержанный цифровой мультиметр Keithley 195A 5 ½ цифр родом из начала 80-х с установленной опцией Model 1950 AC/Amps.
▍ План действий
В ходе поисков я наткнулся на дипломную работу (Немецкий) Томаса Клима по теме использования простого в сборке шилда GPIB на базе Raspberry Pi или Pi Zero для взаимодействия с измерительными приборами. Этот проект открыт и сопровождён хорошей документацией на GitHub, а вот его сайт electronomikon.
Это простая схема, подтверждающая моё интуитивное предположение о том, что GPIB не так уж сложен, и вы наверняка могли бы реализовать эту шину с помощью микроконтроллера 8051. Я собрал всё согласно проекту и получил готовый к работе Raspberry Pi Zero-W.
Интерфейсный модуль GPIB установлен в заднюю панель мультиметра
Интерфейсный модуль GPIB на базе Raspberry Pi Zero
Что касается ПО, то шилд задействует имеющийся модуль ядра linux-gpib. Казалось, что проблем здесь возникнуть не должно. Я планировал, что спустя пару часов установки PyVisa и ряда нужных приборам библиотек у меня получится автоматически записать данные с помощью скриптов Python менее, чем за день. Вот только реальность не всегда совпадает с нашими ожиданиями.
▍ Архитектура GPIB
Боб “Mr Fancy Pants” Стерн за стойкой с оборудованием, оснащённым HP-IB, 1980 год
Небольшой взгляд в прошлое поможет понять принцип устройства GPIB. Если вернуться в лабораторию электроники 60-х, то использование компьютера для управления повторяющимися последовательностями было скорее исключением, чем правилом. Вместо этого вы могли увидеть магнитные или бумажные ленты, магнитные карты или даже карты, на которых команды размечались карандашом. К тому же для некоторых конфигураций компьютерное управление могло не требоваться, в принципе. Например, датчик температуры мог напрямую строить графики на ленточном самописце или сохранять значения на магнитной ленте. Если вспомнить, что именно в этой среде вращались инженеры HP, то такая архитектура имеет смысл.
Карта для программатора HP-3260A (из коллекции перфокарт профессора Джонса, Университет Айовы)
GPIB — это гибкая шина подключения с 15 сигналами: 8-разрядной шиной данных и 7-битами линий управления. Любое подключённое к шине устройство может быть как пассивным слушателем, так и активным отправителем. Отправитель способен одновременно сообщаться с несколькими устройствами, которые в случае возникновения требующего обработки события могут вызывать прерывание.
Сами устройства соединяются при помощи кабелей и разъёмов, которые для своего времени были достаточно невелики, но в сравнении с современными USB, Ethernet и последовательными подключениями показались бы явно неудобными. 24-контактный разъём Centronics позволяет легко соединять устройства в цепочку, но сам по себе очень громоздкий — в крайнем случае GPIB-кабель можно было использовать в качестве нунчаков.
Кабели GPIB можно даже использовать как нунчаки
Традиционно GPIB применялся для подключения основного управляющего компьютера к цепочке или кластеру измерительных приборов, что исторически определило распространённость аппаратных средств с интерфейсом GPIB. В течение десятилетий компьютеры оснащались интерфейсными картами ISA, появившимися позднее PCI или, если это был продукт HP, имели встроенный интерфейс GPIB. Такие компьютеры были довольно дороги, но так как интерфейсная плата могла управлять всем подключённым оборудованием, то для отдельной его группы она требовалась всего одна.
PCI-карта GPIB от National Instruments
Лидером в мире GPIB как по части карт, так и по части сопутствующих драйверов и программных средств являлась компания National Instruments. Однако проприетарность их ПО и высокие цены отталкивали многие небольшие компании и домашние лаборатории.
Интерфейсный модуль USB-GPIB от Keysight
Вы определённо можете реализовать автоматическую измерительную станцию полностью с помощью GPIB в стиле 70-х. Многие такие легаси-системы до сих пор существуют. Хотя сегодня GPIB скорее пригодится для адаптирования одного или нескольких приборов под использование в имеющейся измерительной станции, собранной на базе LAN, USB, последовательного подключения или их комбинации. Это полностью переворачивает экономическую сторону вопроса, и именно поэтому люди порой ищут дешёвые GPIB-адаптеры для всего одного прибора.
▍ Без сложностей никуда
На борту Pi Zero-W имеется WiFi — на деле это единственное средство подключения к локальной сети, если не использовать внешние расширения. Однако к своему WiFi-роутеру мне его подключить не удалось. Очень долго я считал, что проблема на стороне оператора. У меня довольно много плат Raspberry Pi 3-й и 4-й серии, в которых WiFi работает без проблем. Когда же я начал конкретно разбираться в проблеме, то выяснил, что сетевые инструменты в Debian/Raspberry Pi OS с течением лет изменились. Есть много руководств, в которых показываются различные способы настройки, правда некоторые из них — уже устарели.
Без LAN мой лишённый прочих средств ввода/вывода Pi Zero-W функционировать не мог, поэтому я нагромоздил кучу USB-кабелей и HDMI-адаптер, чтобы хотя бы получить доступ к командной строке, и заказал пару адаптеров USB-LAN в качестве временного обходного пути для подключения к сети. Много часов пробежало за поиском и проверкой идей, когда, наконец, я нашёл пару туманных постов, в которых указывалось, что проблемы подключения Pi Zero-W наблюдались в некоторых странах — в том числе и в Южной Корее.
И проблема действительно оказалась в этом. Я временно изменил в настройках роутера страну на США, после чего Pi спокойно подключился. Оставлять это так было нельзя, поэтому я обратно переключился на Южную Корею и продолжил использовать проводное LAN-подключение для срочной работы.
Хотя у этой проблемы всё же случился счастливый конец. На форуме Raspberry Pi один из инженеров подтвердил баг и отправил в Cypress Semiconductors запрос на его исправление. Несколько недель спустя мы получили обновлённую прошивку, которая решила проблему и, надеюсь, будет добавлена в предстоящий релиз.
▍ Роутер сходит с ума
Сейчас у меня есть пара Pi Zero, Pi 4B и несколько адаптеров USB-LAN — всё работает. Поскольку эти адаптеры можно перемещать — сегодня использовать на одном ПК, а завтра на другом — я предусмотрительно подписал каждый и указал эти данные в файлах
/etc/hosts
и /etc/ethers
роутера, после чего моя сеть тут же полегла. Разобраться оказалось непросто, потому что извлечь из роутера информацию при зависшей сети очень проблемно. В конце концов, я выяснил, что по ошибке перепутал в его таблице две записи для этих адаптеров, отчего OpenWRT сошла с ума.Интерфейсы USB-LAN получили наклейки со своими MAC-адресами
Процесс поиска и устранения этой проблемы затянулся надолго, и с решением я, возможно, немного перестарался. Во-первых, я полностью обнулил роутер и заново установил прошивку. Я оптимизировал организацию данных об имени хоста и присваивании статических IP-адресов, а также нашёл вот этот код, написанный Кшиштафом Бургхардтом, который преобразует
/etc/hosts и etc/ethers
в OpenWRT-файл /etc/config/dhcp
. Я купил второй роутер на запас, чтобы в случае повторения проблемы, можно было быстро их поменять. И последнее, я разорился на этикеточный принтер, чтобы наглядно обозначить эти USB-LAN адаптеры их MAC-адресами.▍ Готово
Приступим к измерениям!
Наконец-то, я готов заняться реальной работой над проектом. Не обращайте внимание на висящие сзади провода — они идут к логическому анализатору Analog Discovery 2, следящему за сигналами GPIB. Наручные часы — это симптом моей лени — я установил старый смартфон на штатив, чтобы наблюдать за измерениями в лаборатории, и во время тестирования скриптов Python мониторил процесс со своего компьютера в офисе.
Изредка видео зависало, поэтому я ориентировался на секундную стрелку, чтобы понять, всё ли работает как надо. Во второй части этой саги я подытожу проведённые измерения, поделюсь дополнительной информацией о GPIB и его ревизиях, а также покажу графики, полученные с моей автоматизированной тестовой установки.