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축 자이로스코프 측정 값을 저장