Определение наклона с помощью Lis3dh и stm32
Я использую датчик LIS3DH с STM32F4 и хочу рассчитать угол наклона. Я знаю, что должен вычислять углы (Yaw-Pitch-Roll(ψ-θ-φ)) с использованием некоторых формул, но я не знаю, как рассчитать значения, полученные после применения калибровки акселерометра к необработанным данным измерений (Ax1, Ай1, Аз1). И как я могу убедиться, что датчик понимает, что он находится в устойчивом состоянии перед перемещением?
while (1)
{
// HAL_GPIO_TogglePin(GPIOE,GPIO_PIN_0);
// HAL_Delay(100);
/* USER CODE END WHILE */
lis3dh_reg_t reg;
/* Read output only if new value available */
lis3dh_xl_data_ready_get(&dev_ctx, ®.byte);
if (reg.byte) {
/* Read accelerometer data */
memset(data_raw_acceleration, 0x00, 3 * sizeof(int16_t));
lis3dh_acceleration_raw_get(&dev_ctx, data_raw_acceleration);
acceleration_mg[0] =lis3dh_from_fs2_hr_to_mg(data_raw_acceleration[0]);
acceleration_mg[1] =lis3dh_from_fs2_hr_to_mg(data_raw_acceleration[1]);
acceleration_mg[2] =lis3dh_from_fs2_hr_to_mg(data_raw_acceleration[2]);
sprintf((char *)tx_buffer,"Acceleration [mg]:%4.2f\t%4.2f\t%4.2f\r\n",acceleration_mg[0], acceleration_mg[1], acceleration_mg[2]);
tx_com(tx_buffer, strlen((char const *)tx_buffer));
}
roll = atan2(acceleration_mg[1] , acceleration_mg[2]) * 57.3;
pitch = atan2((-acceleration_mg[0]) , sqrt(acceleration_mg[1] *acceleration_mg[1] +acceleration_mg[2] *acceleration_mg[2])) * 57.3;
if (pitch==-0.0645269975){
HAL_GPIO_TogglePin(GPIOD,GPIO_PIN_0);
}
/* USER CODE BEGIN 3 */
}
Я использую общую библиотеку: https://github.com/s54mtb/LEDS/blob/master/Src/lis3dh_driver.c