1、ADC基础概念
大家好,我是老张。做嵌入式这些年,ADC是我打交道最多的外设之一。今天咱们就来聊聊ADC的那些基础概念。别小看这些基础,我见过太多项目栽在基础概念不清上。
什么是ADC?
ADC,全称是模数转换器。说白了,就是把连续的模拟信号变成离散的数字信号。你想想看,单片机只能处理0和1,但现实世界里的温度、电压、声音,哪个不是连续变化的?ADC就是连接这两个世界的桥梁。
我记得刚入行那会儿,有个师兄跟我说过一句话,我一直记到现在:「没有ADC,嵌入式系统就是个瞎子」。这话糙理不糙。你想让单片机感知外界,就得靠ADC把模拟量翻译成它能懂的数字。
核心理解:ADC的本质是一个量化过程。它把连续的电压范围分成若干份,每一份对应一个数字码。比如0-3.3V,分成4096份(12位ADC),每份就是0.8mV左右。
ADC的主要参数
这里我挑几个最关键的参数讲。为什么说最关键?因为选型的时候就看这几个,项目出问题也多半是这几个没搞明白。
1. 分辨率
分辨率决定了ADC能分辨多小的电压变化。8位、10位、12位、16位,位数越高,精度越高。
举个例子:
- 8位ADC:2^8 = 256级,3.3V参考电压下,每级约12.9mV
- 12位ADC:2^12 = 4096级,每级约0.8mV
- 16位ADC:2^16 = 65536级,每级约0.05mV
我在项目中遇到过一件事:有个温度采集板,用的8位ADC,测出来温度跳得厉害。后来换成12位,问题就解决了。为什么?因为8位分辨率根本抓不到微小的温度变化。
我的建议:一般工业应用,12位是起步。如果信号本身噪声大,16位反而可能白费功夫。别盲目追求高位数。
2. 采样率
采样率就是ADC每秒能采多少次样,单位是SPS(Samples Per Second)。
这里有个著名的奈奎斯特定理:采样率至少要是信号最高频率的2倍。但实际工程中,我一般留3-5倍的余量。
举个实际例子:
- 采集50Hz工频信号,采样率至少100SPS,我一般设200SPS
- 采集音频(20kHz),采样率至少40kSPS,实际用48kSPS或96kSPS
注意:采样率不是越高越好。采样率高了,数据量就大,MCU处理不过来。我曾经有个项目,ADC采样率设到1MSPS,结果MCU光处理数据就占用了80%的CPU时间,其他任务全卡死了。
3. 量化误差
量化误差是ADC天生的缺陷。因为模拟信号是连续的,但数字信号是离散的,所以转换时必然有误差。
量化误差 = ±0.5 LSB(最低有效位)
什么意思呢?比如12位ADC,参考电压3.3V,一个LSB就是0.8mV。那么量化误差就是±0.4mV。这个误差是消除不了的,只能通过提高分辨率来减小。
嗯,这里要注意:量化误差和噪声是两码事。量化误差是原理性的,噪声是外部引入的。
4. 信噪比(SNR)
信噪比衡量的是信号和噪声的比例,单位是dB。公式是:
SNR = 6.02 × N + 1.76 (dB)
其中N是ADC的位数。12位ADC的理论SNR是74dB左右。但实际能到70dB就算不错了。
我曾经调试过一个音频采集板,理论SNR应该是74dB,实测只有55dB。查了半天,发现是电源纹波太大。换了LDO之后,SNR直接升到68dB。所以说,ADC的性能不只看芯片本身,外围电路同样重要。
ADC在嵌入式系统中的作用
ADC在嵌入式系统里,说白了就是三个角色:
- 传感器接口:温度、压力、光照、电流……几乎所有传感器输出的都是模拟信号,都得靠ADC转成数字量
- 信号监测:电池电压检测、电源监控、过流保护……这些都需要ADC实时采样
- 数据采集:音频录制、振动分析、波形测量……这些对ADC的采样率和分辨率要求更高
我做过一个电池管理系统(BMS),里面用了3路ADC:一路测总电压,一路测电流,一路测每节电芯的电压。这三路ADC的采样时序还得同步,不然算出来的功率就不准。你看,ADC用好了,系统就稳了;用不好,整个系统都是坑。
知识体系总览
下面这张图是我自己画的,把ADC的核心知识点串起来了。你一看就明白:
这张图把ADC的核心知识点分成了三大块:核心参数、应用场景、选型要点。你对照着看,心里就有谱了。
避坑指南:我曾经在一个项目中,ADC选型只看分辨率,没注意输入阻抗。结果信号源输出阻抗太高,ADC采出来的值偏得离谱。后来加了电压跟随器才解决。所以选型的时候,输入阻抗一定要匹配。
好了,ADC的基础概念就聊到这儿。这些是后面所有章节的基石,你把它吃透了,后面的内容就顺了。
公众号:蓝海资料掘金营,微信deep3321