基于STM32F407四旋翼无人机---MS5611气压计(三)

  • 1、关于MS5611的基本介绍
  • 2、通过IIC获取气压计数据
  • 3、 转化为相对高度

1、关于MS5611的基本介绍

2、通过IIC获取气压计数据

3、 转化为相对高度

我选择这个气压计做定高的高度测量模块呢?因为我也很无奈,飞控上用的是,咱也没办法。
先介绍一下这个模块吧,该模块有着SPI和IIC总线接口的高分辨率气压传感器,其包括一个高线性度的压力传感器和一个超低功耗的24位模数转换器MS5611提供了一个精确的24位数字压力值和温度值以及不同的操作模式,可以提高转换速度并优化电流消耗,分辨率可达10CM,说是10cm,我感觉还是挺大的,有一个spl06,精度要比Ms5611要好,不过问题不大,关于MS5611的外围电路原理图:
其实气压计收外界因素的影响还是很大的,还很多,比如受温度啊,所以气压计在读取数据的时候要读取温度,进行二阶的一个温度补偿,不过这个温度可不是MPU6050读取的温度值,MPU6050读取的温度值是这个芯片的温度值,而MS5611采集的温度是外界环境温度,气压计还会受风力的影响,因为风大的时候大气压强是不一样的,光照强度也会对气压计有影响,所以一些飞控会对飞控板这些容易受到外界因素影响的模块做一个封闭的壳子,这样可以减少外界因素的影响,并且在气压计上面使用黑色海绵压着。
对于气压计的初始化就不贴代码了,使用IIC或者SPI都可以的,发送对应的命令先去对传感器进行复位,并且从PROM读取出厂校准数据。

PROM寄存器值,只需要读取一次。第一个是厂商信息,2-7是六个系数信息,8是CRC校验信息,这些数据都是厂家出厂时就校准好的,之后也不会更改。每个气压计参数都是不一样的,所以不用怀疑为什么和别人的不一样。

通过IIC获取压力数据和温度数据进行拼接:

MS5611_TEM = (t_rxbuf[0] << 16) | (t_rxbuf[1] << 8)|t_rxbuf[2];//算出温度值
MS5611_PRE = (p_rxbuf[0] << 16) | (p_rxbuf[1] << 8)|p_rxbuf[2];//算出气压值

通过出厂设置的值进行校准:

dT = MS5611_TEM - ((uint32_t)Cal_C[5] << 8);
OFF = ((uint32_t)Cal_C[2] << 16) + ((int64_t)dT * Cal_C[4])/128.0f;
SENS = ((uint32_t)Cal_C[1] << 15) + ((int64_t)dT * Cal_C[3])/256.0f;
temperature = 2000 + ((int64_t)dT * Cal_C[6])/8388608.0f;//得出温度

此时需要对温度进行二阶补偿

if (temperature < 2000) {Aux =  (temperature - 2000) *  (temperature - 2000);OFF2 = 2.5 * Aux;SENS2 = 1.25f * Aux;if (temperature < -1500) { Aux = (temperature + 1500) * (temperature + 1500);OFF2  += 7.0f * Aux;SENS2 += 5.5f * Aux;}}OFF  -= OFF2; SENS -= SENS2;MS5611_Pressure=(((MS5611_PRE*SENS )/2097152.0f)-OFF)/32768.0f;alt_3 = (101000 - MS5611_Pressure)/1000.0f;MS5611_Pressure=0.82f*alt_3*alt_3*alt_3+0.09f*(101000- MS5611_Pressure)*100.0f ;//算出气压值

那么问题来了,其实现在算出的是绝对高度,如果使用绝对高度,对于无人机的定高来说是恨不准确的,因为如果想要设定无人机的高度,使用绝对高度是无法获知的,那么我们应该计算出相对高度,怎么计算呢?给大家提供一个思路, ==我们先舍去气压计的前300个数据,因为气压计刚上电的数据很不稳定,错误数据也很多,所以我们大概丢弃掉刚上电的数据,将丢弃后的数据后获取的第一个数据作为基础气压值,将随后获取到的气压值减去基础气压值算出了相对气压值,这样通过相对气压值就可以算出相对高度。

  if( baro_start < 100 ){baro_start++;LPF_relative_height = 0;if(baro_start > 50) {BARO_Bisic += MS5611_Pressure;  //上电后的气压值作为基础气压if(baro_start == 100){BARO_Bisicpressue = BARO_Bisic/50.0f;}}} else{BARO_height = Median(mo_av_baro,MO_LEN ,&moavcnt,(s32)(MS5611_Pressure - BARO_Bisicpressue)); //计算绝对高度LPF_1_(1.0f,0.03f,BARO_height,LPF_relative_height);//通过后期的绝对高度减去刚上电的初始高度算出相对高度}

一般想要做更精确的高度定高还需要一个更精确地传感器,可以用超声波模块或者激光测距传感器。

基于STM32F407四旋翼无人机---MS5611气压计(三)相关推荐

  1. 基于STM32F407四旋翼无人机---AK8975磁力计(四)

    基于STM32F407四旋翼无人机---AK8975磁力计(四) 磁力计基本介绍 1.2.磁力计原理图 2.磁力计数据获取 3.磁力计椭球拟合校准 3.1.简单介绍椭球拟合 磁力计基本介绍 该模块采用 ...

  2. 基于STM32F407四旋翼无人机 --- 姿态解算讲解(四元数)(叉积法融合陀螺仪数据和加速度数据)(五)

    基于STM32F407四旋翼无人机 --- 姿态解算讲解(五) 姿态解算 姿态解算定义 欧拉角 四元数 四元数性质 方向余弦矩阵 四元数方向余弦矩阵 叉积法融合陀螺仪数据和加速度数据 叉积运算 一阶龙 ...

  3. 【飞行器】基于matlab四旋翼无人机几何跟踪控制【含Matlab源码 2270期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[飞行器]基于matlab四旋翼无人机几何跟踪控制[含Matlab源码 2270期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式 ...

  4. 基于ESP32四旋翼无人机如何根据PID算法进行电机的PWM duty补偿

    1.计算模型 电机位置和补偿输出的关系,需要求解的是C1,C2,C3,C4的电机输出补偿值.分别对应M1,M2,M3,M4四个电机. 2.推导过程(可以跳过不看,直接到第三步) 3. 四个电机的PID ...

  5. 基于ESP32四旋翼无人机同蓝牙遥控器通信处理方式

    1.蓝牙初始化 在app_main调用函数初始化蓝牙 inf_ble_gatt_init(); 2.判断蓝牙是否链接 在dandelion_task中调用函数inf_ble_gatt_connecte ...

  6. 基于数据融合和串级PID的小型四旋翼无人机高度测量与控制系统

    作者:Tomy 摘要:简单介绍了一种基于 Mahony 算法无人机姿态解算算法,并在这个的基础上设计了一 种融合惯导加速度计和气压计的小型无人机高度测量系统, 同时利用该高度测量系统设计了 基于串级 ...

  7. 基于STM32的四旋翼无人机项目(二):MPU6050姿态解算(含上位机3D姿态显示教学)

    前言:本文为手把手教学飞控核心知识点之一的姿态解算--MPU6050 姿态解算(飞控专栏第2篇).项目中飞行器使用 MPU6050 传感器对飞行器的姿态进行解算(四元数方法),搭配设计的卡尔曼滤波器与 ...

  8. 基于STM32的四旋翼无人机开发设计

    已知技术参数和设计要求: 1.功能要求 本次课程设计涉及的四旋翼无人机设计方案,采用STM32F103为上位机,外加直流电机.WIFI模块.MPU6050九轴运动处理传感器等实现四旋翼无人机飞行及其控 ...

  9. 四旋翼无人机建模与实现(三)

    四旋翼无人机建模与实现(三) 本文是对GitHub上的一个开源的四旋翼无人机建模与编程实现的学习笔记,因为原作者的文档使用英文写的,花了很长的时间才看懂,因此,我觉得用自己的语言将这个开源项目分享出来 ...

  10. 四旋翼无人机仿真之hector_quadrotor无人机(ROS + Gazebo)(三)传感器数据读取与复现(IMU、GPS)

    系列文章目录 文章1:四旋翼无人机仿真之hector_quadrotor无人机(ROS + Gazebo) 文章2:四旋翼无人机仿真之hector_quadrotor(二)键盘teleop_twist ...

最新文章

  1. 折半插入排序稳定吗_C++实现经典算法--折半插入排序
  2. vim配置python开发环境_VIM插件管理及python开发环境配置
  3. 网络推广离不开关键词的精准挖掘
  4. 精准扶贫探索新融合模式-农业大健康·李龙:谋定乡村振兴
  5. Windows 常用快捷键 + word常用快捷键 +常用工具调用
  6. callback回调使用 vue_前端动画必知必会:React 和 Vue 都在用的 FLIP 思想实战
  7. 张俊红数据分析知识体系(持续更新中......)
  8. 有哪些ABAP关键字和语法,到了ABAP云环境上就没办法用了?
  9. 计算机考研落榜了怎么办,考研落榜了怎么办
  10. 业内首款云原生技术中台产品云原生 Stack 来了
  11. 结对编程 贪吃蛇项目-开发环境搭建过程
  12. 织梦dede:channelartlist调用排除指定typeid栏目
  13. Django+nginx+uwsgi+ubuntu18.04网站部署
  14. 30款油漆纹理Photoshop笔刷
  15. Android SQLite数据库 SQLiteOpenHelper的操作使用
  16. Linux四剑客详解——find
  17. 3.1 数值分析: 迭代法的基本思想
  18. mac快速切换大小写_快速模式匹配–如果是大小写,请切换为大小写
  19. java高速公路收费管理计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
  20. MVVM?瞎搞一波?

热门文章

  1. 华三交换机开机dhcp snooping
  2. 财务会计上的凭证冲销和SAP中的凭证冲销(红冲、蓝冲)
  3. Aruba protal 认证 图标
  4. CentOS 7 虚拟机网卡失效问题:ens33:<NO-CARRIER,BROADCAST,MULTICAST,UP>mtu 1508 gdisc pf ifo_fast state DOWN
  5. uni-app自定义全屏切换组件
  6. JS滑动滚动的n种方式
  7. 软件需求包括3个不同的层次――业务需求、用户需求和功能需求
  8. 算法刷题记录(Day 73)
  9. C# 读取网卡、设置网上、自动连接Wifi
  10. 在新的固态硬盘中安装windows系统(旧固态硬盘已安装ubuntu系统)