본문 바로가기
MCU/STM32

[MPU6050] 기본소개, i2c, 연결

by mokhwasomssi 2021. 2. 20.

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)을 사용함

gy-521 schematic

 

SDA, SCL에 풀업저항 달려있음

따라서 보드와 i2c선 연결할때 그냥 연결하면 됨.