jinglixixi 发表于 2021-2-11 01:10

【ST MEMS防水气压传感器LPS27HHW测评】+2个驱程间的对比及应用 (兼结题报告)

本帖最后由 jinglixixi 于 2021-2-11 01:14 编辑

<p>因LPS27HHW的驱动受阻,故放慢了测评的进程,幸得管管的指点与帮助,终于在littleshrimp相关帖子中获得了解决之道。</p>

<p>1. LPS27HHW与LPS22HH的对比</p>

<p>LPS22HH与LPS27HHW均属气压传感器,但各自又有各自的特点,为此从下面几点加以对比。</p>

<p>1)外观对比</p>

<p>&nbsp;</p>

<p> &nbsp;&nbsp;图1&nbsp;&nbsp; LPS22HH传感器</p>

<p>&nbsp;</p>

<p> 图2&nbsp; LPS27HHW传感器</p>

<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</p>

<p>由外观可以看出,2个传感器均因体型小巧而被置于开发板上来提供使用,且均以双排12PIN的排针引出供用户使用。但LPS27HHW比LPS22HH更突出,在于它的后膜设计防水性能。</p>

<p>2)性能对比</p>

<table>
        <tbody>
                <tr>
                        <td>
                        <p>名称</p>
                        </td>
                        <td>
                        <p>LPS22HH</p>
                        </td>
                        <td>
                        <p>LPS27HHW</p>
                        </td>
                </tr>
                <tr>
                        <td>
                        <p>测量范围</p>
                        </td>
                        <td>
                        <p>260 ~ 1260 hPa</p>
                        </td>
                        <td>
                        <p>260 ~ 1260 hPa</p>
                        </td>
                </tr>
                <tr>
                        <td>
                        <p>通讯接口</p>
                        </td>
                        <td>
                        <p>I&sup2;C, Serial, SPI</p>
                        </td>
                        <td>
                        <p>SPI, I&sup2;C or MIPI I3C</p>
                        </td>
                </tr>
                <tr>
                        <td>
                        <p>工作电压</p>
                        </td>
                        <td>
                        <p>1.7V ~ 3.6V</p>
                        </td>
                        <td>
                        <p>1.7V ~ 3.6V</p>
                        </td>
                </tr>
                <tr>
                        <td>
                        <p>测量精度</p>
                        </td>
                        <td>
                        <p>24 bit精度</p>
                        </td>
                        <td>
                        <p>24 bit精度</p>
                        </td>
                </tr>
                <tr>
                        <td>
                        <p>ODR</p>
                        </td>
                        <td>
                        <p>1 ~ 200 Hz</p>
                        </td>
                        <td>
                        <p>1 ~ 200 Hz</p>
                        </td>
                </tr>
                <tr>
                        <td>
                        <p>最小电流</p>
                        </td>
                        <td>
                        <p>4 &mu;A</p>
                        </td>
                        <td>
                        <p>4 &mu;A</p>
                        </td>
                </tr>
                <tr>
                        <td>
                        <p>绝对压力精度</p>
                        </td>
                        <td>
                        <p>0.5 hPa</p>
                        </td>
                        <td>
                        <p>0.5 hPa</p>
                        </td>
                </tr>
                <tr>
                        <td>
                        <p>低压传感器噪声</p>
                        </td>
                        <td>
                        <p>0.65 Pa</p>
                        </td>
                        <td>
                        <p>0.7 Pa</p>
                        </td>
                </tr>
                <tr>
                        <td>
                        <p>封装类型</p>
                        </td>
                        <td>薄而小封装</td>
                        <td>
                        <p>防水封装</p>
                        </td>
                </tr>
        </tbody>
</table>

<p>&nbsp;</p>

<p>2)驱动程序对比</p>

<p>尽管LPS22HH与LPS27HHW在硬件上存在稍许的差异,那它们在软件的驱程上又有何差异呢?</p>

<p>在主程序方面:</p>

<p>两者的程序结构是完全相同的,所不同的就是调用的函数名称不同,毕竟所驱动的器件不一样嘛!</p>

<p>在LPS27HHW中,存在一个名为ucf_line_t的结构定义,但并未使用。</p>

<p>typedef struct {</p>

<p>&nbsp; uint8_t address;</p>

<p>&nbsp; uint8_t data;</p>

<p>} ucf_line_t;</p>

<p>此外,将axis1bit16_t和axis1bit32_t的结构定义放于主程序中,而LPS22HH却放在lps22hh_reg. h。</p>

<p>typedef union{</p>

<p>&nbsp; int16_t i16bit;</p>

<p>&nbsp; uint8_t u8bit;</p>

<p>} axis1bit16_t;</p>

<p>typedef union{</p>

<p>&nbsp; int32_t i32bit;</p>

<p>&nbsp; uint8_t u8bit;</p>

<p>} axis1bit32_t;</p>

<p>&nbsp;</p>

<p>在驱程.c方面:</p>

<p>两者的程序结构是完全相同的,所不同的是对应的函数名称不同。</p>

<p>在驱程.h方面:</p>

<p>两者的程序结构是完全相同的,所不同的是对应的函数名称不同。</p>

<p>LPS22HH与LPS27HHW的ID标识值是相同的,见如下定义:</p>

<p>#define LPS22HH_ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0xB3U</p>

<p>#define LPS27HHW_ID&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0xB3U</p>

<p>&nbsp;</p>

<p>在lps22hh_reg. h中,多出了axis3bit16_t和axis3bit32_t的结构定义,但并未使用。</p>

<p>typedef union{</p>

<p>&nbsp; int16_t i16bit;</p>

<p>&nbsp; uint8_t u8bit;</p>

<p>} axis3bit16_t;</p>

<p>&nbsp;</p>

<p>typedef union{</p>

<p>&nbsp; int32_t i32bit;</p>

<p>&nbsp; uint8_t u8bit;</p>

<p>} axis3bit32_t;</p>

<p>&nbsp;</p>

<p>3)对比结论</p>

<p>综上所述,我们可以断定两者的驱程具有通用性,即可以用LPS22HH的驱程来驱动LPS27HHW。</p>

<p>那么实际情况该是怎样? 经实际测试,该推测是完全正确的。</p>

<p>&nbsp;</p>

<p>2. LPS27HHW应用</p>

<p>在实际应用中,LPS27HHW与STM32L452的连接关系为:</p>

<p>VDD&nbsp;&nbsp; &nbsp;---3.3V</p>

<p>Vdd_IO ---3.3V</p>

<p>GND&nbsp; &nbsp;---GND</p>

<p>SCL&nbsp;&nbsp;&nbsp; ---PB8</p>

<p>SDA&nbsp;&nbsp;&nbsp; ---PB9</p>

<p>&nbsp;</p>

<p>实现气压检测功能的主程序如下:</p>

<pre>
<code class="language-cpp">int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_I2C1_Init();
  MX_USART2_UART_Init();
  lps22hh_ctx_t dev_ctx;   //stmdev_ctx_t dev_ctx;
  dev_ctx.write_reg = platform_write;
  dev_ctx.read_reg = platform_read;
  dev_ctx.handle = &amp;hi2c1;
  sprintf((char*)tx_buffer, "LPS22HH test\r\n");
  tx_com( tx_buffer, strlen( (char const*)tx_buffer ) );
  OLED_Init();
  OLED_Clear();
  OLED_ShowString(8,0,"STM32L452",16);
  OLED_ShowString(8,2,"OLED &amp; LPS27HHW",16);
  HAL_Delay(1000);
  HAL_Delay(1000);
  OLED_Clear();
  OLED_ShowString(8,0,"pres=",16);
  OLED_ShowString(8,2,"temp=",16);
  whoamI = 0;
  lps22hh_device_id_get(&amp;dev_ctx, &amp;whoamI);
  if ( whoamI != LPS22HH_ID )
  while(1);
  lps22hh_reset_set(&amp;dev_ctx, PROPERTY_ENABLE);
  do {
    lps22hh_reset_get(&amp;dev_ctx, &amp;rst);
  } while (rst);
  lps22hh_block_data_update_set(&amp;dev_ctx, PROPERTY_ENABLE);
  lps22hh_data_rate_set(&amp;dev_ctx, LPS22HH_10_Hz_LOW_NOISE);
  while (1)
  {
    lps22hh_reg_t reg;
    lps22hh_read_reg(&amp;dev_ctx, LPS22HH_STATUS, (uint8_t *)&amp;reg, 1);
  if(reg.status.p_da)
    {
      memset(data_raw_pressure.u8bit, 0x00, sizeof(int32_t));
      lps22hh_pressure_raw_get(&amp;dev_ctx, data_raw_pressure.u8bit);
      pressure_hPa = lps22hh_from_lsb_to_hpa( data_raw_pressure.i32bit);
      sprintf((char*)tx_buffer, "pressure :%6.2f\r\n", pressure_hPa);
      tx_com( tx_buffer, strlen( (char const*)tx_buffer ) );
      sprintf((char*)tx_buffer, "pres=%6.2fhPa", pressure_hPa);
      OLED_ShowString(8,0,tx_buffer,16);
    }

    if(reg.status.t_da)
    {
     memset(data_raw_temperature.u8bit, 0x00, sizeof(int16_t));
      lps22hh_temperature_raw_get(&amp;dev_ctx, data_raw_temperature.u8bit);
      temperature_degC = lps22hh_from_lsb_to_celsius( data_raw_temperature.i16bit );
      sprintf((char*)tx_buffer, "temperature :%6.2f\r\n", temperature_degC );
      tx_com( tx_buffer, strlen( (char const*)tx_buffer ) );
      sprintf((char*)tx_buffer, "temp=%6.2fdegC", temperature_degC );
      OLED_ShowString(8,2,tx_buffer,16);
    }
    HAL_Delay(500);
    HAL_GPIO_WritePin(LD4_GPIO_Port, LD4_Pin, GPIO_PIN_RESET);
    HAL_Delay(500);
    HAL_GPIO_WritePin(LD4_GPIO_Port, LD4_Pin, GPIO_PIN_SET);
  }
}</code></pre>

<p>进行LPS27HHW检测的线路连接如图3所示,其检测结果如图4所示。</p>

<p></p>

<p>图 3 串口检测连接</p>

<p></p>

<p>图 4 串口检测效果</p>

<p>&nbsp;</p>

<p>在连接OLED屏的情况下,其显示效果如图5及图6所示。</p>

<p></p>

<p>图5&nbsp; OLED屏显示界面</p>

<p>&nbsp;</p>

<p></p>

<p>图 6 OLED屏显示效果</p>

<p>&nbsp;</p>

<p>有了上面的实际体验,感觉LPS27HHW的性能还是很出色的,在检测气压的同时还能获得环境的温度状态,适于在小型气象站上使用。后面有时间的话,再将它移植到其它的开发板来使用。</p>

<p style="text-align:justify">&nbsp;</p>

w494143467 发表于 2021-2-17 15:06

<p>测评写的不错,就喜欢你这样的测评帖子,感谢老铁的分享!期待后续</p>

jinglixixi 发表于 2021-2-17 19:03

w494143467 发表于 2021-2-17 15:06
测评写的不错,就喜欢你这样的测评帖子,感谢老铁的分享!期待后续

<p><img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/handshake.gif" width="48" /></p>

freebsder 发表于 2021-2-25 22:23

<p>hPa这单位给的。。。好吧</p>
页: [1]
查看完整版本: 【ST MEMS防水气压传感器LPS27HHW测评】+2个驱程间的对比及应用 (兼结题报告)