十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

数字电源控制器选型:dsPIC33EP GS系列DSC核心外设与实战详解

数字电源控制器选型:dsPIC33EP GS系列DSC核心外设与实战详解 做数字电源的工程师应该都有同感模拟环路调起来确实快一个运放加几个阻容网络就能把环路稳态调出来可一旦客户要求多路输出、动态调压、PMBus通信、故障记录、在线升级模拟方案就变成了一堆运放和电位器拼起来的意大利面牵一发而动全身。而数字电源的核心逻辑就是用一颗MCU或DSC来接管环路计算、保护判断和通信上报。问题在于普通MCU干这活总有点力不从心PWM分辨率不够导致输出纹波压不下去ADC采样和PWM动作不同步导致环路相位裕量莫名损失过流保护要等中断里几百条指令跑完才关断管子早就冒烟了。Microchip的dsPIC33EP GS系列就是专门针对这些痛点推出来的产品线做开关电源、PFC、DC-DC、逆变器的工程师选它比选通用MCU省心得多。这篇文章我结合自己用GS系列做数字电源控制器的实际经历从芯片架构、核心外设、环路调参、功率级布局到调试踩坑把这条产品线从头到尾捋一遍。想从模拟电源转数字方案的或者正在为电源项目选型MCU/DSC的认真看完应该能少走不少弯路。1. 为什么数字电源偏偏需要一颗专用的DSC1.1 数字环路真正的难点不在算法在外设很多人以为数字电源难在PID算法其实PID本身枯燥得很几百行C代码就能写完。真正决定数字电源成败的是外面那圈模拟世界和数字世界之间的翻译官——PWM、ADC、比较器、故障保护链路。拿PWM举例模拟电源用358或者比较器直接驱动占空比是连续可调的数字电源里占空比是离散的PWM分辨率不够输出电压就只能在某个值附近来回跳这就是纹波来源之一。在200kHz开关频率下如果PWM时钟只有100MHz占空比调节步进是10ns对应一个周期5微秒你能调的最小占空比增量就是0.2%。对很多高精度电源来说这个粒度太大了。GS系列的做法是把PWM时钟用PLL倍频到480MHz量级让PWM分辨率做到1.04ns。这个数字看起来不起眼算一笔账就明白了同样是100kHz开关频率周期10微秒1.04ns分辨率意味着占空比有9600多个可调档位换算成有效位数大概13.2bit。也就是说GS系列在100kHz下能把占空比精调到13位DAC的等效水平这在模拟方案里得付出很大代价才能实现。1.2 GS系列在产品线里的定位和型号地图Microchip的16位DSC产品线很庞大dsPIC33EP后面跟着不同的后缀每个后缀对应不同的应用侧重。比如MC系列侧重电机控制外设偏向编码器接口和互补PWM而GS系列则把资源集中在数字电源最需要的几个地方高分辨率PWM、高速ADC、快速比较器、灵活的故障关断逻辑。GS系列的典型型号包括型号封装Flash典型应用场景dsPIC33EP32GS20228脚32KB小型反激、LED驱动、辅助电源dsPIC33EP64GS50228脚64KBDC-DC模块、电池充电器dsPIC33EP64GS50664脚64KBPFCDC-DC、通讯电源dsPIC33EP128GS70664脚128KB服务器电源、快充充电器dsPIC33EP256GS80664脚256KB大功率PFCLLC、UPS选型逻辑很直接Flash大小决定你能跑多复杂的控制算法和通信协议栈封装脚下的PWM输出数量决定你能驱动几路桥臂。28脚小封装适合单路Buck、Boost、反激64脚以上的型号通常能满足PFCLLC这种双级架构再往上走还有100脚的大资源型号适合多路并联电源或者逆变器系统。1.3 70MIPS的DSP内核到底能干什么GS系列主频最高70MIPS指令字长24位数据16位。这个架构来自Microchip一贯的改良哈佛结构带硬件乘法器和累加器单周期可完成一次乘加运算。做电源环路时一个2P2Z补偿器的差分方程要算b0x[n] b1x[n-1] b2x[n-2] - a1y[n-1] - a2*y[n-2]每次乘法都是单周期的这就保证了在200kHz甚至500kHz的控制频率下环路计算有充裕的时间余量。我实测过一个典型场景500kHz控制频率下每个控制周期只有2微秒ADC采集加环路计算再加PWM更新一共消耗大概400个指令周期折合约5.7微秒等等这里要算清楚——70MIPS意味着每微秒能执行70条指令不对70MIPS是每秒七千万条指令也就是每微秒70条指令。400个指令周期约5.7微秒在500kHz下已经超了。所以实际做500kHz控制频率时要用更精简的补偿器或者牺牲一些采样点。但GS系列实际跑200kHz环路时很轻松整个中断服务程序在1.5微秒内可以跑完剩下的时间还能干点通信和监控的活。2. 核心外设深度拆解数字电源环路的四件套2.1 高分辨率PWM1.04ns是怎么挤出来的GS系列的PWM模块是整颗芯片的灵魂。它的主时钟不是直接用系统时钟而是通过片上PLL倍频出一个最高480MHz的高频时钟再用这个高频时钟作为PWM计数时钟的基准配合内部的精细延迟线最终把PWM边沿分辨率做到1.04ns。这个方案聪明的地方在于它不需要把整个CPU主频提上去而是只给PWM模块单独供一套高频时钟。功耗和EMI都在可控范围但PWM精度却上了好几个台阶。实际配置PWM时有几个参数必须搞清楚PWM频率由外围时钟分频决定。占空比寄存器写入的就是以1.04ns为单位的边沿位置。死区时间独立寄存器配置支持上升沿延时和下降沿延时分别设置。周期更新方式推荐在PWM周期起始点一次性更新所有寄存器避免中途更新导致波形不对称。我刚用GS系列时踩过一个大坑寄存器更新方式没选对默认是把更新事件放在周期结束导致占空比变化时刻和ADC采样时刻永远差半个周期环路相位裕量被白白吃掉了2到3度。后面把更新方式改成周期起始点更新并把ADC触发同步到更新点波形立刻对称了。2.2 3.5Msps的ADC与智能触发链数字电源环路闭不上往往不是算法不行而是ADC采样点踩得不对。开关电源里电流电压波形每几百纳秒就剧烈变化一次你随便采一个点拿去做平均采到的可能是开关尖峰算出来的占空比自然是错的。GS系列的ADC是12位、最高3.5Msps转换一个通道大约286纳秒。它和PWM模块之间有一条专用的硬件触发链路PWM模块可以在任意时刻产生触发信号直接启动ADC转换不需要软件干预。这样就能把采样点精确放在电感电流的波峰、波谷或者开关管导通的中间时刻。我习惯把采样点放在中心对齐PWM的波峰位置也就是高边管导通一半的时刻。这个时候开关噪声基本平息电感电流也处在平均电流附近采回来的信号最干净。配合ADC的多个采样保持通道可以做到几乎同一时刻锁存输出电压和电感电流消除了采样时间差带来的相位误差。2.3 高速比较器硬件保护不靠软件轮询做过电源的都知道过流保护的速度就是管子的寿命。如果靠ADC采样后跑到中断里判断再关PWM就算一切顺利也需要一两微秒而一个过流脉冲在几百纳秒内就能把MOSFET的SOA打穿。GS系列集成最多4路高速模拟比较器典型响应时间在纳秒级。比较器输出的结果可以直接连接到PWM模块的电流限制输入端一旦检测到过流PWM在同一个开关周期内就能被硬件拉低实现逐周期限流。这个路径完全绕开CPU即使芯片正在执行别的任务保护照样生效。我做的第一版PFC样机就靠这个功能救了两次板子一次是开机瞬间继电器吸合延时不够母线电容充电电流直接把采样电阻上的压降顶过了比较器阈值另一次是MOSFET驱动信号受干扰误开通硬件比较器在几百纳秒内把PWM关死才没造成桥臂直通。要是靠软件处理这两次可能都是炸管收场。2.4 运放、DAC和CLC把周边电路塞进芯片里GS系列除了ADC和比较器还集成了一定数量的运放和DAC。这些片上模拟外设可以直接用来做电流采样放大、电压跟随、偏置电平设置省掉外部运放芯片和相关阻容。板上少几个器件调试的时候少查几个问题量产的时候少几个失效点价值是实打实的。另外还有个容易被忽视的外设——CLC可配置逻辑单元。它能把比较器输出、PWM故障信号、外部引脚电平做任意组合逻辑产生一个综合故障信号去关断PWM。比如我想实现过流或者过温或者外部急停任一有效都立刻封锁PWM并置位故障标志以前要写中断服务程序做逻辑判断现在用CLC在硬件层面就能完成延迟只有几个门电路的时间。3. 从选型到调参实际项目的落地流程3.1 典型拓扑的资源映射拿到一个新项目先别急着写代码把拓扑需要的PWM通道数、ADC通道数、比较器数量列个清单再对着GS系列的型号表选芯片。以最常见的PFCLLC两级架构为例PFC级需要一个高频PWM驱动Boost开关管一个ADC通道采样交流输入电压一个ADC通道采样升压电感电流一个ADC通道采样母线电压一个比较器做逐周期过流保护。LLC级需要两路互补PWM驱动半桥或全桥两路ADC采样谐振电流和输出电压一路比较器做原边过流保护。通信和监控至少一个UART最好带CAN。这些需求叠加起来dsPIC33EP64GS506这个级别就很合适64脚封装有足够多的PWM输出和ADC输入Flash也够装下两套控制算法再加PMBus协议栈。如果只要做一个小功率反激适配器dsPIC33EP32GS202就够省下的成本是实打实的。3.2 工具链MPLAB X、XC16、MCC、DCDT一整套GS系列开发离不开Microchip自己的工具链流程已经比较完善第一步装MPLAB X IDE这是统一开发环境。 第二步装XC16编译器C语言编译16位DSC代码。 第三步装MPLAB Code Configurator插件用图形界面配置PWM、ADC、比较器的寄存器自动生成初始化代码。 第四步针对数字电源的路波器参数用Microchip的Digital Compensator Design ToolDCDT设计补偿器它会根据你输入的控制对象模型和期望的穿越频率、相位裕量直接生成2P2Z补偿器的系数。MCC帮我把最枯燥的寄存器初始化全部自动化了。PWM周期、死区、ADC触发源、比较器阈值这些配置点几下鼠标就能生成基本不会出现手册翻半天发现少配了一个控制位的尴尬。DCDT生成的系数直接填进补偿器的差分方程上电就能跑起来。3.3 2P2Z补偿器的设计与移植数字电源里最常用的补偿器是2P2Z也就是两个极点两个零点对应模拟电路里的Type-II或Type-III补偿器。它的差分方程形式是y[n] b0*x[n] b1*x[n-1] b2*x[n-2] - a1*y[n-1] - a2*y[n-2]其中x是误差采样值y是输出占空比修正量。系数b0、b1、b2、a1、a2就是DCDT或者手工计算出来的。以一台200kHz的Buck变换器为例LC滤波器双极点大概在5kHzESR零点在30kHz控制目标穿越频率定在20kHz相位裕量要求50度。DCDT会算出一组系数用这组系数做闭环实际测得的相位裕量可能会比设计值低几度原因是数字控制的固有延迟——零阶保持和ADC采样延迟。所以要留一些设计余量我一般把目标相位裕量定在55到60度实测下来最终在45到50度刚好够用。移植到代码里时有个细节补偿器里的状态变量x[n-1]、x[n-2]、y[n-1]、y[n-2]必须用全局变量或者静态变量保存中断服务程序里每周期调用一次补偿函数调用完更新状态。变量类型用有符号整数还是浮点要提前想清楚。GS系列没有硬件浮点单元浮点运算全靠软件模拟会吃掉大量指令周期。我实际用的是定点数把系数乘上一个比例因子转成整数计算完再移位还原速度和精度都能接受。3.4 采样点、死区、PWM频率的配置计算这部分全是数字但每个数字背后都有物理含义。PWM频率对Buck这类电流连续模式拓扑一般定在100kHz到300kHz之间。频率越高电感和电容可以做得越小但开关损耗和驱动损耗同步上升。GS系列在200kHz下效率曲线最平我一般默认从200kHz起步。死区时间半桥和全桥必须防止上下管同时导通。死区时间太小关断慢的管子会和开通快的管子瞬间重叠造成桥臂直通死区太大续流期间体二极管损耗增大。对典型的高压MOSFET我选120纳秒到150纳秒。GS系列的死区配置寄存器里可以直接设置上升沿延时和下降沿延时两个方向要分开设因为上下管的关断延迟往往不一样。ADC采样点在中心对齐PWM模式下把ADC触发点设在PWM周期的中间时刻也就是上下管各导通一半的位置。这个点电感电流纹波最大但开关噪声最小采到的电流就是负载电流对Buck而言。配置流程是在PWM模块的触发比较器里写入周期一半对应的值使能触发输出再在ADC模块里选择该触发源作为转换启动条件。4. 功率级的那些坑驱动、噪声与布局4.1 MOS管GS之间加电容到底图什么这是电源圈里一个高频问题很多新手不理解为什么有人会在MOSFET的栅源之间并一颗几纳法的电容。搞清楚这个问题对用好GS系列这种高dI/dt数字电源特别重要。MOSFET在硬开关关断瞬间漏源电压Vds快速上升dv/dt可能高达每纳秒几十伏。这个变化会通过米勒电容Cgd向栅极注入电流。如果栅极驱动回路的阻抗不够低或者驱动芯片输出处于高阻态注入的电流就会在栅极电阻和内部栅极阻抗上产生电压把Vgs顶起来。一旦Vgs超过阈值电压Vth本应关断的管子就又被误开通了上下管直通轻则波形异常重则炸管。在GS之间并联一颗电容Cgs相当于给米勒电流提供了一条低阻抗的泄放路径让注入电流直接在栅源之间被吸收Vgs被钳在很低的电平误开通风险大幅降低。此外Rg和Cgs构成一个RC网络能主动控制栅极电压的上升斜率进而控制di/dt和dv/dt对降低EMI也有帮助。但天下没有免费的午餐。Cgs越大开关过程中栅极电荷需求越大等效驱动电流不变的话开关时间变长开关损耗上升。所以这个电容不是越大越好一般来说在1nF到10nF之间选取具体看你用的功率管的Ciss和开关频率。我常用的取值是2.2nF到4.7nF配合10欧姆左右的栅极电阻实测对EMI有2到3dB的改善而效率损失控制在0.3%以内。如果追求极致的开关速度可以不加这个电容改用负压关断或者有源米勒钳位电路。4.2 电流采样与地弹噪声处理GS系列虽然集成运放但采样电路本身还是得自己设计。最容易出问题的就是电流采样走线和功率地之间的噪声耦合。高频开关回路里的di/dt极大任何一小段走线电感都会产生严重的压降。我见过一个典型案例采样电阻的Kelvin走线只比功率走线长了不到3毫米示波器上就看到50毫伏级别的开关毛刺叠加在采样信号上过流比较器阈值设得稍低就误触发。正确的做法是采样电阻用四端开尔文接法采样线从电阻本体两端单独引出不走功率电流路径并且两条采样线尽量平行贴近走减少拾取回路面积。如果采样信号是高压侧的浮地信号还需要差分输入或者隔离放大器。GS系列片上运放可以直接用来做差动放大但供电电压和共模范围要仔细核对别把运放输入端打到超出允许范围。4.3 故障保护链路的硬件优先级数字电源的保护不能只有一个层次。GS系列提供了比较器输出、PWM故障引脚、电流限制输入、软件触发等多种故障源正确做法是把它们按优先级组织起来第一优先级硬件电流限制比较器直接闭锁PWM逐周期限流不经过CPU。第二优先级PWM故障引脚FLTA/FLTB接外部过温、过压信号一旦触发立刻封锁全部PWM输出直到软件显式解除。第三优先级ADC采样到软件可识别的过流、过压中断里做平均处理后关断。第四优先级通信指令关断比如PMBus里收到关机命令。这套层次化保护的好处是越紧急的故障越靠硬件实现越靠软件处理的故障越复杂但越智能。实际调试时可以用逻辑分析仪同时抓PWM输出、比较器输出和故障标志位能清楚看到保护链路的实际响应时间。5. 常见问题与调试经验实录5.1 PWM输出神秘消失的排查顺序几乎每个刚上手GS系列的人都会遇到PWM不输出的问题。我的排查顺序固定下来之后省了非常多时间一看配置位。GS系列上电默认用内部FRC时钟如果配置字里没选对时钟源PLL锁不上PWM模块可能根本没有时钟输入。二看故障状态。PWM模块的故障锁定寄存器FAULT_CON里能看到当前是否有故障源生效。很多时候电路板上一个悬空的FLTA引脚感应到噪声就把PWM锁死了而LED看着像正常运行。三看输出使能。GS系列的PWM输出引脚可能有多个复用功能输出引脚配置成普通IO了PWM当然出不来。四看死区。如果互补PWM上下管死区配置反了示波器上看就是两个管子有一段时间同时导通功耗异常。5.2 ADC采样值跳变与抗混叠处理ADC读数跳变的根源大多是采样时刻落在开关噪声区或者输入信号本身超出了ADC的量程。GS系列的ADC量程可以通过参考电压配置调整但重要的是在硬件上把采样信号带宽限制住。我习惯在ADC输入端对地并联一个几十皮法的小电容把采样带宽压到几十MHz以内既能滤掉一部分采样开关瞬间的回踢噪声又不会明显影响信号建立时间。这层电容不可太大否则信号建立时间超过ADC采样时间采到的是没站稳的电压读数反而不准。软件侧再加一道移动平均或者中值滤波。在200kHz控制频率下对采样值做4次平均只多花几十个指令周期效果非常明显。但要注意滤波会引入额外延迟对环路稳定性有影响所以平均次数不宜过多2到4次比较合适。5.3 开发环境启动异常与工程文件折腾新装MPLAB X之后偶尔会遇到启动失败或者工程打不开的情况常见原因包括Java运行时版本不匹配、插件冲突、工程文件里引用的设备支持包版本不对。GS系列的设备支持包需要单独安装装完MPLAB X之后第一件事是检查Packs里有没有对应的支持包没有的话编译时会报找不到器件的错误。XC16编译器也一样老版本可能不支持较新的GS器件头文件导致外设寄存器定义不完整。建议直接用MPLAB X自带的插件管理器把XC16更新到最新。还有一个经验是从旧版本工程迁移时最好让MCC重新生成一遍配置直接复制旧代码经常会遇到寄存器位定义变化导致编译不过的情况。调试器连接偶尔也会翻车最常见的是PICKit4或者ICD4固件版本过低连接目标板时提示需要升级。这时候把目标板供电断开单独升级调试器固件再重新连接基本就能解决。5.4 环路不稳定时的三板斧数字电源上电后啸叫、输出振荡别急着改代码。我的调试顺序是第一板斧查采样相位。用示波器同时看电感电流波形和ADC触发信号确认采样点确实落在电流波形的稳定区。采样点踩在开关边沿上环路再怎么调也是白搭。第二板斧降环路增益。把补偿器的比例系数缩小一半看系统是否趋于稳定。如果降增益就稳定说明相位裕量不足问题出在补偿器的零点极点配置上回DCDT重新设计。第三板斧加数字延迟补偿。数字环路天生比模拟环路多一个周期的采样-计算-更新延迟如果开关频率较高这个延迟吃掉大量相位裕量。可以在补偿器里故意加入一个相位超前环节或者把采样点从波峰移到峰值前的上升沿损失一点精度换取相位余量。有一次我调一个300kHz的同步Buck怎么调都有一丝振荡最后发现是MCC自动生成的ADC配置里转换结果读取时机不对每次中断里读到的寄存器是上一周期的旧数据相当于控制回路多了一个整周期的纯延迟。把读取时机改到转换完成标志置位之后立即读取问题立刻消失。这种问题看代码很难看出来接上逻辑分析仪对比PWM更新时刻和ADC转换完成时刻才抓得到。6. 写在最后的一点个人体会用GS系列做了几个项目之后我的感觉是这颗芯片的定位非常清晰它就是给认真做数字电源的人准备的。它的外设配置思路、保护链路设计、工具链配套都是围绕电源控制这个核心场景展开的不存在通用MCU那种什么都能干但什么都不精的问题。也正因为专业它对工程师的理解深度要求更高。如果你不清楚采样点为什么要放在波峰不理解米勒电容造成的误开通机理不熟悉补偿器的零极点到底在什么频率再好的芯片也救不了你的电源。反过来把这些基础搞透了GS系列能让你把脑子里设想的控制策略快速、精准、可靠地落到实处这种掌控感是模拟方案给不了的。最后再分享一个小技巧GS系列开发时把MCC生成的初始化代码和自研的环路代码严格分开存放每次改动外设配置都用MCC重新生成然后手动合并。别偷懒直接改生成代码否则下次重新生成时你的手工修改会被全部覆盖这种教训我吃过不止一次。
返回列表