2. 传感器信号调理:模拟信号与数字信号、信号放大电路设计、滤波电路设计、ADC/DAC转换原理
各位同学,咱们接着聊传感器。上一章我们把传感器比作系统的“五官”,那信号调理电路就是“神经”。传感器输出的信号,往往又弱又脏,直接送给单片机?那基本是找不自在。我做了这么多年嵌入式,见过太多因为信号没处理好,导致整个项目翻车的案例。今天咱们就把这块硬骨头啃下来。
2.1 模拟信号与数字信号:两个世界的对话
先说个最基础的概念。传感器出来的信号,绝大多数是模拟信号。什么是模拟信号?说白了,就是连续变化的电压或电流。比如一个温度传感器,温度从25度变到26度,电压是平滑上升的,中间有无数个值。
数字信号就不一样了。它只有两个状态:高电平和低电平,也就是1和0。单片机、CPU这些数字器件,只认1和0。
问题来了:真实世界是连续的模拟量,数字世界是离散的0和1。怎么让它们对话?这就是信号调理要干的事。
核心矛盾:模拟信号是连续的、无限精度的;数字信号是离散的、有限精度的。信号调理就是在这两个世界之间搭一座桥。
我个人习惯,在设计任何传感器系统之前,先画一张信号流图。把传感器输出是什么信号、需要调理成什么信号、最终给谁用,全画清楚。这一步省了,后面全是坑。
2.2 信号放大电路设计:把微弱信号“养大”
传感器输出的信号有多弱?我举个例子。热电偶输出,每度温差才几十微伏。微伏什么概念?就是百万分之一伏。这么小的信号,别说单片机了,连普通的万用表都测不准。
所以第一件事:放大。
最常用的放大器是运算放大器,简称运放。运放这东西,说白了就是一个高增益的差分放大器。它的核心公式很简单:
Vout = A * (V+ - V-)
其中A是开环增益,通常有十万倍甚至百万倍。但实际中我们不会直接用开环,因为太不稳定了。我们会引入负反馈,让放大器工作在线性区。
最常见的放大电路是同相放大器和反相放大器。我给你们画个同相放大器的图:
Rf
+----/\/\/\----+
| |
| |
+----|-\ |
| \ |
Vin ----|+ /------+---- Vout
| /
|/
|
GND
这个电路的增益公式是:
Gain = 1 + Rf / Rg
比如Rf=100kΩ,Rg=10kΩ,增益就是1+10=11倍。简单吧?
我的经验:选运放时,别光看增益。要关注三个关键参数:输入偏置电流、输入失调电压、共模抑制比。我曾经在一个项目中用了通用运放LM358去放大热电偶信号,结果输出全是噪声。后来换成精密运放OP07,问题立马解决。运放选型,差之毫厘,谬以千里。
2.3 滤波电路设计:把噪声“筛”出去
信号放大了,但噪声也跟着放大了。怎么办?滤波。
滤波的本质,就是让有用频率的信号通过,把无用频率的信号衰减掉。传感器信号通常是低频的,比如温度变化很慢,压力变化也不快。而噪声往往是高频的,比如50Hz的工频干扰、开关电源的纹波。
最常用的滤波器是低通滤波器。一阶RC低通滤波器,结构简单到令人发指:
Vin ----/\/\/\----+---- Vout
R |
|
=== C
|
GND
它的截止频率公式:
fc = 1 / (2 * π * R * C)
比如R=10kΩ,C=1μF,fc≈15.9Hz。也就是说,15.9Hz以下的信号能通过,以上的被衰减。
但一阶滤波器的衰减速度只有-20dB/十倍频,效果一般。我建议用二阶或更高阶的滤波器。比如Sallen-Key结构的二阶低通滤波器,衰减速度能达到-40dB/十倍频。
避坑指南:我曾经在一个压力传感器项目中,只加了一阶RC滤波,结果数据还是跳得厉害。后来用示波器一看,发现是电机产生的电磁干扰。换成二阶有源滤波器后,数据稳得像条直线。记住:滤波不是万能的,但不过滤是万万不能的。
2.4 ADC/DAC转换原理:模拟与数字的桥梁
信号调理好了,干净的模拟信号,怎么进单片机?靠ADC(模数转换器)。反过来,单片机要输出模拟信号控制执行器,靠DAC(数模转换器)。
ADC的工作原理:
ADC的核心是“量化”。把连续的模拟电压,映射到离散的数字值。比如一个10位的ADC,参考电压是5V,那么它能分辨的最小电压是:
LSB = 5V / 2^10 = 5V / 1024 ≈ 4.88mV
也就是说,输入电压每变化4.88mV,数字输出就变化1个LSB。
常见的ADC类型有几种:
- 逐次逼近型(SAR ADC):速度快,精度适中,我最常用。比如ADS1115,16位精度,I2C接口,好用得很。
- Σ-Δ型(Sigma-Delta ADC):精度极高,但速度慢。适合音频、精密测量。
- 双积分型:抗干扰能力强,但速度最慢。万用表里常用。
DAC的工作原理:
DAC正好反过来。输入一个数字值,输出一个对应的模拟电压。最简单的DAC是R-2R梯形网络,用电阻网络实现。
R R R R
Vref ---/\/\--/\/\--/\/\--/\/\--+---- Vout
| | | | |
2R 2R 2R 2R |
| | | | |
GND GND GND GND |
|
GND
每个数字位控制一个开关,把对应的电流汇入或汇出。最终输出电压是各支路电流的叠加。
关键参数:ADC/DAC的“分辨率”和“采样率”是互相制约的。分辨率越高,采样率通常越低。选型时要根据实际需求权衡。比如音频需要44.1kHz采样率,16位分辨率就够了;而精密称重需要24位分辨率,但采样率几十Hz就够。
2.5 知识体系总览
说了这么多,我画张图帮你们理清思路。这张图展示了传感器信号调理的完整链路:
这张图把整个信号调理链路串起来了。从传感器输出模拟信号,经过放大、滤波,再由ADC转换成数字信号给单片机。反过来,单片机通过DAC输出模拟信号控制执行器。每个环节都缺一不可。
2.6 实战中的几个要点
最后,我总结几个实战中容易踩的坑:
- 阻抗匹配:传感器输出阻抗和放大器输入阻抗要匹配。高阻抗传感器(比如pH电极)必须用高输入阻抗的运放,否则信号会被“吃掉”。
- 电源去耦:运放和ADC的电源脚旁边,一定要加0.1μF和10μF的去耦电容。我见过太多人忽略这个,结果电路自激振荡。
- 参考电压:ADC的参考电压要稳定。用TL431或者REF3030这类精密参考源,别直接用VCC。
- 采样率选择:根据奈奎斯特定理,采样率至少是信号最高频率的2倍。实际中我一般取5-10倍,留足余量。
一个小技巧:调试ADC时,先给一个已知的直流电压(比如用电池分压),看ADC读数对不对。如果不对,先查参考电压,再查输入信号,最后查代码。按这个顺序排查,90%的问题都能解决。
好了,信号调理这块就讲到这里。内容不少,但都是干货。你们回去后,找个热电偶或者光敏电阻,搭个放大滤波电路,再用单片机ADC读一下数据。亲手做一遍,比看十遍书都管用。
可可精品资料库