GY-521(MPU6050 6축 자이로스코프 모듈) 사용함
저는 STM32F103RBT6-nucleo board를 사용했습니다.
센서 값을 받기 위해 필요한 최소한의 레지스터 설명만 넣었습니다.
이 글에 없는 것 : self test, FIFO, DMP, 인터럽트, DHPF
1. MPU6050 기본설명
-3축 각속도 센서 + 3축 가속도 센서 (+ 온도 센서)
-i2c 통신 사용
-16비트 analog to digital converters(ADCs)
-측정 범위 설정 가능(user programmable)
각속도 측정 범위 : ±250, ±500. ±1000, ±2000 deg/sec
가속도 측정 범위 : ±2g, ±4g, ±8g, ±16g (g : 중력 가속도)
-평평한 바닥에 있으면 가속도 센서는 x축 0g, y축 0g, z축 +1g로 측정한다.
-OUTPUT DATA RATE(user programmable, 샘플링 데이터)
각속도 센서 : 4 ~ 8kHz
가속도 센서 : 4 ~ 1kHz
-각속도 센서에 low-pass filter 사용가능 (user-selectable)
-i2c 통신 속도 -> 모든레지스터에서 Fast-mode : 400kHz
Standard-mode : 100kHz
-i2c 주소 -> pin AD0 = 0(low) : b1101000 //0x68
pin AD0 = 1(high) : b1101001 //0x69
하나의 마스터에 MPU6050 최대 2개까지 연결 가능.
-센서 데이터 레지스터
가장 최근의 각속도, 가속도 측정 데이터를 포함
read-only registers
i2c 통신을 통해 접근
-인터럽트
새로운 데이터(센서 데이터 레지스터에 저장된)가 사용가능할때 등등
-블록 다이어 그램
2. i2c 통신
-선 두개로 통신 -> SDA (signals serial data) + SCL (serial clock)
-선들은 open-drain이고 양방향
-내가 사용하려는 보드 -> 마스터 device
MPU6050 -> 슬레이브 device
-i2c 통신 규약
start(S) and stop(P) conditions
SDA, SCL선은 풀업저항에 의해 기본적으로 high 상태를 유지
시작 신호 : SDA신호가 high->low 이면 SCL에서 클럭 신호 발생
종료 신호 : 모든 비트 전송이 끝나면 SCL신호가 high가 되고 SDA신호가 low->high로 바뀜
data format / acknowledge
i2c 데이터 바이터는 8비트 길이 이다.
각각의 바이트에 acknowledge(ACK) signal이 따라 온다.
마스터가 ACK 신호를 위한 클락(그림에서 9번째)을 만들면 이 클락이 low일때 슬레이브에서 ACK신호(low, pull down)를 만들고 클락이 high일 때 동안 유지한다.
connumications
시작 신호 이후에 마스터는 7비트 슬레이브 주소 + 8번째 비트 read/write bit 를 보낸다.
->read bit 이면 슬레이브에서 데이터 받기
->write bit 이면 슬레이브에 데이터 쓰기
SCL(클럭 신호)이 low일때 SDA 신호를 바꿈
(시작 신호와 종료 신호는 해당 되지 않음)
MPU6050 registers에 데이터 쓰기
마스터 : 빨간색
슬레이브 : 파란색
single-byte write sequence
시작 신호(S) -> 슬레이브 address(1th~7th bit) + write bit(8th bit) -> ACK -> 레지스터 주소(RA)
->ACK -> 레지스터 데이터 -> ACK -> 종료 신호(P)
two-byte write sequence
시작 신호(S) -> 슬레이브 address(1th~7th bit) + write bit(8th bit) -> ACK -> 레지스터 주소(RA)
->ACK -> 레지스터 데이터(1) -> ACK -> 레지스터 데이터(2) -> ACK -> 종료 신호(P)
이런 경우에는 레지스터 데이터(1)은 마스터에서 전송한 레지스터 주소에 쓰여지고
레지스터 데이터(2)는 처음 레지스터 주소의 다음 주소에 쓰여진다.
MPU6050 registers의 데이터 읽기
single-byte read sequence
시작 신호(S) -> 슬레이브 address(1th~7th bit) + write bit(8th bit) -> ACK -> 읽고 싶은 레지스터 주소(RA) -> ACK -> 시작 신호(S) -> 슬레이브 address(1th~7th bit) + read bit(8th bit) -> ACK -> 레지스터 데이터 -> NACK -> 종료 신호(P)
two-byte read sequence
시작 신호(S) -> 슬레이브 address(1th~7th bit) + write bit(8th bit) -> ACK -> 읽고 싶은 레지스터 주소(RA) -> ACK -> 시작 신호(S) -> 슬레이브 address(1th~7th bit) + read bit(8th bit) -> ACK -> 레지스터 데이터 -> ACK -> 레지스터 데이터 -> NACK -> 종료 신호(P)
데이터 읽기가 끝나면 not acknowledge(NACK) signal과 종료 신호를 만들어서 통신을 끝낸다.
NACK은 9번째 클락 일때 SDA가 high 상태로 남아있는 것이다.
(위 그림에서 쓰인 약자 설명)
3. 연결
gy-521 모듈(MPU6050의 breakout board)을 사용함
SDA, SCL에 풀업저항 달려있음
따라서 보드와 i2c선 연결할때 그냥 연결하면 됨.