LTC2485 Формат данных I2C

Я пытаюсь понять формат данных I2C 24-битного ACD (LTC2485).

В спецификации сказано, что он возвращает 4 байта (32-битное целое число), но неясно, где находятся 24 бита, которые я ищу.

Вот чего я не понимаю:

Роль битов 31 и 30

Два старших значащих бита (30, 31) используются для индикации превышения или недостаточности диапазона. Они также используются, чтобы сказать, в какой «четверти» полного диапазона находится сигнал.

В документации сказано: если установлен бит 31, то сигнал находится между 0 В и +Vref, в противном случае сигнал находится между -Vref и 0 В.

Я понимаю это так: если сигнал находится между 0 В и + Vref, код находится между 2 ^ 23 и 2 ^ 24, а если сигнал находится между -Vref и 0 В, код находится между 0 и 2 ^ 23.

Аналогичные рассуждения можно использовать для бита 30 и Vref/2. Вот как работает двоичное число. Оба бита могут использоваться, чтобы указать, в какой «четверти» полного диапазона находится сигнал.

Исходя из этого, я предполагаю, что бит 31 — это бит 23 сигнала, бит 30 соответствует биту 22 и так далее. Таким образом, первые три байта должны быть моим 24-битным кодом.

Однако в документации позже говорится:

Второй бит является старшим битом (MSB) результата.

Что будет означать, что результат сдвинут на один бит. Но позже:

Функции этих двух битов приведены в таблице 1. Следующие 24 бита содержат результаты преобразования в двоичном формате с дополнением до двух. Оставшиеся шесть битов являются младшими подмладшими битами ниже 24-битного уровня.

Что указывало бы на то, что результат сдвинут на два бита, а биты 31 и 30 избыточны (см. мое объяснение выше).

И, наконец, приведенный пример кода использует... 32 бита вместо 24.

signed int32 x;
// Reading X
x ^= 0x80000000;
voltage = (float) x;
voltage = voltage * 5.0 / 2147483648.0;// Multiply by Vref, divide by 2^31

В результате я чувствую себя потерянным. Учитывая 4 байта, которые я получаю (давайте назовем их байтами от 0 до 3 в порядке поиска), как мне получить напряжение, измеренное АЦП? Какова роль «Оставшихся шести битов являются Sub LSB ниже 24-битного уровня»?

Спасибо, что прочитали меня. Документация части доступна здесь . Пояснения к формату данных I2C приведены на стр. 15.

Ответы (3)

LTC2485 представляет собой преобразователь «24-битный знак плюс». Итак, официально в представлении дополнения до 2 25 бит.

Дополнение до 2 — это биты от 30 до 0. Младшие 6 битов не являются частью 25 битов (своего рода бонусные мусорные биты, которые, вероятно, не имеют большого значения в большинстве ситуаций).

Бит 31 является более или менее ** дополнением к биту 30 при нормальных условиях, когда вход находится в пределах нормального рабочего диапазона** ( 0,5 В р Е Ф < В я Н < 0,5 В р Е Ф ). Если биты 30/31 совпадают, а результирующие биты соответствуют показанным в таблице 3 (все нули с обоими высокими или все 1 с обоими низкими), вы знаете, что входное напряжение больше или меньше, чем опорное напряжение (условие превышения диапазона).

Часто это указывает на сломанный датчик или аналогичную проблему, поэтому вам нужно решить ее надлежащим образом.

** за исключением возможной разницы сразу при нулевом вводе.

введите описание изображения здесь

введите описание изображения здесь

Таким образом, ваш 25-битный результат со знаком можно получить, сдвинув влево 32-битное число на один бит и маскируя наименее значимые (теперь) 7 бит.

Наименее значащие 6 бит будут в значительной степени полностью шумовыми, но если вы выполняете вычисления с двойной точностью или 64-битной смещенной фиксированной точкой, их использование, вероятно, не требует дополнительных затрат (вы можете рассматривать результат как результат). 31-битное число со знаком после сдвига влево). ENOB (эквивалентное число битов) большинства АЦП не лучше 20 бит, и это в идеальных условиях.

Спасибо за ваш ответ. Итак, 24 бита + знак означает, что у меня есть 24 бита между 0V и +Vref и 24 бита между -Vref и 0V? Тогда какова роль 6-битного младшего разряда? Зачем использовать биты от 30 до 0? Почему бы не разделить на 2^24 вместо 2^31? Два дополнения к 24-битному числу должны быть 24-битным числом?
Надеюсь, я полностью ответил в своем редактировании. Это 25-битное число, а не 24-битное, в «дополнительном представлении 2 ». Где +FS = 0b01111111111111111111111111, а -FS = 0b1000000000000000000000000000.
Очень интересно. Это означает, что у вас есть выбор между дополнением до двух и двоичным смещением. Я не уверен, насколько это полезно, но биты есть, поэтому они включили эту функцию

Бит 31 является знаковым битом = здесь он ВЫСОКИЙ, если измеренное напряжение положительное (>= 0 В), в противном случае он НИЗКИЙ. Это не часть фактической стоимости. Следовательно x ^= 0x80000000;, он очищает этот бит от считанного значения.

Допустим, вы подключаете 1,5-вольтовую батарею к входу вашего датчика, при этом + подключен к контакту Vin+ , этот бит будет ВЫСОКИМ. Затем поменяйте стороны батареи: подключите полюс + к Vin- пину, бит 31 будет НИЗКИМ.

Что касается бита 30, важная часть заключается If both bits are LOW, the input voltage is below –FS and the following 24 bits are set to HIGH to indicate an underrange conditionв том, что вам просто нужно проверить эти две возможности, а затем просмотреть биты с 29 по 6, которые представляют собой интересные 24 бита вашего результата.

Я должен признать, что The remaining six bits are Sub LSBs below the 24-bit levelчасть немного неясна. Может это бессмысленный шум?

Спасибо за ваш ответ. Ну, я тоже потерялся с LSB. Кажется, в примере кода используется 31 бит… И при чтении данных с чипа младший бит содержит значения.
Как, кажется, подтверждает @Spehro Pefhany, это шум, я бы не стал об этом беспокоиться. Я не очень хорошо разбираюсь в I2C, но если он использует байты, а чип использует в общей сложности 26 бит (24 бита для данных + эти 2 дополнительных бита для знака и старшего бита), им все равно пришлось поместить эти 6 бит в качестве заполнения.
Много Δ Σ преобразователи имеют мусор ниже выходных битов LSB. Они почти бессмысленны. Может быть полезно для семени генератора случайных чисел или что-то в этом роде.

Чтобы ответить на ваш вопрос о том, какие биты какие, я думаю, таблица данных довольно ясна. Всякий раз, когда вы выполняете цикл чтения I 2 C, вы читаете 32 бита данных (4 байта), и эти биты — это биты, перечисленные слева направо в таблице 3.

Способ, которым вы знаете, что преобразование готов, зависит от того, подтверждает ли устройство байт адреса.