尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

MCU的模拟与数字集成:从分立器件到单芯片方案

MCU的模拟与数字集成:从分立器件到单芯片方案 说实话我入行头几年对单片机是有点“偏见”的。那时候做数据采集板卡想要精度就得老老实实地在MCU外面挂精密运放、独立基准源、甚至专门的ADC芯片一颗芯片负责采样另一颗负责算第三颗负责通信。板上密密麻麻一片元件画板子时光是布局就够头疼。这两年的情况有了明显变化——越来越多单片机开始把模拟前端、可编程运放、高精度ADC、DAC、比较器这类“模拟活”直接塞进一颗芯片里模拟和数字的边界在一颗MCU内部被打通。这就是标题里说的“advanced analog digital integration”也是我今天想认真聊聊的主题新一代微控制器到底集成了哪些模拟资源、数字侧又是怎么配合模拟侧工作的以及我们用这些芯片搭真实系统时的注意点。这篇文章适合正在做传感器采集、电机控制、电源管理等嵌入式项目的软硬件工程师也适合刚入门、想少走弯路的学生朋友。1. 为什么单片机开始卷模拟了从“够用”到“够好”的集成逻辑1.1 传统分立体方案的三个结构性痛点以前用“MCU外部分立模拟器件”的方案不是不能用只是越做越别扭。第一是板级面积一颗16位ADC加一颗精密运放再加上外围电阻电容、基准芯片轻轻松松占据两三平方厘米的PCB面积这在今天动不动就要做小尺寸产品的需求面前非常吃亏。第二是信号完整性模拟信号只要走出芯片就要经过过孔、走线、焊盘每一段都是寄生电感和寄生电容的载体噪声很容易串进来特别是板子上还有开关电源和数字总线的时候想在1米长的排线上传一个微伏级的传感器信号那真是跟自己过不去。第三是物料与调试成本每一颗分立的模拟芯片都要单独选型、单独做温度补偿、单独调校产线如果还要逐台校准成本就更可观了。我在一个电机驱动项目里拿到过一份真实的BOM对比传统方案里信号链相关物料有11颗换用集成模拟外设的MCU之后信号链物料只剩4颗焊点数量少了近一半。整板的直通率明显上升因为少了很多虚焊和装配不良的潜在点。这个数据对我个人触动挺大——集成并不只是“省地方”它是在整个工程链条上降低复杂度和故障率。1.2 集成让精度和抗干扰同时上了一个台阶把模拟前端搬进MCU最大的本质变化不是“省了几颗料”而是信号路径被大幅缩短。运放输出、ADC输入、基准电压这些关键节点全部通过芯片内部的金属走线连接而不是经过外部PCB走线。内部走线虽然也有电阻但一来距离极短二来可控性好受外部电磁干扰影响的概率比板上走线低一个数量级。这样一来系统底噪更干净ADC读数的一致性也更好。另一个容易被忽略的点是温度一致性。分立方案里运放的温漂、基准的温漂、ADC的温漂是三个独立的变量它们随温度的变化曲线各不相同低温时可能互相抵消高温时可能互相叠加要校准很费劲。集成到一颗芯片之后这些模块在同一个晶圆上、同一个封装里温度漂移的趋势高度相关很多误差项会自然抵消。实测下来同样做0.1%精度的电流采样集成方案在-20℃到70℃范围内的漂移量通常比分立方案小一半以上这对工业级和车规级产品来说非常关键。1.3 哪些场景最吃这波模拟集合红利我梳理了一下手头经手的项目至少四类场景是集成模拟外设MCU的典型受益者。高精度传感器采集热电偶、电桥式压力传感器、PT100等信号都很微弱需要仪表放大器或可编程增益放大新款MCU内部已经内置了这些前端。无刷电机/伺服控制每相电流采样需要同步触发ADCPWM和ADC联动需要事件系统支持而模拟比较器可以做硬件过流保护要比中断快一个数量级。小型电源和充电管理需要多路ADC监控电压电流、DAC输出基准、比较器实现欠压/过压快速切断一颗MCU全包。便携式或电池供电设备外设可以在休眠时保持模拟模块运行并做阈值判断CPU完全休眠把平均功耗压到微安级。这些场景在几年前往往要用一颗MCU加三四颗模拟芯片才能完成现在单芯片方案已经能扛住而且性能上限并不低。下面我们就来拆解一下这颗“单芯片”里到底塞了什么好东西。2. 新式MCU的模拟外设到底集成了什么逐个拆解2.1 ADC从12位到16位差分输入与过采样是重头戏ADC是模拟集成里最核心的一块。早年的MCU内置ADC基本都是12位单端输入做做电池电压监测还行做精密采集就力不从心。新一代MCU普遍把分辨率提到了14位甚至16位而且支持差分输入也就是同时采样正端和负端然后相减得到结果。差分输入的好处是大得惊人共模干扰会同时出现在两个输入端上相减之后直接抵消对地线上的噪声和电源纹波有一定的“免疫”能力。我做过一个桥式传感器项目之前用单端ADC采样50Hz工频干扰很明显读数在最后几位不停跳换用同一颗芯片的差分模式之后即使不加任何数字滤波跳动也减少了大约6成。除了分辨率和输入结构采样率和过采样能力也是重点。很多新款MCU的ADC支持硬件过采样比如你设置64倍过采样外设自己会采64次、自己累加、自己右移输出一个等效更高位数的结果全程不用CPU介入。我建议在慢速高精度场景采样率几千Hz以内直接开启硬件过采样实测下来能把有效位数往上拉2位左右。当然过采样并不能消除非线性误差它提升的是随机噪声环境下的有效分辨率这一点要拎清楚。2.2 DAC从“只能调电压”到“可以当波形源”很多人觉得DAC在MCU里是个鸡肋模块无非就是输出个基准电压或者调调偏置。其实在新一代芯片上DAC配合事件触发和DMA可以扮演更重要的角色。比如你可以在DAC输出上叠加一个已知的测试信号送到信号链的输入端做自检也可以让DAC输出一个随时间变化的斜坡电压结合比较器实现简单的电容测量更常见的用法是作为闭环控制里的模拟基准比如你要把一个电压控制在5.00V用DAC输出5.00V参考再跟反馈电压做比较误差由模拟比较器捕捉比传统的PWM滤波方案精度高得多。我常用的一个技巧是用DAC输出一个和传感器激励同源的偏置电压配合ADC的差分输入用软件只消除固定偏置。这样即使用便宜的传感器也能把零点误差从数字域校准掉。这颗DAC的分辨率目前常见的是8位到12位12位配合内部基准已经能输出大概1mV级的电压步进做精密偏置完全够用。2.3 运算放大器OPAMP与可编程增益放大器PGA信号调理的“内置肌肉”这是模拟集成最有感知度的部分。过去必须在片外搭的放大电路现在MCU内部直接集成了运放单元。别看只多了一个模块用法完全不同了它并不是一个固定增益的放大器而是支持外部接反馈电阻、由软件配置增益的模式。有些芯片的运放还支持轨到轨输入输出意味着输入输出范围可以非常接近电源轨低压系统的动态范围大大改善。可编程增益放大器PGA则更省事它把反馈网络也做到了内部你只要在寄存器里写一个数字就能切换1、2、4、8、16、32倍增益。PGA后面通常会直接连到ADC输入中间由内部的模拟开关切换组合成一条完整的信号链传感器信号进来 → PGA放大 → ADC采样。这样做的好处是阻抗匹配好、路径短、噪声小。我用PGAADC做过一个热敏电阻采集方案32倍增益下0.1℃的温度变化也能明确反映在ADC末位码上这在以前需要外接一颗仪表放大器才行。2.4 比较器与内部基准低调但关键的“配角”比较器常被忽视但它其实是模拟集成里最有“安全感”的模块。它的第一个用途是做硬件级触发事件当模拟输入超过某个阈值比较器直接翻转输出可以旁路CPU直接触发ADC采样、触发某个定时器关闭PWM或者把芯片从休眠中唤醒。这在做过流保护时特别重要——从模拟信号异常到PWM关断整个链路可以做到几百纳秒而软件中断最快也要微秒级。差距是数量级的。比较器另一个特点是它通常自带一个内部基准电压可以是DAC的输出也可以是专用的基准源。你可以把基准配置成缓慢变化的信号这样比较器就变成了一个简易的模拟阈值检测器。这里就要提到内部基准参考电压了。新一代MCU很多都内置了带隙基准常见精度在±0.4%到±1%之间温度漂移控制得也算不错。但如果你要追求的是高于0.2%的系统精度我依然建议在外部加一颗独立基准芯片因为内部基准的噪声和温漂指标跟顶级的外部基准比还是有差距。这个取舍后面会细说。2.5 温度传感器及其他辅助模拟块大多数新款MCU还会在内部放一个温度传感器通常连接到一个单独的ADC通道。很多工程师觉得它没卵用实际上它是非常好的“系统健康监测”工具。我个人习惯在固件里定期读一下内部温度传感器用来监测芯片结温防止芯片长期工作在高温高压的极限状态。另外还可以利用它做温度补偿——既然芯片的温漂趋势已知你可以在固件里根据内部温度做一阶或二阶补偿。虽然内部温度传感器本身的绝对精度不高但它的重复性和趋势一致性很好用来做“相对补偿”完全够用。除了温度传感器新芯片还会集成一些暂时不起眼的模拟模块比如内部电阻分压网络、可编程电流源、跨阻放大器接口等。这些模块单独看都是小功能组合起来就能覆盖很多具体应用。比如有些芯片内置了氮化镓或MOSFET驱动器的模拟接口专门为数字电源应用设计有些则内置了触摸检测的模拟前端。选型的时候不要只看CPU主频和Flash大小把模拟外设清单逐项跟自己的信号链对照一遍往往会有惊喜。3. 数字侧如何与模拟侧“打出组合拳”外设互联与智能触发3.1 事件系统让ADC脱离CPU自动采样模拟外设再强如果每次采样都需要CPU去启动、等结果、搬数据那系统效率就上不去实时性也会打折。新一代MCU普遍集成了事件系统或触发矩阵简单说就是可以在模拟外设和数字外设之间建立硬件通路定时器到达某个计数值直接给ADC发一个触发信号ADC转换完成又直接给DMA发一个请求DMA把数据搬到内存整个流程CPU全程不参与。这件事的工程价值很大。比如我做三相电机电流采样需要PWM中心对齐的时刻去采样以避免开关噪声。用事件系统后只要配置一次PWM→ADC触发链路之后每个PWM周期ADC自动采样数据由DMA自动搬运CPU只负责在后台算控制算法。实测下来CPU负载从原来的60%降到了15%采样抖动从±1μs降到了±20ns以内。对控制环路来说这种低抖动采样延时比多几MHz主频还重要。3.2 可配置逻辑CLC/CLE在MCU内部搭一个模拟控制环路如果说事件系统是“外设间的接线”那可配置逻辑模块就是“外设间的门电路”。像PIC系列里的CLCConfigurable Logic Cell和瑞萨新系列里的CLEConfigurable Logic Element可以把两三个外设的输入信号通过简单的与、或、异或、锁存等逻辑组合成一个输出信号再反馈给其他外设。这等于在芯片内部实现了一个不占CPU的硬件逻辑控制器。在一些需要快速响应的模拟控制场景这个模块很有价值。举个例子系统里有一个PWM信号负责功率输出还有一个模拟比较器负责监测过流。我想实现“过流时立刻把PWM输出强制为低”最朴素的写法是在比较器中断里关PWM但存在中断延迟。用可配置逻辑的话直接把比较器输出和PWM使能信号做逻辑与比较器一翻高PWM就被硬件强行拉低完全绕过软件。我实际测试过从过流信号出现到PWM输出完全关闭时长约等于比较器翻转时间加级联逻辑延时一般在几百纳秒级别比任何中断响应都快得多。3.3 PWM与模拟外设的深度耦合数字域驱动模拟世界很多初学者把PWM纯粹当“输出方波用”但其实PWM与模拟外设的联动才是现代MCU的精髓。一方面PWM可以作为ADC采样的触发源专门安排在方波信号“稳定”的时间窗口采样避开开关切换瞬间的毛刺另一方面ADC采样结果可以通过硬件比较或者简单算法反过来调整PWM占空比从而实现数字闭环。这部分我建议重点关注两个参数PWM分辨率通常用bits表示比如16位PWM表示占空比可调精度为1/65536和ADC同步触发延时。像STM32G4系列就专门优化了PWM与ADC之间的触发链路触发到采样的延时可以控制在极小的范围。这类深度耦合设计正是“模拟与数字集成”这个标题下真正值钱的地方——它不光是硬件IP的堆砌而是从系统架构层面把模拟外设和数字外设揉到了一起。选芯片时不要只看“有没有PWM”和“有没有ADC”要看它们之间能不能直接互联、延时多大这决定了你后面做控制环路的性能上限。4. 实操用一颗集成MCU搭建高精度数据采集前端4.1 需求定义与芯片选型思路理论讲再多都不如跑一个真实需求。假设我们接到一个工业压力变送器项目传感器输出差分电压信号满量程大约±10mV系统要求测量精度0.1%输出更新率1kSPS工作温度-40℃到85℃整体功耗要求尽量低最好单芯片方案。这个需求在以前至少要一颗仪表放大器一颗24位ADC一颗MCU才能做成。但现在我们可以尝试用一颗集成PGA、高分辨率ADC、内部基准的MCU来做。选型时要抓住几个硬指标ADC的有效位数ENOB至少要14位以上PGA增益至少要支持64倍以上内部基准温度漂移要小于50ppm/℃并且必须在-40℃到85℃全温区保证精度。这类芯片在Microchip的PIC16F171系列、PIC18-Q系列、STM32G4系列、瑞萨RA系列里都能找到对应型号选型时把外设列表拉出来逐项对比就行。4.2 关键参数计算增益、分辨率、基准误差预算先算增益。传感器满量程10mVADC参考电压一般取内部基准的2.048V或4.096V我们希望满量程时ADC读数在90%满刻度附近避免削顶。如果参考电压取2.048V目标满刻度输入约1.8V那么所需增益就是1.8V / 10mV 180倍。PGA最大增益如果是64倍还差约3倍。这种情况有两种处理办法一是把ADC参考电压降到0.256V但内部参考通常不支持这么低二是利用运放单元外接反馈电阻把PGAOPAMP串联比如PGA设32倍外部运放设6倍总增益192倍。第二种更灵活但多欠配置。再算分辨率。传感器信号底噪按10μV估算192倍增益后等效ADC输入噪声约1.92mV。如果参考电压2.048V、16位ADC一个LSB约31μV那么噪声相当于62个LSB看起来很大但实际上传感器的噪声也包含在内而且1kSPS下还可以通过硬件过采样做滤波。这里有个关键计算过采样倍率与有效位数提升的关系是每提升1位有效位数过采样倍数翻4倍。如果硬件过采样64倍理论上能多提升3位有效位数。16位ADC64倍过采样在1kSPS下实际等效有效位数能达到17位以上完全够0.1%精度要求。最后算误差预算。0.1%精度对应1mV满量程10mV。误差源包括PGA增益误差通常±0.5%可校准、基准误差内部基准±0.4%温漂可软件校准、ADC非线性误差通常±1LSB、系统噪声。加在一起不校准肯定超0.1%所以一定要在固件里做两点校准零点校准和满量程校准。我的经验是利用DAC输出一个精确的零点电压和满量程电压配合内部自校准序列把增益误差和零点漂移一次性校准掉。校准之后系统在常温下能做到0.05%以内全温区也能压在0.1%以内。4.3 外设配置流程与初始化代码思路下面给一个初始化配置的代码思路以标准C语言风格的寄存器级伪代码为例实际要根据具体型号的寄存器名调整void signal_chain_init(void) { // 1. 配置PGA32倍增益差分输入模式 PGA_Init(PGA_GAIN_32, PGA_DIFFERENTIAL); // 2. 配置外部运放反馈网络使总增益约192倍 OPAMP_Init(OPAMP_GAIN_6); // 需要外部电阻网络 // 3. 配置ADC16位分辨率内部基准2.048V ADC_Init(ADC_RES_16BIT, ADC_REF_INTERNAL_2V048); ADC_EnableOversampling(64); // 硬件过采样64倍 // 4. 配置事件系统定时器1触发ADC采样周期1ms TIM1_SetPeriod(1000); // 1kHz EVENT_Connect(EVENT_TIM1_MATCH, EVENT_ADC_TRIGGER); // 5. 配置DMAADC转换结果自动搬运到内存缓冲区 DMA_Init(DMA_ADC_RESULT, adc_buffer, DMA_CIRCULAR); // 6. 启动外设触发链路 ADC_Start(); TIM1_Start(); // 7. 固件校准读校准系数并写入内部校准寄存器 system_calibrate(); }这段代码的思路很清晰从信号链的前端往外设依次初始化最后通过事件系统把采样链路串起来CPU完全不需要干预ADC采集过程。实际开发时我习惯把校准函数放在上电启动阶段等校准完成之后再使能输出避免把未校准的初始值发给上位机。4.4 实测数据与效果对比这套方案我在实验室实测的数据传感器差分信号10mV满量程输入配置总增益192倍ADC参考2.048V过采样64倍更新率1kSPS。结果非常理想ADC输出码稳定在满量程18000多点16位有效标准差约10个LSB换算到输入等效噪声约1.7μV——这个噪声水平已经接近分立仪表放大器的成绩。全温区从-40℃到85℃跑下来校准后的零点漂移小于3μV满量程漂移小于0.04%把0.1%的指标余量留得很足。对比之前用分立方案的做法PCB面积缩小了约60%信号链物料成本降低约40%系统整体功耗从6mA降到了3.2mA。更爽的是产线步骤简单了很多以前要焊外部运放、基准、ADC现在一颗芯片加几个反馈电阻就搞定。这就是我标题里“advanced analog digital integration”落到实际的产品上的具体感受。5. 让我踩过的坑模拟集成最容易出的问题与排查方法5.1 ADC读数跳动八成是参考电压和电源去耦出了问题集成芯片的模拟部分和数字部分共用同一颗封装虽然内部有隔离设计但不可能做到完全隔离。我遇到过的ADC末位码乱跳大部分情况并不是MCU的问题而是我在设计外部电路时把去耦电容省了。ADC参考电压引脚如果直接接到电源上而不加0.1μF陶瓷电容噪声会直接耦合进转换结果。注意参考电压引脚和电源引脚的去耦电容都要尽量靠近芯片引脚放置最好是1μF大电容加0.1μF小电容并联大电容应对低频电流需求小电容应对高频噪声。另一个容易被忽视的点是电源的选择。如果板子上同时有开关电源和LDO我建议ADC参考电压单独从LDO输出取不要在开关电源输出处直接并联供电。开关电源的纹波通常在毫伏级对10位ADC可能无所谓对16位ADC就会直接体现在末几位码上。实测下来同样的代码、同样的芯片把参考电压从开关电源输出改到LDO输出ADC有效位数能提升2位多。5.2 运放振荡输出端挂电容是最大的“暗器”集成运放最常见的不稳定原因是在输出端直接挂了比较大的电容。很多工程师习惯在ADC输入端加一个几十纳法的电容来滤波这在分立方案里没问题但在集成运放直接驱动ADC的场景下这个电容会改变运放的相位裕度轻则引起振铃重则直接自激振荡。我自己就栽过一次给MCU内部运放输出加了个100nF电容示波器一看输出端叠加了一个2MHz左右的震荡波形ADC读数自然惨不忍睹。解决办法有两个一个是把滤波电容改到运放反馈网络之后也就是在运放输出先经过一个串联电阻再接电容构成RC滤波而不是纯电容负载另一个是查阅芯片数据手册里运放的容性负载驱动能力不同芯片差异很大有些能稳定驱动50pF有些能到几百pF但很少有能直接驱动100nF的。如果非要大电容滤波就在运放输出和电容之间串一个几百欧姆的电阻将电容与运放输出隔离。5.3 采样误差源阻抗太高采样保持器“吃不饱”ADC内部都有一个采样保持电容ADC开始采样时这个电容要充电到输入电压。如果外部信号源阻抗太高充电时间常数就很大采样窗口内电容充不满测量结果就会偏低。这个现象在低增益、高阻抗信号源时尤其明显。我见过有人用一个1MΩ电位器直接接ADC输入结果读数非线性得一塌糊涂。排查方法很简单把ADC配置成最慢采样时间比如几十微秒看读数是否变化。如果慢采样时读数明显偏高且更准确基本可以断定是源阻抗问题。解决思路是降低信号源阻抗——要么在ADC输入前加一级运放缓冲要么利用内部PGA的低输出阻抗特性。新一代MCU的PGA和ADC之间往往有专用的内部连接路径源阻抗几乎可以忽略这也是集成方案比分立方案在信号完整性上更优的体现。5.4 接地与布局模拟和数字的“楚河汉界”最后聊聊PCB布局。虽然模拟外设集成到了MCU内部但外部信号链的走线依然敏感。我一般坚持“单点接地”原则模拟地、数字地、功率地通过一个0欧姆电阻或磁珠在电源入口处汇合避免数字电流流过模拟地平面形成电压降。MCU的模拟电源引脚AVDD/AVSS如果和数字电源完全共用建议至少串一个磁珠或者一个小电感隔离。另外PWM信号和模拟信号不要平行走线特别不要穿过模拟信号区域。一个反面教材我之前一块板子上PWM信号线从SOP-8封装边缘经过结果只要PWM占空比变化ADC读数的后几位就会跟着跳。后来把PWM走线改到PCB另一侧并加了一些地孔隔离问题就消失了。这类问题往往在原理图上看不出来只能靠布局习惯来规避。这几个月和这些集成模拟外设的新MCU打交道下来我最大的感受是硬件工程师的“活”变少了但要求却更高了——以前可以把问题甩给外部分立器件现在你必须深入理解每一级模拟模块的输入阻抗、输出能力、噪声特性才能在配置时把性能压榨出来。好在调试手段也多了很多芯片支持在运行时实时配置运放增益、切换ADC参考电压甚至可以把内部模拟节点的测试信号引出到引脚这让调试过程变成了一种“软件定义模拟硬件”的体验。我个人建议如果你手上的项目还在用“MCU外置运放独立ADC”的旧方案不妨认真评估一下新一代集成模拟外设的MCU哪怕只是做一个原型验证也能直观感受到BOM精简和信号完整性的双重提升。最后再分享一个小技巧在固件里利用MCU内部温度传感器做一个“温度漂移表”把不同温度下测到的校准系数存下来这样即使内部基准温漂偏大也能通过查表把全温区误差补回来——这个办法成本为零但往往能让整个系统的精度指标上一个台阶。
返回列表