BMI160为九轴传感器,这里只获取加速度与陀螺的原始数据。

初始化调用

        BMI160_Init();

获取数据调用

 BMI160_GetACC();BMI160_GetGRO();

头文件:

#ifndef BMI160_H_
#define BMI160_H_#include "include.h"#define BMI160 1#if BMI160
struct sensor_map
{
uint8_t Acc_conf ;
uint8_t Acc_range ;
};
#endifvoid BMI160_Read_ID(void);
void BMI160_Restart(void);
void BMI160_Init(void);
void BMI160_config(void);//配置 ODR resolution BW
void BMI160_GetGRO(void);
void BMI160_GetACC(void);#endif /* BMI160_H_ */

源文件:

#include "BMI160.h"
uint8_t  read_BMI160_ID=0xff;struct sensor_map BMI160_reg={.Acc_conf =0x40,.Acc_range =0x41,};void BMI160_Read_ID(void)
{uint8_t temp_who_am_i,num;for (num=0;num<4;num++){SPI_master_read_register(0x00,1,&temp_who_am_i);if(temp_who_am_i == 0xD1){printf("who-am-i = %d,  =0x%02x\r\n",temp_who_am_i,temp_who_am_i);break;}else if(num==3 && temp_who_am_i != 0xD1){read_BMI160_ID = false;printf("who-am-i = %d,  =0x%02x\r\n",temp_who_am_i,temp_who_am_i);printf("NO BMI160\r\n");}}
}void BMI160_Restart(void)
{}void BMI160_Init(void)
{BMI160_Read_ID();if (read_BMI160_ID!=0){BMI160_Restart();}delay_ms(10);BMI160_config();delay_ms(20);
}void BMI160_config(void)//配置 ODR resolution BW
{uint8_t temp,ch ;temp=0x26;SPI_master_write_register(0x40, 1, &temp);     //ACC   ODR:25Hz        acc_bwp=3db(defult:acc_us=0b0)    temp=0x0C;SPI_master_write_register(0x41, 1, &temp);       //Acc_range:16gtemp=0x26;SPI_master_write_register(0x42, 1, &temp);        //Gro   ODR:25Hz        gro_bwp=3db    temp=0x03;SPI_master_write_register(0x43, 1, &temp);       //Gro_range:250dps//FIFO  Configtemp=0xfe;SPI_master_write_register(0x47, 1, &temp);       //enable//Set PMU mode  Register(0x7E) CMD      attention the commandtemp=0x11;SPI_master_write_register(0x7E, 1, &temp);      //Acc normal modetemp=0x15;SPI_master_write_register(0x7E, 1, &temp);      //Gro normal mode//check the PMU_status Register(0x03) SPI_master_read_register(0x03,1,&ch);if (ch == 0x14){printf("sensor is Normal \r\n");}
}void BMI160_GetGRO(void)
{uint8_t buf[6]={0};int16_t gry[3]={0};SPI_master_read_register(0x0c,6,&buf);gry[0] = (int16_t)((buf[0])  | (int16_t)buf[1]  << 8);gry[1] = (int16_t)((buf[2])  | (int16_t)buf[3] << 8);gry[2] = (int16_t)((buf[4])  | (int16_t)buf[5] << 8);printf("Gro,%d,%d,%d\r\n",gry[0],gry[1],gry[2]);
}
void BMI160_GetACC(void)
{uint8_t buf[6]={0};int16_t Acc[3]={0};SPI_master_read_register(0x12,6,&buf);Acc[0] = (int16_t)((buf[0])  | (int16_t)buf[1]  << 8);Acc[1] = (int16_t)((buf[2])  | (int16_t)buf[3] << 8);Acc[2] = (int16_t)((buf[4])  | (int16_t)buf[5] << 8);printf("Acc,%d,%d,%d\r\n",Acc[0],Acc[1],Acc[2]);
}

【MEMS传感器】BMI160九轴传感器SPI驱动相关推荐

  1. arduino调试BNO080高精准度九轴传感器模块

    arduino调试BNO080高精准度九轴传感器模块 原文链接:https://www.yourcee.com/newsinfo/2925867.html 1.简介 2.原理图 3.使用前准备 4.接 ...

  2. 九轴传感器姿态----AHRS算法开源项目推荐

    1. AHRS简介 九轴MEMS传感器(三轴陀螺仪+三轴加速度计+三轴磁强计)可以用来做航向和姿态参考系统,即AHRS(attitude &heading reference system), ...

  3. 三轴加速度计测量值生成算法matlab,[算法][三轴、六轴、九轴传感器算法分析] 1、分享一个三轴加速计matlab动态可视化脚本...

    一.有啥用 这里用的是LIS3DH三轴加速计,输出为X.Y.Z轴的加速度,通过串口连接电脑,电脑里运行matlab脚本通过串口实时获取数据并做可视化显示. 这里虽然是针对LIS3DH的,其实稍作修改即 ...

  4. 三轴加速度传感器和六轴惯性传感器_[算法][三轴、六轴、九轴传感器算法分析] 1、分享一个三轴加速计matlab动态可视化脚本...

    一.有啥用 这里用的是LIS3DH三轴加速计,输出为X.Y.Z轴的加速度,通过串口连接电脑,电脑里运行matlab脚本通过串口实时获取数据并做可视化显示. 这里虽然是针对LIS3DH的,其实稍作修改即 ...

  5. 九轴传感器MPU9250数据读取磁力计

    有的小伙伴找不到MPU9250的中文资料,只能根据MPU6500的例程读取六轴. 关键的地方是MPU9250里已经说明了,看不到实在不应该. MPU9150里面是MPU6500+AK8975,MPU9 ...

  6. 四旋翼无人机学习第6节--SPL06气压传感器和MPU9250九轴传感器电路分析

    文章目录 0 前言 1 SPL06气压传感器芯片手册示例图分析 2 原理图绘制成果分享 3 芯片IIC功能介绍 4 MPU9250气压传感器芯片手册示例图分析 5 原理图绘制成果分享 6 防护罩原理图 ...

  7. UAV021(三):九轴传感器(加速度计、陀螺仪和磁力计)校准方法

    目录 序 一. 加速度计简单校准 二.陀螺仪简单校准 三.磁力计简单校准 序 UAV021(二)中使用STM32F4通过IIC协议实现了读取加速度.角速度以及Yaw角.然而,原始数据是不能用的,校准是 ...

  8. 六轴传感器基础知识学习:MPU6050特性,四元数,姿态解算,卡尔曼滤波

    实际上,只要说到多少轴的传感器一般是就是指加速度传感器(即加速计).角速度传感器(即陀螺仪).磁感应传感器(即电子罗盘).这三类传感器测量的数据在空间坐标系中都可以被分解为X,Y,Z三个方向轴的力,因 ...

  9. 3轴/6轴/9轴传感器是什么, 加速计/陀螺仪/磁力计又是什么?

    欢迎加入Unity业内qq交流群:956187480 qq扫描二维码加群 转自:加速计/陀螺仪/磁力计是什么,3轴/6轴/9轴传感器又是什么?_不积跬步,无以至千里!-CSDN博客 现在越来越多的设备 ...

  10. 【STM32Cube】学习笔记(三):六轴传感器

    文章目录 摘要 一.简介 1.I2C原理 2.MPU6050介绍 3.MPU6050寄存器介绍 4.DMP使用 二.硬件电路设计 三.软件设计 1.CubeMX配置 2.CubeIDE代码 3.结果显 ...

最新文章

  1. 使用ffmpeg从mp4文件中提取视频流到h264文件中
  2. 失战于知识付费,会员与智能硬件将助蜻蜓FM打赢下半场战争?
  3. Window.navigator
  4. 2019-02-25-算法-进化
  5. jvm MinorGC和查看GC日志
  6. wildfly_从WildFly 9(子系统)中运行OkHttpClient
  7. Flex读取xml文件
  8. S2SH 第一次整合的经历
  9. 咏南中间件+开发框架中秋国庆大促
  10. 对比Vector、ArrayList、LinkedList有何区别(转)
  11. c语言贪心算法合并箭,贪心算法:用最少数量的箭引爆气球
  12. 设置finder窗口大小的5个小技巧!速看?
  13. STM32要怎么选型?
  14. linux格式化硬盘 中断,linux格式化硬盘【调解方案】
  15. 通过rundll32调用系统对话框
  16. ant下载与本地配置
  17. 小学生组词词典 官方
  18. Mac使用OBS直播配置教程|解疑答惑
  19. JavaScript——移动端网页特效
  20. 20189220 余超《Linux内核原理与分析》第五周作业

热门文章

  1. StretchDIBits速度测试(COLORONCOLOR)
  2. Win 10 蓝屏,出现DRIVER_POWER_STATE_FAILURE的解决方法
  3. 解决小米wifi在windows10无法创建问题
  4. [乱七八糟]《进化论——人类科学史上最大的谎言》
  5. 点到点(point-to-point) 与 端到端(end to end)
  6. iOS 实现时间线列表效果
  7. solidworks新建工程图默认单位为毫米
  8. 面试 — 海康威视(Android客户端开发)
  9. 从选课系统看软件开发周期
  10. phpQuery占用过多内存的解决方法