Наша лаборатория занимается, в числе прочего, измерением электросопротивления различных образцов. Основные рабочие лошадки нашей измерительной установки — цифровые мультиметры американской компании 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А.
Всех заинтересованных лиц приглашаем на страницу проекта с исходными текстами, там же имеется ссылка на готовые бинарные сборки и документацию.
Спасибо за внимание!
Комментарии (19)
AndreyDmitriev
09.06.2015 17:08Эх, ностальгия! Лет двадцать назад мы подключали такие вольтметры к ДВК через КАМАК. Да, шлейфы из проводов были знатные. Теперь всё проще. Такой вопрос — а Ардуинка не является ли «бутылочным горлышком»? Я это к тому, что частота опроса при таком решении максимально возможная для этого прибора? Можно ведь взять плату цифровых входов-выходов, типа, скажем NI PCI-6509 и получить тоже самое — будет ли такое решение более быстрым («бюджетным» оно ни разу не будет — это понятно) по сравнению с ардуинкой (если не делать буферизацию данных в контроллере)?
andrey_nado Автор
09.06.2015 17:21+2У нас тоже раньше использовался КАМАК + контроллер на ISA шине.
Одно измерение производится в течении 0,3-5 секунд, в среднем — раз в секунду. И прошивка не производит периодический опрос, вместо этого по окончании каждого измерения В7-28 генерирует цифровой импульс, по которому срабатывает аппаратное прерывание в ATmega. Объём данных по последовательному порту небольшой, 9600 бод/сек хватает за глаза.
Бутылочным горлышком мог бы стать малый размер ОЗУ — всего 8 кбайт, но нам хватило, даже есть буфер для хранения 512 измерений.MacIn
09.06.2015 19:12Хм… интересно, можно ли из такой пары — цифровой вольтметр + интерфейс к ПК сделать осцилограф для сигналов низкой частоты при должной частоте измерений? Или измерение фиксированно по времени (0,3-5,0с как у вас указано)?
andrey_nado Автор
09.06.2015 19:20В7-28 — это если у Вас частоты порядка 0,1 Гц и ниже. Правда, интервал между измерениями будет «плавать» на несколько процентов. В качестве «осциллографа для бедных» гораздо лучше себя покажет Agilent 34410, у него и частоты до кГц, и точность интервала выше.
Alexeyslav
10.06.2015 08:39+2Странно, а мне первая мысль в голову пришла использовать регистры сдвига, тогда можно было бы обойтись ардуинкой за 2$. Те самые 74HC595 для вывода, и 74HC165N для ввода… тогда от ардуины надо было бы всего 4-5 проводов для управления регистрами, а плату с регистрами можно было разместить прямо на разъёме прибора, избавившись от длинного шлейфа. А если взять еще esp8266 прикрутить… то можно было бы
продавать такой переходник за сотни зеленых денегизбавится от шлейфа вообще.
Ладно если импортозамещение тогда и там и там использовать 561ИР9, их правда поболее надо будет т.к. они 4-битные.andrey_nado Автор
10.06.2015 11:02Сдвиговые регистры я бы использовал только в случае несовместимости по уровням входов/выходов. Нам в нашем случае показалось удобным держать всю электронику в одном месте. Но спасибо за наводку, будем иметь в виду.
Alexeyslav
10.06.2015 11:43+1Они зато здорово сокращают количество жил которое необходимо тянуть к прибору.
Chupakabra303
10.06.2015 11:22+2Некоторое время назад подключал к ПК прибор комбинированный цифровой Щ300, тоже через Arduino Mega. Протокол, правда, взял Modbus RTU, т. к. ардуина работает не только с Щ300, но еще много чего делает, в том числе работает через SPI с огромным массивом реле, через 60(!) микросхем SN74HC595 в одной шине. Заводил тоже в LabVIEW.
Была даже мысль заменить у Щ300 шаговый переключателя диапазонов на релейную схему, чтобы тоже с ПК диапазоны переключать и в конечном итоге автоматизировать подбор диапазона измерения, но коллеги не одобрили. Т.к. такая модификация не прошла бы метрологическую поверку :)
andrey_nado Автор
10.06.2015 11:50У нас Щ300 не используются, но было бы интересно адапировать прошивку для этого вольтметра. Работа свёдется к клонированию проекта v7-28-arduino и его модификации.
Если у Вас будет время и интерес, я готов посотрудничать.
dlinyj
10.06.2015 13:25+1Год назад бы пожал бы крепко руку за такую статью. Но в целом она бесценна для всех лаборантов, которые занимаются измерениями и системой их автоматизации.
buratino
11.06.2015 00:05-2Не понимаю я таких изобретателей велосипеда.
«Нет штатных «электронщиков», которые могли бы разработать и спаять плату микроконтроллера» — берите готовое изделие LCard — хочешь на USB, хочешь на PCI,
с разрядностью от 12 до 24 бит и всякими там сертификатами соответствия,
А хлам сдать на золото.
Ну или оставить — для понастальгировать и проверить всякое новомодное.andrey_nado Автор
11.06.2015 10:44+2Лабораторный вольтметр, такой как В7-28, — это не просто АЦП, это ещё схемы интегрирования (усреднения), автоподстройки ноля, шумоподавления и пр., что позволяет получать результат с точностью до 5 цифр.
АЦП от LCard — хорошие изделия в своей нише, но их назначение ближе к цифровому осциллографу.
buratino
11.06.2015 11:14вот совершенно не понимаю тех, кто ставит минус и не может пройти на сайт к Л-кардам и почитать документацию. 24 бита АЦП — это несколько больше (чем дофига), чем 5 десятичных цифр.
ЗЫ: если что, я в настоящем я не пользователь Л-карда и даже обижен на них, но мои претензии связаны не с тем, что их продукция что-то плохо мерит.andrey_nado Автор
11.06.2015 11:38+1Если измерять напряжение простым АЦП, то Вы получите шум уже во 2-3 знаке, в первую очередь из-за наводок по цепи питания 50 Гц. АЦП это только часть цифрового вольтметра.
buratino
11.06.2015 12:05я догадываюсь про это, и производители LCard догадываются.
я немного лажанулся — 24 бита АЦП у них в платах для крейтовой системы, а в обычных — до 16 бит.
О, и цены у них теперича не то, что давеча www.lcard.ru/products/external/e-502 — 30 тыр.
qbertych
Здорово! А как примерно выглядит система команд вольтметра?
Stalker_RED
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: хм, а теги я уже не могу.
andrey_nado Автор
В простейшем случае, например, так (измерение постоянного напряжения):
> MEASURE:VOLTAGE?
< 1.2345E+01
Галочка вправо — команда, влево — ответ устройства. Но система команд SCPI позволяет и более тонкие способы управления.