본문 바로가기
MCU/STM32

[MPU6050] 레지스터

by mokhwasomssi 2021. 2. 20.

1. MPU6050 레지스터 초기값

모든 레지스터의 초기값은 0x00이다. (예외 PWR_MGMT_1, WHO_AM_I)

PWR_MGMT_1 = 0x40 (address 0x6B)

WHO_AM_I = 0x68 (address 0x75)

2. 필요한 레지스터 목록 (센서값 읽기 위해서 필요한 최소 레지스터)

마스터에서 write하는 레지스터

SMPLRT_DIV : 샘플링 레이트 설정

GYRO_CONFIG : 자이로스코프 측정범위 설정

ACCEL_CONFIG : 엑셀로미터 측정범위 설정

PWR_MGMT_1 : 센서 키기

SMPLRT_DIV : sample rate divider (address 0x19)

MPU6050의 샘플 레이트를 정하기 위해 gyroscope out rate를 나누는 레지스터

초기 값 : 0000 0000 (0x00)

변경 값 : 0000 0111 (0x07) ->sample rate = 1kHz로 설정.

sensor register output, FIFO output, DMP sampling 모두 샘플 레이트를 기반으로 함.

sample rate = gyro output rate / (1 + SMPLRT_DIV)

DLPF(digital low pass filter)를 안쓸때, gyroscope output rate = 8kHz

쓰면, gyroscope output rate = 1kHz

Parameters

SMPLRT_DIV : 8bit unsigned value. 샘플 레이트는 gyroscope output rate에 이 값을 나눈 값임.

+DLPF쓰고 SMPLRT_DIV = 255 이면

sample rate = 1kHz / (1 + 255) =3.9-> 최소 샘플 레이트

GYRO_CONFIG : gyroscope configuration (address 0x1B)

자이로스코프 셀프 테스트와 측정 범위를 설정하기 위해 쓰이는 레지스터

초기 값 : 0000 0000 (0x00)

변경 값 : 0000 0000 (0x00) -> full scale range-250 ~ +250 deg/sec로 설정 (셀프 테스트 사용x)

셀프테스트는 잘 모르겠으요ㅜㅜ

밑에 테이블에 따라 자이로스코프 아웃풋 범위 설정 가능.

단위 deg/sec

Parameter

XG_ST : 1로 set 하면, x축 자이로스크프 셀프테스트 실행

YG_ST :1로 set 하면, y축 자이로스크프 셀프테스트 실행

ZG_ST : 1로 set 하면, z축 자이로스크프 셀프테스트 실행

FS_SEL : 2bit unsigned value. 자이로스코프의 측정 범위 정함.

ACCEL_CONFIG : accelerometer configuration (address 0x1C)

엑셀로미터 셀프테스트와 측정 범위 설정하기 위한 쓰이는 레지스터.

또한 digital high pass filer(DHPF)를 설정한다. (뭔지 잘 모르겠다.)

초기 값 0000 0000 (0x00)

설정 값 0000 0000 (0x00) -> full scale range~2g ~ +2g로 설정 (셀프 테스트 사용x)

셀프 테스트 잘모름.

밑에 테이블에 따라 엑셀로미터 아웃풋 범위 설정.

단위 g : 중력 가속도

Parameter

XA_ST : 1로 set되면 x축 엑셀로미터 셀프 테스트 실행

YA_ST : 1로 set되면 y축 엑셀로미터 셀프 테스트 실행

ZA_ST : 1로 set되면 z축 엑셀로미터 셀프 테스트 실행

AFS_SEL : 2bit unsigned value. 엑셀로미터 측정 범위 설정

PWR_MGMT_1 : power management 1 (addresss 0x6B)

유저가 파워 모드랑 클럭 소스를 설정 할 수 있게 함.

디바이스 전체를 리셋하는 비트와 온도 센서를 안쓰게 해주는 비트를 제공함.

초기 값 : 0100 0000 (0x40) -> SLEEP만 1

변경 값 : 0000 0000 -> SLEEP 꺼줌, MPU6050 클럭 소스 내부 오실레이터 사용.

SLEEP이 1이라면, MPU6050은 low power sleep mode

SLEEP이 0이고 CYCLE이 1이라면 MPU6050은 cycle mode

cycle mode는 디바이스가 가속도 센서로부터 하나의 샘플링 데이터를 얻기 위해

sleep mode와 waking up을 반복하는 것. (wake 주기는 LP_WAKE_CTRL 레지스터에서 설정 가능)

MPU6050 클럭 소스로 내부 8MHz 오실레이터(gyroscope based clock)와 외부 소스가 선택 될 수 있다.

둘 중에 하나가 선택 됐을 때, 가속도 센서가 disable이라면 MPU6050은 low power mode로 작동한다.

클럭 소스 기본 값은 내부 오실레이터이다.

Parameters

DEVICE_RESET : 1로 set 되면, 모든 내부 레지스터를 초기 값으로 리셋시킴.

리셋이 끝나면 0으로 바뀜.

SLEEP : 1로 set 되면, MPU6050를 sleep mode로 바꿈.

CYCLE : 1로 set되고 SLEEP이 0이라면, MPU6050은 sleep mode와 waking up을 반복함.(자세한

설명은 위에 있음)

TEMP_DIS : 1로 set 되면, 온도센서를 disable

CLKCEL : 3bit unsigned value. 디바이스의 클럭 소스를 정함.

마스터에서 read하는 레지스터

WHO_AM_I

ACCEL_XOUT_H

ACCEL_XOUT_L

ACCEL_YOUT_H

ACCEL_YOUT_L

ACCEL_ZOUT_H

ACCEL_ZOUT_L

GYRO_XOUT_H

GYRO_XOUT_L

GYRO_YOUT_H

GYRO_YOUT_L

GYRO_ZOUT_H

GYRO_ZOUT_L

WHO_AM_I (address 0x75)

디바이스의 신원을 확인하기 위해 쓰이는 레지스터.

MPU6050 7bit i2c 주소가 쓰여져 있다. -> 0x68

AD0 pin의 값과 상관없이 0x68을 유지한다.

Accelerometer Measurements

ACCEL_XOUT_H, ACCEL_XOUT_L (address 0x3B, 0x3C)

ACCEL_YOUT_H, ACCEL_YOUT_L (address 0x3D, 0x3E)

ACCEL_ZOUT_H, ACCEL_ZOUT_L (address 0x3F, 0x40)

가장 최근의 엑셀로미터 측정 값이 저장돼 있는 레지스터

이 레지스터에 accelerometer 측정 값이 sample rate 주기로 쓰여진다.

엑셀로미터 아웃풋 레이트가 1kHz라면 샘플 레이트는 1kHz보다 크다.

(엑셀로미터 아웃풋 레이트는 1kHz가 최대)

엑셀로미터 민감도

Parameter

ACCEL_XOUT : ACCEL_XOUT_H + ACCEL_XOUT_L

가장 최근의 x축 엑셀로미터 측정 값을 저장

ACCEL_YOUT : ACCEL_YOUT_H + ACCEL_YOUT_L

가장 최근의 y축 엑셀로미터 측정 값을 저장

ACCEL_ZOUT : ACCEL_ZOUT_H + ACCEL_ZOUT_L

가장 최근의 z축 엑셀로미터 측정 값을 저장

gyroscope measurements

GYRO_XOUT_H, GYRO_XOUT_L (address 0x43 0x44)

GYRO_YOUT_H, GYRO_YOUT_L (address 0x45 0x46)

GYRO_ZOUT_H, GYRO_ZOUT_L (address 0x47 0x48)

가장 최근의 자이로스코프 측정 값이 저장돼 있는 레지스터

이 레지스터에 gyroscope 측정 값이 sample rate 주기로 쓰여진다.

자이로스코프 민감도

GYRO_XOUT : GYRO_XOUT_H + GYRO_XOUT_L

가장 최근의 x축 자이로스코프 측정 값을 저장

GYRO_YOUT : GYRO_YOUT_H + GYRO_YOUT_L

가장 최근의 y축 자이로스코프 측정 값을 저장

GYRO_ZOUT : GYRO_ZOUT_H + GYRO_ZOUT_L

가장 최근의 z축 자이로스코프 측정 값을 저장