第一章 传感器基础与信号特性

大家好,我是老李。做嵌入式这行十几年了,传感器这块算是我的老本行。今天咱们聊聊传感器的基础,别觉得基础就简单,很多坑其实都埋在这里。

1.1 传感器的分类

传感器怎么分类?说实话,方法太多了。我个人习惯按被测物理量来分,这样最直观。

  • 温度传感器:热电偶、热敏电阻、RTD、数字温度芯片(DS18B20这类)
  • 压力传感器:压阻式、电容式、谐振式
  • 加速度传感器:MEMS电容式、压电式
  • 磁传感器:霍尔效应、磁阻效应
  • 光学传感器:光电二极管、CCD、CMOS图像传感器

还有一种分法,按输出信号类型分:模拟传感器和数字传感器。嗯,这里要注意,数字传感器内部其实也有模拟前端,只是把ADC集成进去了。我在项目中遇到过,有人把数字温度传感器直接焊在发热元件旁边,结果读数一直偏高——其实不是传感器不准,是热传导路径没处理好。

1.2 静态特性与动态特性

传感器的特性,说白了就是它怎么响应输入信号。静态特性看的是稳态,动态特性看的是瞬态。

静态特性

静态特性包括:

  • 灵敏度:输出变化量与输入变化量的比值。比如一个压力传感器,每1kPa压力输出变化10mV,那灵敏度就是10mV/kPa。
  • 线性度:实际输出曲线偏离理想直线的程度。我见过一个项目,用了某款便宜的压力传感器,线性度标称±1%,结果实际测下来到了±3%,后来换了另一家才搞定。
  • 迟滞:正行程和反行程输出不一致的现象。说白了就是传感器有「记忆」,你加压到100kPa再减压回来,同一个压力点读数不一样。
  • 重复性:相同条件下多次测量的一致性。
  • 分辨率:传感器能检测到的最小输入变化量。

避坑指南:我曾经在一个工业项目中,选传感器只看精度,忽略了温度漂移。结果夏天和冬天的读数差了5%以上。后来学乖了,选型时一定看全温区范围内的性能指标。

动态特性

动态特性描述传感器对快速变化信号的响应能力。核心指标是:

  • 响应时间:从输入阶跃变化到输出达到稳定值的一定比例(通常是90%或95%)所需的时间。
  • 带宽:传感器能有效响应的频率范围。
  • 阻尼比:描述系统振荡衰减的快慢。阻尼比太小,会过冲;太大,响应变慢。

你想想看,一个温度传感器如果响应时间是10秒,你用它去测快速变化的温度,那数据基本是废的。我做过一个电机温升测试,用了热敏电阻,响应太慢,测出来的温度曲线跟实际差了老远。后来换了热电偶,才把真实情况抓出来。

1.3 噪声来源分析

噪声是传感器的天敌。我经常跟团队说,搞信号处理,一半时间在跟噪声打架。

常见的噪声来源:

噪声类型 来源 特点
热噪声(约翰逊噪声) 电阻中电子的热运动 白噪声,功率谱密度平坦
散粒噪声 半导体中载流子的随机通过 与电流有关,也是白噪声
1/f噪声(闪烁噪声) 材料缺陷、表面态 低频时显著,频率越低噪声越大
工频干扰 50Hz/60Hz电源线耦合 特定频率,幅度可能很大
量化噪声 ADC量化过程 与分辨率有关,理论上均匀分布

个人经验:我习惯在设计初期就做噪声预算。比如一个压力测量系统,要求精度0.1%,那我会把热噪声、量化噪声、电源纹波等逐项分配,确保总噪声不超过预算。这招帮我避免了很多后期返工。

为什么会这样?因为噪声是叠加的,不是简单的相加。不同噪声源之间通常不相关,所以总噪声是各噪声的均方根值。举个例子,两个幅度相同的独立噪声源叠加,总噪声不是2倍,而是√2倍。

1.4 采样定理与混叠效应

采样定理,也就是奈奎斯特-香农定理,是数字信号处理的基石。它说:采样频率必须大于信号最高频率的两倍,才能无失真地重建原始信号。

用公式表示就是:

fs > 2 * fmax

其中fs是采样频率,fmax是信号中的最高频率分量。

如果采样频率不够,会发生什么?混叠。高频信号会「伪装」成低频信号,混进你的数据里。你根本不知道哪些是真的,哪些是假的。

警告:混叠一旦发生,就无法通过后续的数字滤波去除。因为混叠后的频率和真实信号频率在频域上完全重叠了。唯一的办法是在采样前用抗混叠滤波器把高频成分滤掉。

我记得有一次,一个同事调试振动监测系统,发现频谱里有个奇怪的峰值,怎么都找不到来源。折腾了两天,最后发现是采样率设低了,电机的高频振动混叠成了低频信号。加了个简单的RC低通滤波器在前端,问题就解决了。

实际工程中,我建议采样频率至少取信号最高频率的5到10倍。为什么?因为理想低通滤波器不存在,实际滤波器有过渡带。留出余量,抗混叠效果才好。

来看一个简单的Python示例,演示混叠的效果:

import numpy as np
import matplotlib.pyplot as plt

# 原始信号:10Hz正弦波
t = np.linspace(0, 1, 1000)
f_signal = 10
signal = np.sin(2 * np.pi * f_signal * t)

# 以12Hz采样(不满足采样定理)
fs_low = 12
t_low = np.arange(0, 1, 1/fs_low)
sampled_low = np.sin(2 * np.pi * f_signal * t_low)

# 以100Hz采样(满足采样定理)
fs_high = 100
t_high = np.arange(0, 1, 1/fs_high)
sampled_high = np.sin(2 * np.pi * f_signal * t_high)

print("12Hz采样时,混叠后的频率为:", abs(f_signal - fs_low))
print("100Hz采样时,无混叠问题")

运行这段代码,你会发现12Hz采样时,重建的信号频率变成了2Hz——这就是混叠。10Hz的信号被「折叠」到了2Hz的位置。

核心要点:采样前一定要做抗混叠滤波。这是信号采集的铁律,没有例外。我见过太多人跳过这一步,结果数据全是错的,还以为是传感器坏了。

好了,第一章就聊到这儿。传感器基础看似简单,但每个细节都可能影响最终的数据质量。下一章我们讲滤波算法,到时候会用到今天说的这些概念。