ARTICLE DETAIL

资讯详情

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

PWM分辨率和ADC速度,为什么是DSC的两条命脉

PWM分辨率和ADC速度,为什么是DSC的两条命脉 以前调一个永磁同步电机驱动电流环一上PI电机转速在某个区间就开始“啸叫”。查了很久最后用示波器同时抓PWM波形和ADC采样点才找到病根20kHz的PWM周期里ADC触发时刻正好落在开关管关断造成的振铃区间每个周期采到的都是含噪声的电流信号电流环自然稳不住。后来换了支持PWM事件触发ADC的数字信号控制器把采样窗口挪到PWM计数周期中心再配合高分辨率PWM输出一套FOC控制才算真正跑顺。这件事让我对“PWM分辨率和ADC速度”这两个指标有了完全不一样的认知。它们不是数据手册里一行冷冰冰的参数而是实时控制系统能不能收敛、能不能稳定的地基。Microchip这几年一直在增强数字信号控制器DSC产品线公开资料里反复强调的就是业界领先的PWM分辨率和ADC速度。这篇内容我就结合自己在电机控制、数字电源项目里的实际经验聊聊这两个指标为什么会成为DSC产品线的核心卖点以及从普通MCU迁移到DSC时有哪些值得关注的细节。如果你正在做无刷电机FOC、数字开关电源、PFC、逆变器这类项目或者正准备评估“DSC和普通MCU到底差在哪”这篇文章应该能给你一些参考。1. PWM分辨率和ADC速度为什么是实时控制的两条命脉1.1 一个开关周期里整个控制环只有那么点时间我习惯先算一笔时间账。以20kHz的PWM为例一个完整周期是50微秒。在这50微秒里控制器至少要完成三件事ADC把相电流和母线电压采出来CPU完成坐标变换和PID计算最后把新的占空比更新到PWM输出上。如果ADC转换速度只有1Msps单次转换大约1微秒看起来只占整个周期的2%问题不大。但实际采样往往不止一路三相电流加母线电压至少4个通道串行转换就是4微秒以上再算上信号稳定时间、DMA搬运、CPU读取开销就相当可观了。更隐蔽的问题是抖动。CPU忙的时候中断响应可能晚几十纳秒到几百纳秒。对控制算法来说采样时刻的抖动会直接变成电流谐波和转速波动很多时候怎么调PI都调不平根源其实藏在这里。这就是PWM分辨率和ADC速度的重要性所在PWM分辨率决定占空比能放多细ADC速度决定电流电压信号能采多快。两者一起决定了整个数字化控制环路的底噪和延迟。Microchip DSC产品线把这两个指标反复加强本质上是在抬高实时控制系统最底层的地基。1.2 DSC和普通MCU的区别不在于“跑分”而在于“外设协同”很多刚接触数字信号控制器的朋友会问DSC不也是单片机吗和STM32、GD32这类通用MCU有什么本质差别从内核看DSC确实可以理解成MCU加上DSP指令集。一个典型的DSC内核往往要能高效执行乘法累加、饱和运算、移位这类数字信号处理里频繁出现的操作这对FOC算法、PID控制器、滤波器这类循环计算很友好。但真正让DSC适合控制类项目的其实是外设的组织方式。普通MCU的PWM、ADC、比较器通常是相对独立的模块要靠工程师在中断里“软连接”起来。PWM到点触发定时器中断中断里启动ADCADC转换完又一个中断再读数据、算算法、写PWM寄存器。链路很长时序抖动大。DSC则往往把这些外设设计成一条硬件触发链PWM事件可以直接触发ADC采样ADC转换完成可以自动搬运数据比较器过流输出可以绕过CPU直接封锁PWM。环节普通MCU的常见做法DSC的设计倾向PWM触发ADC定时器中断里置位ADC启动标志PWM事件直接触发硬件ADC故障保护外部中断软件封锁PWM比较器/故障引脚硬件封锁占空比更新软件随时写寄存器影子寄存器周期边界同步这个“硬件协同”的特性比单纯提高主频更能保证控制时序的确定性。Microchip DSC产品线这几年重点强化PWM分辨率和ADC速度本质也是把这条硬件闭环的极限往上抬。1.3 谁真正需要这两个指标我知道有人会问我不做电机控制也不做数字电源这文章和我有关系吗直接说结论如果项目里只有一个普通PWM输出加一个简易ADC读值通用MCU完全够用DSC对你来说就是性能过剩。真正卡在这两个指标上的是下面这几种典型应用无刷电机和永磁同步电机的FOC控制开关频率普遍在16kHz到40kHz要求PWM占空比细、ADC采样窗口准否则低速转矩波动和高速运行噪声都很难压。数字开关电源比如LLC、移相全桥、单相/三相PFC控制环路穿越频率高PWM死区精度和ADC采样时刻准确性直接影响输出纹波和效率。UPS、储能逆变器、车载充电机这些系统往往同时要求高开关频率和高环路带宽对PWM分辨率和ADC速度的组合要求最苛刻。这些场景的共同点在于系统的性能天花板一半写在算法里另一半写在PWM和ADC这对外设组合上。2. 高分辨率PWM不是纸面参数占空比精度和死区细节才是真功夫2.1 占空比差一个LSB电机转还是不转电源稳还是不稳先解释一下为什么“高分辨率PWM”会被反复强调。PWM分辨率的概念简单说就是占空比最小能调多少。计算公式可以写成PWM有效分辨率位 log2(PWM外设时钟频率 / PWM开关频率)举个例子PWM外设时钟100MHz开关频率20kHz两者相除得到5000取log2之后大约是12.3位。也就是说理论最大也就是12位出头的分辨率。如果你用的芯片PWM外设时钟和定时器时钟相同又没有额外倍频那12位基本就是极限。可很多项目不止跑20kHz一旦要上到50kHz、100kHz开关频率同样时钟下分辨率直接掉到11位甚至10位。10位分辨率是什么水平占空比最小步进约0.1%。放到电机上低速时母线电压几十伏0.1%的占空比步进可能对应几十毫伏的相电压变化反映到转矩上就是周期性波动。放到电源上就是输出电压纹波变大轻载时甚至出现间歇式跳动。Microchip DSC走的是提升PWM模块内部时钟精度的路线用延迟线之类的方法把PWM的LSB压到亚纳秒级别从而在高开关频率下依然保留很高的占空比细度。这也是为什么资料里总强调“业界领先的PWM分辨率”。2.2 半桥和全桥电路里死区才是真正的硬指标占空比分辨率只是高分辨率PWM的一半另一半是死区。凡是半桥、全桥、三相桥这种带互补输出的拓扑上下管都不能同时导通否则就是直通炸机。死区时间就是上下管切换时预留的“共同关闭”时间。死区设大了波形失真加大损耗增加设小了直通风险上升。这里有个容易被忽视的点高分辨率PWM如果不能提供高分辨率的死区时间步进占空比再精细也白搭。比如PWM的LSB已经是几百皮秒但死区最小步进还是几十纳秒那轻载时的死区效应就没法精细补偿。我在做半桥LLC时遇到过类似问题死区从200ns调到160ns整机效率提升了大约0.3%如果没有纳秒级的死区步进这种优化根本落不下去。另外提醒一句热词里有人搜“半桥驱动PWM占空比100%”这个操作在常规互补驱动里一定要谨慎。真正需要输出100%占空比时通常要把互补管的关断逻辑理清或者用PWM模块提供的“强制输出”功能不能简单把占空比寄存器设满否则上下管逻辑一旦没处理好就是直通烧管子。2.3 故障保护一定要走硬件链路别只依赖中断接下来聊一个关键时刻能救板子的功能PWM故障保护。很多做过电机驱动的工程师都有这种体会程序里过流保护写得再全真正炸管那一刻往往不是软件逻辑不够好而是中断响应本身就要几个微秒强电电路早就过热了。DSC的PWM模块通常有专门的故障输入引脚。外部比较器检测到过流信号后直接把这个引脚拉低PWM模块在硬件层面立即封锁输出。这个过程可以做到几十纳秒到几百纳秒级比任何软件中断都快。我建议所有做电机控制、数字电源的朋友设计时把过流、过压、过温这类信号优先接到PWM模块的故障输入上而不是只接一个普通GPIO外部中断。硬件保护负责“止血”CPU中断负责“善后”各司其职。Microchip这类面向工业控制的DSC芯片在PWM故障保护功能上做得相当完整包括故障优先级、自动恢复、锁定模式等值得好好利用。2.4 影子寄存器改占空比也要讲时机最后说一个很多人容易忽视的细节PWM占空比更新时机。如果程序在任意时刻直接写PWM比较寄存器占空比可能在周期中间发生跳变。对功率变换器来说周期中间的占空比突跳会造成波形不对称严重时会让变压器偏磁或者让电机电流产生额外谐波。正确做法是使用影子寄存器。平时把更新的值写到影子寄存器里PWM模块会在设定的时刻通常是周期边界统一把影子值搬到实际比较寄存器这样每个PWM周期都保持完整、对称。DSC的PWM模块对这个机制支持得比较完整也支持在更新前重新装载死区时间、周期值等适合做动态变频或突发模式。实际调试FOC时我一般会在DMA传输完成中断里先算好新的占空比写到影子寄存器然后由硬件在下一个PWM周期边界统一生效。这样计算时间稍微抖动一下也不影响输出波形质量。3. ADC速度上去了采样链路也得跟着捋顺3.1 转换时间只是链条上的一环很多人选型只看ADC的Msps觉得“1Msps够快了”“3.5Msps肯定够吧”。但真实采样链路的延迟远不止转换时间一项。一次完整的模拟信号数字化大致要经过这么几个阶段外部信号源的输出阻抗对采样电容充电采样时间、SAR逐次逼近转换、转换结果从ADC寄存器搬到存储DMA搬运、CPU读取数据参与计算。每一个环节都有可能成为瓶颈。采样时间尤其关键。ADC内部采样电容容量是固定的大致需要满足“采样时间大于信号源阻抗乘以采样电容再乘以若干倍”这个关系。如果信号源输出阻抗很高采样时间又设得太短采到的电压就不是真实信号而是电容没充到位的值。很多人抱怨“ADC读数偏低”“通道间串扰大”排查到最后往往是采样时间不足。所以DSC把ADC速度做上去不只是转换速度一个点还要同时支持更灵活的采样时间配置、多路同时采样保持等功能才算真正做到位。比如有些DSC带双ADC内核支持两路信号在同一时刻采样这对三相电流同步采样非常关键。3.2 多通道扫描DMA老套路里还是有门道“ADC多通道扫描循环采样DMA”是嵌入式里经典的操作了。原理不复杂ADC按顺序把配置好的多个通道转一遍每次转换完成DMA自动把结果搬到内存数组循环往复。CPU不需要每次进中断读数据只需要在DMA半传输或传输完成中断里批量处理。但实际项目里要留心几个地方通道转换顺序会影响结果质量。把高阻抗信号和低阻抗信号排在一起前一个通道的残压会通过采样电容串到后一个通道必须给足通道稳定时间。DMA缓冲区的双缓冲设计。一组在“采”一组在“算”避免CPU读数组时恰好被DMA覆盖。过采样平均。如果ADC本身速度够快可以用软件过采样把多位噪声平均掉提升有效位数。代价是吞吐量线性下降但很多中低速控制场景完全值得。之前用热词搜“stm32 adc多通道扫描循环采样dma”的读者应该不少这套玩法在DSC上同样适用只是寄存器命名和触发源配置有差异。关键还是要理解数据流动的方向不要只抄初始化代码。3.3 ADC定时器触发在正确的时刻采比采得快更重要这部分我想多说几句因为太多人在这个坑里吃过亏。PWM开关管的开关动作会带来剧烈的电压电流跳变尤其是续流二极管反向恢复的瞬间振铃噪声可以持续几百纳秒甚至几微米。如果ADC在噪声窗口里采样采到的电流就是“毛刺电流”控制算法再精准也救不回来。正确思路反而是“精准地慢”一点用PWM模块产生一个延迟事件把ADC触发点挪到开关死区结束后、信号稳定下来的区间。比如中心对齐PWM里通常选在周期中心计数顶点或底点触发ADC这时上下管都处于确定的开关状态相电压没有高频切换采样窗口最干净。这也是我开头那个项目案例的关键。之前用通用MCU不得不靠定时器中断里手动启动ADC中断抖动很大换到支持PWM直接触发ADC的DSC后采样点被硬件锁定在固定相位电流波形肉眼可见地变干净。ADC速度高是一个优势但只有在“采对时刻”的前提下才有意义。3.4 注入组给突发情况准备的快速通道不少工程师不太用ADC注入组其实这个机制在控制类项目里很好用。以常见的带规则组和注入组的ADC为例规则组适合周期性扫描一批通道用DMA搬运注入组则像一条“插队通道”可以由外部事件触发在规则组转换过程中插入一次或多次转换结果存放在独立的寄存器里。用在哪里比如过流保护触发瞬间需要马上采样电压或电流做判断但规则组可能正在转换其他通道。如果等规则组跑完才读数据可能错过故障样本。把快速电流通道配置成注入模式由硬件事件触发就能在几微秒内拿到一次“插队”的结果同时不打断规则组的正常工作。热词里有人搜“ADC中断注入模式采集范例”实际应用场景大多就是这类。注意注入组的结果寄存器是独立的优先级是“注入组打断规则组”还是“等规则组完成本次序列再注入”不同芯片有差异配置前先看数据手册的事件优先级说明。3.5 别只看位数信噪比、有效位数和电源纹波才是真相最后聊一个容易被数据手册误导的点ADC位数。12位ADC标称很常见但在实际板卡上如果模拟电源纹波大、参考电压不稳、PCB布局差真实有效位数可能只有10位甚至更低。芯片内部校准时序、前端运放噪声、地的处理都会吞掉分辨率。DSC这类面向工业控制的芯片通常会在SAR ADC里做自校准包括失调校准、增益校准有些还会提供前台校准流程。热词里“SAR ADC模拟前台校准”就是这个意思——在初始化阶段通过内部自测修正增益和偏置误差让转换结果更接近真实值。项目量产前建议把这个校准流程做成出厂初始化的一部分能显著降低批次间的精度差异。另外“20位ADC需要电源精度”这个思路不限于20位普通12位/16位ADC同样成立。模拟电源纹波过大ADC参考电压跟着抖转换结果的低位基本就是噪声。我通常会在模拟电源入口加一级LC滤波并让ADC参考电压使用独立的参考源或低噪声LDO效果立竿见影。这个习惯从做数据采集板开始一直保持到现在每次都能省掉很多调试时间。4. 用DSC把PWM、ADC、事件链捏成一个闭环是一种什么体验4.1 从“CPU喂数据”到“硬件自动跟
返回列表