![](https://habrastorage.org/webt/q1/yu/ga/q1yugabexlp6icemfzs_hxcwsuo.png)
Не все старые технологии начала компьютерной эры забыты, и некоторые энтузиасты из ностальгии по тем временам реализуют с их применением практичные и экономичные решения даже сегодня. В данном случае мы немного вспомним историю появления стандарта GPIB и поговорим о проекте сборки автоматизированного измерительного стенда для калибровки цифрового потенциометра.
Несколько месяцев назад мы с коллегой обсуждали управление оборудованием, оснащённым интерфейсом GPIB. Опираясь лишь на внутреннее чутьё и беглое изучение вопроса, я сказал, что дорогостоящие и проприетарные решения можно легко заменить открытыми инструментами и Linux. Правда, в течение многих последующих недель я несколько раз чуть было не отказался от своей позиции.
Однако благодаря упорству, делению возникавших задач на части и активному поиску информации об опыте других людей мой план, в конце концов, сработал. Я не отказывался от своего изначального взгляда полностью, просто немного отступал назад и вносил необходимые корректировки.
▍ Что такое GPIB?
![](https://habrastorage.org/webt/ju/rx/5h/jurx5ha9lfxhz3hy5eb2duc2g5q.png)
В далёкие 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 в течение стольких лет являлся основным интерфейсом подключения, на рынке б/у электроники можно найти множество оснащённых им устройств, которые обойдутся намного дешевле современных аналогов. Кроме того, чем больше элементов измерительного оборудования оказывается на лабораторных столах, тем меньше их попадёт в утилизацию или на свалки. Но мне все эти оправдания не нужны — мной движет наслаждение и ностальгия от работы со всем этим старым железом.
![](https://habrastorage.org/webt/rl/ng/mk/rlngmkkosd7jnb_t7i294duycao.png)
Схема типичного цифрового потенциометра TPL0501. Источник: Digikey Article Library
Но что вообще может подтолкнуть к подключению приборов через компьютерный интерфейс? В моём случае речь шла о проекте, в котором нужно было откалибровать сопротивление потенциометра в каждой из программируемых позиций его движка.
Это бы позволило мне создать на основе полученных данных алгоритм калибровки, в который можно было бы подставлять нужное значение сопротивления и получать соответствующее значение регистра положения движка. Я, конечно, мог сделать эти измерения и вручную, но при 256 позициях это бы сильно утомило. Если вам интересно побольше узнать о цифровых потенциометрах, то рекомендую статью из библиотеки Digikey, в которой описываются принципы работы этих устройств и способы их использования.
![](https://habrastorage.org/webt/hw/zk/vp/hwzkvpwt3xitddukjngw1jsftzu.png)
Для этой цели я приобрёл подержанный цифровой мультиметр Keithley 195A 5 ½ цифр родом из начала 80-х с установленной опцией Model 1950 AC/Amps.
▍ План действий
В ходе поисков я наткнулся на дипломную работу (Немецкий) Томаса Клима по теме использования простого в сборке шилда GPIB на базе Raspberry Pi или Pi Zero для взаимодействия с измерительными приборами. Этот проект открыт и сопровождён хорошей документацией на GitHub, а вот его сайт electronomikon.
Это простая схема, подтверждающая моё интуитивное предположение о том, что GPIB не так уж сложен, и вы наверняка могли бы реализовать эту шину с помощью микроконтроллера 8051. Я собрал всё согласно проекту и получил готовый к работе Raspberry Pi Zero-W.
![](https://habrastorage.org/webt/ui/7t/ul/ui7tulbxcv_-kosx6h7xe4s3t1o.png)
![](https://habrastorage.org/webt/-w/lh/zu/-wlhzuze-kqmdoorfjlkkbj_oku.jpeg)
Что касается ПО, то шилд задействует имеющийся модуль ядра linux-gpib. Казалось, что проблем здесь возникнуть не должно. Я планировал, что спустя пару часов установки PyVisa и ряда нужных приборам библиотек у меня получится автоматически записать данные с помощью скриптов Python менее, чем за день. Вот только реальность не всегда совпадает с нашими ожиданиями.
▍ Архитектура GPIB
![](https://habrastorage.org/webt/q4/ug/6p/q4ug6pcpvipn8pt_1vyxhtrbuu0.png)
Небольшой взгляд в прошлое поможет понять принцип устройства GPIB. Если вернуться в лабораторию электроники 60-х, то использование компьютера для управления повторяющимися последовательностями было скорее исключением, чем правилом. Вместо этого вы могли увидеть магнитные или бумажные ленты, магнитные карты или даже карты, на которых команды размечались карандашом. К тому же для некоторых конфигураций компьютерное управление могло не требоваться, в принципе. Например, датчик температуры мог напрямую строить графики на ленточном самописце или сохранять значения на магнитной ленте. Если вспомнить, что именно в этой среде вращались инженеры HP, то такая архитектура имеет смысл.
![](https://habrastorage.org/webt/-d/xj/so/-dxjsoqigfdmhxn15z9jw5pybag.png)
GPIB — это гибкая шина подключения с 15 сигналами: 8-разрядной шиной данных и 7-битами линий управления. Любое подключённое к шине устройство может быть как пассивным слушателем, так и активным отправителем. Отправитель способен одновременно сообщаться с несколькими устройствами, которые в случае возникновения требующего обработки события могут вызывать прерывание.
Сами устройства соединяются при помощи кабелей и разъёмов, которые для своего времени были достаточно невелики, но в сравнении с современными USB, Ethernet и последовательными подключениями показались бы явно неудобными. 24-контактный разъём Centronics позволяет легко соединять устройства в цепочку, но сам по себе очень громоздкий — в крайнем случае GPIB-кабель можно было использовать в качестве нунчаков.
![](https://habrastorage.org/webt/yw/vd/ep/ywvdepuekifmevosudzmbntkfie.png)
Традиционно GPIB применялся для подключения основного управляющего компьютера к цепочке или кластеру измерительных приборов, что исторически определило распространённость аппаратных средств с интерфейсом GPIB. В течение десятилетий компьютеры оснащались интерфейсными картами ISA, появившимися позднее PCI или, если это был продукт HP, имели встроенный интерфейс GPIB. Такие компьютеры были довольно дороги, но так как интерфейсная плата могла управлять всем подключённым оборудованием, то для отдельной его группы она требовалась всего одна.
![](https://habrastorage.org/webt/1u/uy/ee/1uuyeev4ym4fwchjnnqwjm7uw3o.jpeg)
Лидером в мире GPIB как по части карт, так и по части сопутствующих драйверов и программных средств являлась компания National Instruments. Однако проприетарность их ПО и высокие цены отталкивали многие небольшие компании и домашние лаборатории.
![](https://habrastorage.org/webt/jh/wi/o6/jhwio6wrhz9t6qvj-1befyvgiag.png)
Вы определённо можете реализовать автоматическую измерительную станцию полностью с помощью 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 сошла с ума.![](https://habrastorage.org/webt/iu/-d/f5/iu-df5pb6qo3t7sit5i3fop6dv4.png)
Интерфейсы USB-LAN получили наклейки со своими MAC-адресами
Процесс поиска и устранения этой проблемы затянулся надолго, и с решением я, возможно, немного перестарался. Во-первых, я полностью обнулил роутер и заново установил прошивку. Я оптимизировал организацию данных об имени хоста и присваивании статических IP-адресов, а также нашёл вот этот код, написанный Кшиштафом Бургхардтом, который преобразует
/etc/hosts и etc/ethers
в OpenWRT-файл /etc/config/dhcp
. Я купил второй роутер на запас, чтобы в случае повторения проблемы, можно было быстро их поменять. И последнее, я разорился на этикеточный принтер, чтобы наглядно обозначить эти USB-LAN адаптеры их MAC-адресами.▍ Готово
![](https://habrastorage.org/webt/yj/py/05/yjpy05acjn-vv_osbiucecl6qag.png)
Наконец-то, я готов заняться реальной работой над проектом. Не обращайте внимание на висящие сзади провода — они идут к логическому анализатору Analog Discovery 2, следящему за сигналами GPIB. Наручные часы — это симптом моей лени — я установил старый смартфон на штатив, чтобы наблюдать за измерениями в лаборатории, и во время тестирования скриптов Python мониторил процесс со своего компьютера в офисе.
Изредка видео зависало, поэтому я ориентировался на секундную стрелку, чтобы понять, всё ли работает как надо. Во второй части этой саги я подытожу проведённые измерения, поделюсь дополнительной информацией о GPIB и его ревизиях, а также покажу графики, полученные с моей автоматизированной тестовой установки.
![](https://habrastorage.org/webt/ou/g5/kh/oug5kh6sjydt9llengsiebnp40w.png)
Комментарии (7)
tituszx
14.02.2022 20:20+4Уже который год пользуемся преобразователем изготовленным по схеме из журнала Радио за 2010 год, Михаил Терентьев "Преобразователь интерфейса GPIB-RS-232". Работает безотказно, по 11 суток подряд снимает показания с компараторов частоты. Обмен идёт командами через COM порт (который, на самом деле переходник с USB). Программируется легко, примеры работы есть в статье. Рекомендую.
pvvv
15.02.2022 13:13+1вроде бы на ft232h через mpsse&bitbang можно реализовать. но почему-то беглое гугление результатов не дало.
и кисли и национальные инструменты с ценами совсем берега потеряли
более бюджетная альтернатива, хотя с родным софтом от NI не особо совместима.
TrexREXX
15.02.2022 16:16Начинал с этого GPIB, потом Михаил скинул(за что ему огромное спасибо) и исходники на GPIB-RS-232, и на свою новую разработку GPIB-USB_WiFi. Но к сожалению чтобы полноценно работать надо писать СОФТ! Но для затравки самое то! Для работы с стандартными картами GPIB есть отличный софт EZGPIB.
GomboTs
14.02.2022 21:35+1"Но что вообще может подтолкнуть к подключению приборов через компьютерный интерфейс ?"
Вообще-то - все.
И GPIB вполне поддерживаемый сегодня интерфейс для научных приборов. Конечно, сейчас обычно есть альтернатива - USB или Ethernet, но, с учетом того, что в двух случаях из трех USB это на самом деле COM, то в сложной системе с многими приборами GPIB по-прежнему чувствует себя отлично.
dlinyj
Спасибо за публикацию. На самом деле, работа с GPIB — очень интересная тема. Всё хорошо, когда измерения делаются ручками, но если хочется автоматизации, то без неё уже никуда.
Помню, в одном НИИ стоял у истоков автоматической калибровки АЦП согласно температурного режима, вот там, без такого решения никуда.
Пока не написали специальный софт, посменно в течении нескольких суток сидели операторы (и я в т.ч.), и вводили измеренные данные.