Open source
June 2015 9

USB-адаптер для цифрового вольтметра В7-28 на базе Arduino Mega

From Sandbox
article-v7-28.jpg

Наша лаборатория занимается, в числе прочего, измерением электросопротивления различных образцов. Основные рабочие лошадки нашей измерительной установки — цифровые мультиметры американской компании Agilent, такие как 34401A.

Кроме этого, долгое время лежали неиспользуемыми несколько стареньких, но рабочих вольтметров В7-28 (один из них на фото). Данный вольтметр, правда, уступает по точности и быстродействию «американцам», но всё равно достаточно хорош: точность до 5 десятичных цифр, приемлемая шумность, экранированные входы, а главное — возможность дистанционного управления с ПЭВМ (которые теперь зовутся ПК).

Использовать их не получалось по следующим причинам:

  • Нестандартный аппаратный интерфейс: на задней панели имеются два разъёма с 56 и 22 контактами, по которым В7-28 принимает команды и возвращает результаты измерений. Непосредственно подключить вольтметр к ПК невозможно;
  • Отсутствие программного интерфейса, то есть какой-нибудь системы управляющих команд. Нужно включить режим измерения постоянного напряжения — извольте подать соответствующую комбинацию цифровых уровней на управляющий разъём. Нужно прочитать показания — к вашим услугам 21 цифровой сигнал на разъёме ЦПУ, и так далее.
    При этом программное обеспечение измерительной установки, написанное и отлаженное, использует SCPI команды для управления вольтметрами, и вносить туда поддержку нестандартных интерфейсов было бы слишком сложной задачей.

Таким образом, задача свелась к двум пунктам:
  1. Снабдить В7-28 каким-нибудь современным аппаратным интерфейсом, чтобы подключать его непосредственно к ПК;
  2. «Научить» его понимать 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, то есть фактически пишет и читает в цифровые и последовательный порты на плате микроконтроллера.

Дела паяльные


article-wires.jpg

Полностью обойтись без пайки нам, конечно, не удалось, но объём работ оказался довольно небольшой:
  • взять монтажную плату, совместимую с Arduino Mega по расположению контактных отверстий;
  • распаять на монтажной плате штырьковые соединители для установки на плате микроконтроллера;
  • двумя 30-проводными шлейфами связать монтажную плату с разъёмами В7-28;
  • наконец, воткнуть монтажную плату в микроконтроллер: из-за большого числа штырьковых контактов это не так уж просто.

article-box.jpg

Результат виден на фотографиях. Чтобы уберечь пайку от механических повреждений и «разбалтывания», мы поместили микроконтроллеры с установленными монтажными платами в «фирменные» коробочки. В результате наш адаптер приобрёл пусть не заводской, но довольно приличный вид.

Проверка адаптера


Опустим описание долгого процесса тестирования и отладки прошивки. Когда, наконец, всё было закончено, мы решили подключить В7-28 вместе с Agilent 34401A в одну измерительную установку. Как говорилось выше, ПО высокого уровня управляет вольтметрами посредством SCPI команд. В настройках программы мы указали виртуальный COM-порт, соответствующий микроконтроллеру, и:

article-pc.jpg

Программа заработала! Теперь у нас стало больше вольметров и мы можем одновременно измерять больше образцов. PROFIT!

Заключение


Кому, кроме нас, может быть интересна эта работа?

Во-первых, это, конечно, гордые обладатели В7-28, получившие возможность за умеренные средства снабдить свои вольтметры адаптером, который позволяет их использовать так же просто, как и современные аналоги. Интерфейсом USB сейчас оборудован любой ПК, а язык команд SCPI «из коробки» понимает LabVIEW и аналогичные средства разработки.
Во-вторых, как говорилось выше, основная часть библиотеки не зависит от конкретной марки вольтметра или микроконтроллера. Например, достаточно просто модифицировать прошивку для поддержки других типов вольтметров, например В7-34А.

Всех заинтересованных лиц приглашаем на страницу проекта с исходными текстами, там же имеется ссылка на готовые бинарные сборки и документацию.

Спасибо за внимание!
+30
18.7k 88
Comments 28