1. 传感器基础与信号类型

做嵌入式系统这么多年,我接触过的传感器少说也有上百种。但不管多复杂的系统,归根结底都要先搞清楚两件事:传感器怎么感知物理量,以及信号怎么进到芯片里。这一节,咱们就把这些基础打牢。

1.1 常见传感器:温度、压力、IMU

先说说最常见的三类传感器。我个人习惯把它们分成「环境感知型」和「运动感知型」。

温度传感器

温度传感器大概是入门最简单的了。像DS18B20这种数字式的,直接一根线就能读数据。但模拟式的比如热敏电阻(NTC),你得搭个分压电路,再用ADC采样。我在项目中遇到过一个问题:NTC的B值参数标称是3950,实际买回来的批次可能只有3900。嗯,这里要注意——批量生产时一定要做标定,否则温度误差能到±3℃。

关键参数速查表:

传感器类型输出信号典型精度采样速率
DS18B20(数字)1-Wire±0.5℃~1Hz
NTC热敏电阻(模拟)电阻值变化±1℃(标定后)取决于ADC
PT100(铂电阻)电阻值变化±0.1℃取决于ADC

压力传感器

压力传感器我用的最多的是MEMS硅压阻式。说白了,就是一片硅膜片上做了四个压敏电阻,压力一变化,电桥输出就不平衡了。这种传感器输出信号通常很微弱,只有几十毫伏。我曾经在做一个气压计项目时,直接拿万用表去量输出——结果噪声比信号还大。后来才意识到,必须用差分放大器加低通滤波。

我的经验:压力传感器最容易踩的坑是「温漂」。同一个传感器,25℃和85℃下零位能差出5%以上。所以选型时一定要看有没有内置温度补偿,或者你自己做软件补偿。

IMU(惯性测量单元)

IMU包含加速度计和陀螺仪。加速度计测的是比力(不是速度),陀螺仪测的是角速度。为什么说「比力」?因为加速度计其实分不清重力加速度和运动加速度。你想想看,手机平放在桌上,它测到的是1g向上;你把它自由落体,它测到的是0g。这个特性在做姿态解算时特别重要。

我记得第一次用MPU6050做四轴飞行器时,直接拿原始数据算角度,结果飞起来不到3秒就翻了。后来才明白——加速度计高频噪声大,陀螺仪有零偏漂移,必须用互补滤波或卡尔曼滤波融合。

1.2 模拟信号 vs 数字信号

这个区分其实很直观。模拟信号是连续变化的,比如麦克风输出的电压;数字信号是离散的0和1,比如I2C总线上的数据。

但实际工程中,界限没那么清晰。举个例子:一个模拟输出的温度传感器,它的电压值从0V到3.3V对应-40℃到125℃。这个信号进到MCU的ADC引脚,ADC把它量化成12位的数字值(0~4095)。所以本质上,模拟信号是物理世界的语言,数字信号是计算机的语言。

避坑指南:我曾经在一个项目中,把模拟信号线布在了大功率MOS管旁边。结果ADC读数跳得像心电图。后来查了查,是开关噪声耦合进来了。解决办法很简单:模拟信号走差分线,或者加屏蔽层,再不行就上RC滤波。

数字信号的优势是抗干扰能力强。但也不是的——如果数字信号速率很高(比如SPI的20MHz),走线太长一样会反射、振铃。所以别以为数字信号就万事大吉。

1.3 采样定理:到底采多快才够?

采样定理(Nyquist-Shannon)说:采样频率必须大于信号最高频率的两倍。公式很简单:fs > 2 * fmax。

但实际工程中,我从来不会卡着2倍去设计。为什么?因为现实世界没有完美的低通滤波器。你想想看,如果信号里有100Hz的成分,你刚好用200Hz采样,那100Hz会被混叠成0Hz(直流)。这就是所谓的「混叠效应」。

我个人的经验是:采样频率取信号最高频率的5~10倍。比如一个温度传感器,温度变化最多每秒1℃,那10Hz采样就绰绰有余。但如果是音频信号(20Hz~20kHz),CD标准的44.1kHz就是留了余量。

采样定理速记口诀:

  • 理论下限:fs > 2 * fmax(会混叠,别用)
  • 工程推荐:fs ≥ 5 * fmax(安全区)
  • 高保真:fs ≥ 10 * fmax(过采样,可降噪)

还有一个容易忽略的点:抗混叠滤波器。在ADC之前,一定要加一个低通滤波器,把高于fs/2的频率成分滤掉。否则你采到的信号是假的。我曾经在一个振动监测项目里,没加抗混叠滤波,结果频谱图上多出了很多莫名其妙的峰值——后来发现是电机PWM的开关频率混叠进来了。

知识体系结构图

下面这张图总结了本章的核心逻辑。从传感器类型到信号类型,再到采样定理,是一条完整的数据链路。

传感器反馈与信号链路 温度传感器 压力传感器 IMU(加速度+陀螺) 模拟信号(连续电压/电流) 数字信号(I2C/SPI/1-Wire) ADC采样(量化 + 采样定理:fs > 2*fmax) 数字滤波 + 控制算法 注:实际工程中,模拟信号需加抗混叠滤波器

小结

这一节我们聊了三件事:传感器怎么选、模拟和数字信号怎么区分、采样频率怎么定。说白了,这些都是嵌入式系统里最基础但最容易出问题的地方。我见过太多工程师在采样频率上翻车——要么采太慢导致混叠,要么采太快浪费CPU资源。

记住一句话:传感器是系统的眼睛,信号链路是神经,采样定理是大脑的认知边界。这三样搞不清楚,后面的控制算法再牛也白搭。

我的习惯:每次拿到一个新传感器,第一件事不是写代码,而是拿示波器看它的输出波形。看看噪声有多大,频率成分是什么,再决定采样率和滤波器参数。这个习惯帮我省了至少一半的调试时间。