上传BMP085气压计的文档,想问问这里的计算公式是什么意...
这是提供的参考程序。一直看不懂这个公式是怎么来的。。基于什么原理??void read_BMP085(void)
{
long ut;
long up;
long x1, x2, b5, b6, x3, b3, p;
unsigned long b4, b7;
ut = bmp085ReadTemp(); // 读取温度
// ut = bmp085ReadTemp(); // 读取温度
up = bmp085ReadPressure();// 读取压强
// up = bmp085ReadPressure();// 读取压强
x1 = ((long)ut - ac6) * ac5 >> 15;
x2 = ((long) mc << 11) / (x1 + md);
b5 = x1 + x2;
temperature = (b5 + 8) >> 4;
//****************
b6 = b5 - 4000;
x1 = (b2 * (b6 * b6 >> 12)) >> 11;
x2 = ac2 * b6 >> 11;
x3 = x1 + x2;
b3 = (((long)ac1 * 4 + x3) + 2)/4;
x1 = ac3 * b6 >> 13;
x2 = (b1 * (b6 * b6 >> 12)) >> 16;
x3 = ((x1 + x2) + 2) >> 2;
b4 = (ac4 * (unsigned long) (x3 + 32768)) >> 15;
b7 = ((unsigned long) up - b3) * (50000 >> OSS);
if( b7 < 0x80000000)
p = (b7 * 2) / b4 ;
else
p = (b7 / b4) * 2;
x1 = (p >> 8) * (p >> 8);
x1 = (x1 * 3038) >> 16;
x2 = (-7357 * p) >> 16;
pressure = p + ((x1 + x2 + 3791) >> 4);
}
voidInit_BMP085(void)
{
ac1 = Single_Read(BMP085_Addr,0xAA);
ac1 = (ac1<<8)|Single_Read(BMP085_Addr,0xAB);
ac2 = Single_Read(BMP085_Addr,0xAC);
ac2 = (ac2<<8)| Single_Read(BMP085_Addr,0xAD);
ac3 = Single_Read(BMP085_Addr,0xAE);
ac3 = (ac3<<8)| Single_Read(BMP085_Addr,0xAF);
ac4 = Single_Read(BMP085_Addr,0xB0);
ac4 = (ac4<<8)| Single_Read(BMP085_Addr,0xB1);
ac5 = Single_Read(BMP085_Addr,0xB2);
ac5 = (ac5<<8)| Single_Read(BMP085_Addr,0xB3);
ac6 = Single_Read(BMP085_Addr,0xB4);
ac6 = (ac6<<8)| Single_Read(BMP085_Addr,0xB5);
b1 = Single_Read(BMP085_Addr,0xB6);
b1 = (b1<<8)| Single_Read(BMP085_Addr,0xB7);
b2 = Single_Read(BMP085_Addr,0xB8);
b2 = (b2<<8)| Single_Read(BMP085_Addr,0xB9);
mb = Single_Read(BMP085_Addr,0xBA);
mb = (mb<<8)| Single_Read(BMP085_Addr,0xBB);
mc = Single_Read(BMP085_Addr,0xBC);
mc = (mc<<8)| Single_Read(BMP085_Addr,0xBD);
md = Single_Read(BMP085_Addr,0xBE);
md = (md<<8)| Single_Read(BMP085_Addr,0xBF);
}
这是PDF文档 楼主测得大气压实多少Kpa啊
页:
[1]