본문 바로가기
  • 경제적 자유를 얻는 그날까지
엔지니어링/임베디드

IMU MEMS 센서 MPU6050 살펴보기 2 - 가속도 센서

by 베니스상인 2020. 3. 22.

지난 번에 MPU6050의 자이로센서에 대해 살펴보고 노이즈 오차를 측정해보았다.  오늘은 MPU6050의 가속도 센서를 살펴보자.

 

 

 

IMU MEMS 자이로 센서, 가속도 센서의 특징 및  각도 계산에 대해서는 아래 블로그 참고

https://swiftcam.tistory.com/95

 

IMU MEMS 센서(Gyroscope + Accelerometer)

MEMS 란? MEMS(Micro Electro Mechanical Systems) 라고 한다. 센서의 기술이 발달함에 따라 기계식 센서를 실리콘다이와 같은 반도체 안에 구현한 초소형 센서들을 말한다. MEMS 중 주변에서 쉽게 사용할 수 있는..

swiftcam.tistory.com

 

MPU6050의 자이로 센서 특징 살펴보기는 아래 블로그 참고

https://swiftcam.tistory.com/96

 

IMU MEMS 센서 MPU6050 살펴보기 1 - Raw data 오차 측정

IMU(Inertial Measurement Unit: 관성측정장치)는 각속도와 가속도를 이용하여 물체의 자세를 측정해주는 센서이다. 요즘 스마트폰이나 드론에 IMU 센서를 많이 사용하고 있다. 보통 IMU 센서는 3축 자이로와 3축..

swiftcam.tistory.com

 

 

 

 

1. 가속도 센서(Accelerometer)

MPU6050 가속도 센서의 특징은 다음과 같다.

- 3축 가속도 측정(±2, ±4, ±8, ±16g)

- 16bit ADC 

- digital LPF(Low Pass Filter)

- I2C 인터페이스(최대 400KHz)

- 노이즈: 0.004g@10Hz(AFS_SEL=0, DLPF_CFG=3)

 

FS_SEL은 가속도 센서의 Full-Scale 범위를 지정한다.

±2g에서 최대 ±16g까지 가능하다. 

 

ADC Resolution은 16bit로 정해져있고, Full-Scale 범위를 ADC resolution으로 나누는 것이므로 Full-Scale 값이 작으면 좀 가속도 값을 좀더 섬세하게 측정하는 것이고, Full-Scale을 크게 가져가면 큰 변화를 감지하기 유리하다.

 

AFS_SEL = 3으로 설정하였다. 이때 Full-Scale은 ±16g이다.

 

AFS_SEL = 3일때 Sensitivity는 2048 LSB/g이다. 

 

Sensitivity는 ADC Resolution을 Full-Scale로 나눈 것이다.  65536/32 = 2048 LSB/g이므로 1g는 ADC의 2048 LSB에 해당된다는 의미이다.

 

LSB값은 가속도 센서에서 출력되는 값이다. ADC Resolution이 16 bit 이므로 센서 출력은 0~65535 범위를 가지는데 예를 들어 가속도 센서 X, Y, Z축 출력이 각각 0, 0, 2048이 출력되었다면 가속도값은 아래와 같이 계산할 수 있다.

 

2048/2048 =1g

 

따라서 가속도 센서의 출력값을 가속도로 변환은 아래와 같이 계산할 수 있다.

 

Rx(g) = (AdcRx / Sensitivity)

Ry(g) = (AdcRy / Sensitivity)

Rz(g) = (AdcRz / Sensitivity)

 

 

 

 

2. 가속도 센서의 노이즈 측정

 

1) ±16g, DLPF 10Hz 에서의 노이즈 측정

 

먼저 데이터시트에서 제시한 노이즈 수준과 비슷한지 측정해보고자 한다.

지난번 자이로 센서의 노이즈 측정시 Full_Scale의 범위가 달라진다고 해서 노이즈 값이 바뀌지는 않았다. 따라서 서Full Scale은 최대인 ±16g에서 측정하기로 하고 나머지 조건은 데이터시트와 동일한 조건으로 시험하도록 한다.

 

측정조건은 아래와 같다.

- Full Scale: ±16g(AFS_SEL=3)

- 디지털 필터: 10Hz BW, 13.8ms Delay(DLPF_CFG=3)

 

데이터시트를 보면 위와 같은 조건에서 노이즈는 약 0.004g 라고 나와 있다.

 

측정 결과는 아래와 같다.

 

 

 

 

 

AccX, AccY, AccZ의 평균값은 거의 0g, 0g, -1g 즉, 지면에 수평으로 누워져 있는 상태를 표시하고 있다. 표준편자(STDEV)를 보면 0.05이하로 데이터시트에서 제시한 수준으로 측정됨을 알 수 있다. 굉장히 적은 편이다. 

 

하지만 DLPF = 3은 디지털 필터의 딜레이가 거의 14ms이나 발생하기 때문에 실시간으로 응답을 요구하는 시스템에는 사용하기가 어려울 것 같다. 노이즈 레벨을 측정하는 것에 의미를 두어야 겠다.

 

 

2) ±16g, DLPF 260Hz 에서의 노이즈 측정

 

다음은 디지털 필터를 사용하지 않았을 때 노이즈을 측정해보았다.

 

측정조건은 아래와 같다.

- Full Scale: ±16g(AFS_SEL=3)

- 디지털 필터: 260Hz BW, 0ms Delay(DLPF_CFG=0)

 

 

 

 

 

AccX축은 디지털 필터를 사용했을 때와 비교해보면 노이즈가 다소 증가한 것처럼 보인다. 

 

다른 축은 디지털 필터를 사용하지 않더라도 노이즈의 증가가 크지 않아 보인다. 디지털 필터를 사용하지 않아도 충분할 것 같다.

 

 

 

2) ±16g, DLPF 260Hz + 진동에서의 노이즈 측정

 

가속도 센서의 진동가했을 때 반응을 살표보기 위해 외부에 약한 진동을 추가하여 측정해보았다.

 

측정조건은 아래와 같다.

- Full Scale: ±16g(AFS_SEL=3)

- 디지털 필터: 10Hz BW, 0ms Delay(DLPF_CFG=0)

- 진동: 손가락으로 센서주변을 가볍게 두드림

 

 

 

 

 

 

약한 진동을 주었을 때 Z축에서 최대 0.01g까지 보인다. 모터와 같은 강한 고주파 진동이 들어오면 가속도 센서는 노이즈에 상당히 취약할 것으로 보인다. 

 

 

3. 가속도 센서의 각도 계산

 

 

가속도 센서의 출력값을 가속도값을 변환하는 것은 앞에서 다루었다.

 

Rx(g) = (AdcRx / Sensitivity)

Ry(g) = (AdcRy / Sensitivity)

Rz(g) = (AdcRz / Sensitivity)

 

Sensitivity = 65536 / 32

0.00048828125 = 1 / Sensitivity

 

 

가속도값을  각도로 변환하는 것은 아래 사이트를 참고하여 계산할 수 있다.

 

https://theccontinuum.com/2012/09/24/arduino-imu-pitch-roll-from-accelerometer/

 

Arduino IMU: Pitch & Roll from an Accelerometer

One day, looking for cheap sensors on ebay, I found this interesting board which contained everything I was looking for. It basically consists of a 3-axis accelerometer (ADXL345), a 3-axis magnetom…

theccontinuum.com

 

 

가속도를 이용할 경우 Yaw는 구하기 어려우므로 Roll, Pitch만 계산한다.

 

    #define RAD2DEG             57.2957914   

 

    ROL_ANGLE_ACC   = atan2(-acc_y, acc_z)*(RAD2DEG);
    PIT_ANGLE_ACC   = atan2(acc_x, sqrt(acc_y*acc_y + acc_z*acc_z))*(RAD2DEG);

 

 

 

 

결과를 시리얼 플로터를 이용해 확인해보았다. Roll, Pitch 방향으로 움직이고 움직이면서 약한 진동을 강제로 넣었다. 

 

 

 

가속도는 자이로에 비해 노이즈가 굉장히 많은 편이고 진동에 취약하다. 가속도 센서를 사용할 때는 반드시 방진구조를 가져가야 하며 진동이 타고 들어오지 않도록 센서를 설계해야 한다.

 

그러나 가속도 센서를 이용하여 각도를 구할 경우 자이로에서 나타났던 drift 현상은 보이지 않는다.  

 

 

 

 

 

 

728x90

댓글