Главная » Компьютерная электроника
Призовой фонд
на июнь 2017 г.
1. UNI-T UT-71E
ООО Промэлектроника
2. Тестер компонентов LCR-T4
Паяльник
3. 200 руб.
От пользователей

USB переходник для научного вольтметра e24

Довелось мне участвовать в автоматизации эксперимента средствами LabView и одним из устройств, подлежащих автоматизации, оказался четырехканальный 24-разрядный вольтметр e24 от Л-Кард. Он построен на сигма-дельта АЦП AD7714, управляемых универсальным контроллером ATtiny2313. К сожалению, работать такое устройство умеет только по RS232, причем во время работы вольтметр непрерывно передает измеренные значения АЦП, не синхронизируясь с компьютером. В качестве источника питания оно может использовать собственный адаптер на 12 В, либо сам COM-порт, что было бы очень удобно, если бы все производители переходников USB-COM следовали спецификации. Дело в том, что для питания e24 от COM-порта требуется как положительное напряжение на линии RTS (1-й вывод на разъеме прибора), так и отрицательное на DTR (8-й вывод). И вот его-то некоторые переходники не обеспечивают, что не позволяет использовать их для питания. Второй проблемой оказалось, что встроенный в материнскую плату COM-порт неадекватно реагирует на то, что e24 начинает передавать ему данные до полной инициализации. Это вынуждало строго следить за порядком включения - сначала компьютер, и только после полной загрузки - вольтметр. Третьей проблемой оказался способ обмена, непрерывный поток байтов от e24, который еще усугублялся конструкцией имеющегося COM-порта. Это вынудило запускать отдельную программу (тоже на LabView), постоянно мониторящую COM-порт и перекодирующую данные с e24 в некие "глобальные переменные" а оттуда - в основную программу.

<Схема переходника, стандартный v-usb   UART<->RS232 на max232   подача питания на 1-й вывод и, через канал max232 - на 8-й

Вдоволь намучившись со всем этим, я решил собрать переходник на e24, лишенный этих недостатков. Невысокие требования к скорости обмена позволили обойтись простейшей реализацией USB-HID на контроллере ATmega88 (он был под рукой, но при желании несложно пересобрать и под другие). Итак, ядро переходника составил контроллер. Далее, для совместимости с RS232 пришлось добавить преобразователь уровней MAX232. Как я уже упоминал, e24 требует двуполярного питания: +3...+12 В на выводе 1 и -3...-12 В на выводе 8. Для этого идеально подошел незадействованный элемент MAX232 и транзистор VT1. Я использовал IRLML9303, но мощности таковы, что можно использовать любой p-канальный полевой или pnp биполярный (естественно, придется добавить ограничительный резистор в цепь базы) и даже обойтись без транзистора. Впрочем, последнее не отличается надежностью. Резистор R1 обеспечивает наличие нулевого потенциала при закрытом транзисторе и может выбираться в широких пределах от 1 кОм до 1 МОм. Для разводки платы оказалось удобным управлять питанием e24 с помощью вывода PD7 (задается макроопределением PWR в файле firmware/main.c и может быть переназначен на любой другой). В остальном схема стандартна: кварц на 12 МГц (проект v-usb поддерживает ряд других частот вплоть до 20 МГц, но придется пересобрать прошивку) с конденсаторами 22 - 60 пФ, преобразователи уровней USB D+/D- c 5 В до 3.6 В на стабилитронах и резисторах, конденсаторы на MAX232. В качестве корпуса для переходника я применил корпус от сломанного переходника USB-COM. О чем почти сразу пожалел, поскольку места внутри едва хватило, пришлось даже отказаться от разъема программирования, оставив лишь дорожки, к которым можно подпаять соответствующие выводы программатора.

Следующей задачей стало написание драйвера. Нежелание связываться с "глобальными переменными" LabView подтолкнуло к поискам альтернативного представления результата. Для АЦП наиболее прозрачным выглядит представление каждого канала как обычного текстового файла по аналогии с представлением устройств в Linux'е. Найти как реализовать что-то вроде файловой системы tmpfs мне не удалось, поэтому сделал простое отображение файла в память. Как показали эксперименты, такой способ в 5 - 10 раз быстрее, чем стандартный вроде printf. Правда, на виртуальной машине почему-то медленнее. Заставлять кого-то давать самописной программе права администратора без крайней необходимости никто не станет, поэтому вместо очевидного расположения файлов в /dev/e24/ было выбрано /home/dev/. Стандартного механизма отображения файла в память в Си нет, так что пришлось разбираться с уникальными для разных операционных систем. И если для основной все просто - есть man и куча примеров, то документация для Windows откровенно разочаровала. Впрочем, завернуть особенности работы с отображаемыми в память файлами в структуру данных и две функции (одна на открытие, вторая на закрытие) мне удалось. Сам драйвер было бы неплохо реализовать в виде демона (daemon, или близкое service), но в windows нет даже элементарного fork(). Что ж, остается добавить драйвер в автозагрузку без дополнительной защиты и средств управления. Впрочем, основные сигналы там присутствуют так что на штатное завершение работы при выключении компьютера можно рассчитывать.

Отображение результатов через обычные текстовые файлы позволяет при чтении обойтись стандартными средствами системы. Однако в ряде случаев может потребоваться настройка какого-либо канала e24 на другой диапазон или частоту обмена. Попытки реализовать это стандартным способом - через fifo-файл ни к чему не привели так что самым простым оказалось каждый раз дергать переходник, благо нужно это достаточно редко. Кто бы сомневался что простого доступа к USB среда LabView не обеспечивает! Зато поддерживает сторонние динамические библиотеки (*.so / *.dll) и даже выдает подсказки по имеющимся в них функциям. Таким образом драйвер оброс отдельной динамической библиотекой для реинициализации (char e24_reinit(void)), конфигурации (char e24_configure(uint8_t, uint16_t, float, uint8_t, uint8_t)), чтения выбранного канала (средствами драйвера, а не прямым доступом к e24! double e24_read(uint8_t)) и, поскольку из справки по библиотеке нельзя получить более точную подсказку о назначнии и допустимом диапазоне параметров, вызов подсказки (char* e24_help(void)).

Таким образом получился переходник и драйвер, обеспечивающие удобную работу с этим вольтметром поддерживающие горячее подключение и не требующие от пользователя лишних телодвижений. Разумеется, такой переходник обладает и недостатками. Как и любое другое усложнение конструкции, он несколько снижает общую надежность системы (впрочем, доступность схемы, прошивки и исходных кодов значительно упрощают ремонт), не обеспечивает максимальной скорости, допустимой для e24 и не позволяет работать с несколькими вольтметрами одновременно. Чтобы исправить последний недостаток можно добавить в исходный код драйвера поддержку нескольких переходников с идентификацией не только по VID/PID, но и по полному пути или каким-то другим параметрам. Кроме того можно воспользоваться особенностью самого e24 возможностью записи в его EEPROM. Например, туда можно записать для каждого канала индивидуальное имя или номер, соответствуюий файлу, в который данные будут отображаться. Для моих задач это было несущественно, да и описанная ранее необходимость подпаивать разъем программирования для перепрошивки убедили остановиться на этом варианте.

Список радиоэлементов

Обозначение Тип Номинал Количество ПримечаниеМагазинМой блокнот
DD1 МК AVR 8-бит
ATmega88
1 Поиск в FivelВ блокнот
DD2 ИС RS-232 интерфейса
MAX232
1 Поиск в FivelВ блокнот
VT1 MOSFET-транзистор
IRLML9303
1 Поиск в FivelВ блокнот
D1, D2 Стабилитрон3.3 - 3.6 В1 Поиск в FivelВ блокнот
R1* Резистор1к - 1М1 Поиск в FivelВ блокнот
R2, R3 Резистор20 - 100 Ом1 Поиск в FivelВ блокнот
R4 Резистор
1.5 кОм
1 Поиск в FivelВ блокнот
C1 - C4 Конденсатор1 мкФ4 Поиск в FivelВ блокнот
C5, C6 Конденсатор22 пФ1 Поиск в FivelВ блокнот
ZQ1 Кварцевый резонатор12 МГц1 Поиск в FivelВ блокнот
не показан Конденсатор1 - 10 мкФ1 конденсатор по питаниюПоиск в FivelВ блокнот
XS1 Разъем COMDB-9F1 Поиск в FivelВ блокнот
XS2 Разъем USB1 на кабелеПоиск в FivelВ блокнот
Добавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

Теги:

Опубликована: 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (3) | Я собрал (0) | Подписаться

0
Публикатор #
На форуме автоматически создана тема для обсуждения статьи.
Ответить
0
Kamikadza #
Кстати на счет ошибок при включении компьютера и COM порта. Есть такая программа называется COM disable. С её помощью можно отрубить в системе возможность использования COM мышек. При включении, если на COMе появляются данные система понимает это как мышь. Сам сталкивался с подобной штукой, пофиксил именно этим софтом.
Ответить
0

[Автор]
COKPOWEHEU #
Если это оно https://support.microsoft.com/ru-ru/help/819036/overview-of-the-comdisable-tool
то указана совместимость только до winXP. Для моей задачи может и подошло бы, но переходник как-то универсальнее: проверен на winXP, win7, Debian. Сейчас устройство достаточно активно используется, так что проверять альтернативы буду только если сломается. Но спасибо за указание вероятной причины проблем.
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическая мощность?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

МиниПК MK809V - 4 ядра, Android 4.4.2
МиниПК MK809V - 4 ядра, Android 4.4.2
Конструктор регулируемого преобразователя напряжения LM317 Raspberry Pi 2
вверх