第四节:压力与流量测量——MEMS压力传感器、差压变送器、热式流量计原理与数据采集

各位工程师朋友,咱们今天聊聊暖通空调系统里最基础、也最关键的测量环节——压力和流量。说实话,这两个参数要是测不准,后面所有的能效优化都是空中楼阁。我自己在项目现场就吃过不少亏,今天把这些经验掰开了揉碎了讲给你听。

4.1 MEMS压力传感器:小身材,大用途

MEMS压力传感器,说白了就是微机电系统做的压力芯片。它有多小?比你的小指甲盖还小。但别小看它,现在楼宇自控里用的压力传感器,十有八九都是MEMS方案。

工作原理:硅片上蚀刻出一个薄膜,压力变化让薄膜变形,薄膜上的压阻电阻值跟着变。惠斯通电桥一测,电压信号就出来了。就这么简单。

关键参数表(我常用的选型参考)

参数 典型值 我的建议
量程 0~100kPa / 0~1MPa 暖通空调风系统用100kPa足够,水系统看楼层高度
精度 ±0.5%FS ~ ±1%FS 能效优化建议选0.5%以上
输出 I2C / SPI / 模拟电压 嵌入式系统首选I2C,省引脚
温度漂移 ±0.02%FS/℃ 机房温度波动大,这个参数很重要

我在项目中遇到过一件事:某数据中心用了便宜的压力传感器,夏天和冬天的读数差了15%。后来一查,温度补偿没做好。嗯,这里要注意——MEMS传感器一定要做温度补偿,要么硬件上配温度传感器,要么软件里做查表校正。

4.2 差压变送器:风系统和水系统的"听诊器"

差压变送器,其实就是测两个点之间的压力差。暖通空调里用它来干嘛?最常见的就是测过滤器堵塞程度、测风机前后压差、测阀门两端压降。

选型要点

  • 量程匹配:风系统一般0~500Pa,水系统0~100kPa。别拿测水的去测风,精度根本不够。
  • 安装位置:取压管要避开弯头、阀门,直管段至少5倍管径。我见过有人把取压口装在弯头后面,数据跳得像心电图。
  • 零点漂移:差压变送器最怕零点漂移。我建议每次系统启动前做一次零点校准,尤其是季节交替的时候。

避坑指南:我曾经在某个项目中,差压变送器读数一直偏大。查了两天,最后发现是取压管里有冷凝水。暖通空调的风管里湿度大,取压管一定要倾斜安装,最低点加排水阀。这个细节,设计图纸上经常不画,但现场必须做。

4.3 热式流量计:直接测质量流量,省心

热式流量计的原理,你想想看——一个加热元件,流体流过带走热量,温度变化跟质量流量成正比。它跟传统的差压式流量计最大的区别是:直接测质量流量,不用再补偿温度和压力。

为什么暖通空调里推荐用热式?

  1. 压损小:几乎没压损,对系统效率影响小。
  2. 量程比大:100:1的量程比,低流速也能测准。
  3. 无活动部件:维护量小,适合长期运行。

但热式流量计也有脾气:

  • 对气体成分敏感,如果风管里混了别的气体,读数会偏。
  • 安装要求直管段,前10D后5D(D是管径),不然流场不稳。
  • 探头容易积灰,建议定期清洁。

4.4 数据采集实战:从传感器到嵌入式系统

好了,传感器选好了,怎么把数据读进我们的嵌入式系统?我以STM32为例,给你一个完整的采集流程。

硬件连接

  • MEMS压力传感器(比如MS5611):I2C接口,SCL接PB6,SDA接PB7
  • 差压变送器(4-20mA输出):接ADC输入,加250Ω电阻转1-5V
  • 热式流量计(RS485输出):接UART转485模块

代码示例(I2C读取MEMS压力传感器)

// MS5611压力传感器读取示例
#include "ms5611.h"

uint8_t ms5611_init(void) {
    uint8_t id;
    // 复位传感器
    i2c_write(MS5611_ADDR, MS5611_CMD_RESET, 0);
    delay_ms(10);
    // 读取PROM(校准系数)
    for(int i=0; i<8; i++) {
        i2c_read(MS5611_ADDR, MS5611_CMD_PROM + i*2, &prom[i], 2);
    }
    return 1;
}

float ms5611_read_pressure(void) {
    uint32_t raw_pressure;
    uint8_t buf[3];
    
    // 启动压力转换
    i2c_write(MS5611_ADDR, MS5611_CMD_CONV_D1_OSR4096, 0);
    delay_ms(10);  // 等待转换完成
    
    // 读取原始数据
    i2c_read(MS5611_ADDR, MS5611_CMD_ADC_READ, buf, 3);
    raw_pressure = (buf[0] << 16) | (buf[1] << 8) | buf[2];
    
    // 用校准系数计算实际压力
    return ms5611_compensate(raw_pressure, prom);
}

注意事项

  • I2C总线要加4.7kΩ上拉电阻,这个经常有人忘。
  • 4-20mA信号线要用屏蔽双绞线,单端接地。
  • RS485要加终端电阻,120Ω,不然长距离通信会出错。

4.5 数据融合与滤波:让数据"说人话"

原始数据读回来了,但直接能用吗?不行。传感器噪声、电磁干扰、流体脉动,都会让数据跳来跳去。我常用的方法:

滑动平均滤波

#define FILTER_SIZE 10
float filter_buffer[FILTER_SIZE];
uint8_t filter_index = 0;

float moving_average_filter(float new_value) {
    float sum = 0;
    filter_buffer[filter_index] = new_value;
    filter_index = (filter_index + 1) % FILTER_SIZE;
    
    for(int i=0; i<FILTER_SIZE; i++) {
        sum += filter_buffer[i];
    }
    return sum / FILTER_SIZE;
}

中值滤波:适合去除尖峰干扰,比如水泵启动时的压力冲击。

我个人习惯把两种滤波结合用:先中值滤波去掉野点,再滑动平均平滑曲线。这样既响应快,又稳定。

4.6 工程经验总结

最后,给你几个我在现场摸爬滚打总结出来的要点:

  • 传感器安装比选型更重要:再好的传感器,装错了位置也是白搭。
  • 数据采集要加看门狗:传感器偶尔会死机,定期复位是保底手段。
  • 校准周期别超过半年:尤其是差压变送器,漂移是常态。
  • 记录原始数据和校准数据:方便后期排查问题。

好了,这一节的内容就到这儿。压力与流量测量,看似基础,但里面门道不少。你把这些原理和代码吃透了,后面做能效优化的时候,数据基础就扎实了。下一节我们聊聊温度与湿度测量,那也是暖通空调里绕不开的话题。