ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

先进模拟集成MCU:信号链、事件系统与电机控制实战

先进模拟集成MCU:信号链、事件系统与电机控制实战 最近手里有个项目要对三相永磁同步电机做电流环升级。老方案是采样电阻加外部仪表放大器送进外部独立ADC再用SPI总线和MCU通信。板子焊完光是信号地上那一堆毛刺就折腾了两周。后来拿到一批新一代微控制器Microcontrollers的样片拆开数据手册一看我整个人有点恍惚什么时候MCU里的模拟资源变得这么能打了这代新品最核心的变化就是先进模拟与数字集成Advanced Analog Digital Integration从口号变成了实打实的外设组合。PGA、比较器、高分辨率ADC、DAC、内部基准源这些以往需要外挂的电路现在直接塞进一颗芯片里而且和数字外设之间的联动不是靠中断函数硬凑而是有专门的事件触发链路。这篇文章我就以自己的实际体验为主线把新架构下的模拟资源、数字协同方式、以及集成后容易踩的坑全部摊开聊一遍。适合正在做电机控制、工业传感器采集、电池监测或者信号链设计的工程师参考不管你是刚接触还是想评估迁移应该都能找到有用的东西。1. 从一块老式信号调理板说起模拟集成到底解决了什么1.1 传统方案的板级痛苦很多年前我做第一块数据采集板电路结构大概是传感器信号进仪表放大器再过一级有源低通滤波输出送到一个外置12位ADCADC再通过SPI接到单片机。这套方案没有任何理论问题但实际调试的时候暴露的事情太多了。信号链里每一级都是噪声的入口。仪表放大器的供电纹波会耦合到输出滤波器的运放型号选不对带宽和Q值都会偏离设计目标外部ADC的基准源如果用了便宜的LDO参考电压本身的低频漂移最终会直接变成测量误差。更麻烦的是板级布局模拟部分必须和数字总线拉开距离AGND和DGND要做单点连接稍有疏漏SPI翻转时线上那点串扰就足够让你的ADC末位码乱跳。我当年的解决方式是不断打样、不断割铜皮、外加无休止地换器件。现在回过头看这种痛苦本质上是独立模拟器件通用MCU这种架构带来的信息割裂模拟链路的参数是离散的每个器件的数据手册都是一个单独世界设计者自己要做阻抗匹配、带宽匹配、噪声匹配。而新一代MCU把模拟前端整体收编进去之后芯片厂商替你把内部走线、隔离、匹配问题用硅片工艺抹平了一大半。1.2 一块芯片取代半块PCB在使用新平台之后我做的第一件事就是把原来那套信号调理板整个拿掉。传感器差分输出现在直接进MCU内部的可编程增益放大器PGA输出再硬连到ADC中间不需要任何外部运放因为厂商在芯片内部已经把PGA到ADC的走线阻抗做了匹配甚至遇到过载时还有内部钳位保护。这个变化带来的直接收益是硬件设计从“搭积木”变成了“配参数”。一块传统的传感器采集PCB模拟部分的面积至少要占掉三分之一运放、阻容、反馈网络、参考电压芯片、滤波电感、防浪涌二极管每一项都要设计、画封装、贴片。而新型MCU的TQFP封装或者QFN封装外面只需要几个去耦电容和一个外部基准电容。对于批量产品来说BOM少了十几种料采购和贴片成本都明显下降更重要的是失效点少了。当然集成不是没代价后面我会专门说。但至少从项目启动速度看过去要画一周的原理图模拟部分现在我基本半小时就能把PGA增益、ADC采样率、触发源用配置工具调好。2. 新一代MCU的模拟资源盘点不只是“多了一路ADC”2.1 ADC位深之外更需要关注的参数大家最容易看到的就是ADC位数提升。前几年主流还是12位现在不少新款MCU把内部ADC做到了16位部分面向高精度测量的型号甚至集成了24位Σ-Δ ADC。但作为工程师我不能只看位深更需要关注几个被数据手册大字加粗之外的东西。首先是有效分辨率ENOB。16位ADC在特性表上写着SNR 85dB但实际使用中如果采样保持电路的建立时间不够输入源阻抗偏高ENOB可能跌到13位。新一代MCU普遍优化了采样电容的尺寸并且给ADC输入加了可编程的采样时间选项可以从1个周期调到几百个周期。这一点对于直接接高阻传感器非常关键比如电桥输出如果不加缓冲过去必须外部加一级运放现在拉长采样时间就能扛住。其次是差分输入。老款MCU的大量ADC是单端输入只能测正电压。新款很多通道支持伪差分甚至真差分输入范围可以负向共模抑制比提升明显。我做电机相电流采样时直接从采样电阻两端接差分输入不需要外部隔离放大器低端电流时的信噪比好了不少。再有就是多通道同时采样S/H。电流环里需要同时读取两相或三相电流如果ADC是单通道轮询相位差会导致计算出的电流矢量不准确。新款MCU不少内置了两个或三个采样保持放大器可以同时锁存多路信号再依次转换。这一点在电机控制上不是锦上添花而是刚需。2.2 比较器、运放与DAC这些“配角”才是关键ADC只是模拟输入的一环。真正常被忽略的王牌是内部的模拟比较器ACMP和可编程增益放大器PGA。比较器的新玩法是和PWM定时器硬连线。过去要做过流保护电流信号进外部比较器比较器输出接到MCU的外部中断引脚中断服务程序里再强制关PWM。这个链路经过CPU延迟少说一两微秒要是遇到中断优先级被其他任务卡住那就完蛋。现在新一代MCU内部比较器的输出可以直接触发PWM模块的故障刹车引脚硬件链路延迟只需要几十纳秒。过流故障发生时CPU甚至不知道发生了什么PWM就已经被封死。PGA的价值在于把微弱信号放大到ADC的满量程区间。内部PGA一般是轨到轨输入输出增益可以设为1、2、4、8一直到64倍。我在某条温度采集链路上用了32倍增益把热电偶的毫伏信号直接放大到ADC可以分辨的程度省掉了一整个外部放大电路。同时PGA的输出经过内部开关矩阵可以和ADC通道直接相连路径固定寄生电容可控PCB阶段不需要再用走线去保护模拟信号。DAC的存在很多时候是为了产生偏置或参考电平。比如你想让比较器的阈值跟着温度变化DAC输出电压做阈值CPU只需要按查表去更新DAC值硬件比较器则完全不需要干预。2.3 数字侧如何配合模拟侧升级模拟资源翻倍之后数字侧如果没有跟上这些模拟外设反而会成为瓶颈。好在新型MCU的数字子系统也在同步进化。第一个明显的改变是高分辨率PWMHRPWM。传统的PWM定时器时钟即使到了100MHz在20kHz开关频率下一个周期的占空比分辨率也就5000个台阶换算成12位左右。但对于高精度数字电源或者电机控制我们想要的是16位级别的占空比微调。新平台的HRPWM内部使用延迟线或者细分时钟可以把有效分辨率推到16位甚至18位实现几千分之一的精细调节。第二个改变是**事件系统Event System**全面普及。事件系统允许外设之间直接在硬件层面发送触发信号不需要经过CPU寄存器也不需要额外的GPIO线和中断。模拟比较器输出可以映射为事件事件又可以触发ADC启动、定时器同步、DMA传输。这种纯硬件路由的设计让模拟和数字外设之间的握手时延降到了几个时钟周期。第三个是**可配置逻辑单元Configurable Logic**以及小型查找表LUT越来越多地出现在MCU内部。这相当于是给数字部分加了一小块CPLD可以把多路比较器输出做逻辑与/或后再统一触发一个动作。比如过压和过流同时发生时才允许复位故障锁存。这种组合能力让模拟保护逻辑变得非常灵活不需要外部逻辑芯片也不需要写中断代码。3. 模拟与数字的真正协同事件系统、触发链与无CPU闭环3.1 比较器直接锁死PWM故障保护不再靠中断前面提到过内部比较器硬连PWM刹车这里我展开讲讲具体的工作方式。以电机驱动为例需要在母线电压高于某个阈值时立刻封锁上桥和下桥。老代码里我们通常怎么做ADC采样到母线电压升高进入中断然后调用PWM关断函数。这个过程从事件发生到实际关断通常需要1.5到3微秒具体看中断响应时间和代码里有多少现场保护。在大电流故障场景下这个延迟可能是致命的。新一代MCU提供了独立的模拟故障通道比较器正端接母线电压分压信号负端接DAC输出的过压阈值。配置完成后比较器输出的边沿信号会直接连到PWM定时器的故障输入引脚。一旦翻转PWM输出在下一周期硬件级别就被安全置为低电平整个过程不需要执行任何代码。我实际用示波器量过这个响应时间从比较器翻转信号出现到PWM驱动波形消失大约40到60纳秒几乎是纯硬件路径。这不只是快更关键是确定性高不管CPU当前在做什么哪怕是正在跑Flash擦除保护逻辑都不受影响。做安规认证的时候这条硬件保护链路写进文档说服力比“软件判定了然后调用函数”强得多。3.2 事件触发链实现“采-算-控”一体化硬件协同的一个典型场景是同步采样触发。三相电流采样的最佳时间点是在PWM下桥开通的中间时刻因为此时续流二极管的振铃已经衰减电流信号最平稳。在传统MCU上要实现这个时机通常用PWM周期匹配中断在中断里计算好延时然后启动ADC。问题是中断触发ADC的精度取决于软件执行时间抖动指令Cache未命中的时候抖动可能超过100纳秒。新平台的事件系统解决这个问题的方式是PWM定时器产生比较匹配事件这个事件通过事件路由直接触发ADC启动不需要中断参与。ADC转换完成又触发DMA搬运数据直接到内存中的环形缓冲区。CPU全程只负责在循环中读取最新一组转换结果做算法或者干脆由硬件累加器做平均值计算。采样点的抖动降低到了单时钟周期也就是几十纳秒以内。这种无CPU闭环还体现在内部参考电压校准上。某些新MCU有模拟自校准引擎上电后自动用内部带隙基准校准ADC的增益和偏移校准过程由硬件状态机完成不需要CPU干预。我怀疑某些厂商的“模拟外设”已经悄悄变成了一个微型的专用模拟管理单元而不只是单体外设的简单拼凑。3.3 DMA与FIFO高速采集不拖累CPU当ADC采样率提升到2Msps甚至5Msps时传统的“中断里读寄存器”方式直接失效。算一下2Msps转换速率每次转换产生16位数据每秒会产生4MB数据如果每次都用中断处理CPU大部分时间都在处理中断入口和寄存器读取。更好的做法是使用DMA与ADC的FIFO配合。新MCU的ADC模块普遍带有一个深度FIFO转换结果可以按块存储。当FIFO中积累了比如4个、8个或者16个样本之后才触发一次DMA突发传输把整块数据搬到内存。这样既保证了数据连续性又把中断频率降低了8到16倍。而且这些新平台的DMA不是简单的“搬数据”很多支持链式描述符也就是一个DMA传输完成后自动加载下一段描述符可以连续换缓冲。如果我配了双缓冲一个缓冲区在搬运的同时另一个缓冲区已经可以在CPU侧被处理流水线完全跑满。ADC连续采集、DMA连续搬运、CPU连续算三者互不阻塞这是单片机能做到“高带宽数据采集”的底气。4. 集成度提升后容易踩的雷电源、接地与布局4.1 模拟引脚不是“换了丝印的数字引脚”把模拟外设真的用好第一课是尊重芯片电源域的分割。新一代MCU几乎都给了独立的VDDA、VSSA引脚甚至有专门的VREF引脚这些模拟电源域必须独立去耦。我在第一版测试板上就犯过错VDDA直接和VDD连一片平面都没用电感隔离结果ADC输出码一直有周期性的毛刺波形一翻查毛刺频率和板载DC-DC开关频率完全一致。正确的做法是给VDDA加一个小磁珠或者几欧姆的电阻从主电源处单独引线再在模拟引脚旁边放上1μF和100nF并联去耦电容尽量靠近引脚放置。VREF引脚更敏感建议用一个高质量的低噪声基准源供电而不是图省事直接接VDDA。如果对功耗不敏感可以在VREF引脚挂一个RC低通滤波进一步抑制高频噪声。顺便提一句不少厂商的参考设计里都把模拟地和数字地在芯片封装底部单点连接这个思路是让数字电流不流过模拟回路。PCB上如果实在无法分割平面至少保证模拟引脚周围的走线下方没有高速数字信号穿行。4.2 数字噪声如何污染测量结果集成度越高的芯片内部的数字开关动作越频繁。CPU跑在200MHz内部总线不停翻转这些翻转产生的衬底噪声会耦合到模拟模块。所以新一代MCU普遍在硅片层面做了物理隔离比如深N阱隔离、独立电源域但芯片底座的噪声依然可能通过引脚耦合出来。我的经验是在做高精度模拟测量的项目中尽可能降低CPU频率或者让CPU在ADC转换时段进入低活动状态。如果一个业务场景是“每100μs触一次转换”那么转换完成之前代码不要做大量的Flash读写更不要在ADC采样保持期间切换GPIO方向。因为这些数字活动都会通过内部耦合影响采样电容上的电压。软件上还有一个容易被忽略的点ADC采样时间过长同样会引入噪声。采样时间越长采样电容和外部驱动源阻抗组成的RC回路对噪声的带宽更宽反而会把更多高频噪声“采”进来。所以采样时间不是越长越好要和外部RC滤波一起综合考虑。比如外部串了100Ω电阻和1nF电容时间常数是100ns采样时间取1μs左右就已经够建立到16位精度再长就是白白积分噪声。4.3 校准和温漂模块再新也要做补偿内部模拟电路再精良也会有失调和增益误差而且这些误差会随温度漂移。很多新MCU支持在出厂时都做过一笔校准值存到了闪存里上电后可以自动加载。但要注意这个校准值在生产测试环境下得到的温度变化后依然会偏移。如果产品需要使用温度范围很宽最好在代码里做两点校准或者三点校准。我的做法是在产线测试阶段用一个标准电压源送入一个已知电压比如1.0V和3.0V两点芯片计算增益校正系数和偏移校正系数存到非易失区域。每次上电读取后在ADC转换结果上做线性校正。这一步非常廉价但对最终精度的影响非常大。厂商有时会提供模拟工程师计算器一类的小工具可以帮你快速估算外部RC滤波器带宽、运放噪声、ADC有效位数等组合参数。我之前总觉得这种工具比较玩具但用下来发现对验证信号链整体设计很有价值。特别是在计算前端RC对ADC建立时间和噪声的折中时输入几个参数直接出曲线比手工翻手册算快得多。建议做模拟集成项目的工程师都下载一个装在电脑里配合自己的Excel误差预算表效率能提升不少。5. 实战案例用一个新平台重构电机电流环信号链5.1 信号链设计从采样电阻到ADC注入拿我最近做的三相永磁同步电机控制器来走一遍完整设计。硬件方案是三个低阻值合金采样电阻分别串在每一相下桥MOSFET的源极到地之间。三相电流信号经过一个小的RC低通滤波器进入MCU的三个PGA通道PGA增益设置为10再把放大后的信号送入三路同步采样ADC。为什么用PGA因为满载电流20A流过2mΩ采样电阻压降只有40mV对12位ADC来说参考电压3.3V时一个LSB是0.8mV40mV只占50个码分辨率不够。PGA增益10之后40mV变成400mV能占约500个码有效位数大幅提升噪声反而因为放大器的CMMR好而被抑制了。RC滤波器取值方面我用的是100Ω加1nF截止频率约1.6MHz。这个带宽远高于PWM斩波频率20kHz但是低于RF噪声频段能抑制一部分采样瞬间的共模毛刺。这个RC放在PGA之前可以降低来自源端的高频干扰外部的阻尼也避免PGA输入端的寄生振荡。5.2 配置思路与关键寄存器操作下面用伪代码描述配置流程实际寄存器名称因厂商而异但思路一致先把PGA配置为差分输入、增益10输入通道选中电机U相电流。配置ADC为同步采样模式选择三路PGA输出对应通道。设置ADC触发源为“PWM定时器周期匹配事件”保证每次PWM中心点精准触发。配置DMA为ADC结果寄存器到内存环形缓冲区的同步传输。设置比较器通道正端接PGA输出负端接DAC输出过流阈值电压。将比较器输出映射到PWM故障输入故障极性设为高有效故障响应设为PWM立即关断。我自己的代码里在PWM初始化之后还会主动写一次故障锁存测试寄存器做一次“软故障注入”确认硬件链路能够正确刹停PWM。这个测试对于安全相关场合非常关键可以当作开机自检的一部分。配置完成后主循环只需要周期性读取内存缓冲区里的三相电流数据运行Clarke变换和Park变换计算电压指令更新PWM占空比。整个控制周期做到了20kHz软件执行时间在8MHz主频下只占不到40%留给状态机和上位机通信的空间还有富余。5.3 PCB布局落地的几个细节PCB布局方面我在这版设计里特别注意了几点采样电阻到MCU模拟引脚的走线尽量短且采用差分走线两边保持等长减少环路面积。滤波电容的地端直接就近回到MCU的模拟地焊盘不能绕到数字地过孔再回来。PWM驱动部分的地线和模拟采样地的连接控制在MCU热焊盘附近单点避免大电流地弹串进采样参考点。VDDA走线从5V电源输入侧单独拉出通过1Ω电阻隔离VDD则单独从DC-DC输出端口取两者互不相干。这版板子回来后测出来的ADC噪声底比之前的外置方案还低在PWM打开运行后比静态时只多了约1.5LSB的峰峰值波动这个成绩在以前分立方案里很难做到。6. 选型建议什么时候升级、什么时候继续用分离方案6.1 集成方案与分离方案的边界新型MCU再怎么集成也不是通吃所有模拟应用。我习惯把项目分成几类来评估信号频率低、通道多、精度高比如多路温度、压力采集如果不需要极端采样率内部16位ADC加PGA加差分输入基本可以替代外部ADC。高频电力电子控制电机控制、数字电源需要同步采样、硬件故障保护、HRPWM新一代MCU的模拟外设和事件系统简直是量身定做。超高精度如果要求达到24位无失码级别、或需要极低噪声现阶段的内部Σ-Δ ADC虽然到了但板级参考源和布局限制下不一定比外部独立ADC方案更省心。超高速如果信号带宽在几十兆赫兹甚至上百兆赫兹MCU内部ADC根本无法解决还是需要外部高速转换器。另外如果产品现有方案已经量产模具都开好性能也满足指标那么也不建议单纯因为“新器件听起来厉害”就迁移。但是如果是新产品定义阶段我强烈建议把新一代MCU作为默认选项在项目早期就做一块小的信号链评估板。6.2 我建议的评估路径想从老平台迁移到新平台可以用一个小项目做验证而不是直接拿旗舰产品试错。我一般的评估路径是先看厂商的迁移文档和信号链参考设计确认PGA、比较器、ADC的映射关系和自己的应用匹配。申请一块开发板重点测三件事参考电压稳定性、ADC在运行状态下的有效位、比较器到PWM的故障保护延迟。用自己的传感器信号源连接开发板跑一遍采集、滤波、输出的完整流程对比和现有方案的实测数据。评估IDE和配置工具的学习成本。这个环节容易被低估新一代MCU的引脚和外设映射非常依赖自动化配置工具如果工具用不顺手开发效率会打折。工具链成熟度其实比芯片本身更能决定项目成败。我遇到过一款模拟资源很豪华的MCU但它的寄存器文档晦涩、工具链绑定严重最后团队还是换回了老平台。芯片选型要看整体生态而不只是硅片参数。我自己目前对新一代模拟数字集成MCU的态度是能选就选但不能无脑选。先做小验证、再做增量迁移用项目数据说话这才是最稳妥的升级路径。
返回列表