MPU6050-가속도 센서 data 질문

메카 2016-10-18 (화) 17:38 3년전 4222  

MPU6050 가속도 센서값이 이상하여 문의 드립니다. MPU6050의 Z축이 가속도 방향으로 두고 Rawdata를 Serial로 보면 1g(15xxx~16xxx)값이 나와야 정상인 것으로 알고 있습니다. 하지만 아래와 같이 거의 0.5g보다 좀 낮은 값(6000~7000)의 값으로 나옵니다.


cX = 212 | AcY = 172 | AcZ = 7008 | Tmp = 32.29 | GyX = 1487 | GyY = -136 | GyZ = -283
AcX = 228 | AcY = 164 | AcZ = 6984 | Tmp = 32.34 | GyX = 1509 | GyY = -122 | GyZ = -267
AcX = 152 | AcY = 152 | AcZ = 6916 | Tmp = 32.25 | GyX = 1470 | GyY = -154 | GyZ = -279
AcX = 152 | AcY = 140 | AcZ = 6872 | Tmp = 32.25 | GyX = 1487 | GyY = -142 | GyZ = -289
AcX = 108 | AcY = 184 | AcZ = 6840 | Tmp = 32.15 | GyX = 1471 | GyY = -147 | GyZ = -273
AcX = 164 | AcY = 44 | AcZ = 6916 | Tmp = 32.25 | GyX = 1494 | GyY = -127 | GyZ = -285
AcX = 108 | AcY = 228 | AcZ = 6716 | Tmp = 32.20 | GyX = 1483 | GyY = -144 | GyZ = -291
AcX = 88 | AcY = 284 | AcZ = 6696 | Tmp = 32.29 | GyX = 1485 | GyY = -139 | GyZ = -289
AcX = 224 | AcY = 108 | AcZ = 6716 | Tmp = 32.29 | GyX = 1482 | GyY = -155 | GyZ = -282
AcX = 156 | AcY = 168 | AcZ = 6780 | Tmp = 32.25 | GyX = 1486 | GyY = -150 | GyZ = -267
AcX = 172 | AcY = 148 | AcZ = 6844 | Tmp = 32.25 | GyX = 1481 | GyY = -138 | GyZ = -294
AcX = 188 | AcY = 216 | AcZ = 6884 | Tmp = 32.25 | GyX = 1498 | GyY = -150 | GyZ = -278
AcX = 224 | AcY = 148 | AcZ = 6876 | Tmp = 32.25 | GyX = 1487 | GyY = -151 | GyZ = -277
AcX = 228 | AcY = 260 | AcZ = 6836 | Tmp = 32.34 | GyX = 1472 | GyY = -147 | GyZ = -269
AcX = 248 | AcY = 160 | AcZ = 6764 | Tmp = 32.15 | GyX = 1505 | GyY = -133 | GyZ = -287
AcX = 136 | AcY = 120 | AcZ = 6820 | Tmp = 32.20 | GyX = 1472 | GyY = -132 | GyZ = -283
AcX = 244 | AcY = 136 | AcZ = 6856 | Tmp = 32.20 | GyX = 1484 | GyY = -136 | GyZ = -275
AcX = 160 | AcY = 156 | AcZ = 6816 | Tmp = 32.29 | GyX = 1503 | GyY = -141 | GyZ = -299
AcX = 180 | AcY = 172 | AcZ = 6820 | Tmp = 32.25 | GyX = 1509 | GyY = -145 | GyZ = -269
AcX = 144 | AcY = 108 | AcZ = 6716 | Tmp = 32.25 | GyX = 1492 | GyY = -141 | GyZ = -302
AcX = 156 | AcY = 80 | AcZ = 6828 | Tmp = 32.11 | GyX = 1517 | GyY = -144 | GyZ = -244
AcX = 252 | AcY = 284 | AcZ = 6748 | Tmp = 32.29 | GyX = 1448 | GyY = -135 | GyZ = -297
AcX = 208 | AcY = 144 | AcZ = 6924 | Tmp = 32.34 | GyX = 1490 | GyY = -141 | GyZ = -276
 

X또는 Y축의 가속도 값을 확인해 봐도 모두 위와 비슷한 값이 나옵니다. AFS_SEL 레지스터의 비트를 읽어봐도 0(+/- 2g)로 설정되어 있습니다. 무엇이 잘못된 건가요? Arduino CC홈페이지에 보면 GY-521 모듈의 capacitor값의 잘못으로 데이타가 아주 엉망으로 나올 수 있다고 하는데(: http://forum.arduino.cc/index.php?topic=394691.0 ) 이것과 관련된 것은 아닌지 모르겠습니다. 저가 혹시나 해서 여기서 두개를 구매했는데 모두다 결과는 동일합니다.


사용한 환경은 Arduino uno를 사용했고 소스코드는 arduino는 아래 rawdata를 읽어오는 코드입니다. ㅎ

  1. // MPU-6050 Short Example Sketch
  2. // By Arduino User JohnChi
  3. // August 17, 2014
  4. // Public Domain
  5. #include<Wire.h>
  6. const int MPU_addr=0x68;  // I2C address of the MPU-6050
  7. int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ;
  8. void setup(){
  9.   Wire.begin();
  10.   Wire.beginTransmission(MPU_addr);
  11.   Wire.write(0x6B);  // PWR_MGMT_1 register
  12.   Wire.write(0);     // set to zero (wakes up the MPU-6050)
  13.   Wire.endTransmission(true);
  14.   Serial.begin(9600);
  15. }
  16. void loop(){
  17.   Wire.beginTransmission(MPU_addr);
  18.   Wire.write(0x3B);  // starting with register 0x3B (ACCEL_XOUT_H)
  19.   Wire.endTransmission(false);
  20.   Wire.requestFrom(MPU_addr,14,true);  // request a total of 14 registers
  21.   AcX=Wire.read()<<8|Wire.read();  // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)    
  22.   AcY=Wire.read()<<8|Wire.read();  // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
  23.   AcZ=Wire.read()<<8|Wire.read();  // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
  24.   Tmp=Wire.read()<<8|Wire.read();  // 0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L)
  25.   GyX=Wire.read()<<8|Wire.read();  // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)
  26.   GyY=Wire.read()<<8|Wire.read();  // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L)
  27.   GyZ=Wire.read()<<8|Wire.read();  // 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L)
  28.   Serial.print("AcX = "); Serial.print(AcX);
  29.   Serial.print(" | AcY = "); Serial.print(AcY);
  30.   Serial.print(" | AcZ = "); Serial.print(AcZ);
  31.   Serial.print(" | Tmp = "); Serial.print(Tmp/340.00+36.53);  //equation for temperature in degrees C from datasheet
  32.   Serial.print(" | GyX = "); Serial.print(GyX);
  33.   Serial.print(" | GyY = "); Serial.print(GyY);
  34.   Serial.print(" | GyZ = "); Serial.println(GyZ);
  35.   delay(333);
  36. }


도움 부탁드리겠습니다.


감사합니다.



==================================



안녕하세요 메카솔루션입니다.

MPU6050으로 측정되는 값의 범위는  -16383 ~ +16383 입니다.

레지스터리로 감도가 -2 ~ 2g 로 설정이 되어있다면 16383이 2g 이며 그의 절반인 8000에 가까운 값이 1g인것이 맞습니다.

감사합니다.

담당자: yevgeny


==================================



안녕하세요. 답변 감사합닉다.


저가 알기로 16bit값이기 때문에 -32767 ~ + 32767로 알고 있습니다. Datasheet에도 아래와 같이 LSB당 16384이므로 MSB와 같이 사용하면 두배가 되야 될 것 같습니다.


AFS_SEL=0     16,384LSB/g


다사 한번 확인 부탁드립니다.


감사합니다. 






==================================



안녕하세요 메카솔루션입니다.

네 다시 확인해보니 16비트네요 아무래도 제가 1비트는 체크섬인것으로 착각한듯합니다.

해당코드로 직접테스트해본바로는 15200 ~ 16000 즈음으로 값이 정상적으로 나오는것으로 확인되었습니다.

제품이 불량이 아닌지 의심이 되나, 2제품이 동시에 이러한 현상이 나타날 가능성은 적은것같습니다.

우선 저희가 회수를 하여서 테스트를 하는것이 좋을듯합니다.

테스트 요청을 하시겠다면 저희 게시판에 주문자분 성함과, 주문번호, 회수받으실 주소 알려주시면 확인후 처리하도록 하겠습니다.

감사합니다.


==================================



아래 주문 내역입니다.

주문 번호 2016090617373450

주문자명 : 천 병효

전화번호 : 010-8141-3688

주소는 경기도 용인시 기흥구 보라동 화성파크드림 아파트 305동 302호입니다.


보도 2개다 Test 부탁드립니다.


감사합니다.

메카리워즈 Image Map


모바일 버전으로 보기