BMP085气压传感器驱动

   BMP085是新一代的小封装气压传感器,主要用于气压温度检测,在四轴飞行器上可以用作定高检测,该传感器属于IIC总线接口,依然沿用标准IIC驱动程序

   使用该传感器需要注意的是我们不能直接读出转换好的二进制温度数据或者气压数据,必须先读出一整套约176位的矫正数据,然后启动转换,将转换的数据与矫正数据一起进行矫正运算才能正常获得温度,温度精度为0.1,大气压有16bit或者19bit的精度,一般选择16位精度,

  所以对于该传感器设备,驱动模式如下

  1.获取矫正数据-->启动温度转换--->获取原始温度数据-->启动大气压转换-->获取原始大气压数据-->计算实际温度数据大气压数据

   另,转换时的转换时间也是计算时的重要参数,计算大气压时的过程中需要使用冤死温度


矫正数据如下


矫正数据都是16位有符号的,所以读出的时候需要连续读取两个字节

通过计算得到的大气压强可以计算得到当前传感器相对于海平面的绝对高度



具体驱动代码如下所示

#ifndef __BMP085_H_
#define __BMP085_H_
#include "ioremap.h"
#include "common.h"
#include "stm32f10x.h"
#include "uart.h"
#include "delay.h"

//BMP SDA PC0
//BMP SCL PC1

#define BMP_ACK_WAIT_TIME	200		//iic通讯时的ack等待时间

#define BMP085_DEBUG	1

#define OSS 0	// 大气压的转换时间,有0-3可选值

//地址均为读地址
#define BMP085_ADDR		0xEE	  //定义器件在IIC总线中的写地址 

#define BMP_AC1_ADDR		0XAA	  //定义校准寄存器的地址
#define BMP_AC2_ADDR		0XAC
#define BMP_AC3_ADDR		0XAE
#define BMP_AC4_ADDR		0XB0
#define BMP_AC5_ADDR		0XB2
#define BMP_AC6_ADDR		0XB4
#define BMP_B1_ADDR			0XB6
#define BMP_B2_ADDR			0XB8
#define BMP_MB_ADDR			0XBA
#define BMP_MC_ADDR			0XBC
#define BMP_MD_ADDR			0XBE

#define CONTROL_REG_ADDR	0XF4	//控制寄存器,在这个寄存器中设置不同的值可以设置不同转换时间,同时不同的值可以确认转换大气压或者温度
#define BMP_COVERT_TEMP		0X2E	//转换温度 4.5MS
#define BMP_COVERT_PRES_0	0X34	//转换大气压 4.5ms
#define BMP_COVERT_PRES_1	0X74	//转换大气压 7.5ms
#define BMP_COVERT_PRES_2	0XB4	//转换大气压 13.5ms
#define BMP_COVERT_PRES_3	0XF4	//转换大气压 25.5ms

#define BMP_TEMP_PRES_DATA_REG	0XF6	//两个字节温度数据

//0xf6 0xf7 0xf8 压强地址
//0xf6 0xf7 温度地址

typedef struct BMP085PARAM //校准参数表
{
  s16 a
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值