如何将原始数据转换为有用的角度?

时间:2015-02-19 14:54:52

标签: c arm embedded stm32

我使用Gyro L3GD20和STM32F4微控制器。我从陀螺仪传感器获得这些数据。

0,-1,-1,-2,-3,-4,-5,-6,-6,-5,-3,-4,-4,-5,-6,-5, -3,-3,-3,-3,-3,-4,-4,-4,-3,-3,-3,-3,-5,-5,-5, -4,-4,-4,-5,-5,-6,-6,-5,-5,-6,-6,-8,-9,-10,-10,-11,-12 ,-14,-16,-17,-16,-14,-12,-11,-10,-8,-7,-8, -8,-8,-8,-6,-5,-4,-4,-2,-2,-3,-2,-2,-2,-2,-1,-2,-2 ,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3, 4,4,4,5,6,6,6,7,8,9,9,9,9,9,6,12,15,19,17,13,9,9,14,19,8,8 15,15,17,17,18,17,14,14,15,15, 11,7,5,5,6,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0

这涉及沿x轴的角速度。 我想从原始数据中提取角度。 一段代码

while(1)
{
    if(measure)
    {
        ///20 ms///.
        L3GD20_Read(&L3GD20_Data);
        int16_t x = L3GD20_Data.X;
        USART_putint(USART2, _x, 10);
        USART_SendData(USART2, ',');
        measure = 0;
    }
}

提前谢谢你。

1 个答案:

答案 0 :(得分:3)

MEMS陀螺仪是角速度传感器,其输出与每秒度数成比例。要从角速度获得相关方向,您必须随时间积分,这将使您在该时间内改变角度。基本上,角度的变化与所有角速度样本的总和成正比。

L3GD20是一款三轴传感器,可以为偏航,俯仰和滚转提供输出。它有一个I2C / SPI数字接口,为您执行采样和定时,并将数据放入FIFO中,因此您可能不应该仅以20ms的间隔读取时间来猜测时序。相反,您应该读取所​​有可用数据以响应数据就绪中断。 (该部件的最小输出数据速率为每秒95个样本,因此在以50sps读取时丢失数据)。如何执行此操作取决于您使用的API。它具有250,500或2000度/秒的可编程灵敏度;你应该使用最低值来获得最高分辨率。

#define GYRO_FS_DPS 250
#define GYRO_ABS_SAMPLE_MAX 0x7fff 

long x_integrator = 0 ;

while(1)
{
    while( /* L3GD20 data available */ )
    {
        L3GD20_Read( &L3GD20_Data ) ;

        x_integrator += L3GD20_Data.X ;
    }

    ...
}

然后通过以下方式确定以度为单位的相对方向:

orientation = ((x_integrator * GYRO_FS_DPS) / GYRO_ABS_SAMPLE_MAX) % 360 ;

最终你需要清楚地理解部件的datsheet,它是一个非常灵活且可配置的部分,而且你处理数据的确切方式将取决于你如何设置它。