
1. 项目概述从“信号”到“数字”的桥梁搞单片机开发尤其是涉及到传感器数据采集或者驱动外部模拟设备时AD模数转换和DA数模转换这两个概念是绕不过去的坎。很多新手朋友一看到数据手册里ADC的精度、采样率、DA的输出摆幅这些参数就头大更别提背后还常常跟着一个叫“运算放大器”的电路。其实理解它们并不需要高深的数学关键是把整个信号链的流程和每个环节的“职责”想明白。简单来说我们身处的物理世界是“模拟”的温度、压力、声音、光线这些信号都是连续变化的。而单片机的核心——CPU只能处理“数字”信号也就是0和1。AD转换器ADC干的就是把连续的模拟信号比如一个0~3.3V变化的电压变成单片机可以识别的离散数字量比如一个0~4095的数值。反过来当单片机想控制一个模拟设备比如让电机平滑转动或者让喇叭发出特定频率的声音它输出的数字量就需要DA转换器DAC来还原成模拟电压或电流。那么运算放大器简称“运放”在这里面扮演什么角色呢你可以把它想象成一个“信号调理师”。传感器出来的信号往往很微弱或者掺杂了噪声又或者电平范围不对直接送给ADC可能会精度很差甚至无法测量。运放就能把这些信号进行放大、滤波、电平移位调理成ADC“喜欢吃”的干净、幅值合适的“菜”。在DA之后运放也可能用来做功率驱动或者信号缓冲。所以一个完整的模拟信号处理链路常常是传感器 - 运放调理 - ADC - 单片机 - DAC - 运放驱动 - 执行器。这篇笔记我就结合自己踩过的坑和项目经验把AD、DA以及运放的工作原理、关键参数、电路设计和调试心得系统地捋一遍。目标不是复刻教科书而是让你看完就能在项目里用起来知道为什么选这个参数电路为什么要这么设计出了问题该从哪儿查。2. 运算放大器模拟电路的“万能积木”在深入AD/DA之前必须先把运放搞明白因为它是搭建几乎所有模拟前端和后端电路的基础。很多人觉得运放复杂是因为一开始就被各种理想参数和公式吓住了。我们换个角度先把它当成一个黑盒子理解它的基本行为。2.1 核心虚短与虚断这是分析运放线性应用电路比如放大、滤波的两把金钥匙。记住两个前提第一我们讨论的是工作在线性区的运放通常通过负反馈实现第二运放本身的增益极高理想为无穷大。虚短指运放的同相输入端和反相输入端-之间的电压差近似为零。不是因为它们真的短路了而是因为运放开环增益极大为了输出一个有限的电压两个输入端的压差必须被逼得非常小小到在工程计算中可以忽略不计µV级别。V ≈ V-。虚断指运放两个输入端的输入电流近似为零。这是因为运放的输入阻抗极高理想为无穷大流入输入端的电流极小可以忽略。I I- ≈ 0。基于这两条分析电路就变成了简单的基尔霍夫电流定律KCL应用题。一切复杂电路的分析都从这里开始。2.2 11种经典电路拆解与选型网上流传的“运放11种经典电路”确实是精华。这里我结合实战挑几个最常用、最容易出问题的讲讲。1. 同相放大器电路特点是输入信号接同相端反馈网络接在反相端-和输出之间。输出电压Vo Vi * (1 Rf/R1)。输入阻抗极高几乎不从前级汲取电流非常适合接高输出阻抗的传感器如某些热电偶、pH电极。注意共模电压等于输入电压要确保输入电压在运放的共模输入电压范围之内。2. 反相放大器输入信号通过电阻接反相端-同相端通常接地或接一个参考电压。输出电压Vo -Vi * (Rf/R1)。输入阻抗由R1决定相对较低。优点是电路稳定不易振荡。一个关键技巧为了减小输入偏置电流的影响在同相端接一个电阻到地阻值等于R1和Rf的并联值这叫做“平衡电阻”。3. 电压跟随器是同相放大器的特例Rf0 R1∞开路。增益为1Vo Vi。它的价值不在于放大而在于“隔离”或“缓冲”。因为它的输入阻抗极高输出阻抗极低。当你要测量一个高内阻源的电压或者用一个信号驱动多个负载时加一个电压跟随器就能避免信号被“拉垮”。选型注意要关注运放的“压摆率”Slew Rate如果输入信号变化很快压摆率不够的输出会严重失真。4. 加法器本质是反相放大器的扩展多个输入信号通过各自的电阻接到反相端。输出是各输入电压的加权反相和。在做多路传感器信号混合或者实现一个简单的数字加权求和时很有用。计算要点牢记“虚地”概念反相端电压≈0利用KCL列方程。5. 差分放大器用来放大两个输入信号的差值抑制共模信号。经典电路由四个电阻构成。它的共模抑制比CMRR严重依赖于四个电阻的匹配精度。实战建议对于高精度要求不要用分立电阻自己搭直接选用集成仪表放大器如AD620, INA128它们的CMRR要高得多且使用方便。6. 积分与微分电路积分电路输出是输入电压的积分常用于波形变换方波变三角波或PID控制器的I项。电容在反馈回路中。大坑警告实际运放存在输入偏置电流和失调电压积分电路会把这些微小误差不断累积积分导致输出饱和。一定要选择输入偏置电流极小的运放如FET输入型并在电容两端并联一个超大电阻比如10MΩ提供直流反馈通路防止饱和。 微分电路则相反输出反映输入的变化率对噪声极其敏感高频噪声会被放大实践中很少直接用纯微分电路通常会串联一个小电阻或小电容进行限制。7. 有源滤波器低通、高通、带通用运放和RC网络构成比无源滤波器性能好能提供增益且输出阻抗低。设计时主要关注截止频率、品质因数Q和滤波器类型巴特沃斯、切比雪夫等。工具推荐不要手算用TI的FilterPro或ADI的ADIsimFilter这类在线设计工具输入指标自动生成电路和元件值非常高效。8. 比较器虽然专用比较器芯片性能更优但运放也可以当比较器用。此时运放工作于开环非线性状态输出在正负电源轨之间摆动。重要区别专用比较器为速度优化输出级是开集或开漏切换速度快延迟小通用运放做比较器内部有频率补偿切换慢且可能发生“相位反转”等意外情况。非紧急情况或要求不高的场合才用运放代替比较器。9. 恒流源电路利用运放反馈控制流过负载的电流恒定。一个经典电路是“Howland电流泵”但更常用的是下图这种基于同相放大器的简易恒流源将采样电阻Rsense放在负载下端到地之间运放同相端接设定电压Vset反相端接采样电阻上端。利用虚短Rsense两端电压等于Vset因此电流I_load Vset / Rsense与负载电阻无关。关键采样电阻要精度高、温漂小运放输出要能提供所需电流否则需要加三极管或MOSFET扩流。10. 精密整流器超级二极管用运放消除普通二极管的正向压降约0.6V实现对小信号mV级的精密整流。常用于交流信号的有效值检测等场合。2.3 运放关键参数选型实战指南数据手册参数很多抓住这几个核心的项目就不会跑偏供电电压Vcc/Vdd决定你的信号能处理的范围。单电源如0-5V还是双电源如±15V注意“轨到轨”Rail-to-Rail输入/输出特性如果不是轨到轨输入输出电压范围会比电源轨小容易削顶。增益带宽积GBW决定电路能处理多高的频率。你的电路闭环增益为G那么理论上的-3dB带宽 ≈ GBW / G。例如GBW1MHz的运放接成增益100倍的放大器带宽只有10kHz。要留足余量通常选GBW是所需信号频率的10倍以上。压摆率SR决定输出信号变化的最大速度。单位是V/µs。对于正弦波SR ≥ 2πfVpk其中f是频率Vpk是峰值电压。如果输出方波压摆率不够会导致边沿变成斜坡。输入失调电压Vos运放输入端实际存在的微小电压差会被放大。对于直流或低频放大电路这是精度的首要敌人。要选择Vos小的运放或通过调零电路校正。输入偏置电流Ib流入两个输入端的电流。对于反相放大器、积分器等电路Ib会在电阻上产生误差电压。高阻抗信号源应用必须选择Ib极小的FET或CMOS输入型运放。噪声包括电压噪声密度和电流噪声密度。对于放大微弱信号如麦克风、热电偶是致命指标。要计算折合到输入端的总噪声。选型流程先定电源和信号范围 - 再看精度Vos, 噪声- 然后看速度GBW, SR- 最后看其他如是否需低功耗、小封装。3. 模数转换器把现实世界“数字化”ADC是单片机感知世界的“眼睛”。它的任务就是用数字尺子去丈量连续的模拟电压。3.1 ADC的核心工作原理与类型ADC种类繁多单片机内置的以逐次逼近型为主外置的还有Σ-Δ型、流水线型等。逐次逼近型像一个天秤称重。它内部有一个DAC和一个比较器。转换开始时先令DAC输出中间量程的电压比如量程一半与输入电压比较。如果输入电压高就保留最高位为1并让DAC输出3/4量程电压再比较如果低就置最高位为0并输出1/4量程电压……如此逐位比较下去直到最低位。它的速度和精度折中较好是通用MCU ADC的主流。Σ-Δ型原理复杂但结果很香。它用过采样和噪声整形技术把量化噪声推到高频然后通过数字滤波器滤掉从而在低速下实现极高的分辨率24位很常见。优点是精度高、线性度好、抗干扰能力强缺点是速度慢。非常适合称重传感器、温度测量等慢变高精度场合。工作原理类比想象你要用一把只有有限刻度的尺子比如最小刻度1mm去测量一根头发的直径比如0.05mm。直接量测不准量化误差。Σ-Δ的做法是快速抖动尺子很多次记录下尺子刻度低于和高于头发直径的次数比例通过统计平均来反推出一个非常精确的直径值。这就是过采样和噪声整形的直观理解。3.2 ADC关键参数深度解析分辨率指ADC输出数字量的位数如8位、10位、12位、16位。它决定了“尺子”有多少个刻度。一个N位的ADC能把参考电压Vref分成 2^N 份。例如12位ADCVref3.3V则一个LSB最低有效位对应的电压是3.3V / 4096 ≈ 0.806mV。注意分辨率不等于精度精度受很多其他因素影响。采样率每秒进行多少次转换单位是SPS。根据奈奎斯特采样定理要无失真地还原一个信号采样率必须大于信号最高频率的2倍。工程上通常取5-10倍。例如采集音频20kHz采样率至少需要40kSPS常用44.1k或48k。量化误差由于数字量是离散的模拟电压真实值可能落在两个数字码之间这个最大误差是±0.5LSB。这是原理性误差无法消除。微分非线性理想情况下每个数字码的宽度应该是1LSB。DNL表示实际宽度与1LSB的偏差。如果DNL ±1LSB可能导致失码即某些数字码永远不会出现。积分非线性表示ADC实际传输特性曲线与理想直线的最大偏差。影响整体测量的线性度。信噪比理论上一个理想N位ADC的SNR 6.02N 1.76 dB。这可以作为评估ADC实际性能的基准。3.3 单片机ADC外围电路设计要点单片机ADC性能一半靠芯片一半靠外围电路。参考电压源这是ADC的“基准尺子”它的稳定性直接决定精度。切忌直接用供电电源如3.3V LDO输出做参考电压因为电源通常有噪声和纹波。一定要使用独立的基准电压芯片如TL431、REF5025、ADR4525等。根据精度要求选择注意其初始精度、温漂和噪声指标。输入信号调理前面讲的运放电路大显身手的地方。阻抗匹配ADC输入端通常可以等效为一个采样电容和开关电阻。信号源内阻过高会导致采样电容充电不完全引入误差。需要在ADC前加电压跟随器缓冲器来降低输出阻抗。抗混叠滤波必须在ADC输入端加一个低通滤波器RC或运放构成其截止频率略高于你关心的信号最高频率用于滤除高于奈奎斯特频率的噪声和信号防止其混叠到有效频带内。这是必须的限幅保护用钳位二极管如1N4148将输入电压限制在GND-0.7V到Vref0.7V之间防止意外高压损坏ADC引脚。PCB布局布线模拟地和数字地单点连接。参考电压引脚就近接去耦电容通常一个10µF钽电容并联一个0.1µF陶瓷电容且走线尽量短粗。模拟信号走线远离数字信号线特别是时钟线和PWM线。3.4 软件处理与校准技巧硬件是基础软件能锦上添花。过采样与提高分辨率如果你用的ADC分辨率不够比如MCU内置12位ADC但你需要14位精度可以对同一信号进行多次采样如16次并取平均。理论上过采样倍数每增加4倍有效分辨率提高1位。这需要信号本身有噪声或人为添加微小噪声且采样速度有余量。数字滤波软件实现低通滤波如移动平均、一阶滞后滤波可以平滑数据抑制随机噪声。Y(n) a * X(n) (1-a) * Y(n-1)其中a是滤波系数0a1a越小滤波越强响应越慢。校准零点校准短接ADC输入端或接已知的零电平读取一个数值作为零点偏移量后续测量值减去此偏移。增益校准输入一个已知的精确满量程电压如Vref读取数值。计算标度因子Scale 理论值 / 测量值。后续测量值乘以Scale。对于高精度应用可以进行两点甚至多点校准拟合出更准确的转换直线。4. 数模转换器让数字命令产生“模拟效果”DAC是单片机控制模拟世界的“手”。它把数字代码转换成模拟电压或电流。4.1 DAC的核心工作原理与类型电阻网络型最常见的是R-2R梯形网络。通过一系列精密电阻和开关让参考电流按二进制权重分流最后汇合输出。结构简单易于集成速度较快。是单片机内置DAC和中等精度外置DAC的主流。脉宽调制这不是真正的DAC但极其常用。单片机通过一个定时器产生固定频率、占空比可调的PWM波经过一个低通滤波器LC或RC后得到平滑的直流电压其平均值与占空比成正比。优点所有单片机都有定时器零成本实现。缺点分辨率受限于PWM计数器位数响应速度慢受滤波器限制有纹波。适用于对精度和速度要求不高的场合如LED调光、电机调速。Σ-Δ型同样利用过采样和噪声整形输出一位高速比特流经过模拟低通滤波器后得到高精度模拟电压。常用于音频DAC。4.2 DAC关键参数解析分辨率与ADC类似指输入数字量的位数。决定了输出模拟量的最小变化步长。建立时间从数字输入发生跳变如从0变到满量程到输出模拟电压稳定在最终值附近某个误差带如±0.5LSB内所需的时间。决定DAC的速度。输出类型电压输出型带内部输出缓冲运放使用方便电流输出型如经典的DAC0832需要外接运放构成I-V转换电路灵活性更高可能达到更高速度。毛刺在数字输入码变化时由于内部开关动作不同步会在输出端产生一个短暂的尖峰脉冲。在输出波形要求高的场合如音频需要关注“毛刺能量”参数或外加一个“去毛刺”电路采样保持电路。4.3 DAC输出电路设计与应用电流输出型DAC的I-V转换这是必考电路。用一个运放构成反相放大器将DAC的输出电流转换成电压。输出电压Vo -Iout * Rf。同时运放的反相端是虚地为DAC提供了稳定的虚地负载。单电源供电下的双极性输出很多DAC和运放是单电源供电如0-5V但我们需要输出正负电压如±2.5V。一个技巧是将运放的同相端偏置在中间电平如2.5V这个电压可以由电阻分压或基准电压源提供。这样当DAC输出0V时运放输出2.5VDAC输出2.5V时运放输出0VDAC输出5V时运放输出-2.5V如果运放是轨到轨且负电源为0V则只能接近0V这里需要双电源运放或电荷泵产生负压。电路需要仔细计算。驱动负载DAC或运放的输出电流能力有限通常几十mA。若要驱动低阻负载如扬声器、电机必须在后级增加功率放大电路如晶体管、MOSFET或集成功放芯片。5. 系统集成与常见问题排查把运放、ADC、DAC、单片机组合起来就是一个完整的模拟信号链。这里问题最多。5.1 典型信号链设计与PCB要点一个温度监测系统的例子PT100铂电阻 - 恒流源激励 - 仪表放大器放大微弱电压- 低通滤波 - ADC - 单片机 - (通过DAC和运放驱动) - 模拟表头显示。电源去耦每个运放、ADC、DAC的电源引脚附近必须放置一个0.1µF的陶瓷电容到地尽可能靠近芯片。对于功耗大的芯片再加一个10µF的钽电容。这是抑制电源噪声的第一道防线。地平面分割与单点连接PCB上将模拟地和数字地物理分割但通过一个磁珠或0欧电阻在一点连接通常连接点选在电源入口处或ADC/DAC下方。模拟部分的所有地线最终汇到模拟地平面数字部分亦然。信号走线模拟信号线尽量短远离高速数字线。如果必须交叉应垂直交叉。对于高阻抗节点如运放同相端、积分电容要用“guard ring”保护环包围即用接地走线将其包围起来防止漏电流干扰。5.2 调试与问题排查实录问题ADC读数不稳定跳动大。检查1参考电压。用示波器测量ADC的Vref引脚看是否有纹波或噪声。大概率是这里出了问题。检查2电源噪声。测量运放和ADC的供电电压是否干净。检查3输入信号本身。传感器输出是否稳定用示波器看。检查4采样周期和滤波。软件上是否进行了多次采样平均是否加了数字滤波检查5接地。模拟地和数字地是否混乱模拟部分的地回路是否过长问题运放电路输出自激振荡用示波器看输出有高频毛刺或正弦波。原因1相位裕度不足。运放工作在闭环增益下但反馈网络或负载电容引入了额外相移在某个频率满足360度相移且增益1就振荡了。解决在运放输出端和反相输入端之间并联一个小电容几pF到几十pF引入相位超前补偿。这是最常用的方法。原因2电源去耦不良。按上述要求加强去耦。原因3驱动容性负载。运放输出直接接长电缆或大电容容易振荡。解决在运放输出端串联一个小电阻如10-100Ω再接到容性负载。问题DAC输出波形有台阶或毛刺。台阶这是分辨率不够的体现。要么换更高分辨率的DAC要么通过“抖动”技术在软件上给数字码添加高频低幅度的随机噪声再经滤波后平滑台阶。毛刺检查数字输入信号到DAC的走线是否受到其他高速信号干扰确保DAC的数字地和时钟地干净。对于严重毛刺可以考虑使用流水线型DAC或者在输出加一个简单的RC低通滤波器会影响建立时间。问题系统精度达不到预期。系统性检查清单基准源温漂和初始精度够吗电阻/电容用的是1%精度的普通电阻还是0.1%的精密电阻电容的介质类型如C0G/NP0对滤波电路性能有影响。运放 Vos和Ib在测量直流或低频信号时它们引入的误差计算过吗误差电压 Vos Ib * R等效。热电动势在PCB上不同金属连接点如焊锡和铜在温度变化时会产生微小热电偶电压µV级。对于超高精度测量需要让所有敏感节点处于等温环境并使用低热电势的连接器。软件校准做了零点、增益和线性度校准吗5.3 从分立到集成现代芯片的便利随着技术进步很多复杂的模拟功能被集成到单芯片中极大简化了设计。集成式ADC如ADS124S08它集成了高精度Σ-Δ ADC、可编程增益放大器、基准电压、激励电流源专门用于RTD和热电偶测量外围只需几个电阻电容。集成式DAC如DAC80508集成了8通道、16位电压输出DAC内部基准SPI接口输出稳定快速。模拟前端如LMP91000专用于电化学气体传感器集成了恒电位仪、跨阻放大器、ADC接口。单片机选型对于一般应用优先选择内置所需精度和速度ADC/DAC的MCU如STM32F3/F4系列高速高精度ADC、STM32L4系列低功耗高精度ADC。对于超高精度或特殊需求再考虑外置独立ADC/DAC芯片。最后想说的是模拟电路调试需要耐心和细致的观察。一台好的示波器带宽要够最好有FFT功能和万用表是必备的。多动手搭电路、测试、修改参数观察波形和数据的改变积累下来的手感比看十遍书都有用。遇到问题按照信号流向从源头到终点用仪器一步步测量对比理论值总能找到原因。模拟世界是连续的微小的偏差都可能被放大这正是它的挑战也是它的魅力所在。