1. 项目概述与核心价值在电力电子和电机驱动的世界里PWM脉宽调制信号就像是驱动系统的“心跳”。但一个稳定、可靠的“心跳”远不止是简单的开关切换。尤其是在驱动H桥、三相逆变器这类拓扑时如果控制上下桥臂的两个互补PWM信号没有处理好一个微小的重叠就可能导致功率管直通短路瞬间释放的“烟花”足以毁掉整个硬件。同样在需要隔离驱动的场合如何让PWM信号高效地通过脉冲变压器以及当系统发生故障时如何让PWM输出“紧急刹车”都是工程师必须面对的硬核问题。德州仪器TI的增强型高分辨率脉宽调制器eHRPWM模块正是为解决这些工业级挑战而生的利器。它不仅仅是一个简单的PWM发生器更是一个集成了死区控制、斩波调制、故障保护等高级功能的完整子系统。今天我们就抛开手册上那些冰冷的框图结合我这些年调试电机驱动器和开关电源的实际经验深入聊聊eHRPWM中三个最核心也最实用的子模块死区生成DB、PWM斩波PC和故障保护TZ。我会重点拆解它们的工作原理、配置时的“坑”以及如何根据你的具体应用比如是驱动MOSFET还是IGBT是Buck电路还是电机逆变器来做出最合适的选择和参数计算。无论你是正在评估芯片选型还是已经上手调试却遇到了波形异常相信这篇结合了原理与实战的解析都能给你带来直接的帮助。2. 死区生成模块防止直通的守护神2.1 死区的本质与必要性我们先从最基础也是最致命的死区说起。在桥式电路如半桥、全桥、三相逆变桥中我们通常用一对互补的PWM信号比如EPWMxA和EPWMxB分别控制上管和下管。理想情况下一个管子在关断后另一个管子再导通。但现实中功率器件如MOSFET、IGBT的开关并非瞬时完成存在开启延迟Turn-on delay和关断延迟Turn-off delay。更危险的是驱动芯片本身也有传播延迟。如果简单地将一对理想的互补信号送给上下管很可能在状态切换的瞬间出现两个管子同时导通的情况这就是“直通”或“穿通”Shoot-Through。直通会在直流母线间形成极低阻抗的通路产生巨大的短路电流轻则导致器件过热重则直接炸管。死区Dead Time或Dead Band就是为了解决这个问题而引入的一段“安全间隔”。它的核心思想是在其中一个PWM信号从有效状态变为无效状态后强制等待一段可编程的时间再允许另一个PWM信号从无效状态变为有效状态。这段等待时间就是死区时间。例如在EPWMxA从高电平变为低电平关闭上管后并不立即让EPWMxB从低电平变为高电平开启下管而是插入一段死区时间确保上管已经完全关断。注意死区时间并非越长越好。过长的死区时间会减少有效的PWM占空比范围导致输出电压失真尤其在低占空比或高频率时影响显著。它需要在“足够防止直通”和“最小化波形失真”之间取得平衡。2.2 eHRPWM死区模块的精细控制eHRPWM的死区生成模块DB提供了高度灵活的可编程能力远不止是简单的双边延迟。它允许你对上升沿和下降沿进行独立的延迟控制并组合出多种输出极性模式。理解其内部的数据流和控制逻辑是关键。2.2.1 输入源选择与信号路径模块的输入信号来自动作限定器AQ输出的EPWMxA_In和EPWMxB_In。通过DBCTL[IN_MODE]控制位你可以灵活选择哪个信号作为上升沿延迟RED和下降沿延迟FED的源。这是很多人容易忽略的强大功能。模式0默认EPWMxA_In同时作为RED和FED的源。这是最经典的用法用一个输入信号生成一对带死区的互补输出。模式1EPWMxA_In作为FED的源EPWMxB_In作为RED的源。这种模式适用于输入信号本身已经具有一定逻辑关系但需要额外调整边沿对齐的场景。模式2与模式1相反EPWMxA_In用于REDEPWMxB_In用于FED。模式3EPWMxB_In同时作为RED和FED的源。2.2.2 输出模式与极性控制经过独立的上升沿和下降沿延迟单元后信号会进入输出模式控制和极性选择阶段。输出模式 (DBCTL[OUT_MODE])决定是否应用上升沿延迟、下降沿延迟、两者都应用或两者都旁路即禁用死区功能。极性选择 (DBCTL[POLSEL])决定是否将经过延迟后的信号进行反相然后再输出。这让你能轻松生成主动高AH、主动低AL、主动高互补AHC、主动低互补ALC等功率级驱动所需的各类标准信号格式。为了更直观地理解这些配置组合的效果下表列出了几种最常用的经典死区工作模式及其对应的寄存器设置和波形特征。这些模式假设DBCTL[IN_MODE] 0即EPWMxA_In作为双延迟源。表经典死区工作模式配置与波形说明模式模式描述DBCTL[POLSEL]DBCTL[OUT_MODE]关键波形特征1直通模式x0, 0EPWMxA_Out和EPWMxB_Out直接等于输入无任何延迟。用于完全旁路死区模块。2主动高互补 (AHC)0, 11, 1EPWMxA_Out为原始信号经下降沿延迟。EPWMxB_Out为原始信号反相后经上升沿延迟。输出对为高电平有效且互补。3主动低互补 (ALC)1, 01, 1EPWMxA_Out为原始信号反相后经下降沿延迟。EPWMxB_Out为原始信号经上升沿延迟。输出对为低电平有效且互补。4主动高 (AH)0, 01, 1两个输出都应用相同的延迟但极性相同均不反相或均反相。通常用于驱动需要相同极性信号的两个独立开关管。5主动低 (AL)1, 11, 1两个输出都应用相同的延迟且极性均为低有效。2.2.3 死区时间的计算与设置死区时间的大小由DBRED上升沿延迟和DBFED下降沿延迟这两个10位寄存器控制。它们的值代表了信号边沿被延迟的TBCLK时钟周期数。计算公式非常简单死区时间 (RED) DBRED × T_TBCLK 死区时间 (FED) DBFED × T_TBCLK其中T_TBCLK是时间基准时钟的周期。TBCLK通常由系统时钟SYSCLKOUT分频得到通过TBCTL[HSPCLKDIV, CLKDIV]配置。实操要点假设你的系统时钟SYSCLKOUT 100MHz周期10nsTBCLK配置为不分频即T_TBCLK 10ns。如果需要1us的死区时间则寄存器值应设置为DBRED DBFED 1us / 10ns 100。 你需要将这个十进制值100写入DBRED和DBFED寄存器。注意这是一个10位寄存器最大值为1023因此在此配置下最大可设置死区时间约为10.23us。常见问题排查现象实测死区时间与计算值不符。排查首先确认TBCLK的分频配置是否与计算时假设的一致。检查TBCTL寄存器的HSPCLKDIV和CLKDIV位。用示波器测量EPWMxA_InAQ模块输出和EPWMxA_OutDB模块输出的边沿。确认延迟是否只施加在预期的边沿上上升沿或下降沿。检查DBCTL[OUT_MODE]确认你没有意外旁路Bypass了某个延迟单元。在极高频率下TBCLK周期很小寄存器设置值对应的死区时间可能接近或小于功率器件和驱动电路的固有开关延迟此时死区可能看似“无效”。务必确保设置理论死区时间大于驱动传播延迟功率管关断时间。3. PWM斩波模块驱动脉冲变压器的优化器3.1 为何需要斩波死区模块解决了信号安全问题而PWM斩波模块PC则主要服务于特定的门极驱动技术——脉冲变压器隔离驱动。在高压、高边驱动或需要强隔离的场合脉冲变压器是一种常见且可靠的解决方案。然而直接传输一个宽度的直流PWM脉冲给变压器会带来问题变压器磁芯可能饱和导致驱动失效甚至损坏。PWM斩波的核心思想是将一个宽度的PWM脉冲例如高电平持续100us调制成一个高频的脉冲串。这个高频脉冲串的载波频率Chopping Frequency远高于PWM本身频率。这样做的好处是防止变压器饱和高频交流信号更容易通过变压器耦合避免了直流分量导致的磁芯饱和。提高传输效率优化了能量传输。提供稳定的门极电压通过后续的整流滤波可以在变压器副边得到一个稳定的驱动电压。3.2 斩波模块的工作原理与配置eHRPWM的斩波模块接收来自死区模块或直接来自AQ模块如果DB被旁路的EPWMxA信号并用一个高频载波信号对其进行调制。3.2.1 关键控制寄存器与参数整个模块主要由PCCTL寄存器控制CHPEN斩波使能位。为0时模块被旁路输入信号直接输出。CHPFREQ[2:0]载波频率选择位。载波时钟PSCLK由SYSCLKOUT分频得到分频系数可选1/1, 1/2, 1/3, ..., 1/16。CHPDUTY[2:0]维持脉冲的占空比控制位。注意这里控制的是第一个脉冲之后那些用于维持开关管导通状态的后续脉冲的占空比。可选值为12.5%, 25%, ..., 87.5%共7档。OSHTWTH[3:0]首脉冲宽度控制位。这是斩波模块一个非常贴心的设计。为了确保功率管能够快速、可靠地开启需要较大的瞬时栅极电荷第一个脉冲的宽度可以独立编程使其比后续的维持脉冲更宽、能量更高。首脉冲宽度有16个可选值。3.2.2 波形生成过程解析首脉冲生成当输入信号EPWMxA_In变为有效高电平时斩波模块会立即产生一个宽度可编程的“首脉冲”。其宽度计算公式为T_first_pulse T_SYSCLKOUT × 8 × OSHTWTH其中OSHTWTH取值范围为1到16。例如SYSCLKOUT100MHz(T10ns)OSHTWTH4则首脉冲宽度为10ns × 8 × 4 320ns。这个较宽的首脉冲提供了开启功率管所需的瞬时大电流。维持脉冲生成首脉冲结束后模块开始以载波频率PSCLK生成一串占空比由CHPDUTY控制的脉冲串直到输入信号EPWMxA_In变为低电平。这些维持脉冲的作用是在功率管导通期间持续补充栅极电荷以抵消可能存在的漏电流确保功率管保持完全导通状态。输入变低当EPWMxA_In变为低电平时斩波输出立即停止EPWMxA_Out变为低电平。实操心得载波频率选择CHPFREQ的选择需要权衡。频率越高变压器体积可以做得越小但对磁芯材料和开关损耗的要求也越高。同时频率必须远高于PWM频率通常至少是10倍以上以避免对主功率控制环路产生干扰。例如PWM频率为20kHz载波频率可选择在200kHz以上。占空比与首脉冲宽度调试CHPDUTY和OSHTWTH的最佳值强烈依赖于你的脉冲变压器参数、副边整流滤波电路以及功率管栅极总电荷。没有统一答案必须通过实验确定。通常步骤是先设置一个较小的CHPDUTY如25%和适中的OSHTWTH用示波器观察变压器副边驱动波形的上升沿、下降沿和平顶期的电压跌落。如果平顶期电压跌落过多说明维持能量不足需增大CHPDUTY。如果开关管开启速度慢可适当增大OSHTWTH。模块旁路如果不使用脉冲变压器驱动例如使用普通光耦或集成驱动芯片务必通过CHPEN0将斩波模块旁路避免其对PWM信号产生不必要的调制。4. 故障保护模块系统安全的紧急制动4.1 故障保护的重要性与类型在电机驱动、逆变器等系统中过流、短路、过温、母线欠压等故障随时可能发生。eHRPWM的故障保护Trip-Zone TZ模块提供了硬件级别的快速响应机制其响应速度远快于软件中断处理。它可以在纳秒级时间内强制将PWM输出拉至安全状态高、低或高阻态从而保护功率器件和负载。TZ模块支持两种主要的故障响应模式逐周期Cycle-By-Cycle, CBC适用于电流限制等需要持续保护的场景。当故障信号TZn引脚为低有效时PWM输出立即采取保护动作。仅在当前PWM周期结束计数器归零且故障信号已消失时保护状态才会自动解除下一个周期恢复正常输出。如果故障持续则每个周期都会重复此保护动作。单次One-Shot, OSHT适用于严重故障如直通短路、严重过流。一旦触发PWM输出立即采取保护动作并且该状态将被锁存直到软件主动清除故障标志位。即使故障信号已经消失PWM输出也不会自动恢复必须由软件干预。这防止了系统在未知故障状态下自动重启。4.2 模块配置与实战应用4.2.1 输入与映射每个ePWM模块都可以通过TZSEL寄存器独立选择关注哪些TZ输入引脚TZ1至TZn。例如你可以将电流采样比较器的输出接到TZ1将温度传感器的过温信号接到TZ2。然后在ePWM1的配置中只使能TZ1作为CBC事件源在ePWM2的配置中使能TZ2作为OSHT事件源。这种灵活性允许你对不同PWM通道和不同严重程度的故障进行差异化处理。4.2.2 动作配置当故障发生时每个PWM输出引脚EPWMxA和EPWMxB的行为可以通过TZCTL[TZA]和TZCTL[TZB]寄存器独立配置为以下四种之一00强制为高阻态High-Impedance。这对于驱动桥式电路非常有用可以同时关断上下管。01强制为高电平。10强制为低电平。11无动作忽略此次故障。4.2.3 中断与标志位标志位TZFLG[CBC]和TZFLG[OST]分别记录CBC和OSHT事件的发生。CBC标志在故障条件消失且计数器归零后不会自动清除需要软件写TZCLR[CBC]清除。OSHT标志必须由软件写TZCLR[OST]清除。中断可以通过TZEINT寄存器使能CBC和/或OSHT事件触发EPWMxTZINT中断。在中断服务程序中软件可以读取标志位判断故障类型并进行相应的故障处理如记录日志、停机、尝试恢复等。实战配置示例与避坑指南假设一个三相电机驱动系统使用ePWM1、2、3驱动三个半桥。我们将霍尔电流传感器经比较器后的过流信号连接至TZ1引脚。目标实现逐周期电流限流保护。当任何一相过流时立即强制该相上下管驱动均为低电平关断并在本周期结束后自动恢复同时产生中断通知CPU。配置步骤GPIO配置将TZ1引脚配置为异步故障输入功能具体寄存器因器件而异需查数据手册。ePWM模块配置以ePWM1为例ePWM2/3类似TZSEL[CBC1] 1使能TZ1作为ePWM1的CBC故障源。TZCTL[TZA] 2EPWM1A故障时强制拉低。TZCTL[TZB] 2EPWM1B故障时强制拉低。TZEINT[CBC] 1使能CBC故障中断。中断服务程序ISR__interrupt void epwm1TzIsr(void) { if (EPwm1Regs.TZFLG.bit.CBC 1) { // 记录故障事件可增加计数器超过一定次数后转为永久故障 g_faultCounter; if (g_faultCounter MAX_CBC_FAULTS) { // 触发严重故障可能切换为OSHT模式或系统停机 EALLOW; EPwm1Regs.TZSEL.bit.OSHT1 1; // 改为单次触发 EPwm1Regs.TZCTL.bit.TZA 0; // 输出高阻彻底关断 EPwm1Regs.TZCTL.bit.TZB 0; EDIS; } // 清除CBC标志位否则无法响应下一次中断 EPwm1Regs.TZCLR.bit.CBC 1; // 清除PIE中断标志位 EPwm1Regs.TZCLR.bit.INT 1; PieCtrlRegs.PIEACK.all PIEACK_GROUP2; } }常见问题与排查现象故障信号已产生但PWM输出无动作。排查确认TZ引脚配置首先检查GPIO复用寄存器确保TZ1引脚已正确配置为ePWM故障输入功能而非普通GPIO。检查电平极性TZ输入是低电平有效。确认你的故障比较器输出逻辑是否正确故障时是否为低电平。检查映射关系确认TZSEL寄存器中对应ePWM模块的对应TZ位如CBC1或OSHT1已被使能。检查动作配置确认TZCTL[TZA]和TZCTL[TZB]没有配置为11无动作。软件强制测试使用TZFRC寄存器软件强制产生一个故障事件看PWM输出是否响应。这可以隔离硬件信号问题。现象CBC保护触发后输出一直保持保护状态没有在下一个周期恢复。排查确认故障信号是否已消失用示波器测量TZ引脚确保在PWM计数器归零前故障信号已回到高电平。检查计数器模式CBC的自动恢复条件是“计数器归零CTR0”且“故障信号已消失”。请确认你的时间基准模块TB是否工作在**递增计数up-count或递增-递减计数up-down-count**模式。在递减计数到零时也会触发恢复。如果你使用的是仅递增模式确保周期值TBPRD设置正确。检查标志位即使输出恢复了TZFLG[CBC]标志位依然会保持置位直到被软件清除。这并不影响硬件的自动恢复逻辑但可能会影响中断的再次产生。确保在中断服务程序中正确清除了该标志。5. 高级主题高分辨率PWM与事件触发5.1 高分辨率PWM的适用场景当你的应用需要非常精细的占空比或相位控制而常规PWM的分辨率无法满足要求时就需要考虑高分辨率PWMHRPWM模块。常规PWM的分辨率由系统时钟频率和PWM频率决定分辨率位 log2( Fsysclk / Fpwm )。例如Fsysclk100MHzFpwm500kHz则分辨率约为7.64位。这意味着占空比最小调节步进约为1/200即0.5%。对于一些高性能数字电源或需要极低谐波失真的应用这个精度可能不够。HRPWM通过微边沿定位器MEP技术将一个系统时钟周期粗调步进进一步细分为最多255个精细时间步进MEP步进每个MEP步进的时间分辨率可达皮秒级例如150ps。这样占空比的控制精度可以提升数位。例如在上述例子中启用HRPWM后有效分辨率可能提升到13位以上最小步进远小于0.01%。应用判断是否需要HRPWM一个简单的经验法则是如果你的PWM频率高于250kHz且对输出纹波或动态响应有极高要求HRPWM会带来显著好处。对于低频电机驱动如20kHz常规PWM通常已足够。5.2 HRPWM配置要点HRPWM主要通过对CMPAHR寄存器用于占空比控制或TBPHSHR寄存器用于相位控制进行精细调整来实现。其配置围绕HRCNFG寄存器展开边沿模式选择 (HRCNFG[EDGMODE])上升沿控制仅对PWM的上升沿进行高分辨率微调。下降沿控制仅对下降沿进行微调。双边沿控制同时对上升沿和下降沿进行微调。这通常用于相位移动控制而非单纯的占空比控制。控制模式选择 (HRCNFG[CTLMODE])CMPAHR控制使用CMPAHR寄存器进行高分辨率占空比控制。这是最常用的模式与常规的CMPA寄存器协同工作。CMPA提供粗调整数个TBCLK周期CMPAHR提供细调MEP步进。TBPHSHR控制使用TBPHSHR寄存器进行高分辨率相位控制。用于需要精确同步多个PWM通道相位的场合如交错并联LLC谐振变换器。影子模式选择 (HRCNFG[HRLOAD])决定CMPAHR值在何时加载到活动寄存器。为了确保PWM波形在周期边界同步更新避免毛刺通常将其配置为与CMPA相同的加载点例如在CTR0或CTRPRD时加载。计算示例假设需要产生一个占空比为50.1%的PWMPWM周期TBPRD 1000TBCLK个数CMPA的常规值应为501。但50.1%可能对应CMPA501而50.099%对应CMPA500常规PWM无法实现。使用HRPWM我们可以将CMPA设为500粗调然后利用CMPAHR进行细调。假设每个TBCLK周期可被MEP细分为256步那么需要补偿的精细时间为0.001 * (TBPRD * T_TBCLK)。通过计算得出需要的MEP步数将其写入CMPAHR寄存器即可。5.3 事件触发模块精准的定时中断事件触发ET模块是连接PWM硬件事件与CPU软件的中枢。它允许你在PWM波形的特定时刻如计数器等于零、等于周期值、等于CMPA/CMPB时产生中断用于执行ADC采样、更新控制算法等时间关键任务。核心配置事件选择 (ETSEL[INTSEL])选择在哪个事件发生时进行计数。可选事件包括CTRPRD,CTR0,CTRCMPA递增时,CTRCMPA递减时,CTRCMPB递增/递减时。中断周期 (ETPS[INTPRD])设置产生中断所需的事件计数。例如设置为“每第2个事件”产生中断可以实现每隔一个PWM周期采样一次。中断使能 (ETSEL[INTEN])全局中断使能。应用技巧在数字电源的峰值电流控制模式中通常需要在PWM周期的开始CTR0或结束CTRPRD时启动ADC采样采样电感电流。你可以将INTSEL设置为CTRPRDINTPRD设置为“每个事件”这样每个PWM周期结束时都会产生中断在中断中读取ADC结果并计算下一个周期的占空比更新CMPA实现闭环控制。利用ETPS[INTCNT]可以监控事件计数器用于调试中断是否按预期产生。避坑指南确保中断服务程序的执行时间远小于PWM周期。如果中断处理太慢可能导致下一个中断到来时前一个还未处理完造成控制延迟甚至失控。对于高频PWM需要优化代码或将非关键任务移到后台循环中处理。