STM32 HW-579 2편 : 자이로스코프

DongHee Lim·2022년 4월 21일
0

STM32

목록 보기
10/11

서론


9축센서를 다루다 보니

3개의 센서로 나눠져 있어서 하나씩 하려고한다.

그 중 자이로스코프 ITG3205 에 대해 알아보자.

참고) HW-579 이외에 GY-85 나 Gyroscope 6축 센서 등에 들어있다.


ITG3205


AD0 는 같은 장치가 있을 때 구분하는 값이다.
일반적으로 0으로 잡고 하면된다.

I2C Device Address = 110 1000
0110 1000 => 0x68
7bits 주소이다.


Device Address + write bit(0)
1101 0000 = 0xD0
Device Address + Read bit(1)
1101 0001 = 0xD1

Single-Byte Read Sequence : 1 바이트 데이터 읽어오기
Burst Read Sequence : 여러바이트 읽어오기


Single-Byte Write Sequence : 1 바이트 데이터 쓰기
Burst Write Sequence : 여러바이트 쓰기


레지스터 맵을 보면
0x1D ~ 0x22 에서 필요한 자이로 X, Y, Z 데이터가 있음을 알 수 있다


내용을 종합해보면

  • Single Byte Write 로 초기화
  • Single Byte Read 로 값 읽어오기

로 볼 수 있다.

물론 Burst 로 한번에 쓰거나 읽을 수도 있지만
X, Y, Z에 따라 분할하는게 오류가 적을 것 같다.


Read

Device 주소 읽기

Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0
0110100-

Bit0 은 같은 부품구분용 AD0 -> 0
0110 1000 => 0x68 추출


얻어온 Device 주소를 이용할 때
주소 7 bits + R/_W
AD + W = 110 1000 + Write Bit(0) = 1101 0000 = 0xD0
AD + R  = 110 1000 + Write Bit(1) = 1101 0001 = 0xD1

Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0
11010000/1

사용 함수

HAL_StatusTypeDef HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout)
uint8_t buffer[8];
HAL_I2C_Mem_Read(&hi2c1, 0xD0, 0x1D, 1, buffer, 1, 10)	// AD + W
HAL_I2C_Mem_Read(&hi2c1, 0xD0, 0x1D, 1, buffer, 1, 10)	// AD + W
HAL_I2C_Mem_Read(&hi2c1, 0xD0, 0x1D, 1, buffer, 1, 10)	// AD + W

<작성 중>

profile
하고 싶은 것, 소유하고 싶은 것, 좋아하는 것

0개의 댓글