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

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А.

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

Спасибо за внимание!
Поделиться публикацией

Комментарии 28

    0
    Здорово! А как примерно выглядит система команд вольтметра?
      +2
      LMGTFY: _http://en.wikipedia.org/wiki/Standard_Commands_for_Programmable_Instruments
      >>For example, the command to «Measure a DC voltage then measure an AC current» would be issued as MEASure:VOLTage:DC?;:MEASure:CURRent:AC? .

      >>For example, the command “SYSTem:COMMunicate:SERial:BAUD 2400 ” would set an RS-232 serial communications interface to 2400 bit/s. This could also alternatively be abbreviated “SYST:COMM:SER:BAUD 2400”. The query command “SYSTem:COMMunicate:SERial:BAUD? ” or “SYST:COMM:SER:BAUD? ” would instruct the instrument to report its current baud rate.

      upd: хм, а теги я уже не могу.
        0
        В простейшем случае, например, так (измерение постоянного напряжения):

        > MEASURE:VOLTAGE?
        < 1.2345E+01

        Галочка вправо — команда, влево — ответ устройства. Но система команд SCPI позволяет и более тонкие способы управления.
        0
        Эх, ностальгия! Лет двадцать назад мы подключали такие вольтметры к ДВК через КАМАК. Да, шлейфы из проводов были знатные. Теперь всё проще. Такой вопрос — а Ардуинка не является ли «бутылочным горлышком»? Я это к тому, что частота опроса при таком решении максимально возможная для этого прибора? Можно ведь взять плату цифровых входов-выходов, типа, скажем NI PCI-6509 и получить тоже самое — будет ли такое решение более быстрым («бюджетным» оно ни разу не будет — это понятно) по сравнению с ардуинкой (если не делать буферизацию данных в контроллере)?
          +2
          У нас тоже раньше использовался КАМАК + контроллер на ISA шине.

          Одно измерение производится в течении 0,3-5 секунд, в среднем — раз в секунду. И прошивка не производит периодический опрос, вместо этого по окончании каждого измерения В7-28 генерирует цифровой импульс, по которому срабатывает аппаратное прерывание в ATmega. Объём данных по последовательному порту небольшой, 9600 бод/сек хватает за глаза.

          Бутылочным горлышком мог бы стать малый размер ОЗУ — всего 8 кбайт, но нам хватило, даже есть буфер для хранения 512 измерений.
            0
            Хм… интересно, можно ли из такой пары — цифровой вольтметр + интерфейс к ПК сделать осцилограф для сигналов низкой частоты при должной частоте измерений? Или измерение фиксированно по времени (0,3-5,0с как у вас указано)?
              0
              В7-28 — это если у Вас частоты порядка 0,1 Гц и ниже. Правда, интервал между измерениями будет «плавать» на несколько процентов. В качестве «осциллографа для бедных» гораздо лучше себя покажет Agilent 34410, у него и частоты до кГц, и точность интервала выше.
                +1
                Ясно, спасибо. Нет, «для бедных» уж лучше тогда С1-72.
          +2
          Странно, а мне первая мысль в голову пришла использовать регистры сдвига, тогда можно было бы обойтись ардуинкой за 2$. Те самые 74HC595 для вывода, и 74HC165N для ввода… тогда от ардуины надо было бы всего 4-5 проводов для управления регистрами, а плату с регистрами можно было разместить прямо на разъёме прибора, избавившись от длинного шлейфа. А если взять еще esp8266 прикрутить… то можно было бы продавать такой переходник за сотни зеленых денег избавится от шлейфа вообще.
          Ладно если импортозамещение тогда и там и там использовать 561ИР9, их правда поболее надо будет т.к. они 4-битные.
            0
            Сдвиговые регистры я бы использовал только в случае несовместимости по уровням входов/выходов. Нам в нашем случае показалось удобным держать всю электронику в одном месте. Но спасибо за наводку, будем иметь в виду.
              +1
              Они зато здорово сокращают количество жил которое необходимо тянуть к прибору.
              +2
              Некоторое время назад подключал к ПК прибор комбинированный цифровой Щ300, тоже через Arduino Mega. Протокол, правда, взял Modbus RTU, т. к. ардуина работает не только с Щ300, но еще много чего делает, в том числе работает через SPI с огромным массивом реле, через 60(!) микросхем SN74HC595 в одной шине. Заводил тоже в LabVIEW.
              Была даже мысль заменить у Щ300 шаговый переключателя диапазонов на релейную схему, чтобы тоже с ПК диапазоны переключать и в конечном итоге автоматизировать подбор диапазона измерения, но коллеги не одобрили. Т.к. такая модификация не прошла бы метрологическую поверку :)
              image

                0
                У нас Щ300 не используются, но было бы интересно адапировать прошивку для этого вольтметра. Работа свёдется к клонированию проекта v7-28-arduino и его модификации.

                Если у Вас будет время и интерес, я готов посотрудничать.
                  0
                  Мы сейчас занимаемся подключением Щ300 к компьютеру. К сожалению, в Интернете очень мало информации на эту тему. Удалось понять, как выводятся цифры, но непонятно как выводится положение запятой, на какие штырьки разъема. Может, подскажете?
            +1
            Год назад бы пожал бы крепко руку за такую статью. Но в целом она бесценна для всех лаборантов, которые занимаются измерениями и системой их автоматизации.
              –2
              Не понимаю я таких изобретателей велосипеда.
              «Нет штатных «электронщиков», которые могли бы разработать и спаять плату микроконтроллера» — берите готовое изделие LCard — хочешь на USB, хочешь на PCI,
              с разрядностью от 12 до 24 бит и всякими там сертификатами соответствия,
              А хлам сдать на золото.
              Ну или оставить — для понастальгировать и проверить всякое новомодное.
                +2
                Лабораторный вольтметр, такой как В7-28, — это не просто АЦП, это ещё схемы интегрирования (усреднения), автоподстройки ноля, шумоподавления и пр., что позволяет получать результат с точностью до 5 цифр.

                АЦП от LCard — хорошие изделия в своей нише, но их назначение ближе к цифровому осциллографу.
                  0
                  В цифровом виде это уже делать нельзя? 24 бита это уже 7 значащих цифр, а функциональность определяется софтом. Хочешь усреднение, хочешь среднеквадратичное значение, пиковые значения, медианное, подстройка под сетевые наводки и т.д. Раньше если это прибор не умел изначально переделать его было весьма сложно, а тут лишь написал соответствующий софт и дело в шляпе.
                    0
                    Часть функциональности возможно решить только схемотехнически, например автоподстройка ноля, или регулировка входного сопротивления.
                    Шумоподавление и усреднение можно реализовать программно, при этом частоту опроса АЦП потребуется сделать максимально возможной. Правда 7 знаков вряд ли получится. И, наверное, схемотехническое решение всё равно даст выигрыш в точности, но не берусь утверждать — не специалист.
                      0
                      К тому же вольтметры позволяют переключать диапазоны измерений, например в В7-28 их 5 по постоянному напряжению. Программно это не реализовать без радикальной потери в точности.
                        0
                        Это называется нормирование сигнала, и это осуществляется в любом случае аппаратно. Причём переключение диапазонов это самая простая аппаратная часть измерительного прибора, хотя она ответственна за точность измерений. Где нужно переключать диапазоны, иметь входное сопротивление единицы-десятки ТОм используется приставка к АЦП.
                        0
                        Но вообще написать драйвер для АЦП, реализующий SCPI-вольметр, — отличная идея. Если его дополнить эмулятором последовательного порта, то получим программный адаптер. В ряде случаев может получиться замена лабораторному вольтметру.
                    0
                    вот совершенно не понимаю тех, кто ставит минус и не может пройти на сайт к Л-кардам и почитать документацию. 24 бита АЦП — это несколько больше (чем дофига), чем 5 десятичных цифр.

                    ЗЫ: если что, я в настоящем я не пользователь Л-карда и даже обижен на них, но мои претензии связаны не с тем, что их продукция что-то плохо мерит.
                      +1
                      Если измерять напряжение простым АЦП, то Вы получите шум уже во 2-3 знаке, в первую очередь из-за наводок по цепи питания 50 Гц. АЦП это только часть цифрового вольтметра.
                        0
                        я догадываюсь про это, и производители LCard догадываются.
                        я немного лажанулся — 24 бита АЦП у них в платах для крейтовой системы, а в обычных — до 16 бит.
                        О, и цены у них теперича не то, что давеча www.lcard.ru/products/external/e-502 — 30 тыр.

                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                    Самое читаемое