传感器选型与接口:温度传感器(NTC、PT1000)、湿度传感器、压力传感器、风速传感器的选型与I2C/SPI接口设计

传感器选型这事儿,说难不难,说简单也不简单。我做了十几年暖通项目,见过太多因为传感器选错导致整个系统翻车的案例。说白了,传感器就是系统的眼睛——眼睛瞎了,算法再牛也没用。

今天咱们就聊聊暖通空调里最常见的四种传感器:温度、湿度、压力和风速。我会结合自己的实战经验,把选型要点和接口设计讲透。

一、温度传感器:NTC vs PT1000

温度传感器是暖通系统里用得最多的。常见的就两种:NTC热敏电阻和PT1000铂电阻。怎么选?看场景。

1. NTC热敏电阻

NTC的特点是灵敏度高、价格便宜。我习惯用在室内温度采集、风管温度监测这些对精度要求不那么苛刻的地方。

关键参数:

  • 标称阻值:常用10kΩ、100kΩ(25℃时)
  • B值:3950(最常见),也有3435、4100等
  • 精度:±0.5℃ ~ ±1.0℃
  • 测温范围:-40℃ ~ +125℃

NTC的电路设计很简单,一个分压电阻加ADC就能搞定。但我得提醒你——分压电阻的选型有讲究。

我的经验:分压电阻取NTC在25℃时的阻值,这样在中间温度段分辨率最高。比如用10kΩ NTC,分压电阻也选10kΩ,精度0.1%的金属膜电阻。

曾经有个项目,现场温度老是跳变。查了半天,发现是分压电阻用的碳膜电阻,温漂太大。换成金属膜后问题解决。嗯,这种坑我踩过不止一次。

2. PT1000铂电阻

PT1000是铂电阻,0℃时阻值1000Ω。它的线性度比NTC好太多,精度也高。我一般用在冷水机组、热泵系统的关键温度点测量。

参数 NTC (10kΩ) PT1000
精度 ±0.5℃ ±0.15℃ (A级)
线性度 差(需查表) 好(近似线性)
测温范围 -40~125℃ -200~600℃
价格 便宜(几毛钱) 较贵(几块钱)
接口方式 分压+ADC 桥式+ADC 或 专用芯片

PT1000的接口设计,我推荐用专用芯片,比如MAX31865。它内部集成了精密电流源和24位ADC,直接输出数字量,通过SPI读取。省心,精度也有保障。

// PT1000 + MAX31865 读取温度示例
uint16_t raw = max31865_read_rtd();
float resistance = raw * 0.03125;  // 每LSB对应0.03125Ω
float temperature = (resistance - 1000.0) / 3.85;  // 近似线性
// 实际项目中建议用查表法或Callendar-Van Dusen公式

注意:PT1000的引线电阻会影响测量精度。如果传感器离主板远(超过1米),建议用三线制或四线制接法。我曾经在项目里偷懒用了两线制,结果10米线缆带来了将近2℃的误差——教训深刻。

二、湿度传感器:选型与I2C接口

湿度传感器在暖通里主要用于新风系统、恒温恒湿空调。现在主流都是数字式温湿度一体传感器,比如SHT30、HDC1080、AHT20。

我个人习惯用SHT30。为什么?精度够用(±2%RH),价格适中,I2C接口,而且有多个I2C地址可选,一条总线上能挂4个。

SHT30关键参数:

  • 湿度精度:±2%RH(20%~80%RH)
  • 温度精度:±0.2℃
  • 接口:I2C(地址0x44或0x45)
  • 功耗:平均2μA(单次测量模式)

I2C接口设计要注意几点:

  • 上拉电阻:4.7kΩ是通用值,总线长度超过20cm建议用2.2kΩ
  • 总线电容:I2C标准模式最大400pF,快速模式最大100pF
  • 地址冲突:多个传感器要确保地址不重复
// SHT30 I2C读取示例(伪代码)
i2c_start();
i2c_write(0x44 << 1);  // 设备地址+写
i2c_write(0x2C);        // 命令高位
i2c_write(0x06);        // 命令低位(高重复性测量)
i2c_stop();

delay_ms(15);  // 等待测量完成

i2c_start();
i2c_write(0x44 << 1 | 0x01);  // 设备地址+读
uint16_t temp_raw = (i2c_read_ack() << 8) | i2c_read_ack();
uint16_t hum_raw  = (i2c_read_ack() << 8) | i2c_read_nack();
i2c_stop();

float temperature = -45.0 + 175.0 * temp_raw / 65535.0;
float humidity    = 100.0 * hum_raw / 65535.0;

避坑指南:我曾经在项目里发现湿度读数异常偏高。排查到最后,发现是传感器离PCB上的DC-DC电源太近,热量影响了局部温湿度。记住——湿度传感器要远离发热元件,最好开孔让空气流通。

三、压力传感器:选型与SPI接口

暖通里的压力传感器主要测风压和水压。风压用差压传感器(如SDP810),水压用绝压或表压传感器(如MS5803)。

我选压力传感器主要看三个指标:量程、精度、输出接口。

应用场景 推荐传感器 量程 接口
风管差压 SDP810 ±500Pa I2C
冷水压力 MS5803-30BA 0~30bar SPI/I2C
制冷剂压力 MLX90817 0~50bar SENT/模拟

SPI接口设计时,我习惯把片选信号(CS)用GPIO控制,这样灵活。时钟频率一般设1MHz,别贪快——线长了容易出问题。

// MS5803 SPI读取压力示例
uint8_t ms5803_read_adc() {
    uint8_t buf[3];
    // 发送ADC读取命令
    cs_low();
    spi_transfer(0x00);  // 命令字节
    buf[0] = spi_transfer(0x00);
    buf[1] = spi_transfer(0x00);
    buf[2] = spi_transfer(0x00);
    cs_high();
    
    uint32_t adc = ((uint32_t)buf[0] << 16) | 
                   ((uint32_t)buf[1] << 8) | 
                   buf[2];
    return adc;
}

注意:压力传感器的安装位置很关键。测风压时,取压管要避开弯头、阀门等紊流区。测水压时,传感器要装在管道底部,避免气泡进入。我见过一个项目,压力传感器装在管道顶部,结果气体积聚导致读数一直偏低——折腾了三天才找到原因。

四、风速传感器:选型与接口

风速传感器在暖通里用于风量监测、VAV变风量系统。常见的有热膜式、超声波式、叶轮式。

我个人推荐热膜式风速传感器,比如EE671系列。它没有运动部件,不怕灰尘,维护量小。输出有模拟量(0-10V)和数字量(Modbus)两种。

热膜式风速传感器特点:

  • 量程:0~10m/s 或 0~20m/s
  • 精度:±0.2m/s + 3%读数
  • 响应时间:<2秒
  • 输出:0-10V / 4-20mA / Modbus RTU

接口设计上,如果主控MCU有ADC,直接用模拟量最简单。但要注意——0-10V信号需要电平转换,MCU的ADC输入一般是0-3.3V。用电阻分压就行,分压比取3.3/10 ≈ 1/3。

// 风速传感器模拟量读取
// 分压电路:10kΩ + 3.3kΩ,分压比 = 3.3/(10+3.3) ≈ 0.248
uint16_t adc_value = adc_read_channel(0);
float voltage = adc_value * 3.3 / 4095.0;  // 12位ADC
float wind_speed = voltage / 0.248 * 10.0 / 10.0;  // 0-10V对应0-10m/s
// 实际项目中建议做滤波处理

我的经验:风速传感器最怕安装位置不对。按照规范,传感器要装在直管段,上游至少5倍管径,下游至少2倍管径。但现场往往空间受限。我的折中方案是:至少保证上游3倍管径,下游1倍管径,然后做现场标定修正。

五、接口设计总结

最后说说I2C和SPI的选择。我个人的习惯是:

  • I2C:适合板内通信,传感器离MCU近(<20cm),设备数量少(<8个)。优点是引脚少(2根线),缺点是速度慢、抗干扰差。
  • SPI:适合板间通信,传感器离MCU远(<1m),需要高速采集。优点是速度快、抗干扰好,缺点是引脚多(4根线+每设备1根CS)。

实际项目中,我经常混合使用。比如温湿度传感器用I2C挂在一条总线上,压力传感器用SPI单独连接。这样既节省引脚,又保证关键数据的实时性。

最后提醒:无论用哪种接口,一定要加ESD保护。传感器线缆从现场引到控制板,就是一根天线。TVS管和串联电阻(100Ω)是必须的。我曾经因为省了这两个元件,一个雷雨季节烧了3块主板——成本远高于那几毛钱的保护器件。

好了,传感器选型与接口设计就聊到这儿。下一章咱们讲执行器——电动阀、风机、变频器的驱动与控制。到时候见。