BMP180气压传感器的数据处理问题。STM32硬件IIC驱动
在调试四轴的时候,打算加入气压传感器来测试飞行的高度,按照数据手册来读取数据和处理数据。读取的温度值和大气压值都是很正常的,但是从大气压转换到海拔要经过一个复杂的公式,在计算公式的时候出现了问题。请问有人用过吗?可以给我一个意见吗?
数据手册上的公式为:
我的代码如下:
temp1 = P*1.0/Standard_Pressure;
temp2 = (double)pow(temp1,0.2);
temp3 = (double)(1-temp2);
Altitude = 44330*(temp3); 还有我调试的结果为: 我把我这部分全部的程序贴出来,希望大家有时间帮我看看,发现一下问题。
程序如下://¶ÁÈ¡Æøѹֵ
void BMP180_GetPressure(void)
{
u8 buffer;
double temp1,temp2,temp3;
//Ïò¿ØÖƼĴæÆ÷дÈë0X34£¬µÈ´ý4.5ms,¶ÁÈ¡Æøѹ´«¸ÐÆ÷µÄADÖµ
//Ïò¿ØÖƼĴæÆ÷дÈ벻ͬµÄÊýÖµ,µÈ´ýʱ¼ä²»Í¬,ͬʱÊä³öÊý¾ÝµÄλÊýÒ²ÊDz»Í¬µÄ¡£
// 0X34 4.5ms 16λÊý¾Ý
// 0x74 7.5 17λÊý¾Ý
// 0xb4 13.5 18λÊý¾Ý
// 0xf4 25.5 19λÊý¾Ý
BMP180_I2C1WriteByte(BMP180_REG_CTRL_MEAS,0X34);
delay_ms(5);
BMP180_I2C2ReadData(BMP180_REG_OUT_MSB,buffer,2);
delay_ms(5);
UP = buffer<<8 | buffer;
B6 = B5-4000;
X1 = (B2*(B6*B6>>12))>>11;
X2 = AC2*B6>>11;
X3 = X1+X2;
B3 = ((AC1<<2)+X3+2)>>2;
X1 = AC3*B6>>13;
X2 = (B1*(B6*B6/4096))>>16;
X3 = ((X1+X2)+2)>>2;
B4 = AC4*(u32)(X3+32768)>>15;
B7 = ((u32)UP-B3)*50000;
if(B7<0X80000000)
P = (B7<<1)/B4;
else
P = (B7/B4)<<1;
X1 = (P<<8)*(P<<8);
X1 = (X1*3038)>>16;
X2 = (-7357*P)>>16;
P = P+(X1+X2+3791)/16;//µ¥Î»PaΪʲôÔÚÕâÀïʹÓÃÓÒÒÆÀ´×ö³ý·¨¾Í²»ÐÐÄØ?
Pressure = (float)(P)/1000; //µ¥Î»£ºKPa´óÆøѹǿ
temp1 = P*1.0/Standard_Pressure;
temp2 = (double)pow(temp1,0.2);
temp3 = (double)(1-temp2);
Altitude = 44330*(temp3);
printf("temp1=%f,temp2=%f,temp3=%f\r\n",temp1,temp2,temp3);
printf("UP=%d,P=%d,Pressure=%4.3fKPaAltitude=%4.3fm\r\n",UP,P,Pressure,Altitude);
} 中文注释显示有点问题,给大家查看代码,带来一点不方便哈。
希望使用过这个模块的朋友给我一个解决的方法。
小弟在此谢谢了。 对了,还有数据类型的定义。
我在这里上贴上。
s32 UT;//ζÈADÖµ long int32_t
s32 UP;//ÆøѹADÖµ long
static s16 AC1,AC2,AC3;//short int16_t
static u16 AC4,AC5,AC6; //unsigned shortuint16_t
static s16 B1,B2,MB,MC,MD; //short
s32 X1,X2,X3;//Á¿»¯Î¶ȺÍÆøѹµÄÖмä±äÁ¿long
u32 B4;//unsigned longuint32_t
s32 B3,B5,B6,B7; //long
s32 P;//°ëÁ¿»¯µÄÆøѹֵ
s32 T;//°ëÁ¿»¯µÄζÈÖµ
float Temperature; //ζÈÖµµ¥Î»ÉãÊ϶È
float Pressure; //Æøѹֵ µ¥Î»:KPa
float Altitude;//º£°Î¸ß¶È µ¥Î»£ºm 在发一个串口的调试结果。
bmp085就用过 用的是模拟iic stm32的硬件iic不好用 呀 我记得我做的时候这条复杂的公式我的MCU运算不了 我是把数据交给上位机PC去处理的 又快又准 bass 发表于 2014-9-26 15:02
我记得我做的时候这条复杂的公式我的MCU运算不了 我是把数据交给上位机PC去处理的 又快又准 ...
那您的意思,这就是硬伤了。 两个嘴巴笑110 发表于 2014-9-26 15:06
那您的意思,这就是硬伤了。
主要是我在飞控上检测,我想送到遥控上,在5110上显示。
所以我这里就不好用上位机了。
还有什么其他的方法么? 两个嘴巴笑110 发表于 2014-9-26 15:06
那您的意思,这就是硬伤了。
你能读出数据 证明IIC应该没问题啦 应该是数据处理出问题吧 菜鸟看法 大神请喷 bass 发表于 2014-9-26 15:08
你能读出数据 证明IIC应该没问题啦 应该是数据处理出问题吧 菜鸟看法 大神请喷 ...
对啊。我的驱动应该是没有问题的,主要就是数据处理上面。 两个嘴巴笑110 发表于 2014-9-26 15:07
主要是我在飞控上检测,我想送到遥控上,在5110上显示。
所以我这里就不好用上位机了。
你把你那条公式放在上位机试试处理看 我当时放在mcu也出现了各种问题 但是换在PC就没问题 也许真的是太复杂了 bass 发表于 2014-9-26 15:10
你把你那条公式放在上位机试试处理看 我当时放在mcu也出现了各种问题 但是换在PC就没问题 也许真的是太复 ...
我没有这方面的上位机啊。
你可以共享一个不? 那个上位机是我同学写的 好久前的事儿了 他电脑都换了好几次了 估计都不见了 你也可以把数据保存到excel 然后让excel 处理吧 虽然麻烦点 不好意思 bass 发表于 2014-9-26 15:37
那个上位机是我同学写的 好久前的事儿了 他电脑都换了好几次了 估计都不见了 你也可以把数据保存到excel 然 ...
好的,谢谢你哈。 是你没有理解数据手册吧,细细看看,意思是先要按照自己当前的高度计算出当前海平面大气压的值P0。然后再利用每上升10m,气压上升1.2hPa计算当前高度。先要计算海平面气压基准值。 看到最后发现 还是要数学基础啊 STC 的一转就卡机,
页:
[1]