STM32单片机驱动压力传感器XGZP6847/6897

一、XGZP6847/6897压力传感器介绍

  • 模块型号:XGZP6847、XGZP6897
  • 测量范围:100kPa…0~1kPa…1500kPa
  • 电源电压:2.5V~5.5V
  • 电流消耗:5uA(一次测量)
  • 休眠电流:<100nA (25°C)
  • 温度精度:±0.5℃@25℃
  • 信号输出:I2C
  • 响应时间:2.5ms(单次测量命令)
  • 分辨率:24位ADC
  • 精度:±2%Span
  • 表压型 (正压或负压)
  • 适用于无腐蚀性的气体

在这里插入图片描述

二、选型指南

在这里插入图片描述

三、量程相关

在这里插入图片描述

在这里插入图片描述

量程 P 为测量区间的最大值,比如,测量-100~200kpa,则P=200kpa,k=32。

四、寄存器

在这里插入图片描述

4.1 寄存器0x30

  • Measurement_control<2:0>:工作模式
    • 010b:组合采集模式(一次温度采集后立即进行一次传感器压力信号采集)
    • 011b:休眠工作模式(定期的执行一次组合采集模式,间隔时间由Sleep_time决定)
  • Sleep_time<7:4>:休眠时间
    • 0001:62.5ms
    • 0010:125ms
    • ……
    • 1111:1s
    • 0000:无意义(仅在休眠工作模式下有效)
  • Sco:数据采集完成标志位
    • 1:开始数据采集
    • 0:采集结束(休眠工作模式除外)

4.1 寄存器0xA5

  • Aout_config<7:4>:模拟输出配置(建议保留默认配置)
  • LDO_config:内部 LDO 配置
    • 0:配置成 1.8V
    • 1:配置成 3.6V
  • Unipolar
    • 0:ADC 原始数据以有符号数格式输出
    • 1:ADC 原始数据以无符号格式输出(仅当Data_out_control=1 有效)
  • Data_out_control:校准数据
    • 0:输出校准数据(默认配置为 0)
    • 1:输出 ADC 原始数据
  • Diag_on:诊断功能
    • 0:关闭诊断功能;
    • 1:开启诊断功能(默认开启)

4.1 寄存器0xA6

  • Input Swap:在传感器内部交换差分信号极性
  • Gain_P<5:3>:采集传感器信号时 PGA 增益
    • 000:增益=1X
    • 001:增益=2X
    • 010:增益=4X
    • 011:增益=8X
    • 100:增益=16X
    • 101:增益=32X
    • 110:增益=64X
    • 111:增益=128X。
  • OSR_P<2:0>:采集传感器信号时的过采样
    • 000:1024X
    • 001:2048X
    • 010:4096X
    • 011:8192X
    • 100:256X
    • 101:512X
    • 110:16384X
    • 111:32768X

五、工作模式

5.1 组合数据采集模式

组合模式读取数据按照如下指令顺序进行操作

  1. 发送指令0x0A到寄存器0x30,启动一次压力数据采集和温度数据采集。
  2. 读取寄存器地址0x30,若Sco位为0代表采集结束,可以读取数据。也可以延迟等待20ms读取。
  3. 读取寄存器地址0x06~0x08的数据,构成24位压力数据值。
  4. 读取寄存器地址0x09~0x0A的数据,构成16位温度数据值。
  5. 按以下公式换算成实际压力、温度值:
1)最高位为“0”代表正压/正温度:
Pressure= Pressure_ ADC /k;
Temperature=Temperature_ ADC/256;
(2)最高位为“1”代表负压/负温度:
Pressure=(Pressure_ADC-16777216/k;
Temperature=(Temperature_ADC-65536/256;

K值请查阅:《第三章节:量程相关》

5.2 休眠数据采集模式

  • 设置Sco=1和Measurement_control=011 进入休眠数据采集模式。
  • 设置sleep_time休眠间隔时间,范围为 62.5ms 到 1s。
  • 芯片上电后,休眠间隔时间启动一次压力数据采集和温度数据采集。
  • 除非手动将Sco置 0,不然不会停止采集。
  • 读取寄存器地址0x06~0x08的数据,构成24位压力数据值。
  • 读取寄存器地址0x09~0x0A的数据,构成16位温度数据值。

六、源码下载

觉得好,就一键三连呗(点赞+收藏+关注)

XGZP6847A压力传感器的核心部件是一个基于MEMS技术制造的压力敏感芯片,该芯片包含一个弹性膜以及四个压敏电阻组成的惠斯通电桥结构。当外部施加压力时,弹性膜会发生微小变形从而引起电阻变化,最终形成与所受压力成线性比例关系的电压输出信号[^1]。 为了将这种模拟信号转化为数字信号以便于后续处理,在实际应用中常采用模数转换器(ADC)。对于STM32单片机驱动下的XGZP6847A压力传感器而言,可以通过以下方式实现对压力数值的有效读取: 1. 利用`Get_Adc_Average()`函数来完成多次采样的平均化以提高精度并减少噪声干扰。 ```c uint32_t adc_value = Get_Adc_Average(); ``` 2. 根据预先设定好的系数K计算对应的电压值V,并进一步推导出对应的实际压力p(pa),这里的关系表达式简化为\( V = K \times p\)形式。 ```c float voltage_V = (float)(adc_value * REF_VOLTAGE) / MAX_ADC_VALUE; float pressure_pa = voltage_V / SENSOR_COEFFICIENT_K; ``` 3. 如果需要结合温度补偿,则可以依据组合模式下具体的操作流程执行相应步骤,即发送控制指令至指定寄存器触发同步采集过程后再解析结果。 - 启动联合测量任务。 ```c I2C_SendByte(0x30, 0x0A); delay_ms(20); // 或者轮询状态直至SCO标志置零 ``` - 获取完整版二十四比特长度的压力原始数据及其关联十六进制编码表示法十进制度数版本温度信息片段作为输入参数参与数学运算得出精确结论。 ```c int32_t raw_pressure_data = ((uint32_t)i2c_read_reg(0x08) << 16 | (uint32_t)i2c_read_reg(0x07) << 8 | i2c_read_reg(0x06)); if(raw_pressure_data & 0x800000){ actual_pressure = (raw_pressure_data - 16777216)/CALIBRATION_CONSTANT; } else { actual_pressure = raw_pressure_data/CALIBRATION_CONSTANT; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小康师兄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值