传感器选型与接口:温度传感器(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块主板——成本远高于那几毛钱的保护器件。
好了,传感器选型与接口设计就聊到这儿。下一章咱们讲执行器——电动阀、风机、变频器的驱动与控制。到时候见。