소개
3축 자이로스코프, 3축 가속도계, 3축 지자계 센서와 디지털 모션 프로세서가 통합된 9축 IMU 센서입니다. 저비용 고성능의 센서로 스마트폰, 드론 등의 여러 장치의 모션제어에사용됩니다. I2C 인터페이스를 사용합니다.
사양
- Operating voltage :3 – 5V
- Three 16-bit analog-to-digital converters (ADCs) for digitizing the gyroscope outputs
- Three 16-bit ADCs for digitizing the accelerometer outputs
- Three 16-bit ADCs for digitizing the magnetometer outputs
- Gyroscope full-scale range of ±250, ±500, ±1000, and ±2000°/sec (dps)
- Accelerometer full-scale range of ±2g, ±4g, ±8g, and ±16g
- Magnetometer full-scale range of ±4800μT
- Internal Digital Motion Processing engine supports advanced MotionProcessing and low power functions such as gesture recognition using programmable interrupts
명령
INIT
모듈을 초기화합니다.
SETUP
모듈을 설정합니다.
항목 | 타입 | 설명 |
---|---|---|
Accel full scale | WRITE | 가속도센서의 측정범위(Full Scale)을 선택합니다.(±2g,±4g,±8g,±16g) |
Gyro full scale | WRITE | 자이로센서의 측정범위(Full Scale)을 선택합니다. (±250dps,±500dps,±1000dps,±2000dps) |
Mag output | WRITE | 지자기센서의 출력해상도를 선택합니다. (14bits,16bits) |
FIFO Sample rate | WRITE | 초당 샘플링 속도를 선택합니다. (1000Hz,500Hz,333Hz,250Hz,200Hz,167Hz,143Hz,125Hz) |
Gyro dlpf_cfg | WRITE | 자이로센서의 Digital Low Pass Filter의 대역폭(Bandwidth)을 선택합니다. 값이 작을수록 노이즈는 감소하나 반응속도 가 느리며 , 값이 클수록 반응속도는 빠르나 노이즈가 증가합니다. (250Hz,184Hz,92Hz,41Hz,20Hz,10Hz,5Hz,3600Hz) |
Accel dlpf_cfg | WRITE | 가속도센서의 Digital Low Pass Filter의 대역폭(Bandwidth)을 선택합니다. 값이 작을수록 노이즈는 감소하나 반응속도 가 느리며 , 값이 클수록 반응속도는 빠르나 노이즈가 증가합니다. (218Hz_0,218Hz_1,99Hz,45Hz,21Hz,10Hz,5Hz,420Hz) |
Mag declination ¹ | WRITE | 현재위치의 자기편각(Magnetic declination)을 입력합니다. 자기편각은 위치와 시간에 따라 변화하는 값입니다. |
Select filter | WRITE | Quaternion 필터를 선택합니다. (none,Madgwick,Mahony) |
Set filter iteration | WRITE | Quaternion 필터의 iteration (반복계산) 횟수를 설정합니다. |
¹ 현재위치의 자기편각은 여기를 참고하여 입력합니다. 예를 들어 2023년 2월 17일 서울의 자기편각은 -8.92 입니다.
GET_RAW_DATA
가속도, 자이로, 지자기의 측정값을 읽어옵니다.
항목 | 타입 | 설명 |
---|---|---|
Accel X (g) | READ | 가속도 x축 |
Accel Y (g) | READ | 가속도 y축 |
Accel Z (g) | READ | 가속도 z축 |
Gyro X (deg/s) | READ | 자이로 x축 |
Gyro Y (deg/s) | READ | 자이로 y축 |
Gyro Z (deg/s) | READ | 자이로 z축 |
Mag X (mG) | READ | 지자기 x축 |
Mag Y (mG) | READ | 지자기 y축 |
Mag Z (mG) | READ | 지자기 z축 |
GET_YAW_PITCH_ROLL
Yaw, Pictch, Roll를 계산합니다.
항목 | 타입 | 설명 |
---|---|---|
Yaw (º) | READ | Yaw 각도 |
Pitch (º) | READ | Pitch 각도 |
Roll (º) | READ | Roll 각도 |
이 명령의 실행주기는 가급적 작게 설정해야 합니다. (예: 10ms) 실행주기가 클수록 값의 오차도 비례하여 커집니다.
SET_BIAS
캘리브레이션 편차를 설정합니다.
항목 | 타입 | 설명 |
---|---|---|
Accel bias X (g) | WRITE | 가속도 x축 편차 |
Accel bias Y (g) | WRITE | 가속도 y축 편차 |
Accel bias Z (g) | WRITE | 가속도 z축 편차 |
Gyro bias X (deg/s) | WRITE | 자이로 x축 편차 |
Gyro bias Y (deg/s) | WRITE | 자이로 y축 편차 |
Gyro bias Z (deg/s) | WRITE | 자이로 z축 편차 |
Mag bias X (mG) | WRITE | 지자기 x축 편차 |
Mag bias Y (mG) | WRITE | 지자기 y축 편차 |
Mag bias Z (mG) | WRITE | 지자기 z축 편차 |
Mag Scale X | WRITE | 지자기 x축 스케일 |
Mag Scale Y | WRITE | 지자기 y축 스케일 |
Mag Scale Z | WRITE | 지자기 z축 스케일 |
CALIB_ACCEL_GYRO
가속도, 자이로센서를 캘리브레이션 합니다. 모듈을 평평한 바닥에 위를 향하도록 놓은 뒤 명령을 실행합니다. 완료될때까지 모듈이 움직이지 않도록 합니다.
CALIB_MAG
지자기센서를 캘리브레이션 합니다. 명령을 실행하고 완료될때까지 모듈을 ∞ 모양으로 계속 움직여줍니다.
GET_BIAS
캘리브레이션 편차를 읽어옵니다.
항목 | 타입 | 설명 |
---|---|---|
Accel bias X (g) | READ | 가속도 x축 편차 |
Accel bias Y (g) | READ | 가속도 y축 편차 |
Accel bias Z (g) | READ | 가속도 z축 편차 |
Gyro bias X (deg/s) | READ | 자이로 x축 편차 |
Gyro bias Y (deg/s) | READ | 자이로 y축 편차 |
Gyro bias Z (deg/s) | READ | 자이로 z축 편차 |
Mag bias X (mG) | READ | 지자기 x축 편차 |
Mag bias Y (mG) | READ | 지자기 y축 편차 |
Mag bias Z (mG) | READ | 지자기 z축 편차 |
Mag Scale X | READ | 지자기 x축 스케일 |
Mag Scale Y | READ | 지자기 y축 스케일 |
Mag Scale Z | READ | 지자기 z축 스케일 |
예제
부품
부품 | 갯수 |
---|---|
MPU9250 | 1 |
연결
MPU9250 | GPIO |
---|---|
VIN | 3.3V |
GND | GND |
SCL ¹ | 3 (I2C1 SCL) |
SDA ¹ | 2 (I2C1 SDA) |
AD0 ² | 연결안함 |
¹ 하드웨어 I2C 핀 (GPIO 2,3)에 연결합니다. 소프트웨어 (bit-bang) 인터페이스 사용시 임의의 핀을 사용할 수도 있습니다.
² 연결하지 않으면 I2C주소는 0x68, 3.3V에 연결하면 0x69 입니다. (모듈 제조사에 따라 다를 수 있습니다.)
² 연결하지 않으면 I2C주소는 0x68, 3.3V에 연결하면 0x69 입니다. (모듈 제조사에 따라 다를 수 있습니다.)
프로젝트
캘리브레이션
- CALIB_ACCEL_GYRO, CALIB_MAG 명령을 실행 (최초 한번만)
- GET_BIAS 명령을 실행하여 편차값을 읽어옴 (최초 한번만)
- 모듈의 초기명령에 SET_BIAS 를 추가하고 읽어온 편차값을 입력
- 다음 실행시 부터는 SET_BIAS 입력된 편차값에 의해 보정됨