当前位置: 首页 > article >正文

stm32 HAL读取GZP6816D传感器

GZP6816D是一款国产的压力传感器。
读取数据的指令如下:
读取数据指令
换算
代码如下。
但在换算中,最后加上去的20,感觉跟实际大气压差了10Kpa,所有,在计算的时候加上去的是30。

void Get_GZP6816D_Data(void)
{
    const unsigned char write_address = 0xF0;//(0x78<<1);
    const unsigned char read_address = 0xF1;//(0x78<<1)+1;
    uint8_t sendbuffer[1] = {0xAC};
    uint8_t readBuffer[6] = {0};
    HAL_I2C_Master_Transmit(&hi2c1,write_address,sendbuffer,1,0xff);

    HAL_Delay(230);//默认 OSR128X,单次测量时间为 203mS
    
    if(HAL_I2C_Master_Receive(&hi2c1,read_address,readBuffer,6,0xff) == HAL_OK)
    {
      unsigned int pressureTmp = (readBuffer[1]<<16) + (readBuffer[2]<<8) + readBuffer[3];
      /*
      实际某压力点电桥校准值换算:将 0x9B 0xB0 0xC5 转换为十进制数为 10203333,
      本次计算假设校准时使用的量程为 30Kpa-110Kpa,对应的 AD 输出为 1677722~15099494(10%AD~90%AD),
      根据输入输出关系公式(pressure= ((PMAX-PMIN)/(DMAX-DMIN)*(Dtest-DMIN)+PMIN))得到:
      实际压力值=(110-30)/(15099494-1677722)*(10203333-1677722)+20=70.816 Kpa
      */
      //float pressure = (110-30)/(15099494-1677722)*(pressureTmp-1677722)+20;
      float pressure = 80.0/13421772*(pressureTmp-1677722)+30;
      float pressurePa = pressure*1000;
      printf("status=0x%x,pressureTmp = %d,pressure = %fKpa,pressurePa:%f\n",readBuffer[0],pressureTmp,pressure,pressurePa);
      /*
      温度校准值换算:将 0x56 0xAA 转换为十进制数为 22186,由于读取到的校准数据是以百分比形式表示的,
      这个百分比在数值上等于我们换算得到的十进制数与 16bits 无符号数的最大值(65535)之比,
      所以在换算百分比时可进行如下计算22186/65536*100%=33.85%
      温度的校准范围规定为-40℃~150℃ 所以校准值=(150-(-40))*33.85%—40=24.32℃
      */

      unsigned int temperatureTmp = (readBuffer[4]<<8) + readBuffer[5];
      float temperaturePercent = temperatureTmp / 65536.0;
      float temperature = (150-(-40))*temperaturePercent - 40;
      printf("temperatureTmp:%d, percent:%f,temperature: %.2f\n",temperatureTmp, temperaturePercent,temperature);
    }
    else
    {
      printf("read data failed.\n");
    }

}

http://www.kler.cn/a/418371.html

相关文章:

  • 简单web项目自定义部署Dockerfile
  • 5G学习笔记之随机接入
  • 【接口封装】——11、Qt 的单例模式
  • C++条件编译指令
  • C语言零基础——简单的排序算法(4种)
  • QT实战--qt各种按钮实现
  • 移远通信携手紫光展锐,以“5G+算力”共绘万物智联新蓝图
  • WPF控制文本框输入的小数点位数
  • 使用Dify与BGE-M3搭建RAG(检索增强生成)应用-改进一,使用工作流代替Agnet
  • Mybatis:接口方法中的参数传递
  • Vue 集成和使用 SQLite 的完整指东
  • SpringBoot开发——Spring Boot 3.3 高效批量插入万级数据的多种方案
  • 等保三级安全架构设计方案
  • Cent0S7 安装Redis
  • mybatis.mapper-locations=classpath:mapper/*.xml
  • 【Linux】Linux2.6内核进程调度队列与调度原理
  • 基于Java Springboot 家政服务管理系统
  • 【UE5 C++】判断两点连线是否穿过球体
  • Observability:如何在 Kubernetes pod 中轻松添加应用程序监控
  • k8s 架构详解
  • 虚拟列表遇上瀑布流布局
  • 基于Springboot开发的云野旅游平台
  • 机器学习与深度学习-2-Softmax回归从零开始实现
  • 模型 布鲁姆法则
  • 如何用一块香橙派Zero3打造你的HomeAssistant智能家居中心并实现远程管理
  • 华为机试HJ77 火车进站