[Из песочницы] USB-адаптер для цифрового вольтметра В7-28 на базе Arduino Mega
Наша лаборатория занимается, в числе прочего, измерением электросопротивления различных образцов. Основные рабочие лошадки нашей измерительной установки — цифровые мультиметры американской компании Agilent, такие как 34401A.
Кроме этого, долгое время лежали неиспользуемыми несколько стареньких, но рабочих вольтметров В7–28 (один из них на фото). Данный вольтметр, правда, уступает по точности и быстродействию «американцам», но всё равно достаточно хорош: точность до 5 десятичных цифр, приемлемая шумность, экранированные входы, а главное — возможность дистанционного управления с ПЭВМ (которые теперь зовутся ПК).
Использовать их не получалось по следующим причинам:
Нестандартный аппаратный интерфейс: на задней панели имеются два разъёма с 56 и 22 контактами, по которым В7–28 принимает команды и возвращает результаты измерений. Непосредственно подключить вольтметр к ПК невозможно; Отсутствие программного интерфейса, то есть какой-нибудь системы управляющих команд. Нужно включить режим измерения постоянного напряжения — извольте подать соответствующую комбинацию цифровых уровней на управляющий разъём. Нужно прочитать показания — к вашим услугам 21 цифровой сигнал на разъёме ЦПУ, и так далее.При этом программное обеспечение измерительной установки, написанное и отлаженное, использует SCPI команды для управления вольтметрами, и вносить туда поддержку нестандартных интерфейсов было бы слишком сложной задачей. Таким образом, задача свелась к двум пунктам: Снабдить В7–28 каким-нибудь современным аппаратным интерфейсом, чтобы подключать его непосредственно к ПК; «Научить» его понимать SCPI команды, чтобы не трогать высокоуровневое ПО. Почему Arduino Mega? У нас нет штатных «электронщиков», которые могли бы разработать и спаять плату микроконтроллера, поэтому нужно было выбрать что-то готовое, и Arduino оказалась тем что нужно. Не буду перечислять её известные достоинства, но нам она подошла тем, что позволила минимизировать объём пайки и обойтись без специальных программаторов.Из всего «ардуинового» семейства нам подошла только Arduino Mega 2560: только у неё оказалось достаточное количество цифровых входов и выходов. Плата довольно дорогая, в российских интернет-магазинах итальянский оригинал стоит около 4 тыс. рублей (на момент написания статьи). К счастью, имеется множество китайских аналогов по цене $10 и даже ниже.Связь с ПК у Arduino осуществляется через USB интерфейс, и это решало задачу №1. Осталось разработать прошивку, которая бы реализовывала бы подмножество SCPI команд и их трансляцию в управляющие сигналы для В7–28.
Реализация прошивки В качестве отправного пункта мы использовали замечательную библиотеку scpi-parser, любезно написанную коллегой из Чехии. Эта библиотека взяла на себя всю «грязную работу», связанную с синтаксическим разбором SCPI команд, что сэкономило нам до 6 человекомесяцев.Сердце прошивки — это библиотека scpi-multimeter, которая реализует логику SCPI команд и конечный автомат, занимающийся асинхронным считыванием и обработкой показаний вольтметра. Библиотека абстрагируется от аппаратной части, делегируя работу с портами ввода-вывода вовне, для чего использует некий абстрактный программный интерфейс. Это позволяет использовать библиотеку практически с любым типом как микропроцессора, так и вольтметра.
И, наконец, сама прошивка — проект v7–28-arduino. Это небольшой по объёму кода проектик, который реализует абстрактный интерфейс библиотеки scpi-multimeter, то есть фактически пишет и читает в цифровые и последовательный порты на плате микроконтроллера.
Дела паяльные Полностью обойтись без пайки нам, конечно, не удалось, но объём работ оказался довольно небольшой:
взять монтажную плату, совместимую с Arduino Mega по расположению контактных отверстий; распаять на монтажной плате штырьковые соединители для установки на плате микроконтроллера; двумя 30-проводными шлейфами связать монтажную плату с разъёмами В7–28; наконец, воткнуть монтажную плату в микроконтроллер: из-за большого числа штырьковых контактов это не так уж просто. Результат виден на фотографиях. Чтобы уберечь пайку от механических повреждений и «разбалтывания», мы поместили микроконтроллеры с установленными монтажными платами в «фирменные» коробочки. В результате наш адаптер приобрёл пусть не заводской, но довольно приличный вид.
Проверка адаптера Опустим описание долгого процесса тестирования и отладки прошивки. Когда, наконец, всё было закончено, мы решили подключить В7–28 вместе с Agilent 34401A в одну измерительную установку. Как говорилось выше, ПО высокого уровня управляет вольтметрами посредством SCPI команд. В настройках программы мы указали виртуальный COM-порт, соответствующий микроконтроллеру, и:
Программа заработала! Теперь у нас стало больше вольметров и мы можем одновременно измерять больше образцов. PROFIT!
Заключение Кому, кроме нас, может быть интересна эта работа? Во-первых, это, конечно, гордые обладатели В7–28, получившие возможность за умеренные средства снабдить свои вольтметры адаптером, который позволяет их использовать так же просто, как и современные аналоги. Интерфейсом USB сейчас оборудован любой ПК, а язык команд SCPI «из коробки» понимает LabVIEW и аналогичные средства разработки.Во-вторых, как говорилось выше, основная часть библиотеки не зависит от конкретной марки вольтметра или микроконтроллера. Например, достаточно просто модифицировать прошивку для поддержки других типов вольтметров, например В7–34А.
Всех заинтересованных лиц приглашаем на страницу проекта с исходными текстами, там же имеется ссылка на готовые бинарные сборки и документацию.
Спасибо за внимание!