2. 温度传感器选型与接口:从芯片内部到外部世界的温度感知

温度补偿算法能不能跑得准,第一步就看温度数据拿得对不对。我见过不少项目,算法模型建得漂漂亮亮,结果因为传感器选型不当或者接口时序没调好,整个补偿效果大打折扣。今天咱们就把这块掰开揉碎了讲清楚。

2.1 片上集成温度传感器:PN结与Bandgap原理

很多工业控制芯片内部就集成了温度传感器,说白了就是利用半导体器件的温度特性。我个人习惯优先用片上的,省成本、省PCB面积,而且信号路径短,干扰少。

2.1.1 PN结温度传感器

PN结的正向压降VBE随温度升高而线性下降,温度系数大约是-2mV/°C。这个特性很稳定,我最早做电源管理芯片时就用它做过过温保护。

核心公式:

VBE(T) = VBE(T0) + (T - T0) × dVBE/dT

其中dVBE/dT ≈ -2 mV/°C

不过要注意,PN结的工艺偏差比较大。同一批晶圆上,不同芯片的VBE绝对值可能差个几十毫伏。所以它更适合做相对温度检测,比如过温保护这种阈值判断场景。

我曾经踩过的坑:有个项目直接用PN结做-40°C到125°C的全温区测量,结果低温段非线性严重,校准起来特别头疼。后来我改用Bandgap结构,线性度好多了。

2.1.2 Bandgap温度传感器

Bandgap结构利用两个不同电流密度下的PN结压差ΔVBE来产生与绝对温度成正比的电压(PTAT)。它的优势在于——对工艺偏差不敏感,精度高。

原理其实不复杂:两个PN结的电流密度比是固定的,它们的VBE差值ΔVBE = (kT/q) × ln(N),其中N是电流密度比。这个ΔVBE与温度成正比,而且只取决于几何尺寸比,不受工艺绝对偏差影响。

我的经验:Bandgap传感器在-40°C到+125°C范围内,未经校准的精度能做到±2°C,单点校准后能到±0.5°C。这在工业控制里已经够用了。

2.2 外部温度传感器选型:NTC、RTD与数字传感器

片上传感器虽然方便,但有些场景必须用外部的。比如你要测电机外壳温度,或者环境温度离芯片很远。这时候就得选外部传感器了。

2.2.1 NTC热敏电阻

NTC(负温度系数)热敏电阻,温度升高电阻下降。它的优点是灵敏度高,价格便宜,响应快。缺点是线性度差,需要查表或多项式拟合。

参数 典型值 说明
B值 3435K / 3950K 决定温度-电阻曲线形状
R25 10kΩ / 100kΩ 25°C时的标称电阻
精度 ±1% ~ ±5% 取决于等级
测温范围 -40°C ~ +125°C 工业级常见范围

选NTC时,我建议重点关注B值的温度系数一致性。有些便宜货B值随温度变化很大,拟合出来误差能到好几度。

2.2.2 RTD铂电阻

RTD(电阻温度探测器)用铂金属制成,典型的是PT100和PT1000。它的线性度比NTC好得多,精度也高,就是贵一些。

PT100在0°C时电阻100Ω,温度系数约0.385Ω/°C。PT1000则是1000Ω,灵敏度更高,适合低功耗设计。

选型建议:

  • 精度要求±0.1°C以上 → 用PT100/PT1000
  • 成本敏感、精度±1°C够用 → 用NTC
  • 需要数字接口、布线简单 → 用数字传感器

2.2.3 数字温度传感器

数字传感器内部集成了ADC和数字接口,直接输出温度值。像DS18B20、TMP117、MCP9808这些,用起来特别方便。

我特别喜欢TMP117,精度能做到±0.1°C,I2C接口,而且功耗极低。不过要注意,数字传感器的采样速率通常不高,一般每秒几次到几十次,不适合快速温度变化场景。

2.3 I2C/SPI/单总线接口时序与驱动实现

接口驱动这块,说白了就是让MCU和传感器说上话。时序不对,数据全是乱的。我调试接口时吃过不少苦头,下面把关键点列出来。

2.3.1 I2C接口

I2C用两根线:SCL(时钟)和SDA(数据)。标准模式100kHz,快速模式400kHz,高速模式能到3.4MHz。工业控制里常用100kHz或400kHz。

写驱动时要注意几个细节:

  • 起始条件:SCL高电平时,SDA从高变低
  • 停止条件:SCL高电平时,SDA从低变高
  • 应答位:每个字节后从机拉低SDA表示应答
  • 时钟拉伸:有些从机需要拉低SCL来延长时钟周期
// I2C写一个字节的示例(伪代码)
void i2c_write_byte(uint8_t data) {
    for (int i = 7; i >= 0; i--) {
        SDA = (data >> i) & 0x01;
        SCL = 1;
        delay_us(5);  // 保持时间
        SCL = 0;
        delay_us(5);
    }
    // 等待应答
    SDA = 1;  // 释放SDA
    SCL = 1;
    while(SDA);  // 等待从机拉低
    SCL = 0;
}

我常用的调试方法:用逻辑分析仪抓波形,看起始条件、数据位、应答位是否对齐。很多时候问题出在时序延迟上,尤其是时钟拉伸没处理好。

2.3.2 SPI接口

SPI用四根线:SCLK(时钟)、MOSI(主出从入)、MISO(主入从出)、CS(片选)。速度比I2C快得多,能到几十MHz。

SPI有四种模式,由时钟极性(CPOL)和时钟相位(CPHA)决定。我建议先看传感器数据手册,确认它支持哪种模式,再配置MCU的SPI外设。

模式 CPOL CPHA 数据采样边沿
模式0 0 0 上升沿
模式1 0 1 下降沿
模式2 1 0 上升沿
模式3 1 1 下降沿

我曾经犯过的错:有个项目SPI通信偶尔出错,查了半天发现是CS信号没处理好。CS拉低后要等一小段时间再发时钟,否则从机还没准备好。加个1us的延迟就解决了。

2.3.3 单总线接口

单总线(1-Wire)只用一根数据线,同时传数据和供电。DS18B20就是典型代表。它的时序比较讲究,初始化、读位、写位都有严格的时间窗口。

单总线的关键时序:

  • 复位脉冲:主机拉低480μs以上,然后释放
  • 存在脉冲:从机拉低60-240μs作为应答
  • 写1:主机拉低1-15μs后释放
  • 写0:主机拉低60-120μs后释放
  • 读时序:主机拉低1-15μs后释放,15μs内采样
// 单总线读一个位的示例
uint8_t onewire_read_bit(void) {
    uint8_t bit = 0;
    DATA = 0;          // 拉低总线
    delay_us(2);       // 保持2μs
    DATA = 1;          // 释放总线
    delay_us(5);       // 等待从机输出
    bit = DATA;        // 采样数据
    delay_us(50);      // 等待时序结束
    return bit;
}

我的经验:单总线对时序要求很严格,尤其是延迟时间。建议用定时器或硬件PWM来产生精确延迟,别用软件循环delay,不同编译器优化出来的结果不一样。

2.4 本章知识体系总览

下面这张图把温度传感器选型与接口的核心逻辑串起来了。从片上到片外,从模拟到数字,从接口到驱动,每一步都有讲究。

温度传感器选型与接口知识体系 片上集成传感器 外部温度传感器 接口与驱动 PN结传感器 Bandgap传感器 NTC热敏电阻 RTD铂电阻 数字传感器 I2C接口 SPI接口 单总线接口 关键选型参数:精度、测温范围、响应时间、成本、接口类型 驱动实现要点:时序对齐、延迟控制、应答检测、错误重试 避坑指南:工艺偏差、时序窗口、时钟拉伸、CS信号建立时间 选对传感器 + 调好接口 = 可靠的温度数据

嗯,这张图基本把本章的核心内容都串起来了。从上到下,从传感器类型到接口驱动,再到选型参数和避坑要点,每一步都环环相扣。你想想看,如果传感器选错了,或者接口时序没调对,后面算法再牛也白搭。

核心要点回顾:

  • 片上传感器:PN结适合阈值检测,Bandgap适合精确测量
  • 外部传感器:NTC便宜但非线性,RTD精度高但贵,数字传感器方便但速度慢
  • 接口驱动:I2C注意时钟拉伸,SPI注意CS建立时间,单总线注意时序窗口

好了,这一章的内容就到这儿。温度传感器选型和接口驱动是温度补偿算法的基础,基础打牢了,后面做算法才能事半功倍。


专注资料整理