Форматы вывода данных

Tibbit #43-1 поддерживает три формата вывода данных: ASCII, двоичный и шестнадцатеричный. Какой формат использовать при низких частотах выборки, зависит только от ваших предпочтений и задач. Однако если вы планируете непрерывную потоковую передачу данных на высокой частоте выборки, Tibbo рекомендует двоичный формат - особенно если нужная частота выборки близка к максимальному пределу для режимов ASCII и шестнадцатеричного (см. Технические характеристики).

Формат ASCII

В формате ASCII микроконтроллер PIC, установленный на модуле, вычисляет фактические напряжения по двоичным данным измерений, полученным от АЦП, и выводит эти напряжения в удобочитаемом десятичном виде. Каждое число округляется до четырёх знаков после запятой*.

В выводе напряжения каналов разделяются запятой («,»), а каждая группа выборки заканчивается точкой с запятой («;»). Термин «группа выборки» обозначает группу включённых в данный момент каналов. В несимметричном режиме при включённых всех каналах в группе будет четыре измерения, выполняемых одно за другим. Если часть каналов отключена, в каждой группе будет меньше четырёх измерений.

Ниже показан пример вывода из трёх групп по два измерения в каждой:

3.2800,-4.2713;3.3120,-4.2600;3.1421,-4.1701;

Обратите внимание: помнить, какие каналы включены, должно само приложение, так как в этом режиме номера каналов не выводятся. Например, два элемента каждой группы в приведённом выше выводе могут относиться к CH1 и CH2, или к CH1 и CH3, или к CH1 и CH4 - по самому выводу это определить нельзя.

* Это, разумеется, не показатель точности измерений АЦП. Значение «1.2345» не означает, что АЦП смог измерить поданное напряжение с точностью 0.0001V. Поскольку эффективное разрешение этого модуля составляет 11 бит (10 бит плюс знак), фактический «шаг» измерения АЦП равен 20V / 2048 = 0.0098V (для несимметричного режима).

Двоичный формат

Двоичный формат вывода данных самый компактный, поэтому он рекомендуется для высоких частот выборки. Значение, полученное с канала АЦП, и номер канала кодируются всего в 16 битах данных. Биты 15 и 14 кодируют номер канала, а биты 13-0 содержат результат преобразования АЦП. Каждое 16-битное слово отправляется как два байта; первым отправляется старший байт.

Номер канала кодируется так:

Таблица 6 - кодирование номера канала
КаналB15B14
CH100
CH201
CH310
CH411

Кодирование данных АЦП зависит от того, в каком режиме работает Tibbit #43-1 - несимметричном или дифференциальном, как описано ниже:

Несимметричный режим

Таблица 7 - структура данных двоичного формата, несимметричный режим
B15B14B13B12B11B10B9B8B7B6B5B4B3B2B1B0
Канал АЦПSIGNВсегда 0 Данные преобразования АЦП без знака ([D11:0])

Бит знака равен 0 для положительных чисел (измерения выше 0V) и 1 для отрицательных (измерения ниже 0V). Бит B12 всегда равен нулю.

Для преобразования данных в соответствующие значения напряжения используйте следующие формулы:

Таблица 8 - формулы преобразования двоичных данных в напряжение, несимметричный режим
Положительное число (SIGN = 0)Vi = (D[11:0] / 4095) × 10V
Отрицательное число (SIGN = 1)Vi = -((4095 - D[11:0]) / 4095) × 10V

Дифференциальный режим

Таблица 9 - структура данных двоичного формата, дифференциальный режим
B15B14B13B12B11B10B9B8B7B6B5B4B3B2B1B0
Канал АЦПSIGN Данные преобразования АЦП без знака ([D12:0])

Бит знака равен 0 для положительных чисел (измерения выше 0V) и 1 для отрицательных (измерения ниже 0V).

Для преобразования данных в соответствующие значения напряжения используйте следующие формулы:

Таблица 10 - формулы преобразования двоичных данных в напряжение, дифференциальный режим
Положительное число (SIGN = 0)Vi = (D[12:0] / 8191) × 20V
Отрицательное число (SIGN = 1)Vi = -((8191 - D[12:0]) / 8191) × 20V

Ниже показан пример вывода в виде «hex-дампа» из трёх групп по два измерения в каждой:

09 9D 66 66 09 9A 66 65 09 9B 66 68

Вот как интерпретировать эти данные:

  • Сначала объедините пары байтов в 16-битные слова. Получится: 0x099D, 0x7666, 0x099A, 0x7665, 0x099B, 0x7668.
  • Затем выделите поле канала (биты 15 и 14) и знак (бит 13). В несимметричном режиме получится: CH1: + 0x99D, CH2: - 0x1666, CH1: + 0x99A, CH2: - 0x1665, CH1: + 0x99B, CH2: - 0x1668.
  • Последний шаг - преобразовать эти значения в соответствующие напряжения (по формулам из таблицы 10): CH1: + 6.0098V, CH2: - 6.0000V, CH1: + 6.0024V, CH2: - 6.0024V, CH1: + 6.0049V, CH2: - 5.9951V.

Двоичный формат вывода данных предельно компактен, но нужно следить, чтобы не потерять ни одного байта данных. Хотя номер канала закодирован в выводе, пропуск единственного байта данных приведёт к постоянному «сдвигу интерпретации данных».

Шестнадцатеричный (HEX) формат

Этот формат представляет собой гибрид форматов ASCII и двоичного:

  • Как и в формате ASCII, отдельные значения разделяются запятыми («,»), а группы выборки - точками с запятой («;»).
  • Как и в двоичном формате, каждое значение передаётся в 16 битах (2 байтах) данных, в которых закодированы номер канала, знак и измеренное напряжение. Отличие от двоичного формата в том, что эти 16-битные слова отправляются как «HEX-строки», то есть «печатаются» в шестнадцатеричном виде символами ASCII.

Ниже показан пример вывода в виде «hex-дампа» из трёх групп по два измерения в каждой:

30 39 39 42 2C 36 36 36 41 3B 30 39 39 43 2C 36
099B,666A;099C,6
36 37 32 3B 30 39 39 42 2C 36 36 36 39 3B
672;099B,6669;

HEX-формат - хороший компромисс между форматами ASCII и двоичным. Как и формат ASCII, он позволяет восстановить синхронизацию, если часть символов была пропущена. В отличие от двоичного формата, он использует печатаемые символы ASCII, что может быть удобно. При этом HEX-вывод немного компактнее ASCII, поэтому позволяет достичь чуть более высокой частоты выборки.

Исходный материал Tibbo обновлён 13 октября 2022Оригинал на docs.tibbo.com · Сообщить об ошибке