我使用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;
}
}
提前谢谢你。
答案 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,它是一个非常灵活且可配置的部分,而且你处理数据的确切方式将取决于你如何设置它。