深入解析ePWM数字比较子模块:事件滤波与谷底切换硬件实现

📅 发布时间:2026/7/22 18:02:49
深入解析ePWM数字比较子模块:事件滤波与谷底切换硬件实现 1. 数字比较子模块从信号到事件的桥梁在搞电机驱动或者开关电源的兄弟们都清楚ePWM模块是我们手里的王牌。但很多时候我们只用了它最基础的定时和比较功能对于那个藏在深处的“数字比较子模块”Digital Compare Submodule可能只是配置一下跳闸保护就完事了。今天我就结合手册里那些“硬核”的框图把这个模块掰开揉碎了讲特别是它的事件过滤和谷底切换Valley Switching功能。这玩意儿用好了你的系统抗干扰能力和效率能直接上一个台阶尤其是在LLC、图腾柱PFC这些对开关时序要求苛刻的拓扑里。简单来说数字比较子模块就是一个“事件加工厂”。它的原料是来自外部的“粗信号”比如模拟比较器CMPSS的输出或者直接来自GPIO的Trip ZoneTZ触发信号。这些信号可能毛刺多、时序乱直接用来关断MOSFET或者触发ADC搞不好就是一场灾难。这个子模块的作用就是把这些原始信号进行“精加工”——选择、滤波、延迟最终生产出四种高质量的“事件产品”强制跳闸Force、中断Interrupt、ADC启动转换SOC和同步信号Sync。理解了这个“加工流水线”你就能真正驾驭它而不是对着寄存器位域瞎猜。2. 核心原理事件生成、滤波与分发的全链路解析2.1 事件生成从输入引脚到逻辑信号整个流程的起点是信号选择。手册里提到的DCTRIPSEL寄存器是关键。它就像一个多路选择器决定DCAH/L和DCBH/L这对信号到底听谁的。来源可以是三个Trip Zone输入TZ1, TZ2, TZ3或者多个CMPSS模块的输出。这里有个非常重要的细节TZ信号在作为数字比较事件源时和它作为异步紧急关断源时性质是不同的。当TZ被DCTRIPSEL选为事件源时它被当作一个普通的数字输入你可以通过配置将其定义为高电平有效或低电平有效。它的状态变化会被同步到系统时钟TBCLK域进行处理。而作为异步关断源时TZ信号是直接、立即异步作用于输出驱动电路的优先级最高用于应对短路等致命故障。手册里那个“minimum of 3 ˟ TBCLK sync pulse width”的注释指的就是作为事件源时为了确保信号能被同步逻辑稳定捕获其有效脉冲宽度必须大于3个TBCLK周期否则锁存器CBC或OST可能锁不住这个跳闸条件。这是硬件同步机制带来的约束在布线和噪声抑制时要特别注意。选定的DCAH/L和DCBH/L信号再经过TZDCSEL寄存器的“鉴定”就生成了我们核心的DCAEVT1/2和DCBEVT1/2事件。TZDCSEL决定了什么样的信号电平组合高/低被视为一个有效的事件。至此原始的外部物理信号就被转化成了内部统一的逻辑事件。2.2 事件滤波消除噪声的“时间窗口”生成了事件如果直接拿去用在嘈杂的功率环境里大概率会误动作。所以事件滤波Event Filtering环节必不可少它主要通过**消隐窗口Blanking Window**来实现。你可以把这个消隐窗口想象成一个“屏蔽罩”。在PWM周期的特定时间段内这个罩子落下所有来自指定事件源DCAEVT1/2或DCBEVT1/2的信号都会被无视。这个设计主要是为了避开开关动作本身带来的噪声。比如在MOSFET开通或关断的瞬间电流电压剧烈变化很容易在电流采样信号上产生尖峰如果此时比较器翻转就会产生虚假的事件。配置这个窗口需要三个寄存器协同工作DCFCTL[PULSESEL]决定窗口的“锚点”。窗口可以挂在CTRPRD周期匹配点、CTR0计数器零点或者两者都挂上。这让你能针对周期内不同噪声区域设置保护。DCFOFFSET偏移量。定义了从“锚点”事件如CTRPRD之后延迟多少个TBCLK周期才开始打开消隐窗口。这让你能把窗口精确地对准噪声区。DCFWINDOW窗口宽度。定义了消隐窗口持续多少个TBCLK周期。手册图15-56的几种时序情况非常经典常规情况窗口在周期内独立存在。窗口跨越周期边界比如窗口开在周期末尾一直持续到下一个周期开始后的一段时间。硬件会自动处理下一个窗口仍会从下一个周期的“锚点偏移量”处正常开始。窗口首尾相连上一个窗口的结束紧挨着下一个窗口的开始实现连续消隐。窗口重叠偏移量设置过小导致上一个窗口还没结束下一个基于另一个锚点的窗口又开始了。这会导致某些区域被重复消隐需要留意。实操心得在配置峰值电流保护时我通常将消隐窗口的起始点DCFOFFSET设置在PWM开关事件如上管开通之后1-2个TBCLK宽度DCFWINDOW覆盖住可能的电流尖峰持续时间比如500ns-1us换算成TBCLK个数。这能有效防止开通瞬间的di/dt噪声导致误保护。计算时一定要根据你的系统时钟频率比如200MHz的TBCLK周期5ns来换算时间。2.3 事件分发四大输出作用解析经过滤波或直通的事件信号最终可以触发四种动作。手册的图15-51到15-54把这四条路径画得很清楚强制跳闸信号.force这是最直接、最快速的影响PWM输出的路径。DCAEVT1/2.force信号会直接送到跳闸区Trip-Zone子模块。你可以通过TZCTL、TZCTLDCA、TZCTLDCB等寄存器配置当此事件发生时对应的EPWMxA或EPWMxB输出引脚要采取什么动作拉高、拉低、高阻或者翻转。优先级这是硬件实现的固定优先级。对于EPWMxA优先级从高到低是TZA-DCAEVT1-DCAEVT2。DCBEVT系列事件同理作用于EPWMxB。当多个事件同时发生时高优先级覆盖低优先级。这在设计复合保护逻辑时必须考虑清楚。中断信号.interrupt事件可以触发CPU中断。你需要先在TZEINT寄存器中使能对应的事件中断位如DCAEVT1。当事件发生时TZFLG寄存器中相应的标志位会被置起并产生EPWMxTZINT中断。在中断服务程序里必须手动写TZCLR寄存器的对应位来清除标志否则会持续产生中断。ADC启动转换信号.socDCAEVT1.soc和DCBEVT1.soc可以连接到事件触发ET子模块作为ADC启动转换ASOCA或BSOCB的触发源。这在需要基于特定事件如电流达到某个值进行同步采样的场合非常有用比如平均电流模式控制。通过配置ETSEL[SOCASEL]等位来选择。同步信号.syncDCAEVT1.sync和DCBEVT1.sync可以作为一个同步脉冲与EPWMxSYNCI输入信号以及软件强制同步信号TBCTL[SWFSYNC]进行“或”操作最终生成对时基计数器TBCTR的同步信号。这允许一个外部事件如过流事件来重新同步整个PWM系统的时钟在某些复杂的多模块协同场景下可能有奇效。3. 谷底切换技术硬件实现的谐振谷底检测与延迟开通这是数字比较子模块里最精妙也最复杂的功能——谷底切换Valley Switching。它主要应用于准谐振Quasi-Resonant, QR或零电压开关ZVS反激等拓扑目的是在功率MOSFET的漏极电压谐振到谷底时将其开通从而最小化开关损耗实现ZVS和导通损耗谷底电压最低同时降低电干扰EMI。在没有这个硬件模块之前实现谷底检测通常需要外部分立电路如比较器、RC滤波、单稳态触发器等或者复杂的软件算法响应慢且不精确。ePWM的谷底切换功能用硬件实现了从谐振周期检测到延迟触发的全流程。3.1 谷底切换的工作原理与配置步骤手册图15-57是整个谷底切换逻辑的完整框图。结合我的理解其工作流程可以拆解为以下八个配置步骤这比单纯看手册更清晰第一步选择事件源通过DCFCTL[SRCSEL]选择一个DCxEVTy事件例如来自CMPSS的比较器输出作为谷底切换块的输入。这个信号通常对应着MOSFET漏极电压的某个特征点比如通过电阻分压检测到的Vds下降沿。第二步配置边沿滤波器谐振信号可能是振荡的我们需要的是第N个谷底。通过DCFCTL[EDGEMODE, EDGECOUNT]配置边沿滤波器。EDGEMODE选择捕获上升沿、下降沿或双边沿EDGECOUNT设置计数值n。例如设置为“下降沿”且n2则表示忽略第一个下降沿可能是噪声或第一个谷底在检测到第二个下降沿时才认为目标谷底到来。这实现了“ programmable number of edges before the delay takes effect”。第三步选择触发与复位源通过VCAPCTL[TRIGSEL]选择一个事件来复位和重启边沿滤波器及后续的计数器。这个事件标志着一次新的谐振周期测量的开始。通常你可以选择PWM周期开始点CTR0或者PWM周期结束点CTRPRD作为触发也可以使用软件强制触发。触发事件到来后边沿滤波器清零准备开始计数。第四步使能谷底捕获逻辑设置VCAPCTL[VCAPE] 1使能整个谷底捕获与延迟生成硬件。第五、六步定义振荡周期测量窗口这是核心的测量环节。你需要定义振荡的“起始边沿”和“结束边沿”。VCNTCFG[STARTEDGE]选择哪个边沿启动内部的16位计数器开始计数。通常这对应着谐振开始的时刻比如漏极电压开始下降的边沿。VCNTCFG[STOPEDGE]选择哪个边沿停止计数器。这对应着目标谷底点或你希望开通的时刻的边沿。手册特别强调STOPEDGE的值必须大于STARTEDGE。这意味着“停止边沿”必须在“起始边沿”之后被检测到。 计数器从STARTEDGE开始到STOPEDGE停止其间的计数值CNTVAL就代表了振荡的半个周期或一个完整谐振周期的一部分即从起始点到目标点的延迟时间以TBCLK为单位。第七步配置延迟应用方式测量出的CNTVAL值如何用VCAPCTL[VDELAYDIV]给你提供了灵活性直接应用将CNTVAL作为延迟值。结合软件偏移CNTVAL与一个软件编程值SWVDELVAL结合比如相加用于微调。分数应用只应用CNTVAL的一部分如1/2, 1/4或者分数部分再结合SWVDELVAL。这在谐振周期较长而你需要更精细的延迟调整时非常有用。第八步选择延迟生成路径最后通过VCAPCTL[EDGEFILTDLYSEL]选择将上述计算出的硬件延迟HWVDELVAL应用到之前边沿滤波器输出的那个事件上。最终这个经过精确延迟的事件作为DCEVTFILT信号输出可以用来同步PWM时基即重新触发下一个PWM周期的开始从而实现“在谷底开通”。3.2 谷底切换的实战意义与避坑指南这个功能的强大之处在于它全硬件实现不占用CPU带宽延迟极其精确且可重复。一旦配置好CPU只需要在必要时更新一下SWVDELVAL来适应输入电压或负载的变化即可。避坑指南时钟精度是关键CNTVAL的精度直接取决于TBCLK的频率。对于高频谐振如几百kHz到MHz需要足够高的系统时钟来保证时间分辨率。例如200MHz的TBCLK提供5ns的分辨率对于100ns量级的谷底定位是足够的。信号质量决定成败输入到数字比较模块的模拟比较器信号必须干净。谐振波形上的振铃和噪声可能导致错误的边沿检测。务必做好PCB布局的噪声隔离并在CMPSS前端可能需要进行适当的RC滤波。理解“边沿”的含义STARTEDGE和STOPEDGE配置的是对边沿滤波器输出信号的边沿选择而不是直接对原始模拟信号。你需要确保前面边沿滤波器的配置EDGEMODE与这里期望的边沿类型匹配。触发机制的设计VCAPCTL[TRIGSEL]的选择很重要。如果选择PWM周期起点触发那么每个PWM周期都会尝试进行一次谷底检测和延迟开通。这适用于固定频率的QR反激。在某些变频率的ZVS方案中可能需要更复杂的触发逻辑。4. 多模块协同与高级电源拓扑应用实例数字比较子模块的事件和同步输出能力使得多个ePWM模块能够构建出复杂的、同步的功率控制系统。手册15.13节列举了大量经典拓扑这里我挑几个有代表性的结合数字比较功能深入讲讲。4.1 峰值电流模式控制Peak Current Mode Control手册图15-75和15-76展示了一个经典应用。ePWM模块产生固定的时钟信号开启上管。电感电流通过采样电阻转化为电压送入片内比较器CMPSS的正端。内部DAC或外部参考提供峰值电流基准接入比较器负端。核心配置将CMPSS输出连接到数字比较事件源如DCAEVT2。配置为逐周期跳闸Cycle-By-Cycle Trip模式。当电感电流达到峰值基准比较器翻转DCAEVT2事件立即产生.force信号。该.force信号配置为强制关断EPWMxA输出上管。这样每个开关周期的导通时间由电流峰值决定而不是固定的占空比。数字比较子模块在此处的价值事件过滤必须启用上管开通瞬间的电流尖峰Current Spike会触发比较器必须用消隐窗口将其屏蔽否则上管一开就关断。极快的响应速度从电流超阈到PWM关断全程由硬件完成延迟极短通常在几十到一百纳秒级这对于防止电感饱和和提供快速的逐周期限流保护至关重要。4.2 相移全桥Phase-Shifted Full Bridge, PSFB或零电压开关全桥ZVSFB手册图15-73和15-74描述了如何用两个ePWM模块控制一个全桥并通过动态调整从模块Slave的相位寄存器TBPHS来实现相移控制。数字比较事件的潜在应用 在这种拓扑中为了实现滞后桥臂的ZVS需要利用谐振电感或变压器的漏感能量。有时需要检测谐振电流过零点或电压谷底来优化开关时序。谷底检测可以使用一个CMPSS模块检测全桥中点电压或通过辅助绕组采样其输出作为数字比较事件源。事件触发同步当检测到电压谷底时产生DCxEVT1.sync事件。这个同步事件可以发送给控制滞后桥臂的ePWM模块通过EPWM X-BAR作为其时基计数器TBCTR的同步输入EPWMxSYNCI从而实现“在检测到谷底时立即开通对应开关管”的硬件级精确同步最大化ZVS效果。4.3 多相交错并联Interleaved转换器如图15-71所示的3相交错Buck。主模块Master产生基准时钟两个从模块Slave的相位分别偏移120°和240°。这通过设置从模块的TBPHS寄存器实现。数字比较事件的扩展应用 在多相系统中均流是关键。数字比较子模块可以辅助实现硬件均流。电流平衡保护每个相位的电流通过CMPSS与一个公共的或独立的基准比较。如果某相电流异常偏高产生DCBEVT事件。事件触发调整该事件可以触发中断让CPU介入调整该相的占空比或相位。更高级的用法是利用事件的.force功能轻微拉低该相输出的占空比通过配置为强制拉低特定数量的TBCLK周期实现快速的硬件均流环然后再由软件慢环进行精细调节。5. 配置流程、常见问题与调试技巧5.1 一个典型的数字比较事件配置流程以配置一个带消隐的峰值电流保护并触发ADC采样为例初始化GPIO和CMPSS将电流采样信号连接的引脚配置为模拟输入初始化CMPSS模块设置内部DAC值作为电流阈值。配置数字比较信号选择在DCTRIPSEL寄存器中将DCAH和DCAL的信号源选择为对应的CMPSS输出例如CMPSS1.COMPH和CMPSS1.COMPL。在TZDCSEL寄存器中配置DCAEVT1的事件条件例如当DCAH1(电流高于高阈值) 时产生事件。配置事件滤波消隐窗口在DCFCTL寄存器中使能消隐BLANKE1选择事件源SRCSEL为DCAEVT1选择脉冲同步源PULSESEL为CTRPRD假设噪声在周期开始。计算并设置DCFOFFSET和DCFWINDOW。例如TBCLK5ns (200MHz)需要在PWM开通后消隐500ns则OFFSET 2(10ns后开始避开最小延迟)WINDOW 98(持续490ns)。配置事件动作跳闸在TZSEL寄存器中将DCAEVT1选择为逐周期CBC跳闸源。在TZCTL或TZCTLDCA寄存器中配置当DCAEVT1事件发生时EPWMxA输出强制为低电平关断。ADC触发在ETSEL寄存器中设置SOCASEL选择DCAEVT1作为ADC SOCA的触发源。同时配置ETPS寄存器中的SOC触发分频等。中断可选在TZEINT寄存器中使能DCAEVT1中断。在PIE模块中配置好中断向量。使能最后确保全局ePWM时钟已使能并启动计数器。5.2 常见问题与排查技巧事件不产生或动作不执行检查信号通路用示波器或寄存器查看工具一级级确认。GPIO输入是否使能CMPSS输出是否翻转DCTRIPSEL和TZDCSEL配置是否正确TZFLG寄存器中的事件标志位是否置起检查消隐窗口是否因为消隐窗口设置得过大或偏移不当把正常事件也“屏蔽”掉了可以暂时禁用消隐BLANKE0进行测试。检查优先级是否有更高优先级的跳闸源如TZA始终有效覆盖了你的数字比较事件检查TZFLG寄存器所有位。谷底切换功能工作不稳定测量CNTVAL寄存器在调试时使能谷底捕获后在触发事件后读取CNTVAL寄存器的值。看它是否在一个合理的、随输入电压/负载变化而变化的范围内。如果值为0或恒定不变说明边沿检测可能没工作。验证边沿滤波器确保EDGECOUNT设置正确。如果你希望在第2个谷底开通但EDGECOUNT1那就会在第1个谷底动作此时电压可能不是最低点。时钟同步问题确保用于谷底切换的TBCLK与产生PWM的TBCLK是同源且同步的。异步时钟会导致计算出的延迟时间错乱。ADC触发与PWM动作不同步理解信号路径延迟.force信号路径是最快的直接作用于输出驱动。.soc信号需要经过事件触发子模块再到ADC存在几个时钟周期的延迟。在计算采样点的时候需要考虑这个固有延迟。可以通过在ADC中断中读取PWM计数器的值来反推实际触发时刻进行软件补偿。多模块同步时的干扰使用EPWM X-BAR当需要将一个模块的数字比较事件如.sync传递给另一个模块时务必通过EPWM X-BAR进行路由配置而不是想当然地认为直接连上了。仔细检查INPUTXBAR和EPWMXBAR相关寄存器的配置。同步脉冲宽度手册强调的“minimum of 3 ˟ TBCLK sync pulse width”在这里同样适用。确保你产生的同步事件脉冲宽度足够否则从模块可能无法可靠捕获。调试这类复杂外设最有效的方法就是“化整为零分步验证”。不要试图一次性配置所有功能。先配置CMPSS和基本的数字比较事件用LED或IO口翻转来验证事件能否产生。再加上消隐验证噪声抑制效果。最后再叠加谷底切换或同步功能。利用芯片的寄存器实时查看和图形化调试工具如TI的CCS的Registers View和Graphical View可以直观地看到计数器、比较器、事件标志的状态事半功倍。