- PVSM.RU - https://www.pvsm.ru -

Штангенциркуль VINCA DCLA-0605 поддерживает передачу данных на ПК только через проприетарный кабель. Можно, конечно, купить адаптер, но это не так интересно, поэтому я решил разобраться с принципом работы RS232 и реализовать собственное решение.
Примечание переводчика: данный перевод содержит две небольших статьи от двух разных авторов. Причиной включения второй стало желание наиболее полно раскрыть суть используемого в штангенциркулях протокола передачи данных.
1 [1] при помощи дополнительных 4 бит, использованных для флагов. Один флаг представляет единицы измерения (дюймы/мм), а другой знак (при 1 отрицательный).
Когда с протоколом я разобрался, то был готов приступать к работе над аппаратной частью своего решения. Я хотел использовать платформу ESP, чтобы иметь возможность отправлять данные по Wi-Fi, но последовательная передача работает на 1.2 В, а ESP на 3.3 В. Тогда я занялся поиском схем для сдвига уровня, но большинство встречавшихся в сети вариантов основывались на мосфете 2N7000, а 1.2 В было недостаточно для активации его затвора. Меня интересовал мосфет с более низким напряжением между Gate (затвором) и Source (истоком), но при этом я не хотел использовать особую деталь. В конечном счёте я понял, что можно просто взять биполярный 2N2222. Так я немного терял в быстродействии, но его всё равно вполне достаточно для цифровых уровней 1 и 0.

Пользовательский интерфейс здесь оформлен в стиле Excel, позволяя собирать и именовать полученные в ходе измерений данные. Основной дисплей постоянно обновляется через WebSocket, а показания измерений можно вставлять кнопкой или с помощью пробела.
Web-интерфейс сжат и сохранён на флеш-память ESP. При этом я использовал библиотеку, которую поддерживаю для других IoT-проектов. Она обеспечивает следующие возможности:
/wifi для установки учётных данных Wi-Fi.В линейке продуктов VINCA есть три адаптера:
Во всех них использован разъём micro-USB, но при сравнении с дюймовыми цифровыми индикаторами DIGR-0105 я обнаружил у штангенциркулей кое-какие отличия:
Было несложно добавить поддержку для тех и других, к тому же я считаю, что прочие модели вполне должны заработать, ну или потребуют незначительных модификаций.

Адаптер, запитанный от внешнего аккумулятора. Используется по Wi-Fi

Адаптер также используется по Wi-Fi. При этом он подключён к цифровому индикатору и запитан напрямую от планшета
Оригинальный кабель от Clockwise Tools распознаётся как USB-клавиатура и при нажатии кнопки вводит измерения. При использовании ESP32-S2 эту функциональность также можно получить (у ESP8266 нет нативной поддержки USB).

Таблицы Google на Android с адаптером, подключённым как USB-клавиатура

На прошлой неделе я начал писать новую прошивку, которая позволит цифровому индикатору MSP430 Launchpad считывать данные различных цифровых линеек и штангенциркулей. В своей последней статье [5] я говорил о необходимости изменения оборудования и затрагивал высокоуровневые требования.
После сборки и тестирования платы адаптера я начал изучение форматов данных, используемых среди небольшого ассортимента штангенциркулей, который смог раздобыть. С помощью моего проверенного Open Logic Sniffer я идентифицировал два разных протокола. В цифровом индикаторе BG Micro использовался 48-битный протокол, описанный в замечательной статье Chinese Scales [6] господина Shumatech. На удивление, ни в одном другом штангене этот протокол не задействовался.
Вместо двух 24-битных потоков, разделённых коротким интервалом, они передавали один такой поток, разбитый на шесть фрагментов по 4 бита каждый. Кроме того, скорость передачи в сравнении с 48-битными линейками была почти в 20 раз меньше. Если последние передавали данные примерно с частотой 80 КГц, то первые делали это в ленивом ритме со скоростью менее 4 КГц.

Штангенциркуль Harbor Freight отправил данные с помощью шести 4-битных фрагментов
В результате своих поисков я наткнулся на статью с сайта robotroom.com, где Дэвид описывает аналогичный протокол, называемый BCD 7, в котором используется семь 4-битных фрагментов. Каждый из первых шести фрагментов служит для представления десятичной цифры от 0 до 9, а последний содержит метаданные о её положении. Немного поэкспериментировав, я, к своей досаде, обнаружил, что в штангенциркулях использовался другой протокол. Порывшись в интернете, я так и не нашёл полезной информации, и мне оставалось лишь пойти путём реверс-инжиниринга этого протокола.
Примечание: BCD означает «Binary Coded Decimal» (двоично закодированное десятичное значение). С помощью этой схемы каждая десятичная цифра представляется посредством 4-битного фрагмента. Например, десятичное число 256, или 28, в двоичном виде будет выглядеть как 10000000. В формате BCD это будет 0010, 0101, 0110 (2,5,6). Отрицательные числа представляются с использованием дополнительного кода. Этот формат менее компактен, чем прямое двоичное представление, но для человека понятнее (на мой взгляд, он понятен в той же степени, что и поток единиц с нулями).
В тот момент основная часть прошивки уже работала, так что контроллер мог считать необработанный поток в 32-битное целое и отправить его на UART. Мне лишь нужно было установить точку останова в нужном месте и начать перемещать штангенциркуль. Я сразу заметил, что всякий раз, когда экран обнуляется, поток данных показывает все 0. Это означало, что в отличие от остальных цифровых линеек штангены передают только относительное положение. Чтобы разобраться получше, я начал записывать указываемые на экране положения и поступающий со штангенциркуля необработанный поток данных в таблицу, аналогичную показанной ниже.
Таблица 1: Необработанные данные со штангенциркуля
| Поток вывода | Показания | Единицы измерения | |
|---|---|---|---|
| 000000000000000000000000 | 0 | мм | |
| 001001100000000000000000 | 1.0 | мм | |
| 111100100000000000000001 | 1.0 | мм | |
| 010000000000000000000000 | 0.02 | мм | |
| 100000000000000000000001 | 0.0005 | дюйм | |
| 101111000000000000000000 | 0.2 | мм | |
| 000010000000000000000001 | .008 | дюйм | |
| 010000000000000000001000 | -.02 | мм | |
| 010000000000000000001001 | -.001 | дюйм | |
| 001000000000000000000001 | 0.002 | дюйм |
При внимательном рассмотрении результатов вырисовываются кое-какие закономерности:
inch, когда установлен, и на режим mm в противном случае.
Вооружившись этой информацией, я решил поближе взглянуть на биты. Сначала на режим mm, а потом и на inch. Результат показан в таблице:
Таблица 2: «Нормализованные» данные
| Двоичное значение | Десятичное | Показания | Единицы измерения | |
|---|---|---|---|---|
| 000000000000000000000000 | 0 | 0 | мм | |
| 000000000000000001100100 | 100 | 1.0 | мм | |
| 000000000000000000001010 | 10 | 0.1 | мм | |
| 000000000000000000000001 | 1 | 0.01 | мм | |
| 000000000000000000000010 | 2 | 0.02 | мм | |
| 000100000000000000000010 | 2 | -0.02 | мм | |
| 100000000000000000000100 | 4 | 0.002 | дюйм | |
| 100000000000000000001000 | 8 | 0.004 | дюйм | |
| 100000000000011111010000 | 2000 | 1.000 | дюйм | |
| 100000000000011111010001 | 2001 | 1.0005 | дюйм | |
| 100000000000111110100000 | 4000 | 2.000 | дюйм | |
| 100100000000111110100000 | 4000 | -2.000 | дюйм |
Эти данные предполагают, что в режиме mm положение отправляется в сотых миллиметра с использованием прямого двоичного кодирования для положительных и отрицательных чисел. В режиме inch штангенциркуль использует 2000 делений на дюйм (то есть положение передаётся в ½ тысячных). Поняв это, я смог начать работать над структурой прошивки, о чём напишу в следующей статье.
Примечание: я не смог определить, имеют ли какое-либо значение 22-й и 23-й биты. Кроме того, ничто не говорит о задействовании 20 первых бит. Используя 16 бит, штангенциркуль может проводить измерения в диапазоне более 65 см или 32 дюймов. Для DRO это неважно, поскольку я использую 32-битные целые со знаком (чтобы включить поддержку 24-битных цифровых линеек). В прочих случаях 16-битного целого должно быть достаточно для большинства измерений.
Telegram-канал с полезностями [7] и уютный чат [8]
Автор: Дмитрий Брайт
Источник [9]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/diy-ili-sdelaj-sam/380279
Ссылки в тексте:
[1] 1: #anchorid1
[2] vinca_reader.local: http://vinca_reader.local/
[3] здесь: https://www.yuriystoys.com/2013/07/chinese-caliper-data-format.html
[4] ↩: #anchorid
[5] последней статье: http://www.yuriystoys.com/2013/07/MSP430-mixed-scale-dro.html
[6] Chinese Scales: http://www.shumatech.com/support/chinese_scales.htm
[7] Telegram-канал с полезностями: https://inlnk.ru/dn6PzK
[8] уютный чат: https://inlnk.ru/ZZMz0Y
[9] Источник: https://habr.com/ru/post/695840/?utm_source=habrahabr&utm_medium=rss&utm_campaign=695840
Нажмите здесь для печати.