IMU姿态传感器
前言:主包在网上查阅了很多资料,发现几乎没有系统关于姿态传感器(陀螺仪)的学习资料,那就自己做一期吧!本人是基于逐飞的开源库学习的,这种封装好的库很多东西可以直接拿来使用,芯片是AI8051u,姿态传感器型号是imu660ra。
姿态传感器浅析
IMU660RA是一款九轴惯性测量单元,里面集成了陀螺仪和加速度计,主要用于姿态估计、角速度检测等。
而我们主要使用Z 轴角速度,也就是绕垂直方向的旋转速度,来帮助判断小车当前转弯速度,从而调整左右轮的速度,实现更准确的转向控制。Z轴角速度表示小车绕垂直轴(如图放置,就是几何中的z轴)的转动快慢,正值表示逆时针,负值表示顺时针。
零偏(零漂)
本人编写运行了以下的基础读取代码
#include "zf_common_headfile.h"
#define PIT (TIM0_PIT )
void pit_hanlder (void);
void main(){clock_init(SYSTEM_CLOCK_40M);debug_init(); if(imu660ra_init()){ //姿态传感器初始化while(1){ //失败进入死循环}}tim0_irq_handler = pit_hanlder; //周期中断回调函数pit_ms_init(PIT, 100); //初始化中断为100mswhile(1) {}
}
void pit_hanlder (void)
{imu660ra_get_acc(); //获取x、y、z方向加速度数值 imu660ra_get_gyro(); //获取x、y、z方向角速度数值 printf("\r\nIMU660RA acc data: x=%5d, y=%5d, z=%5d\r\n", imu660ra_acc_x, imu660ra_acc_y, imu660ra_acc_z); //逐飞库函数已自动更新这些值printf("\r\nIMU660RA gyro data: x=%5d, y=%5d, z=%5d\r\n", imu660ra_gyro_x, imu660ra_gyro_y, imu660ra_gyro_z);
}
读取到的数值如下(主要看gyro data角速度里的z轴角速度)。奇怪了,我的车子就放在桌面上没有动,怎么读取到的数值还自己震动呢?难道它连地壳震动都能检测到?
[13:59:06.54