1、电源电压VDD-0.3V+4.0V最大压力值Pmax6bar最大焊接温度Tmax最长40秒250电气特性工作电压1.8V3.0V3.6V工作温度T-40+25+85工作电流(1 sample per sec.)IDDOSR 40962048102451225612.5uA6.3uA3.2uA1.7uA0.9uAVDD对地电容VDD to GND100nF模数转换(ADC)输出字长(bit)24转换时间(ms)tc7.403.721.880.950.488.224.132.081.060.549.044.542.281.170.60气压值输出特征温度值输出特征数字输入(CSB,I2C,DIN,S
2、CLK)气压输出(I2C,DOUT)功能描述综合描述MS5611-01BA是由压阻传感器和传感器接口组成的的集成电路,主要功能是把测得未得补偿模拟气压值经ADC转换成24位的数字值输出,同时也可以输出一个24位的数字温度值。出厂校验每个模块都在两种温度和两种压力下有其单独的出厂校验,6系数必要补偿为过程变化和温度变化计算和存储到一个内部的128-bit存储器(PROM)中,这些值(划分成6个系数)用软件来读取并要通过程序将D1和D2中的值转换成标准气压、温度值。串行接口MS5611-01BA有两种类型的串行接口:SPI和I2C。通过调节PS引脚的电压来选择使用I2C或SPI通信接口:SPI模式
3、外部微控制器通过输入SCLK(串行时钟)和SDI(串行数据)来传输数据。在SPI模式下时钟极性和相位允许同时模式0和模式3。SDO(串行数据)引脚为传感器的响应输出。CSB(芯片选择)引脚用来控制芯片使能/禁用,所以,其他设备可以共用同一组SPI总线。在命令发送完毕或命令执行结束(例如结束的转换)时CSB引脚将被拉高。在SPI总线空闲模式下模块有较好的噪声性能和在ADC转换时与其他设备链接。I2C模式外部微控制器通过输入SCLK(串行时钟)和SDA(串行数据)来传输数据。传感器的响应在一根双向的I2C总线接口SDA线上。所以这个接口类型只使用2信号线路而不需要片选信号,这可以减少板空间。在I2
4、C模式下补充引脚CSB (芯片选择)代表了LSB的I2C地址。在I2C总线上可以使用两个传感器和两个不同的地址。CSB引脚应当连接到VDD或GND(不能悬空)。指令MS5611-01BA03只有5个基本命令:1.复位(Reset)2.读取存储器(128-bit PROM)3.D1转换4.D2转换5.读取ADC结果(24-bit气压/温度值)气压和温度计算(详见原文)1.开始计算结果最大值: ,2.从PROM读取出厂校准数据变量描述|方程推荐变量类型Size 值例子/典型bitminMaxC1压力灵敏度|SENST1uint 16166553540127C2压力抵消| OFFT136924C3温
5、度压力灵敏度系数| TCS23317C4温度系数的压力抵消| TCO23282C5参考温度|TREF33464C6温度系数的温度|TEMPSENS283123.读取数字气压和温度值D1数字压力值uint 32167772169085466D2数字温度值85691504.计算温度dT实际和参考温度之间的差异int 3225-167769602366TEMP实际温度(-4085C 0.01C的分辨率)41-400085002007=20.07C5.计算温度补偿下的气压值OFF实际温度抵消int 64-8589672450128847052802420281617SENS实际温度灵敏度-429483
6、622564423526401315097036P温度补偿压力(101200mbar与0.01mbar分辨率)581000100009=1000.09 mbar6.得到气压和温度值。二阶温度补偿对压力和温度达到最佳精度的流程图SPI接口SPI命令下面的表格描述中每个命令的大小是1字节(8位)。执行ADC read指令后将会返回一个24-bit的结果,执行PROM read指令后返回16-bit的结果。存储器(PROM)的地址在PROM read命令中的a2,a1和a0位。命令结构SPI复位时序转换时序存储器读取时序图参见原文。I2C接口I2C命令每个I2C通信消息都有开始和停止状态。MS561
7、1-01BA的I2C地址为111011Cx,其中C为CSB引脚的补码值(取反)。因为传感器内并没有微控制器,所有I2C的命令和SPI是相同的。I2C复位时序复位指令可以在任何时间发送。如果没有成功的上电复位,这可能是被屏蔽的SDA模块在应答状态。MS5611-01BA唯一的复位方式是发送几个SCLKs后跟一个复位指令或上电复位。来自主机 S = 开始命令 W = 写命令 A =应答来自从机 P = 停止命令 R =读命令 N = 无应答I2C复位指令存储器读取时序PROM读指令由两部分构成,第一部分使系统处于PROM读模式,第二部分从系统中读取数据。I2C读存储器指令,地址=011(系数:3)
8、I2C从芯片中应答通过向MS5611-01BA发送指令可以进入转换模式。当命令写入到系统中,系统处于忙碌状态,直到转换完成。当转换完成后可以发送一个读指令,此时MS5611-01BA发回一个应答,24个SCLK时钟将所有bit位传送出来。每隔8bit就会等待一个应答信号I2C启动压力转换指令(OSR=4096, typ=D1)ADC读时序I2C从MS5611-01BA读取数据循环冗余检查(CRC)MS5611-01BA包含128-Bit的PROM存储器。存储器中有一个4bit的CRC数据检测位。下面详细描述了CRC-4代码的使用。典型应用电路SPI协议I2C协议引脚定义引脚名称类型12PSI通
9、讯协议选择PS high(VDD)I2CPS low(GND)SPI3GNDG接地4CSB片选(低电平有效),内部连接56SDOO串口数据输出7SDI/SDAI/IO串口数据输入/I2C数据8SCLK串口时钟*注:原文附录有一些典型测量值的特征曲线可参考。其中的一些关键点:ADC的测量值D1和D2是分别用来测气压和温度的,且基本成线性关系;在常温(20)或大于常温时,测量误差很小,而温度低于20时,气压和温度测量误差会明显增大;电源电压为3V时,气压和温度测量误差很小,而其它供电电压下误差会大幅度增加。51单片机测试代码/*MS5611模块*/*用途:MS5611模块IIC测试程序*/ /*串
10、口波特率设置为9600*/#include math.h /Keil library stdlib.hstdio.hINTRINS.H#define uchar unsigned char#define uint unsigned int #define ulong unsigned longsbit SCL=P01; /IIC时钟引脚定义sbit SDA=P02; /IIC数据引脚定义#define MS561101BA_SlaveAddress 0xee /定义器件在IIC总线中的从地址 #define MS561101BA_D1 0x40#define MS561101BA_D2 0x5
11、0#define MS561101BA_RST 0x1E/#define MS561101BA_D1_OSR_256 0x40/#define MS561101BA_D1_OSR_512 0x42/#define MS561101BA_D1_OSR_1024 0x44/#define MS561101BA_D1_OSR_2048 0x46#define MS561101BA_D1_OSR_4096 0x48/#define MS561101BA_D2_OSR_256 0x50/#define MS561101BA_D2_OSR_512 0x52/#define MS561101BA_D2_OS
12、R_1024 0x54/#define MS561101BA_D2_OSR_2048 0x56#define MS561101BA_D2_OSR_4096 0x58#define MS561101BA_ADC_RD 0x00#define MS561101BA_PROM_RD 0xA0#define MS561101BA_PROM_CRC 0xAE/ unsigned int Cal_C7; /用于存放PROM中的8组数据unsigned long D1_Pres,D2_Temp; / 存放压力和温度float dT,TEMP;double OFF_,SENS;float Pressure;
13、/大气压float TEMP2,Aux,OFF2,SENS2; /温度校验值ulong ex_Pressure; /串口读数转换值uchar exchange_num8;/-子函数声明-void delay(unsigned int k);void Delay5us();void Delay5ms();void I2C_Start();void I2C_Stop();void I2C_SendACK(bit ack);bit I2C_RecvACK();void I2C_SendByte(uchar dat);uchar I2C_RecvByte();void MS561101BA_RESET
14、();void MS561101BA_PROM_READ();ulong MS561101BA_DO_CONVERSION(uchar command);void MS561101BA_getTemperature(uchar OSR_Temp);void MS561101BA_getPressure(uchar OSR_Pres);void MS561101BA_Init();void init_uart();void SeriPushSend(uchar send_data);void Exchange_Number();/-/*/*/延时void delay(unsigned int k
15、) unsigned int i,j; for(i=0;ik;i+) for(j=0;j121;j+); /*延时5微秒(STC90C52RC12M)不同的工作环境,需要调整此函数,注意时钟过快时需要修改当改用1T的MCU时,请调整此延时函数*/void Delay5us() _nop_();_nop_();延时5毫秒(STC90C52RC12M)不同的工作环境,需要调整此函数void Delay5ms() uint n = 560; while (n-);/*/I2C起始信号void I2C_Start() SDA = 1; /拉高数据线 SCL = 1; /拉高时钟线 Delay5us()
16、; /延时 SDA = 0; /产生下降沿 SCL = 0; /拉低时钟线/I2C停止信号void I2C_Stop() /拉低数据线 /产生上升沿/I2C发送应答信号/入口参数:ack (0:ACK 1:NAK)void I2C_SendACK(bit ack) SDA = ack; /写应答信号/I2C接收应答信号bit I2C_RecvACK() CY = SDA; /读应答信号 return CY;/向I2C总线发送一个字节数据void I2C_SendByte(uchar dat) uchar i; for (i=0; i8; i+) /8位计数器 dat = 1; /移出数据的最高
17、位 SDA = CY; /送数据口 I2C_RecvACK();/从I2C总线接收一个字节数据uchar I2C_RecvByte() uchar dat = 0; /使能内部上拉,准备读取数据, dat |= SDA; /读数据 return dat;/=/*MS561101BA程序*void MS561101BA_RESET() I2C_Start(); I2C_SendByte(MS561101BA_SlaveAddress);/ I2C_RecvACK(); I2C_SendByte(MS561101BA_RST); I2C_Stop();void MS561101BA_PROM_RE
18、AD() uchar d1,d2,i;=6; I2C_Start(); I2C_SendByte(MS561101BA_SlaveAddress); I2C_SendByte(MS561101BA_PROM_RD+i*2); I2C_SendByte(MS561101BA_SlaveAddress+1); d1=I2C_RecvByte(); I2C_SendACK(0); d2=I2C_RecvByte(); I2C_SendACK(1); I2C_Stop(); Delay5ms(); Cal_Ci=(uint)d18)|d2;ulong MS561101BA_DO_CONVERSION(uchar command) ulong conversion=0; ulong conv1,conv2,conv3; I2C_SendByte(command); delay(100); I2C_SendByte(MS5
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1