Значение "LSB / Unit" и " Unit/LSB"

на данный момент я играю с LSM303DLHC акселерометр/магнитометр/термометр.

Это его техническое описание: http://www.st.com/st-web-ui/static/active/en/resource/technical/document/datasheet/DM00027543.pdf

все работает достаточно хорошо, но я не знаю как интерпретировать выходные значения. В таблице данных (Страница 9) говорится что-то вроде "1 mg/LSB" (нет, это не миллиграмм :D) о чувствительности к линейному ускорению в моем конфигурация. Что, черт возьми, это значит? То же самое с изменением выхода датчика температуры (8 LSB/°C) и магнитной настройкой усиления (1100 LSB/gauss), только наоборот.

например, что делать с этим выходом акселерометра: 16384? Это мое измеренное гравитационное ускорение.

4 ответов


LSB / unit или Unit / LSB-это коэффициент(называемый чувствительностью), с помощью которого вы должны умножить необработанные данные датчика. Скажем, датчик A имеет регистры X,Y и Z , значения, поступающие в каждый из регистров, должны быть разделены/умножены на коэффициент LSB/unit или Unit/LSB. Это потому, что в листе данных говорится, что @ конкретный полномасштабный вы будете иметь такую большую чувствительность (LSB/unit или Unit/LSB)

для LSB / Unit:

X lsb означает - 1 единица

1 lsb означает-1 / x юнит

значение lsb (значение в Регистре) = (1 / x)*(значение в регистре) - применить унитарные способ здесь.

аналогично для Unit / LSB вы должны умножить чувствительность.

вы можете построить акселерометр, магнитометр или датчик температуры или можете быть Гирометром в одном модуле, но что делать, если клиент/пользователь хочет только один датчик?

Rgds, РП


теперь я понял трюк. Есть несколько вещей на этом MEMS вы должны знать, но которые не упоминаются в техническом описании:

  1. выходной регистр акселерометра составляет всего 12 бит, а не 16 бит, поэтому вам нужно сдвинуть значение вправо на 4 и умножить его на 0,001 G. Кроме того, это мало-эндианский.
  2. регистр выхода магнитометра 16 битов, но больш-endian. Кроме того, порядок векторов (X|Z|Y) Не (X|Y / Z). Чтобы вычислить правильное значение, вы нужно разделить X и Y на 980 Гаусс-1, в то время как это 1100 Гаусс⁻1 для Z.
  3. датчик температуры работает, но не откалиброван. Таким образом, вы можете использовать его для измерения изменения температуры, но без абсолютных температур. Это также всего лишь 12 бит, но big-endian, и вы должны разделить выход на 8 C⁻1.

с этой информацией можно использовать LSM303DLHC. Но кто придумал это? "Давайте построим новый акселерометр, магнитометр и термометр в одном пакете и привинчьте потребителя вверх путем смешивать длину и endianness слова вверх без упоминать его в datasheet."


техническое описание окончательно неясно в отношении интерпретации регистров ускорения. Решение Genesis Rock предполагает, что это 12-бит, который работает. (Другое решение состоит в том, чтобы предположить, что коэффициент усиления составляет 16 мг/ЛСБ вместо 1 мг/ЛСБ, но поскольку последние 4 бита ускорений кажутся всегда нулями, первое решение имеет больше смысла).

но как для температуры, так и для ускорения, если учитывать только 12 наиболее значимых битов. Последние два бита по-прежнему также всегда ноль, поэтому эффективное разрешение будет 10-битным, что сбивает с толку.

Я также не могу понять значение температуры, если в таблице данных не указано неизвестное смещение.

Я надеюсь, что другие могут подтвердить, что они получают те же результаты.


относительно выхода 12 битов акселерометра: флаг высоко-разрешения на Регистре управления 4. Он выключен по умолчанию, и нет никакой информации о том, что означает высокое разрешение. Я предполагаю, что он может включить 16-битный выход. Также на контроле регистр 4 флаг установить порядок байтов на выходе акселерометра. По умолчанию это little endian. Спецификация довольно слабая в целом.