Основная идея гироскопа
У меня есть гироскоп 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?
@Unforgiven, 👍0
Обсуждение2 ответа
Согласно техническому описанию 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
Согласно техническому описанию, 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
- Что означает “LSB на градус в секунду” (LSB per degree per second)?
- В чем разница между акселерометром, гироскопом и датчиком магнитометра?
- MPU-6050 - угловой дрейф
- Линейное ускорение от MPU 6050
- Правильный способ получить значения крена, тангажа и перемещения
- Снять гравитацию с акселерометра MPU-6050
- Arduino Nano IOT LSM6DS3 получить угол гироскопа в градусах
- Помощь с MPU-6050
Вы смотрели техническое описание вашего гироскопа?, @nanofarad
Когда я использовал LIS2DH в прошлом году, я обнаружил, что байт адреса имеет некоторую дополнительную сложность - прочитайте всю таблицу данных на предмет «ошибок». Я думаю, это было немного, чтобы включить последовательное чтение регистров. FS означает «полный масштаб»., @MarkU