Запис #23 "Внутрішня структура MPU-6050 (GY-521)"

Додано: 2016-02-13 13:48:31 'admin

Для вивчення структури MPU-6050 можна скористатись документацією по цій мікросхемі. Не зважаючи на малі розміри в середині живе цілий світ. В загальному це повноцінний мікроконтроллер із можливістю підключення додаткових пристроїв по шині I2C, апаратною частиною обробки даних DMP (Digital Motion Processor), механічною частиною, термодатчиком, АЦП та іншими функціональними частинами.

По даним документації в мікросхемі засосвовано архітектуру MEMS (Micro Electro Mechanical Systems) - мікро-електро-механічні системи. В тілі мікросхеми існує і механічна і електрона частини. І вони зваємодіють між собою. Спочатку спрацьовує механічна частина, а потім сигнали від неї перетворюються в дані та заносяться в регістри, з яких потім і відбувається зчитування по шині I2C. 

Регістрів в мікосхемі 117. Але в документації описані не всі. В документації чомусь відсутня люба згадка про DMP. І регістри, які застововуються при роботі з цим інструментом. Але знайшлись люди, які розкрили не описані в документації регістри. Цей матеріал доступний по посиланню http://www.i2cdevlib.com/devices/mpu6050#registers.

Короткий опис деяких регістрів:

Регістри самотестування:

SELF_TEST_X (0x0D) - регістр для самотестування по вісі X для акселерометра (3 біта) та гіроскопа (5біт)
SELF_TEST_Y (0x0E) - регістр для самотестування по вісі Y для акселерометра (3 біта) та гіроскопа (5біт)
SELF_TEST_Z (0x0F) - регістр для самотестування по вісі Z для акселерометра (3 біта) та гіроскопа (5біт)
SELF_TEST_A (0x10) - регістр для самотестування для акселерометра (по 2 біта на вісь)
В загальному ці регістри використовуються для калібрування пристрою. По 5 біт на кожну вісь кожного датчика.

Регістр корекції частоти дискретизації:

SMPLRT_DIV (0x19) - регістр корекції частоти дискретизації. 8 біт. Дозволяє зкоректувати частоту дискетизації (simple rate) для датчиків, вихідних даних буфера FIFO. Скоректувати DMP та частоту переривань від детекора руху (Motion detection). Значення для гіроскопа розраховується як:

частота дискретизації (вибірки) = частота гіроскопа (регістр CONFIG[DLPF_CFG]) / (1 + значення SMPLRT_DIV)

Вихдячи з того, що частота акселерометра при різних значеннях CONFIG[DLPF_CFG] дорівнює 1кГц, межі для обох датчиків можуть бути:

для гіроскопа від 4 до 8000 Гц
для акселерометра від 4 до 1000 Гц.

Регістри конфігурації:

CONFIG(0x1A) - регістр конфігурації зовнішньої синхронізації та низькочастотного фільтра для гіроскопа та акселерометра
GYRO_CONFIG(0x1B) - регістр конфігурації гіроскопа. Дозволяє вмикати самотестування осей гіроскопа а також задавати кількість вибраних кутів за секунду
ACCEL_CONFIG(0x1C) - регістр конфігурації акселерометра. Дозволяє вмикати самотестування осей акселерометра а також визначає прискорення.
MOT_THR(0x1F) - регістр порогу, при перевищенні якого формується сигнал переривання під час руху. 
FIFO_EN(0x23) - регістри для включення буферу обміну для значень датчиків.
MOT_DETECT_CTRL(0x69) - регістр затримки акселерометра та детектування руху.
USER_CTRL(0x6A) - регістр дозволяє вмикати чи вимикати буфер FIFO, режим майста для шини I2C (при цьому він починає опитувати пристрої на виводах AUX), формує сигнали ресет для буферу, шини та всіх датчиків.
PWR_MGMT_1(0x6B) - регістр дозволяє керувати режимами споживання та частотами кварцування мікросхеми.
PWR_MGMT_2(0x6C) - регістр дозволяє конфігурувати частоту пробудження та переводити в режим стенд-бай вісі датчиків гіроскопа та акселерометра.

Регістри шини I2C:

I2C_MST_CTRL(0x24)
I2C_SLV0_ADDR(0x25)
I2C_SLV0_REG(0x26)
I2C_SLV0_CTRL(0x27)
I2C_SLV1_ADDR(0x28)
I2C_SLV1_REG(0x29)
I2C_SLV1_CTRL(0x2A)
I2C_SLV2_ADDR(0x2B)
I2C_SLV2_REG(0x2C)
I2C_SLV2_CTRL(0x2D)
I2C_SLV3_ADDR(0x2E)
I2C_SLV3_REG(0x2F)
I2C_SLV3_CTRL(0x30)
I2C_SLV4_ADDR(0x31)
I2C_SLV4_REG(0x32)
I2C_SLV4_DO(0x33)
I2C_SLV4_CTRL(0x34)
I2C_SLV4_DI(0x35)
I2C_MST_STATUS(0x36)
I2C_SLV0_DO(0x63)
I2C_SLV1_DO(0x64)
I2C_SLV2_DO(0x65)
I2C_SLV3_DO(0x66)
I2C_MST_DELAY_CTRL(0x67)

Регістри переривань:

INT_PIN_CFG(0x37) - управління перериваннями мікросхеми
INT_ENABLE(0x38) - вмикає апаратні переривання (детектор руху, переповнення буферу FIFO, по шині I2C, готовність даних для видачі).
INT_STATUS(0x3A) - зчитування показників переривань. При зчитуванні певний біт приймає значення 0.

Регістри для зчитування показників датчиків:

Акселерометр:
ACCEL_XOUT_H(0x3B)
ACCEL_XOUT_L(0x3C)
ACCEL_YOUT_H(0x3D)
ACCEL_YOUT_L(0x3E)
ACCEL_ZOUT_H(0x3F)
ACCEL_ZOUT_L(0x40)

Термодатчик:
TEMP_OUT_H(0x41)
TEMP_OUT_L(0x42)

Гіроскоп:
GYRO_XOUT_H(0x43)
GYRO_XOUT_L(0x44)
GYRO_YOUT_H(0x45)
GYRO_YOUT_L(0x46)
GYRO_ZOUT_H(0x47)
GYRO_ZOUT_L(0x48)

Регістри для зчитування даних зовнішніх пристроїв:

EXT_SENS_DATA_00(0x49) - EXT_SENS_DATA_23(0x60) - 24 регістри тільки для зчитування даних, що поступають із зовнішніх приладів по шині I2C.

Регістр скидування (ресет):

SIGNAL_PATH_RESET(0x68)

Регістри буфера FIFO:

FIFO_COUNTH(0x72)
FIFO_COUNTL(0x73)
FIFO_R_W(0x74)

Регістр із ідентифікатором (адресом) контроллера:

WHO_AM_I(0x75) - регістр містить адрес, по якому його може ідентивікувати основний (ведучий) пристрій на шині I2C. Може змінюватись в залежності від логічного рівня на вході AD0. При AD0 = 0 значення регістру 68. При AD0 = 1 значення регістру 69. 

Для більш детальної інформації можна скористатись документацією.

Файли:

MPU-6050
RM-MPU-6050

Коментарі: