실제 프로젝트 [7] MEMS 관성 센서의 정확도 매개변수 및 단위 환산

1. 소개

  1. 많은 친구들이 프로젝트 작업 시 가속도계와 자이로스코프의 원시 데이터를 다른 단위로 변환하는 문제를 자주 다루는데, 이 기사에서는 이를 정리하고 추론해 보겠습니다. 1) 가속도계의 원시 데이터 응용에 사용되는 일반적인 변환 단위는 다음과 같습니다: g, m/s^2, 각도 2) 자이로스코프의 원시 데이터 응용에 사용되는 일반적인 변환 단위: °/s, red/s , 각도

  2. 이는 "일반적으로 사용되는 여러 가속도 감지 매개변수의 비교" 문서에 대한 업데이트입니다. 이 기사에서는 센서 매개변수와 여러 참가자의 정확도 매개변수의 비교를 함께 작성합니다. 이 기사에서는 정확도 매개변수와 단위 변환에 중점을 둡니다.

2 측정 범위 및 정확도

가속도계와 자이로스코프의 측정 범위와 측정 정확도는 MEMS 감지 데이터 시트에 나와 있습니다. 측정 정확도는 측정 범위를 기준으로 계산할 수 있습니다. 가속도든 자이로스코프든 데이터 레지스터는 16비트이며, 가장 높은 비트가 부호 비트이므로 데이터 레지스터의 출력 범위는 -7FFF~7FFF(-32767~32767)이다. 자이로스코프: 자이로스코프의 측정 범위를 ±2000으로 선택하면 데이터 시트에서 16.4 LSB/(°/s)는 32767/2000 = 16.4입니다. 계산하면 레지스터 번호와 측정 범위 사이의 해당 관계가 나타납니다. 예
여기에 이미지 설명을 삽입하세요., 레지스터를 통해 읽은 자이로스코프의 값이 1000이면 각속도를 찾습니다.
여기에 이미지 설명을 삽입하세요.
레지스터 의 숫자와 측정 범위 사이의 대응:
여기에 이미지 설명을 삽입하세요.
예를 들어, 레지스터에서 읽은 자이로스코프의 값이 1000이면 우리는 중력가속도를 구하라 XX = 1000 / 2048 = 0.49g

3 계산 단위 변환

여기에 이미지 설명을 삽입하세요.

  1. 다양한 범위에서의 정확도 계산 가속도계 범위는 ±2g 획득된 가속도계 데이터는 16384로 나뉩니다. 가속도계 범위는 ±4g 획득된 가속도계 데이터는 8192로 나뉩니다. 가속도계 범위는 ±8g입니다. 획득된 가속도계 데이터를 4096으로 나눕니다. 가속도계 범위는 ±16g입니다. 획득된 가속도계 데이터를 2048로 나눕니다.

2. 물리단위의 데이터로 변환 가능, 단위: g(m/s^2)
여기에 이미지 설명을 삽입하세요.
2. 삼각관계를 통해 각도로 변환 가능

float tanalpha = 0,tanbeta = 0,tangamma = 0;
tanalpha = (float)data->rawx / sqrt( ((float)data->rawy * (float)data->rawy + (float)data->rawz * (float)data->rawz) );
data->anglex = (float)atan(tanalpha)*57.3;
tanbeta = (float)data->rawy / sqrt( ((float)data->rawx * (float)data->rawx + (float)data->rawz * (float)data->rawz)  );
data->angley = (float)atan(tanbeta)*57.3;
tangamma = (float)data->rawz / sqrt( ((float)data->rawy * (float)data->rawy + (float)data->rawx * (float)data->rawx) );
data->anglez = (float)atan(tangamma)*57.3;

여기에 이미지 설명을 삽입하세요.

  1. 다양한 범위에서의 정확도 계산. 자이로스코프 범위: ±250dps. 획득된 자이로스코프 데이터는 131로 나뉩니다. 자이로스코프 범위는: ±500dps. 획득된 자이로스코프 데이터는 65.5로 나뉩니다. 자이로스코프 범위: ±1000dps .자이로스코프 데이터를 32.8로 나눕니다. 자이로스코프 범위는 ±2000dps입니다. 얻은 자이로스코프 데이터를 16.4로 나눕니다. 2. 물리적 단위인 rad/s의 데이터로 변환할 수 있습니다.
    여기에 이미지 설명을 삽입하세요.
//原始数据
raw_data[AXIS_X] = (buf[0] << 8) | buf[1];
raw_data[AXIS_Y] = (buf[2] << 8) | buf[3];
raw_data[AXIS_Z] = (buf[4] << 8) | buf[5];
//坐标map转换
remap_data[icm_dev.cvt.axis[AXIS_X]] = icm_dev.cvt.sign[AXIS_X] * raw_data[AXIS_X];
remap_data[icm_dev.cvt.axis[AXIS_Y]] = icm_dev.cvt.sign[AXIS_Y] * raw_data[AXIS_Y];
remap_data[icm_dev.cvt.axis[AXIS_Z]] = icm_dev.cvt.sign[AXIS_Z] * raw_data[AXIS_Z];
//重力加速度计算 unit: m/s2
data->x = (float)remap_data[AXIS_X] * KSCALE_ACC_16G_RANGE;
data->y = (float)remap_data[AXIS_Y] * KSCALE_ACC_16G_RANGE;
data->z = (float)remap_data[AXIS_Z] * KSCALE_ACC_16G_RANGE;
//red/s
data->x = (float)remap_data[AXIS_X] * KSCALE_GYRO_2000_RANGE;
data->y = (float)remap_data[AXIS_Y] * KSCALE_GYRO_2000_RANGE;
data->z = (float)remap_data[AXIS_Z] * KSCALE_GYRO_2000_RANGE;

4. 데이터 정확성에 대한 간단한 검증

내가 아는 바로는 가속도계 감도를 16g으로 설정하면 값은 2048 = 1g입니다. 장치가 테이블 위에 평평하게 놓여 있을 때 x 및 y 가속도계 값은 0에 가깝고 z는 1g(즉, 2048 원시 값) 정도 표시될 것으로 예상하는데, 이는 다른 장치에서 본 것이지만 그렇지 않습니다. 이 새로운 장비. 첨부된 스크린샷의 예를 참조하세요.

재인쇄 위치: 재인쇄 1
재인쇄 위치: 재인쇄 2

추천

출처blog.csdn.net/zhi_Alanwu/article/details/127987674