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

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

Спасибо за внимание!

Комментарии (19)


  1. qbertych
    09.06.2015 15:53

    Здорово! А как примерно выглядит система команд вольтметра?


    1. Stalker_RED
      09.06.2015 16:11
      +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: хм, а теги я уже не могу.


    1. andrey_nado Автор
      09.06.2015 16:12

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

      > MEASURE:VOLTAGE?
      < 1.2345E+01

      Галочка вправо — команда, влево — ответ устройства. Но система команд SCPI позволяет и более тонкие способы управления.


  1. AndreyDmitriev
    09.06.2015 17:08

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


    1. andrey_nado Автор
      09.06.2015 17:21
      +2

      У нас тоже раньше использовался КАМАК + контроллер на ISA шине.

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

      Бутылочным горлышком мог бы стать малый размер ОЗУ — всего 8 кбайт, но нам хватило, даже есть буфер для хранения 512 измерений.


      1. MacIn
        09.06.2015 19:12

        Хм… интересно, можно ли из такой пары — цифровой вольтметр + интерфейс к ПК сделать осцилограф для сигналов низкой частоты при должной частоте измерений? Или измерение фиксированно по времени (0,3-5,0с как у вас указано)?


        1. andrey_nado Автор
          09.06.2015 19:20

          В7-28 — это если у Вас частоты порядка 0,1 Гц и ниже. Правда, интервал между измерениями будет «плавать» на несколько процентов. В качестве «осциллографа для бедных» гораздо лучше себя покажет Agilent 34410, у него и частоты до кГц, и точность интервала выше.


          1. MacIn
            09.06.2015 19:28
            +1

            Ясно, спасибо. Нет, «для бедных» уж лучше тогда С1-72.


  1. Alexeyslav
    10.06.2015 08:39
    +2

    Странно, а мне первая мысль в голову пришла использовать регистры сдвига, тогда можно было бы обойтись ардуинкой за 2$. Те самые 74HC595 для вывода, и 74HC165N для ввода… тогда от ардуины надо было бы всего 4-5 проводов для управления регистрами, а плату с регистрами можно было разместить прямо на разъёме прибора, избавившись от длинного шлейфа. А если взять еще esp8266 прикрутить… то можно было бы продавать такой переходник за сотни зеленых денег избавится от шлейфа вообще.
    Ладно если импортозамещение тогда и там и там использовать 561ИР9, их правда поболее надо будет т.к. они 4-битные.


    1. andrey_nado Автор
      10.06.2015 11:02

      Сдвиговые регистры я бы использовал только в случае несовместимости по уровням входов/выходов. Нам в нашем случае показалось удобным держать всю электронику в одном месте. Но спасибо за наводку, будем иметь в виду.


      1. Alexeyslav
        10.06.2015 11:43
        +1

        Они зато здорово сокращают количество жил которое необходимо тянуть к прибору.


    1. Chupakabra303
      10.06.2015 11:22
      +2

      Некоторое время назад подключал к ПК прибор комбинированный цифровой Щ300, тоже через Arduino Mega. Протокол, правда, взял Modbus RTU, т. к. ардуина работает не только с Щ300, но еще много чего делает, в том числе работает через SPI с огромным массивом реле, через 60(!) микросхем SN74HC595 в одной шине. Заводил тоже в LabVIEW.
      Была даже мысль заменить у Щ300 шаговый переключателя диапазонов на релейную схему, чтобы тоже с ПК диапазоны переключать и в конечном итоге автоматизировать подбор диапазона измерения, но коллеги не одобрили. Т.к. такая модификация не прошла бы метрологическую поверку :)
      image


      1. andrey_nado Автор
        10.06.2015 11:50

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

        Если у Вас будет время и интерес, я готов посотрудничать.


  1. dlinyj
    10.06.2015 13:25
    +1

    Год назад бы пожал бы крепко руку за такую статью. Но в целом она бесценна для всех лаборантов, которые занимаются измерениями и системой их автоматизации.


  1. buratino
    11.06.2015 00:05
    -2

    Не понимаю я таких изобретателей велосипеда.
    «Нет штатных «электронщиков», которые могли бы разработать и спаять плату микроконтроллера» — берите готовое изделие LCard — хочешь на USB, хочешь на PCI,
    с разрядностью от 12 до 24 бит и всякими там сертификатами соответствия,
    А хлам сдать на золото.
    Ну или оставить — для понастальгировать и проверить всякое новомодное.


    1. andrey_nado Автор
      11.06.2015 10:44
      +2

      Лабораторный вольтметр, такой как В7-28, — это не просто АЦП, это ещё схемы интегрирования (усреднения), автоподстройки ноля, шумоподавления и пр., что позволяет получать результат с точностью до 5 цифр.

      АЦП от LCard — хорошие изделия в своей нише, но их назначение ближе к цифровому осциллографу.


  1. buratino
    11.06.2015 11:14

    вот совершенно не понимаю тех, кто ставит минус и не может пройти на сайт к Л-кардам и почитать документацию. 24 бита АЦП — это несколько больше (чем дофига), чем 5 десятичных цифр.

    ЗЫ: если что, я в настоящем я не пользователь Л-карда и даже обижен на них, но мои претензии связаны не с тем, что их продукция что-то плохо мерит.


    1. andrey_nado Автор
      11.06.2015 11:38
      +1

      Если измерять напряжение простым АЦП, то Вы получите шум уже во 2-3 знаке, в первую очередь из-за наводок по цепи питания 50 Гц. АЦП это только часть цифрового вольтметра.


      1. buratino
        11.06.2015 12:05

        я догадываюсь про это, и производители LCard догадываются.
        я немного лажанулся — 24 бита АЦП у них в платах для крейтовой системы, а в обычных — до 16 бит.
        О, и цены у них теперича не то, что давеча www.lcard.ru/products/external/e-502 — 30 тыр.