Почему значение регистра чтения и записи гироскопа MPU6050 равно 0x08 для полной шкалы 500 градусов в секунду?

Я пытаюсь подключить гироскоп MPU6050 к Arduino ATmega2560 и считать его необработанные значения из его 6DOF (гироскоп и акк).

Я нашел следующий код:

//Активировать MPU-6050
  Wire.beginTransmission(0x68);                                        //Начать общение с MPU-6050
  Wire.write(0x6B);                                                    //Отправляем запрошенный начальный регистр
  Wire.write(0x00);                                                    //Установить запрошенный начальный регистр
  Wire.endTransmission();                                              //Завершить передачу
  //Настройте акселерометр (+/-8g)
  Wire.beginTransmission(0x68);                                        //Начать общение с MPU-6050
  Wire.write(0x1C);                                                    //Отправляем запрошенный начальный регистр
  Wire.write(0x10);                                                    //Установить запрошенный начальный регистр
  Wire.endTransmission();                                              //Завершить передачу
  //Настройте гироскоп (полная шкала 500dps)
  Wire.beginTransmission(0x68);                                        //Начать общение с MPU-6050
  Wire.write(0x1B);                                                    //Отправляем запрошенный начальный регистр
  Wire.write(0x08);                                                    //Установить запрошенный начальный регистр
  Wire.endTransmission();                                              //Завершить передачу

Я пытаюсь разбить это построчно, чтобы понять, что происходит во время настройки гироскопа.

Согласно MPU6050 datasheet, I2C находится в регистре 0x68. I2C помогает нам получить доступ ко всем регистрам и общаться с подключенным ведущим устройством. Что дает следующие 3 строки:

Wire.beginTransmission(0x68);                                        
Wire.write(0x6B);                                                    
Wire.write(0x00);

Согласно таблице, 0x6B — это регистр, предназначенный для включения и выключения гироскопа:

Этот регистр позволяет пользователю настраивать режим питания и тактовую частоту. источник. Он также предоставляет бит для сброса всего устройства, и бит для отключения датчика температуры. При установке SLEEP в 1, MPU-60X0 может быть переведен в режим сна с низким энергопотреблением. Когда CYCLE установлен на 1 пока SLEEP отключен, MPU-60X0 будет переведен в режим цикла. В Режим цикла, устройство циклически переходит из спящего режима в режим пробуждения, чтобы принять один образец данных с акселерометра со скоростью, определяемой LP_WAKE_CTRL (регистр 108). Для настройки частоты пробуждения используйте LP_WAKE_CTRL в регистре управления питанием 2 (регистр 108). внутренний генератор 8 МГц, часы на основе гироскопа или внешние источники может быть выбран в качестве источника тактовой частоты MPU-60X0. Когда внутренний 8 МГц В качестве источника тактовой частоты выбран генератор или внешний источник, MPU-60X0 может работать в режимах пониженного энергопотребления с отключенными гироскопами. При включении питания источником тактовой частоты MPU-60X0 по умолчанию является внутренний осциллятор. Однако настоятельно рекомендуется, чтобы устройство было настроен на использование одного из гироскопов (или внешнего источника синхронизации) как опорный генератор часов для повышения стабильности. Источник часов может быть выбрано в соответствии со следующей таблицей.

Так почему же мы устанавливаем его значение на 0x00?

И то же самое для настройки гироскопа в регистре 0x1B, где в технических описаниях указаны полные диапазоны шкалы как:

Код устанавливает диапазон 500 dps, так почему же кодер установил регистр на 0x08, а не на 0x01, где FS_SEL[1:0] должен содержать десятичные знаки от 0 до 3, верно?

, 👍3


1 ответ


Лучший ответ:

0

Адрес i2c — 0x68 или 0x69. Некоторые модули с MPU6050 действительно имеют 0x69, но большинство имеют 0x68.

При поиске в техническом описании слова «сон» легко найти следующее предложение: «Примечание: устройство перейдет в спящий режим при включении питания».

Когда MPU6050 включается, бит SLEEP равен 1, и датчик находится в спящем режиме. Поэтому запись 0 выводит его из спящего режима. После этого вы можете настроить датчик по своему усмотрению.

FS_SEL[1:0] — это обозначение, которое часто используется в таблицах данных. Это указание на то, что используются только два бита. Это не позиция бита в регистре. Эти биты расположены в Bit3 и Bit4. Чтобы включить младший бит FS_SEL, Bit3 должен быть установлен в 1, поэтому для регистра необходимо значение 0x08.

,