Основная идея гироскопа

У меня есть гироскоп L3G4200D (модель GY-50). Я пытался узнать, как работает гироскопический датчик. Схема подключения прилагается. Я хочу задать несколько вопросов;

а) Согласно даташиту L3G4200D, x_lsb и x_msb (28h и 29h), y_lsb, y_msb (2Ah и 2Bh), z_lsb, z_msb (2Ch и 2Dh), как показано на рисунке 3. Но согласно коду, который на картинке первым, Arduino запрашивает байты со 168 адреса гироскопа (на картинке номер метки равен 1). Но 0x28 (шестнадцатеричное) означает b00101000 . Что с этим не так ?

b) Выходной сигнал гироскопа составляет градусы в секунду, это правильно?

c) На картинке 2 я ее не перемещал, так как она показала, что ее результаты меняются, как может измениться угол? Оно должно быть равно нулю, если оно не движется.

d) На рисунке 1 что мне следует посчитать: старший байт*256+младший байт?

e) Что означает Fs=250,500,2000 dps? Я знаю, что Dps означает «градус в секунду». Но что изменится в зависимости от диапазона FS, я имею в виду, если я выберу 500 или 2000?

, 👍0

Обсуждение

Вы смотрели техническое описание вашего гироскопа?, @nanofarad

Когда я использовал LIS2DH в прошлом году, я обнаружил, что байт адреса имеет некоторую дополнительную сложность - прочитайте всю таблицу данных на предмет «ошибок». Я думаю, это было немного, чтобы включить последовательное чтение регистров. FS означает «полный масштаб»., @MarkU


2 ответа


3

Согласно техническому описанию L3G4200D, x_lsb и x_msb (28h и 29h), y_lsb, y_msb (2Ah и 2Bh), z_lsb, z_msb (2Ch и 2Dh), как показано на рисунке 3. Но согласно коду, который на рисунке первым, arduino запрашивает биты с адреса 168 гироскопа (на рисунке номер метки равен 1). Но 0x28 (шестнадцатеричное) означает b00101000. Что с этим не так?

168 в шестнадцатеричном виде — 0xA8. Это 0x28 с установленным MSB. Почему? Ну, в спецификации сказано:

Чтобы прочитать несколько байтов, необходимо подтвердить старший бит подадреса. поле. Другими словами, SUB(7) должно быть равно 1, в то время как SUB(6-0) представляет адрес первого регистра для чтения.

Таким образом, адрес 0xA8 совпадает с адресом 0 x28 плюс инструкция «Я хочу прочитать несколько байтов».

Выходные данные гироскопа - это градусы в секунду, это правильно?

Вроде того. Число на самом деле представляет собой дробь FS. Смотрите ниже.

на рисунке 1, что мне следует посчитать hightbyte*256+lowbyte?

Это превращение двух 8-битных значений в одно 16-битное значение. Это проще представить с помощью битовых сдвигов:

(bighbyte << 8) | lowbyte

То есть старший байт сдвигается влево на 8 бит, а затем младший байт объединяется с младшими (нулевыми) 8 битами с помощью операции ИЛИ.

Что означает Fs=250,500,2000 dps? Я знаю, что Dps означает Degree Per Second. Но что изменится в диапазоне FS, если я выберу 500 или 2000?

Это значение "Полной шкалы". Оно определяет, что на самом деле означают необработанные числа от гироскопа. Гироскоп возвращает от -32768 до +32767. -32768 — это -FS, +32767 — это +FS. Таким образом, если FS установлена на 500 градусов в секунду, то:

  • -32768 это -500 градусов в секунду
  • +32767 это +500 градусов в секунду

Простая формула (с использованием математики с плавающей точкой):

DPS = Чтение / 32768.0 * FS

Формат более известен как Q15, где 16-битное значение делится на 3 части — знаковый бит (бит 15), целую часть (в данном случае ее нет) и 15 бит (14-0) дроби. Таким образом, число фактически представляет в формате Q15 диапазон от -1 до +1 с шагом 65536 1/65536. Затем это число умножается на полное значение шкалы, как если бы вы использовали процент, чтобы получить реальное значение DPS.

,

Спасибо, это очень ценная информация. Думаю, мне понадобится много времени, чтобы понять всю ее часть., @Unforgiven


2

Согласно техническому описанию, FS, по-видимому, является диапазоном измерений. Также, я думаю, вы найдете полезную информацию в следующих обсуждениях: Понимание чувствительности гироскопа L3G4200D и в Как перевести данные гироскопического датчика (L3G4200D) в градусы/сек? Из-за того, что гироскоп 16-битный, диапазон значений будет 2^16, что составляет 65536. Таким образом, значения на вашем экране находятся в диапазоне от -65536/2 до +65536/2, поэтому макс. значения, которые вы видите, составляют около 32000.

Всегда есть очень маленькое движение, которое датчик может обнаружить из-за вибраций и т. д. Поэтому не стоит ожидать, что выходной сигнал гироскопа будет набором констант. В идеале следует объединить данные, скажем, за 1 секунду, и найти среднеквадратичное значение (усреднить его), чтобы получить результат, не ищите только несколько случаев/выборок.

Также следует отметить, что если в среде гироскопа есть ультразвук, это также может привести к неверным результатам. Когда внешние частоты совпадают с собственной частотой системы гироскопа, это приводит к резонансу и искажению данных. В этой статье есть объяснение этого явления среди других воздействий на гироскоп.

,

Спасибо за ответ. Я уже прочитал те темы, которые вы рекомендуете. Предлагаете ли вы калибровать гироскоп? Я имею в виду, что сначала я получу 1500-2000 измерений и определю нулевую точку, и каждый раз, когда вы считываете значения с гироскопа, сравнивайте их со значениями калибровки, если они не двигаются, значение будет равно 0., @Unforgiven

Да, что-то вроде этого. Допустим, вы усредняете 2000 значений (используйте RMS вместо среднего, потому что у вас отрицательные значения) и получаете 300(x) 400(y) 100(z) значений. Это будет ваша нулевая точка. Когда вы получите новую точку, вы можете сравнить ее с нулевой точкой, чтобы увидеть, насколько изменились значения, и выполнить вычисления. Я думаю, должны быть готовые библиотеки, чтобы упростить вычисления. Просто продолжайте исследования, есть много проектов с отчетами и готовым программным обеспечением, сделанными по этой теме, я уверен, вы можете найти гораздо больше., @UserRR

Да, я уже нашел готовый код и его симуляцию, он отлично работает. Но мне нужно изучить, как он написан и работает. Первое, что мне нужно сделать, это запустить этот код шаг за шагом. Спасибо за помощь., @Unforgiven