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

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

Формат ASCII

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

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

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

-7.931,96.105;-7.906,96.129;-7.906,96.105;

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

* Это, конечно, не показатель точности измерений АЦП. Значение «1.2345» не означает, что АЦП смог измерить приложенное напряжение с точностью 0.0001V. Номинальное разрешение этого Tibbit составляет 13 бит (12 бит плюс знак), то есть номинальный «шаг» измерения АЦП равен 201.14V / 8192 = 0.02455V (для несимметричного режима). Однако эффективное разрешение составляет 11 бит (10 бит плюс знак), поэтому точность примерно 201.14V / 2048 = 0.09821.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

05 18 BF 38 05 16 BF 36 05 16 BF 37

Интерпретируются эти данные так:

  • Сначала объедините пары байтов в 16-разрядные слова. Получится: 0x0518, 0xBF38, 0x0516, 0xBF36, 0x0516, 0xBF37.
  • Затем выделите поле канала (биты 15 и 14) и знак (бит 13). В дифференциальном режиме получится: CH1: + 0x0518, CH2: - 0xBF38, CH1: + 0x0516, CH2: - 0xBF36, CH1: + 0x0516, CH2: - 0xBF37.
  • Последний шаг - пересчитать эти значения в соответствующие напряжения (по формулам из таблицы 10): CH1: + 32.021V, CH2: - 4.887V, CH1: + 31.972V, CH2: - 4.936V, CH1: + 31.972V, CH2: - 4.911V.

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

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

Этот формат - гибрид форматов ASCII и двоичного:

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

Ниже показан пример «hex-дампа» из трёх групп по два измерения в каждой (с теми же входными сигналами, что и в предыдущем примере):

30 35 31 38 2C 42 46 33 38 3B 30 35 31 36 2C 42
46 33 38 3B 30 35 31 36 2C 42 46 33 38 3B
0518,BF38;0516,B
F38;0516,BF38;

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

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