MS5611气压传感器的使用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MS5611气压传感器的使用
——中北大学:马政贵
图1 MS5611的电路图
MS5611气压传感器支持SPI和IIC总线接口,为降低通讯时间,选择使用SPI通讯,设计的电路图如图1所示。根据电路原理图,程序使用SPI总线接口的模式0方式(时钟空闲时为低,数据捕获于第1个时钟沿)。MS5611内含低功耗的24位ADC,高度分辨率可达10cm。
4.1 MS5611的初始化:
根据数据手册,MS5611在上电之后应发送一次复位指令,用来将出厂校准数据载入相应的寄存器中。复位完成后,再读取这些出厂校准数据,后续用于气压和温度的计算。
/*******************************************************************************
功能:对MS5611进行初始化
参数:无
返回值:无
*******************************************************************************/
void MS5611_Init(void)
{
static unsigned char temp_rest;
SPI_MS5611_CS_L;
delay_us(10);
SPI2_ReadWriteByte(CMD_MS5611_RESET); //发送复位指令
delay_ms(20); //复位需要2.8ms,这里取长一点时间,确保复位
SPI_MS5611_CS_H;
delay_us(10);
/*--------------复位后读取PROM内容------------------*/
C1 = SPI_MS5611_Read(CMD_MS5611_PROM_C1);
C2 = SPI_MS5611_Read(CMD_MS5611_PROM_C2);
C3 = SPI_MS5611_Read(CMD_MS5611_PROM_C3);
C4 = SPI_MS5611_Read(CMD_MS5611_PROM_C4);
C5 = SPI_MS5611_Read(CMD_MS5611_PROM_C5);
C6 = SPI_MS5611_Read(CMD_MS5611_PROM_C6);
}
备注:u16 SPI_MS5611_Read(u8 ReadAddr)为寄存器读取函数,参数ReadAddr为要读取的寄存器地址,函数返回相应寄存器的值。在MS5611.h头文件中根据芯片手册对相应寄存器地址进行了宏定义:
/*MS5611模块传感器地址定义*/
#define MS5611_ADC 0x00
#define CMD_MS5611_RESET 0x1E
#define CMD_MS5611_PROM_Setup 0xA0
#define CMD_MS5611_PROM_C1 0xA2
#define CMD_MS5611_PROM_C20xA4
#define CMD_MS5611_PROM_C3 0xA6
#define CMD_MS5611_PROM_C4 0xA8
#define CMD_MS5611_PROM_C5 0xAA
#define CMD_MS5611_PROM_C6 0xAC
#define CMD_MS5611_PROM_CRC0xAE
#define CMD_CONVERT_D1_OSR4096 0x48
#define CMD_CONVERT_D2_OSR4096 0x58
4.2 MS5611数据读取及转换:
对MS5611进行数据读取时,要先发送相应的转换指令。MS5611可以进行气压和温度的测量,因此,有两条相应的转换指令,根据精度的不同,每条转换指令又分为5条具体指令。程序中,我们均按最高精度来进行转换,转换时间约9ms。由于我们的任务调度基于时间片调度模式,为避免造成程序堵塞,数据读取采用switch语句,从而避免在数据转换时的等待,可以去运行其他任务。
气压和温度的计算过程根据芯片手册进行,具体如下:
图2 气压和温度的计算末尾还进行了相应的二阶温度补偿,具体过程为:
图3 二阶温度补偿
由当前气压和温度值,可计算得到当前高度,公式为:
其中,为海平面气压值;P 为当前大气压值;T 为当前温度值,单位℃。
/*******************************************************************************
功能:读取MS5611数据,并求取温度、高度值
参数:无
返回值:无
说明:得到的温度为温度值*100(即实际温度放大100倍)
*******************************************************************************/
void MS5611_get_Data(void)
{
static unsigned char data[3];
static unsigned char temp;
static unsigned char MS5611_Count=0,MS5611_Num=0;
static unsigned int D1,D2; //D1为气压,D2为温度
static long long dT,T2,Temperature,Pressure;
0065.0)
15.273(*)1)((257.510+-=T P
P h 0P