MPU-6050 — акселерометр и гироскоп с I²C
MPU-6050 объединяет в корпусе 4 × 4 мм трёхосевой акселерометр, трёхосевой гироскоп и датчик температуры и отдаёт 16-битные отсчёты по I²C. Разбираем по спецификации и карте регистров TDK InvenSense выводы, питание, ключевые регистры, пересчёт кодов в g, °/с и градусы Цельсия и ошибки, из-за которых датчик молчит или врёт.
Обновлено Редакция GAW
MPU-6050 — шестиосевой датчик движения InvenSense: трёхосевой гироскоп и трёхосевой акселерометр с 16-битными АЦП на каждую ось, датчик температуры, буфер FIFO на 1024 байта и встроенный процессор движения DMP. Корпус — QFN-24 размером 4 × 4 × 0,9 мм. Его близнец MPU-6000 устроен так же, но умеет ещё SPI и не имеет отдельного вывода VLOGIC; ниже всё сказано про MPU-6050, работающий только по I²C.
Коротко
- Питание — VDD 2,375–3,46 В, VLOGIC от 1,71 В до VDD; типовой ток 3,8 мА с гироскопом и акселерометром.
- Шина — I²C до 400 кГц, адрес 0x68 или 0x69 по выводу AD0.
- Акселерометр — шкалы ±2, ±4, ±8 и ±16 g, от 16 384 до 2048 LSB/g.
- Гироскоп — шкалы от ±250 до ±2000 °/с, от 131 до 16,4 LSB/(°/с).
- Ещё — датчик температуры, FIFO 1024 байта, DMP, вспомогательная шина I²C для магнитометра.
Статус и документы
На сайте TDK InvenSense на 18 октября 2026 года у MPU-6050 нет страницы продукта: поиск по сайту находит только спецификацию PS-MPU-6000A-00 ред. 3.4 и карту регистров RM-MPU-6000A-00 ред. 4.2, обе обновлены 19 августа 2013 года, а старый адрес страницы продукта перенаправляет на страницу «Page Not Found». Отметки EOL или NRND там нет, поэтому статус производства мы подтвердить не можем — для серийного изделия уточняйте его у дистрибьютора.
Все цифры ниже взяты из этих двух документов. Сама спецификация в разделе 2 оговаривает, что электрические характеристики получены расчётом и моделированием, а таблицы разделов 6.1–6.7 даны для VLOGIC = 1,8 В ± 5 % или VLOGIC = VDD при 25 °C.
Выводы QFN-24
| Вывод | Обозначение | Назначение |
|---|---|---|
| 1 | CLKIN | вход внешнего тактового сигнала; если не нужен — на общий провод |
| 2–5, 14–17 | NC | внутри не подключены; их площадки можно использовать для разводки дорожек |
| 6 | AUX_DA | данные вспомогательной шины I²C для внешних датчиков |
| 7 | AUX_CL | такт вспомогательной шины I²C |
| 8 | VLOGIC | питание цифровых входов и выходов, не выше VDD |
| 9 | AD0 | младший бит адреса I²C |
| 10 | REGOUT | конденсатор фильтра внутреннего стабилизатора |
| 11 | FSYNC | вход синхронизации кадров; если не нужен — на общий провод |
| 12 | INT | выход прерывания, двухтактный или с открытым стоком |
| 13 | VDD | питание |
| 18 | GND | общий провод |
| 19, 21, 22 | RESV | зарезервированы, не подключать |
| 20 | CPOUT | конденсатор накачки |
| 23 | SCL | тактовая линия I²C |
| 24 | SDA | линия данных I²C |
Обвязка по разделу 7.3 спецификации — керамика X7R: 0,1 мкФ на REGOUT, 0,1 мкФ на VDD, 2,2 нФ на 50 В на CPOUT и 10 нФ на VLOGIC. Шаг выводов — 0,5 мм. Центральную площадку корпуса паять не следует: InvenSense пишет, что электрически она с кристаллом не связана, а пайка создаёт механическое напряжение в корпусе и меняет характеристики. Дорожки и переходные отверстия под корпусом тоже запрещены — их сигналы наводятся на гироскопы. Гироскопы возбуждаются на частотах 33, 30 и 27 кГц по осям X, Y и Z с разбросом ±3 кГц, то есть где-то в полосе 24–36 кГц (разд. 6.1 и 11.4.3).
Питание и логические уровни
VDD — от 2,375 до 3,46 В. VLOGIC задаёт уровни шины I²C и вывода INT: от 1,71 В до VDD, причём VLOGIC не должен превышать VDD ни в какой момент. Единицу на входе микросхема распознаёт от 0,7·VLOGIC, ноль — до 0,3·VLOGIC, а рабочий диапазон напряжения на SCL и SDA — от −0,5 В до VLOGIC + 0,5 В (разд. 6.4 и 6.5). При включении VDD нарастает от 10 до 90 % не дольше 100 мс, VLOGIC — не дольше 3 мс и не раньше VDD, оба фронта монотонные (разд. 7.4).
Предельные режимы (разд. 6.9): VDD — от −0,5 до +6 В, напряжение на SCL, SDA, AD0, INT и других входах — от −0,5 В до VDD + 0,5 В. Это границы, за которыми микросхема может выйти из строя; работа при них не гарантируется, а долгое пребывание у этих границ снижает надёжность.
| Режим | Ток, тип. |
|---|---|
| Гироскоп, акселерометр и DMP | 3,9 мА |
| Гироскоп и акселерометр | 3,8 мА |
| Только гироскоп | 3,6 мА |
| Только акселерометр | 500 мкА |
| Акселерометр в режиме малого потребления: 1,25 / 5 / 20 / 40 Гц | 10 / 20 / 70 / 140 мкА |
| Ожидание | 5 мкА |
| Ток по выводу VLOGIC | 100 мкА |
Токи — типовые, из таблицы разд. 6.3. В перечне возможностей (разд. 5.2) для 20 и 40 Гц указаны 60 и 110 мкА, но, по истории изменений, токи режима малого потребления в разд. 6.3 обновили в ред. 3.2, поэтому опираемся на таблицу.
Акселерометр и гироскоп
| Параметр | Акселерометр | Гироскоп |
|---|---|---|
| Шкалы | ±2, ±4, ±8, ±16 g | ±250, ±500, ±1000, ±2000 °/с |
| Чувствительность | 16 384, 8192, 4096, 2048 LSB/g | 131, 65,5, 32,8, 16,4 LSB/(°/с) |
| Допуск чувствительности | ±3 %, тип. | от −3 до +3 %, мин. и макс. |
| Смещение нуля при 25 °C, тип. | ±50 мg по X и Y, ±80 мg по Z | ±20 °/с |
| Изменение нуля с температурой, тип. | ±35 мg по X и Y, ±60 мg по Z (0…70 °C) | ±20 °/с (−40…+85 °C) |
| Нелинейность, тип. | 0,5 % | 0,2 % |
| Межосевая чувствительность, тип. | ±2 % | ±2 % |
| Плотность шума на 10 Гц, тип. | 400 мкg/√Гц при AFS_SEL = 0 и данных 1 кГц | 0,005 °/с/√Гц при FS_SEL = 0 |
| Полоса фильтра, мин. и макс. | 5–260 Гц | 5–256 Гц |
| Частота данных, мин. и макс. | 4–1000 Гц | 4–8000 Гц |
В таблицах разд. 6.1 и 6.2 гарантированные границы — столбцы MIN и MAX — заданы только у допуска чувствительности гироскопа, диапазонов фильтра и частоты данных и у самотеста: от −14 до +14 % от заводского значения. Остальное стоит в столбце TYP, это типовые значения, а не пределы. Для смещения нуля акселерометра сноска 1 прямо называет его типовым значением после предварительной подготовки по MSL3.
Данные — 16-битные числа в дополнительном коде. Лежащий горизонтально датчик показывает 0 g по X и Y и +1 g по Z. Полный шум гироскопа спецификация приводит для FS_SEL = 0 и фильтра около 100 Гц (DLPF_CFG = 2): типовые 0,05 °/с среднеквадратично. Это число совпадает с произведением плотности на корень из полосы фильтра: 0,005 · √98 ≈ 0,05 °/с. Для акселерометра документ даёт только плотность. Если так же оценить его шум с фильтром 44 Гц, получится 400 · √44 ≈ 2650 мкg, около 2,7 мg, — но это оценка для идеальной прямоугольной полосы, реальный шум с фильтром конечной крутизны больше.
Шум мал по сравнению со смещением нуля гироскопа: типовое значение — ±20 °/с, а гарантированного предела спецификация не даёт, поэтому смещение каждого экземпляра измеряют в покое и вычитают.
Адрес I²C
Адрес — 110100X: младший бит задаёт вывод AD0. AD0 на общем проводе — 0x68, на VLOGIC — 0x69, так что на одной шине уживаются два датчика. Шина работает в режимах Standard-mode 100 кГц и Fast-mode 400 кГц, ёмкость каждой линии — до 400 пФ. Линиям SDA и SCL обычно нужны подтягивающие резисторы, у MPU-6050 — к VLOGIC: уровни всех его логических выводов задаёт это напряжение (разд. 10.2). Байты записи и чтения — 0xD0 и 0xD1 при AD0 = 0; чем семибитный адрес отличается от байта, рассказано на странице «Адрес I²C».
Регистр WHO_AM_I (0x75) читается как 0x68 при любом уровне AD0: по нему убеждаются, что ответила именно MPU-60X0, но отличить по нему два датчика на одной шине нельзя.
Запись: START, адрес с битом записи, номер регистра, данные, STOP; если байты данных продолжаются, номер регистра растёт сам. Чтение: START, адрес с битом записи, номер регистра, повторный START, адрес с битом чтения, затем байты; последний байт ведущий не подтверждает (NACK) и ставит STOP.
Ключевые регистры
| Адрес | Регистр | Что в нём |
|---|---|---|
| 0x19 | SMPLRT_DIV | делитель частоты отсчётов |
| 0x1A | CONFIG | DLPF_CFG — биты 2:0, фильтр; EXT_SYNC_SET — биты 5:3 |
| 0x1B | GYRO_CONFIG | FS_SEL — биты 4:3, шкала гироскопа; биты 7:5 — самотест |
| 0x1C | ACCEL_CONFIG | AFS_SEL — биты 4:3, шкала акселерометра; биты 7:5 — самотест |
| 0x23 | FIFO_EN | какие данные писать в FIFO |
| 0x37 | INT_PIN_CFG | уровень и тип выхода INT, защёлка, режим обхода I2C_BYPASS_EN |
| 0x38 | INT_ENABLE | DATA_RDY_EN — бит 0, FIFO_OFLOW_EN — бит 4 |
| 0x3A | INT_STATUS | флаги прерываний, сбрасываются чтением |
| 0x3B–0x40 | ACCEL_XOUT_H … ACCEL_ZOUT_L | ускорение по X, Y, Z |
| 0x41–0x42 | TEMP_OUT_H, TEMP_OUT_L | температура |
| 0x43–0x48 | GYRO_XOUT_H … GYRO_ZOUT_L | угловая скорость по X, Y, Z |
| 0x6A | USER_CTRL | FIFO_EN — бит 6, I2C_MST_EN — бит 5; I2C_IF_DIS у MPU-6050 всегда 0 |
| 0x6B | PWR_MGMT_1 | DEVICE_RESET — бит 7, SLEEP — бит 6, CYCLE — бит 5, TEMP_DIS — бит 3, CLKSEL — биты 2:0 |
| 0x6C | PWR_MGMT_2 | частота пробуждений и отключение отдельных осей |
| 0x72–0x73 | FIFO_COUNTH, FIFO_COUNTL | число байт в FIFO |
| 0x74 | FIFO_R_W | данные FIFO |
| 0x75 | WHO_AM_I | 0x68 |
После сброса все регистры равны 0x00, кроме PWR_MGMT_1 — 0x40 и WHO_AM_I — 0x68. Значение 0x40 означает SLEEP = 1: датчик включается в режиме сна. В том же регистре выбирают тактирование: после включения работает внутренний генератор 8 МГц, но InvenSense настоятельно рекомендует перейти на PLL от одного из гироскопов, CLKSEL = 1…3, — так частота стабильнее. Запись 0x01 в PWR_MGMT_1 делает оба дела сразу.
Шкалы задают биты 4:3: в GYRO_CONFIG значения 0x00, 0x08, 0x10 и 0x18 дают ±250, ±500, ±1000 и ±2000 °/с, в ACCEL_CONFIG те же значения — ±2, ±4, ±8 и ±16 g.
Частота отсчётов и фильтр
От частоты отсчётов зависят регистры данных, FIFO и DMP:
где частота гироскопа fгир — 8 кГц при выключенном фильтре (DLPF_CFG = 0 или 7) и 1 кГц при включённом. Акселерометр обновляется с частотой 1 кГц, поэтому при частоте отсчётов выше 1 кГц один и тот же его отсчёт выдаётся несколько раз. Пример: DLPF_CFG = 3 и SMPLRT_DIV = 9 дают 1000 / (1 + 9) = 100 Гц.
| DLPF_CFG | Акселерометр: полоса, Гц | Задержка, мс | Гироскоп: полоса, Гц | Задержка, мс | Частота гироскопа, кГц |
|---|---|---|---|---|---|
| 0 | 260 | 0 | 256 | 0,98 | 8 |
| 1 | 184 | 2,0 | 188 | 1,9 | 1 |
| 2 | 94 | 3,0 | 98 | 2,8 | 1 |
| 3 | 44 | 4,9 | 42 | 4,8 | 1 |
| 4 | 21 | 8,5 | 20 | 8,3 | 1 |
| 5 | 10 | 13,8 | 10 | 13,4 | 1 |
| 6 | 5 | 19,0 | 5 | 18,6 | 1 |
| 7 | зарезервировано | — | зарезервировано | — | 8 |
Пересчёт кодов
Каждое значение — пара регистров: сначала старший байт, затем младший. Из них собирают 16-битное число со знаком и делят на чувствительность шкалы:
Формула температуры — из раздела 4.18 карты регистров. Она согласуется со спецификацией: там при 35 °C указан типовой код −521, и −521 / 340 + 36,53 = 35,0 °C.
Пример: шкалы ±2 g и ±250 °/с, датчик лежит на столе, пакетное чтение 14 байт с адреса 0x3B вернуло:
| Регистры | Байты | Число со знаком | Деление | Результат |
|---|---|---|---|---|
| 0x3B, 0x3C — ускорение X | 0xFE, 0x0C | −500 | 16 384 | −0,031 g |
| 0x3D, 0x3E — ускорение Y | 0x01, 0x48 | 328 | 16 384 | 0,020 g |
| 0x3F, 0x40 — ускорение Z | 0x3F, 0xA0 | 16 288 | 16 384 | 0,994 g |
| 0x41, 0x42 — температура | 0xF1, 0x50 | −3760 | 340, затем + 36,53 | 25,5 °C |
| 0x43, 0x44 — гироскоп X | 0x02, 0x0C | 524 | 131 | 4,0 °/с |
| 0x45, 0x46 — гироскоп Y | 0xFF, 0x7D | −131 | 131 | −1,0 °/с |
| 0x47, 0x48 — гироскоп Z | 0x00, 0x41 | 65 | 131 | 0,5 °/с |
Как получился знак: 0xFE0C = 65 036, это больше 32 767, значит число отрицательное: 65 036 − 65 536 = −500. Температура: 0xF150 = 61 776 → −3760; −3760 / 340 = −11,06; −11,06 + 36,53 = 25,5 °C. Показания акселерометра отличаются от идеальных 0, 0 и 1 g на 6–31 мg, гироскоп в покое показывает до 4 °/с — оба отклонения меньше типовых значений смещения нуля из спецификации.
Пример для Arduino
Скетч будит датчик и проверяет WHO_AM_I — если ответ не 0x68, останавливается и печатает прочитанное значение. Затем он настраивает фильтр, частоту и шкалы и десять раз в секунду читает 14 байт одним пакетом. Значения регистров — из карты регистров RM-MPU-6000A-00. Метод endTransmission() возвращает 0, когда датчик подтвердил адрес и данные.
#include <Wire.h>
// Register addresses: RM-MPU-6000A-00 rev. 4.2, section 3
const uint8_t MPU_ADDR = 0x68; // AD0 low; 0x69 with AD0 high
const uint8_t SMPLRT_DIV = 0x19;
const uint8_t CONFIG = 0x1A;
const uint8_t GYRO_CONFIG = 0x1B;
const uint8_t ACCEL_CONFIG = 0x1C;
const uint8_t ACCEL_XOUT_H = 0x3B;
const uint8_t PWR_MGMT_1 = 0x6B;
const uint8_t WHO_AM_I = 0x75;
bool writeReg(uint8_t reg, uint8_t value) {
Wire.beginTransmission(MPU_ADDR);
Wire.write(reg);
Wire.write(value);
return Wire.endTransmission() == 0; // 0 = address and data acknowledged
}
uint8_t readReg(uint8_t reg) {
Wire.beginTransmission(MPU_ADDR);
Wire.write(reg);
if (Wire.endTransmission(false) != 0) return 0xFF; // no ACK; repeated START otherwise
if (Wire.requestFrom(MPU_ADDR, (uint8_t)1) != 1) return 0xFF;
return Wire.read(); // 0xFF is never a valid WHO_AM_I (bit 7 is 0)
}
void setup() {
Serial.begin(115200);
Wire.begin();
Wire.setClock(400000); // Fast-mode, the MPU-6050 maximum
writeReg(PWR_MGMT_1, 0x01); // SLEEP = 0, CLKSEL = 1: PLL with X gyro reference
delay(50); // PLL settles within 10 ms, gyro ZRO in about 30 ms
uint8_t id = readReg(WHO_AM_I); // 0x68 whatever the AD0 level
if (id != 0x68) {
Serial.print("No MPU-6050, WHO_AM_I = 0x");
Serial.println(id, HEX); // 0xFF: no answer at MPU_ADDR
while (true) delay(1000);
}
writeReg(CONFIG, 0x03); // DLPF_CFG = 3: accel 44 Hz, gyro 42 Hz, 1 kHz gyro rate
writeReg(SMPLRT_DIV, 9); // sample rate = 1 kHz / (1 + 9) = 100 Hz
writeReg(GYRO_CONFIG, 0x00); // FS_SEL = 0: +-250 dps, 131 LSB per dps
writeReg(ACCEL_CONFIG, 0x00); // AFS_SEL = 0: +-2 g, 16384 LSB per g
}
void loop() {
Wire.beginTransmission(MPU_ADDR);
Wire.write(ACCEL_XOUT_H);
// One burst read: all 14 bytes belong to the same sampling instant
if (Wire.endTransmission(false) != 0 || Wire.requestFrom(MPU_ADDR, (uint8_t)14) != 14) {
Serial.println("I2C read failed");
delay(100);
return;
}
int16_t raw[7]; // AX, AY, AZ, TEMP, GX, GY, GZ
for (uint8_t i = 0; i < 7; i++) {
uint8_t hi = Wire.read();
uint8_t lo = Wire.read();
raw[i] = (int16_t)(((uint16_t)hi << 8) | lo); // big-endian two's complement
}
float ax = raw[0] / 16384.0f, ay = raw[1] / 16384.0f, az = raw[2] / 16384.0f; // g
float temp = raw[3] / 340.0f + 36.53f; // deg C
float gx = raw[4] / 131.0f, gy = raw[5] / 131.0f, gz = raw[6] / 131.0f; // dps
Serial.print(ax, 3); Serial.print(' ');
Serial.print(ay, 3); Serial.print(' ');
Serial.print(az, 3); Serial.print(" ");
Serial.print(temp, 1); Serial.print(" ");
Serial.print(gx, 1); Serial.print(' ');
Serial.print(gy, 1); Serial.print(' ');
Serial.println(gz, 1);
delay(100);
}
Если поменять шкалу, делители в loop() нужно поменять вместе с ней — сами регистры данных шкалу не сообщают.
FIFO, прерывания и DMP
FIFO. Буфер на 1024 байта заполняется с частотой отсчётов данными, выбранными в FIFO_EN (0x23), в порядке номеров регистров; включает его бит FIFO_EN в USER_CTRL. Число байт читают из FIFO_COUNTH и FIFO_COUNTL — обязательно начиная со старшего, иначе счётчик не обновится, — а сами данные из FIFO_R_W (0x74). При шести осях это 12 байт на отсчёт: буфер вмещает 85 отсчётов, при 100 Гц — 0,85 с. При переполнении теряются самые старые данные и ставится флаг FIFO_OFLOW_INT, а чтение пустого буфера возвращает последний прочитанный байт — поэтому сначала проверяют счётчик.
Прерывания. Вывод INT настраивают в INT_PIN_CFG (0x37): активный уровень, двухтактный выход или открытый сток, импульс 50 мкс или удержание до сброса флага. Бит DATA_RDY_EN в INT_ENABLE (0x38) включает прерывание по готовности нового отсчёта, флаги читают из INT_STATUS (0x3A).
DMP. По разделу 7.9 спецификации встроенный процессор движения берёт данные акселерометра, гироскопа и внешних датчиков, например магнитометра, обрабатывает их, а результат отдаёт из своих регистров или через FIFO. InvenSense пишет, что алгоритмы обработки движения должны работать с высокой частотой, часто около 200 Гц, чтобы результат был точным и с малой задержкой, и DMP снимает эту нагрузку с микроконтроллера; с ним типовой ток растёт с 3,8 до 3,9 мА. В карте регистров RM-MPU-6000A-00 регистры DMP не описаны.
Вспомогательная шина. Выводы AUX_DA и AUX_CL — отдельная шина I²C, на которой MPU-6050 сам опрашивает до четырёх внешних датчиков, читая с них до 24 байт. В режиме обхода (I2C_BYPASS_EN = 1 при I2C_MST_EN = 0) эти выводы соединяются с основной шиной, и микроконтроллер обращается к датчику на ней напрямую.
Малое потребление. Если в PWR_MGMT_1 установить CYCLE и TEMP_DIS, сбросить SLEEP, а в PWR_MGMT_2 отключить три оси гироскопа, датчик просыпается только ради одного отсчёта акселерометра с частотой 1,25, 5, 20 или 40 Гц по полю LP_WAKE_CTRL и потребляет типовые 10–140 мкА.
Типичные ошибки
- 5 В на VDD или на линиях шины. Рабочий диапазон VDD — 2,375–3,46 В; 5 В ниже абсолютного предела 6 В, но это граница повреждения, а не рабочий режим. На линиях шины рабочее напряжение — не больше VLOGIC + 0,5 В (разд. 6.5), то есть 3,8 В при VLOGIC = 3,3 В, а абсолютный предел — VDD + 0,5 В; подтяжка к 5 В превышает и то и другое. Если микросхема стоит на готовом модуле, по его схеме проверяют, чем питается VDD и к чему подтянуты линии.
- Датчик не разбудили. После включения PWR_MGMT_1 = 0x40, бит SLEEP установлен, в регистрах данных — значение сброса 0x00. Первая запись после включения — 0x01 в регистр 0x6B.
- Не та шкала в пересчёте. Делитель должен соответствовать полям AFS_SEL и FS_SEL. Если в ACCEL_CONFIG записано 0x10 (±8 g), земное ускорение даёт около 4096 единиц, и деление на 16 384 «покажет» 0,25 g вместо 1 g. У гироскопа делители не круглые: 65,5 и 32,8, а не 64 и 32.
- Число без знака. Регистры данных — дополнительный код. Если собрать два байта в беззнаковую переменную или в 32-битный
intбез приведения кint16_t, отрицательные значения превратятся в числа от 32 768 до 65 535. - Чтение по одному байту. Карта регистров гарантирует, что пакетное чтение возвращает значения одного момента измерения. При отдельных чтениях старший и младший байты могут оказаться из разных отсчётов — тогда нужно ждать флага готовности данных.
- Ожидание нуля в покое. Типовой разброс нуля по спецификации — ±20 °/с у гироскопа и ±50…±80 мg у акселерометра, а гарантированных пределов документ не приводит. Смещения измеряют на неподвижном датчике и вычитают; без этого угол, полученный интегрированием угловой скорости, быстро уходит.
- Ошибки своей платы. Центральную площадку припаяли или провели под корпусом дорожки — спецификация запрещает и то и другое: механическое напряжение меняет характеристики, а сигналы дорожек наводятся на гироскопы.
- Лишняя единица в USER_CTRL. Бит I2C_IF_DIS (бит 4 регистра 0x6A) у MPU-6050 по карте регистров всегда записывают нулём. Значения для USER_CTRL собирают из нужных битов — FIFO_EN, I2C_MST_EN и битов сброса, — а не копируют из примеров для MPU-6000, где этот бит включает SPI.
MPU-6050 и новые IMU
MPU-6050 прост в запуске: никаких файлов конфигурации, достаточно разбудить датчик и читать регистры. По диапазону питания и току потребления его стоит сравнить с новыми IMU. Сравнение датчиков Bosch — BMI160, BMI270, BMI323 и BNO055 со встроенным слиянием данных — в статье «Акселерометры и гироскопы: как выбрать и подключить IMU». Другие цифровые датчики с I²C — в разделе «Микросхемы датчиков».
Частые вопросы
Какой адрес I²C у MPU-6050?
Семибитный адрес — 110100X в двоичной записи: 0x68, если вывод AD0 соединён с общим проводом, и 0x69, если на нём уровень VLOGIC. Так на одной шине работают два датчика. Регистр WHO_AM_I (0x75) у обоих читается как 0x68: в нём шесть старших бит адреса, а уровень AD0 он не отражает.
Почему MPU-6050 выдаёт одни нули?
Скорее всего, он спит. После включения регистр PWR_MGMT_1 (0x6B) равен 0x40 — установлен бит SLEEP, а в регистрах данных лежит значение сброса 0x00. Запишите в 0x6B число 0x01: бит SLEEP сбросится, а тактирование переключится на PLL от гироскопа X, которое InvenSense рекомендует вместо внутреннего генератора 8 МГц.
Как перевести показания MPU-6050 в g и градусы в секунду?
Собрать из старшего и младшего байта 16-битное число со знаком и разделить на чувствительность выбранной шкалы. У акселерометра это 16 384, 8192, 4096 и 2048 LSB/g на шкалах ±2, ±4, ±8 и ±16 g, у гироскопа — 131, 65,5, 32,8 и 16,4 LSB/(°/с) на шкалах ±250, ±500, ±1000 и ±2000 °/с. Например, код 16 288 на шкале ±2 g — это 0,994 g.
Как получить температуру с MPU-6050?
По карте регистров T = TEMP_OUT / 340 + 36,53 °C, где TEMP_OUT — 16-битное число со знаком из регистров 0x41 и 0x42. Код −3760 даёт 25,5 °C. Это температура кристалла, а не воздуха; диапазон датчика — от −40 до +85 °C. Чувствительность 340 LSB/°C и линейность ±1 °C в спецификации типовые, причём чувствительность указана без заводской подстройки.
Можно ли подключить MPU-6050 к Arduino с питанием 5 В?
Напрямую — нет. Питание VDD по спецификации — 2,375–3,46 В. Уровни шины задаёт вывод VLOGIC, который не может быть выше VDD, а напряжение на входах SCL и SDA в рабочем режиме — не больше VLOGIC + 0,5 В: при VLOGIC = 3,3 В это 3,8 В. Абсолютный предел для этих выводов — VDD + 0,5 В. Микросхему питают от 3,3 В, а с 5-вольтовой шиной связывают через преобразователь уровней.
Почему гироскоп MPU-6050 в покое показывает не ноль?
Это смещение нуля. Типовой начальный разброс по спецификации — ±20 °/с при 25 °C, и ещё столько же, тоже типовое значение, добавляет изменение в диапазоне от −40 до +85 °C; гарантированного максимума документ не приводит. Смещение измеряют, пока датчик неподвижен, и вычитают из показаний. У акселерометра типовое смещение нуля — ±50 мg по осям X и Y и ±80 мg по Z.
Источники
- TDK InvenSense. MPU-6000 and MPU-6050 Product Specification (PS-MPU-6000A-00, Revision 3.4, 19 августа 2013) — разд. 1 — история изменений, ред. 3.2 обновила токи режима малого потребления в разд. 6.3; разд. 2 — характеристики получены расчётом и моделированием; разд. 3.1 и таблица отличий — VDD 2,375–3,46 В, VLOGIC 1,71 В…VDD, I²C 400 кГц, FIFO 1024 байта; разд. 6.1 — гироскоп: ±250…±2000 °/с, 131 / 65,5 / 32,8 / 16,4 LSB/(°/с), допуск от −3 до +3 % (мин. и макс.), типовые смещение нуля ±20 °/с, шум 0,05 °/с ср. кв. при DLPFCFG = 2 и 0,005 °/с/√Гц, механические частоты X 30–36, Y 27–33, Z 24–30 кГц, данные 4–8000 Гц, установление нуля 30 мс; разд. 6.2 — акселерометр: ±2…±16 g, 16 384…2048 LSB/g, типовые допуск ±3 %, ноль ±50 мg (X, Y) и ±80 мg (Z), 400 мкg/√Гц, сноска 1 о типовом значении нуля после MSL3, данные 4–1000 Гц; разд. 6.3 — температура: типовые 340 LSB/°C, −521 LSB при 35 °C, линейность ±1 °C; типовые токи 3,6–3,9 мА, 500 мкА, 10–140 мкА, 5 мкА; VLOGIC не выше VDD; разд. 6.4 — I²C 100 и 400 кГц, адреса 1101000 и 1101001, VIH от 0,7·VLOGIC, VIL до 0,3·VLOGIC; разд. 6.5 — вход SCL и SDA до VLOGIC + 0,5 В; разд. 6.6 — PLL до 10 мс; разд. 6.7 — ёмкость шины до 400 пФ; разд. 6.9 — предельные режимы; 7.1 — выводы QFN-24; 7.3 — внешние конденсаторы; 7.4 — порядок включения; 7.9, 7.11, 7.17, 7.19 — DMP, вспомогательная шина, FIFO, датчик температуры кристалла; 9.2–9.3 — адрес и посылки I²C; 10.2 — уровни выводов MPU-6050 задаёт VLOGIC; 11.2 и 11.4.2–11.4.3 — корпус 4 × 4 × 0,9 мм с шагом 0,5 мм, центральную площадку не паять, дорожки под корпусом запрещены, частоты возбуждения 33, 30 и 27 кГц ± 3 кГц
- TDK InvenSense. MPU-6000 and MPU-6050 Register Map and Descriptions (RM-MPU-6000A-00, Revision 4.2, 19 августа 2013) — разд. 3 — карта регистров, значения после сброса 0x40 у PWR_MGMT_1 и 0x68 у WHO_AM_I; разд. 4 — запуск в режиме сна; 4.2 — Sample Rate = Gyroscope Output Rate / (1 + SMPLRT_DIV); 4.3 — таблица DLPF_CFG; 4.4 и 4.5 — FS_SEL и AFS_SEL; 4.6, 4.30, 4.31 — FIFO; 4.14–4.16 — прерывания и режим обхода; 4.17 и 4.19 — данные в дополнительном коде, чувствительность, пакетное чтение одного отсчёта; 4.18 — T = TEMP_OUT / 340 + 36,53; 4.27 — I2C_IF_DIS у MPU-6050 всегда 0; 4.28 — SLEEP, CLKSEL и рекомендация тактировать от гироскопа; 4.29 — режим малого потребления; 4.32 — WHO_AM_I
- TDK InvenSense. Поиск по сайту invensense.tdk.com, запрос «MPU-6050» (проверено 18 октября 2026) — находятся только PS-MPU-6000A-00 ред. 3.4 и RM-MPU-6000A-00 ред. 4.2 с датой обновления 2013-08-19 и темы форума; страницы продукта нет, отметки EOL или NRND нет
- TDK InvenSense. Старый адрес страницы продукта MPU-6050 (проверено 18 октября 2026) — перенаправляет на https://www.invensense.tdk.com/en-us/products/motion-tracking/6-axis/mpu-6050, который отвечает кодом 200 со страницей «Page Not Found | TDK InvenSense»
Нашли ошибку?
Смотрите также
- Микросхемы датчиковТок, давление, влажность, температура, свет, ИК: карточки и статьи
- Акселерометры и гироскопыBMI160, BMI270, BMI323, BNO055: параметры, дрейф гироскопа, слияние, подключение
- I²CSDA и SCL, START/STOP, ACK, адреса, скорости, расчёт подтяжек
- Адрес I²C7-битный адрес ведомого и байт адреса с битом R/W
- Дополнительный кодTwo's complement: запись отрицательных целых
- Смещение нуля гироскопаПоказание гироскопа в покое: значения, дрейф угла, компенсация