搜索
bottom↓
回复: 18

BMP180气压传感器的数据处理问题。STM32硬件IIC驱动

[复制链接]

出0入0汤圆

发表于 2014-9-26 14:44:00 | 显示全部楼层 |阅读模式
在调试四轴的时候,打算加入气压传感器来测试飞行的高度,按照数据手册来读取数据和处理数据。

读取的温度值和大气压值都是很正常的,但是从大气压转换到海拔要经过一个复杂的公式,在计算公式的时候出现了问题。请问有人用过吗?可以给我一个意见吗?
数据手册上的公式为:



我的代码如下:
temp1 = P*1.0/Standard_Pressure;
    temp2 = (double)pow(temp1,0.2);
    temp3 = (double)(1-temp2);
    Altitude = 44330*(temp3);

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2014-9-26 14:46:57 | 显示全部楼层
还有我调试的结果为:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2014-9-26 14:48:43 | 显示全部楼层
我把我这部分全部的程序贴出来,希望大家有时间帮我看看,发现一下问题。
程序如下:
  1. //¶ÁÈ¡Æøѹֵ
  2. void BMP180_GetPressure(void)
  3. {
  4.     u8 buffer[2];   
  5.     double temp1,temp2,temp3;
  6.    
  7.     //Ïò¿ØÖƼĴæÆ÷дÈë0X34£¬µÈ´ý4.5ms,¶ÁÈ¡Æøѹ´«¸ÐÆ÷µÄADÖµ
  8.     //Ïò¿ØÖƼĴæÆ÷дÈ벻ͬµÄÊýÖµ,µÈ´ýʱ¼ä²»Í¬,ͬʱÊä³öÊý¾ÝµÄλÊýÒ²ÊDz»Í¬µÄ¡£
  9.     //       0X34   4.5ms    16λÊý¾Ý
  10.     //       0x74   7.5      17λÊý¾Ý
  11.     //       0xb4   13.5     18λÊý¾Ý
  12.     //       0xf4   25.5     19λÊý¾Ý
  13.     BMP180_I2C1WriteByte(BMP180_REG_CTRL_MEAS,0X34);
  14.     delay_ms(5);
  15.     BMP180_I2C2ReadData(BMP180_REG_OUT_MSB,buffer,2);
  16.     delay_ms(5);
  17.     UP = buffer[0]<<8 | buffer[1];
  18.     B6 = B5-4000;
  19.     X1 = (B2*(B6*B6>>12))>>11;
  20.     X2 = AC2*B6>>11;
  21.     X3 = X1+X2;
  22.     B3 = ((AC1<<2)+X3+2)>>2;
  23.     X1 = AC3*B6>>13;
  24.     X2 = (B1*(B6*B6/4096))>>16;
  25.     X3 = ((X1+X2)+2)>>2;
  26.     B4 = AC4*(u32)(X3+32768)>>15;
  27.     B7 = ((u32)UP-B3)*50000;
  28.     if(B7<0X80000000)
  29.         P = (B7<<1)/B4;
  30.     else
  31.         P = (B7/B4)<<1;
  32.     X1 = (P<<8)*(P<<8);
  33.     X1 = (X1*3038)>>16;
  34.     X2 = (-7357*P)>>16;
  35.     P = P+(X1+X2+3791)/16;//µ¥Î»Pa  ÎªÊ²Ã´ÔÚÕâÀïʹÓÃÓÒÒÆÀ´×ö³ý·¨¾Í²»ÐÐÄØ?
  36.     Pressure = (float)(P)/1000;     //µ¥Î»£ºKPa  ´óÆøѹǿ
  37.    
  38.     temp1 = P*1.0/Standard_Pressure;
  39.     temp2 = (double)pow(temp1,0.2);
  40.     temp3 = (double)(1-temp2);
  41.     Altitude = 44330*(temp3);
  42.    
  43.     printf("temp1=%f,temp2=%f,temp3=%f\r\n",temp1,temp2,temp3);
  44.    
  45.     printf("UP=%d,  P=%d,  Pressure=%4.3fKPa  Altitude=%4.3fm\r\n",UP,P,Pressure,Altitude);      
  46. }
复制代码

出0入0汤圆

 楼主| 发表于 2014-9-26 14:50:09 | 显示全部楼层
中文注释显示有点问题,给大家查看代码,带来一点不方便哈。

希望使用过这个模块的朋友给我一个解决的方法。

小弟在此谢谢了。

出0入0汤圆

 楼主| 发表于 2014-9-26 14:51:25 | 显示全部楼层
对了,还有数据类型的定义。

我在这里上贴上。
  1. s32 UT;//ζÈADÖµ    long     int32_t
  2. s32 UP;//ÆøѹADÖµ    long
  3. static s16 AC1,AC2,AC3;  //short    int16_t
  4. static u16 AC4,AC5,AC6;      //unsigned short  uint16_t
  5. static s16 B1,B2,MB,MC,MD; //short
  6. s32 X1,X2,X3;//Á¿»¯Î¶ȺÍÆøѹµÄÖмä±äÁ¿  long
  7. u32 B4;  //unsigned long  uint32_t
  8. s32 B3,B5,B6,B7; //long
  9. s32 P;//°ëÁ¿»¯µÄÆøѹֵ
  10. s32 T;//°ëÁ¿»¯µÄζÈÖµ
  11. float Temperature; //ζÈÖµ  µ¥Î»ÉãÊ϶È
  12. float Pressure; //Æøѹֵ   µ¥Î»:KPa
  13. float Altitude;//º£°Î¸ß¶È   µ¥Î»£ºm
复制代码

出0入0汤圆

 楼主| 发表于 2014-9-26 14:55:25 | 显示全部楼层
在发一个串口的调试结果。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-9-26 15:00:45 | 显示全部楼层
bmp085就用过 用的是模拟iic stm32的硬件iic不好用 呀

出0入0汤圆

发表于 2014-9-26 15:02:59 | 显示全部楼层
我记得我做的时候这条复杂的公式我的MCU运算不了 我是把数据交给上位机PC去处理的 又快又准

出0入0汤圆

 楼主| 发表于 2014-9-26 15:06:21 | 显示全部楼层
bass 发表于 2014-9-26 15:02
我记得我做的时候这条复杂的公式我的MCU运算不了 我是把数据交给上位机PC去处理的 又快又准 ...

那您的意思,这就是硬伤了。

出0入0汤圆

 楼主| 发表于 2014-9-26 15:07:39 | 显示全部楼层
两个嘴巴笑110 发表于 2014-9-26 15:06
那您的意思,这就是硬伤了。

主要是我在飞控上检测,我想送到遥控上,在5110上显示。
所以我这里就不好用上位机了。

还有什么其他的方法么?

出0入0汤圆

发表于 2014-9-26 15:08:22 | 显示全部楼层
两个嘴巴笑110 发表于 2014-9-26 15:06
那您的意思,这就是硬伤了。

你能读出数据 证明IIC应该没问题啦 应该是数据处理出问题吧 菜鸟看法 大神请喷

出0入0汤圆

 楼主| 发表于 2014-9-26 15:09:27 | 显示全部楼层
bass 发表于 2014-9-26 15:08
你能读出数据 证明IIC应该没问题啦 应该是数据处理出问题吧 菜鸟看法 大神请喷 ...

对啊。我的驱动应该是没有问题的,主要就是数据处理上面。

出0入0汤圆

发表于 2014-9-26 15:10:44 | 显示全部楼层
两个嘴巴笑110 发表于 2014-9-26 15:07
主要是我在飞控上检测,我想送到遥控上,在5110上显示。
所以我这里就不好用上位机了。

你把你那条公式放在上位机试试处理看 我当时放在mcu也出现了各种问题 但是换在PC就没问题 也许真的是太复杂了

出0入0汤圆

 楼主| 发表于 2014-9-26 15:19:29 | 显示全部楼层
bass 发表于 2014-9-26 15:10
你把你那条公式放在上位机试试处理看 我当时放在mcu也出现了各种问题 但是换在PC就没问题 也许真的是太复 ...

我没有这方面的上位机啊。
你可以共享一个不?

出0入0汤圆

发表于 2014-9-26 15:37:09 | 显示全部楼层
那个上位机是我同学写的 好久前的事儿了 他电脑都换了好几次了 估计都不见了 你也可以把数据保存到excel 然后让excel 处理吧 虽然麻烦点 不好意思

出0入0汤圆

 楼主| 发表于 2014-9-26 15:58:15 | 显示全部楼层
bass 发表于 2014-9-26 15:37
那个上位机是我同学写的 好久前的事儿了 他电脑都换了好几次了 估计都不见了 你也可以把数据保存到excel 然 ...

好的,谢谢你哈。

出0入0汤圆

发表于 2014-11-3 12:15:08 | 显示全部楼层
是你没有理解数据手册吧,细细看看,意思是先要按照自己当前的高度计算出当前海平面大气压的值P0。然后再利用每上升10m,气压上升1.2hPa计算当前高度。先要计算海平面气压基准值。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2017-12-16 13:59:53 | 显示全部楼层
看到最后  发现 还是要数学基础啊

出70入0汤圆

发表于 2024-1-23 22:18:13 | 显示全部楼层
STC 的一转就卡机,
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-29 20:09

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表