ePWM故障保护与数字比较模块:硬件级实时保护的配置与实战
2026/7/19 10:16:03 网站建设 项目流程

1. 项目概述与核心价值

在搞电机驱动或者数字电源的兄弟,肯定都跟ePWM(增强型脉宽调制器)打过交道。这东西说白了就是咱们微控制器里那个能产生高精度PWM波形的“心脏”,占空比调得好,电机转得稳,电源输出才干净。但光会发波还不够,真正的挑战在于“保命”——当系统突然出现过流、过压或者温度飙升时,你的硬件反应必须比软件中断快几个数量级,否则就是一阵青烟和老板的“亲切问候”。

这就是ePWM的Trip-Zone(故障保护区)和Digital Compare(数字比较)模块存在的意义。它们不是锦上添花的功能,而是系统安全的“最后一道硬件防线”。Trip-Zone模块能直接响应外部故障引脚(比如TZ1到TZ6)的信号,在几个时钟周期内强制改变PWM输出的状态,是纯粹的硬件动作。而Digital Compare模块则更“智能”一些,它能把外部模拟比较器输出的信号、或者其他数字信号,拿进来做逻辑比较,然后灵活地触发各种后续动作,比如让Trip-Zone干活、产生中断告诉CPU、或者直接命令ADC开始采样。

把这两个模块玩明白了,你设计的系统才能既灵敏又可靠。比如在峰值电流控制中,每个PWM周期都需要根据电流反馈及时关断,这靠软件是来不及的,必须依赖Digital Compare的实时比较和Trip-Zone的逐周期(Cycle-by-Cycle)保护。又比如在桥式电路中,需要区分严重故障(一次性关断)和可恢复故障(每个周期都检查),这就得用到Trip-Zone的单次触发(One-Shot)和逐周期两种模式。接下来,我就结合手册里的配置实例和多年踩坑经验,把这套机制的里里外外、配置要点和实战避坑指南给你拆解清楚。

2. Trip-Zone模块深度解析与配置实战

Trip-Zone模块是ePWM的“紧急制动系统”。它的设计哲学很简单:当特定的故障输入信号有效时,绕过所有软件逻辑,直接、强制地改变PWM输出引脚(EPWMxA和EPWMxB)的状态。这种硬件级的响应确保了保护的实时性和确定性。

2.1 两种核心保护模式:One-Shot与Cycle-by-Cycle

理解这两种模式是配置的基石,它们应对的是不同严重等级的故障。

One-Shot (OSHT) 单次触发模式: 顾名思义,这种模式像保险丝,熔断了就需要手动复位。一旦触发,ePWM输出会被强制锁定在预设的安全状态(比如全部拉低),并且不会自动恢复,直到软件显式地清除故障标志位。它用于处理致命的、不可恢复的故障,例如硬件短路、严重过温。触发后,系统通常需要完全停机检查。

Cycle-by-Cycle (CBC) 逐周期模式: 这种模式更像一个自动复位断路器。在每个PWM周期开始时,故障锁存器会被自动清除。如果在本周期内发生了故障,输出会被强制动作;但到了下一个周期,如果故障信号已经消失,ePWM输出会自动恢复正常调制,无需软件干预。它用于处理临时的、可恢复的过载,比如电机的瞬时过流。这是实现峰值电流控制等高级算法的关键。

2.2 寄存器配置核心思路与场景实现

手册里给了两个经典的配置例子,我们不仅要看懂它写了什么,更要明白它为什么这么写。

场景A解析:集中式严重故障保护这个场景描述是:TZ1引脚上的一个One-Shot故障,需要同时关断ePWM1的输出(拉低),并把ePWM2的输出置为高电平安全状态。

  • ePWM1配置逻辑

    • TZSEL[OSHT1] = 1: 这步是“启用警报”。它告诉ePWM1模块:“请注意,TZ1这个引脚是作为One-Shot故障的源,一旦它报警,你要立刻行动。”
    • TZCTL[TZA] = 2TZCTL[TZB] = 2: 这步是“定义应急预案”。值2代表“强制拉低”(Force Low)。这意味着当TZ1触发时,EPWM1A和EPWM1B这两个引脚会被硬件强制拉到低电平,无论此时计数器比较模块(CC)想输出什么。在多数功率电路中,拉低意味着关闭上桥臂或下桥臂的驱动,是常见的关断状态。
  • ePWM2配置逻辑

    • TZSEL[OSHT1] = 1: 同样,让ePWM2也监听TZ1这个全局故障信号。
    • TZCTL[TZA] = 1TZCTL[TZB] = 1: 这里的值1代表“强制拉高”(Force High)。这说明了安全状态并非只有“拉低”一种。在某些拓扑中(比如某些半桥或特定刹车电路),将输出置为高电平才是安全状态,可以确保功率管完全关闭或进入特定续流模式。

这个场景的典型应用:在一个多相电机驱动器中,TZ1可能连接到一个全局的硬件过流保护电路。一旦检测到贯穿所有相线的致命短路,立即触发One-Shot,将所有ePWM模块的输出置于预设的安全态(有的相拉低,有的相拉高),实现系统级硬关断。

场景B解析:混合故障与精细化控制这个场景更复杂,它演示了如何对不同ePWM模块、不同故障源进行差异化响应。

  • ePWM1的响应: 它只对TZ5上的CBC故障做出反应,动作是将两个输出都强制拉低。这很适合用于该模块自身的逐周期电流限流保护。
  • ePWM2的响应: 它对TZ1或TZ6上的OSHT故障做出反应。但注意,它对两个输出通道的处理方式不同:
    • TZCTL[TZA] = 0: 值0代表“高阻态”(Hi-Z)。这意味着EPWM2A引脚在故障时对外呈现高阻抗,相当于断开连接。这常用于需要让外部电路(如互锁逻辑、另一个控制器)接管控制的场景。
    • TZCTL[TZB] = 3: 值3代表“忽略”(Do Nothing)。EPWM2B完全不理睬这个故障,继续正常输出。这可能在冗余设计或某些特定保护逻辑中使用,例如只关断故障相,健康相继续运行。

配置中的关键陷阱与实操要点

警告:配置顺序是生命线!手册的Note里强调了一点,但很多新手会栽在这里:一定要先配置好GPIO多路复用器和输入X-BAR,最后再使能Trip-Zone(设置TZSEL)。如果你反着来,在配置X-BAR输入选择的瞬间,引脚电平变化可能会被误认为是一个跳变的故障信号,从而立即触发保护,导致系统无法正常启动。正确的顺序是:1. 配置GPIO引脚功能为ePWM TZ输入;2. 配置Input X-BAR,将物理引脚映射到内部的TZ信号;3. 配置EPWM X-BAR(如果需要);4. 最后,才去写TZSEL寄存器来启用这些故障源。

2.3 故障中断的产生与处理

光有硬件动作还不够,我们通常还需要CPU知道“故障发生了”,以便记录日志、尝试恢复或上报。这就是图26-44所描述的Trip-Zone中断逻辑。

每个故障事件(CBC、OST、以及来自Digital Compare的DCAEVT1/2、DCBEVT1/2)都有自己独立的中断标志位(TZFLG[CBC],TZFLG[OST],TZFLG[DCAEVT1]等)和使能位(TZEINT寄存器中对应的位)。

中断产生流程

  1. 故障事件发生(例如TZ1引脚有效)。
  2. 如果该事件在TZSEL中被启用,且对应的中断在TZEINT中被使能,则相应的标志位(如TZFLG[OST])会被置位。
  3. 所有这些事件的中断输出在内部进行“或”运算,最终产生一个EPWMxTZINT中断信号给到PIE(外设中断扩展器)。
  4. CPU进入中断服务程序(ISR)。

中断服务程序(ISR)里的关键操作: 在TZ中断ISR里,第一件事就是读取并清除中断标志。这里有个重要细节:

  • TZFLG寄存器是只读的,你不能直接写它来清除标志。
  • 清除标志需要通过写TZCLR寄存器对应的位。例如,要清除OST中断标志,需要执行TZCLR[OST] = 1
  • 为��么需要先读TZFLG因为多个故障源可能共享同一个EPWMxTZINT中断。通过读取TZFLG,你可以判断具体是哪个(或哪几个)事件触发了本次中断,从而进行针对性的处理。处理完毕后,再写TZCLR清除你已处理的事件标志。

一个常见的坑:在One-Shot故障触发后,输出被锁死。即使故障源已经消失,你也必须在ISR中完成:a) 检查并处理故障原因;b) 清除TZFLG[OST]标志;c) 有时还需要手动清除TZFRC[OSHT]寄存器中的强制输出状态位(如果之前被置位),或者通过其他软件流程复位系统,ePWM输出才会恢复正常。否则,输出将永远停留在故障安全状态。

3. Digital Compare模块:从信号到事件的智能桥梁

如果说Trip-Zone是条件反射式的快速反应,那么Digital Compare(DC)模块就是ePWM的“感官中枢”和“预处理大脑”。它负责接收并解释外部复杂的数字信号,将其转化为ePWM内部能理解的标准化“事件”,从而触发更丰富的操作。

3.1 模块功能与信号通路全景

看图26-50,我们可以把DC模块的工作拆解成几个核心环节:

  1. 信号输入选择(源头): DC模块的输入信号极其灵活,不限于TZ1-TZ3。通过DCTRIPSELDCAHTRIPSEL等寄存器,你可以将多达15种外部信号(通过Input X-BAR引入)配置为DC模块的源。这包括:

    • 传统的故障引脚TZ1, TZ2, TZ3。
    • 来自模拟比较器子系统(CMPSS)的输出(CMPSSx.TRIPH/L),这是最常用的方式,用于将模拟电流/电压信号转化为数字保护信号。
    • 其他外设的错误信号,如ECCDBLERR(存储器双位错误)、PIEVECTERR(PIE向量错误)等,可以实现系统级联锁保护。
    • 甚至可以将多个输入进行“或”组合(Trip Combination Input),形成一个综合的故障信号。
  2. 事件生成(翻译): 被选中的输入信号,会被分类为“Digital Compare A High/Low (DCAH/DCAL)”和“Digital Compare B High/Low (DCBH/DCBL)”这四类基本信号。然后,通过TZDCSEL等寄存器的配置,这些高低电平信号可以产生两类核心事件:

    • DCAEVT1DCAEVT2: 主要关联到EPWMxA输出通道。
    • DCBEVT1DCBEVT2: 主要关联到EPWMxB输出通道。 每个DCxEVTy事件都可以独立配置其触发条件(例如,在DCAH为高时产生DCAEVT1)。
  3. 事件分发与执行(行动): 生成的DCxEVTy事件有四种强大的去处:

    • .force: 直接强制Trip-Zone动作。这是最直接的链路,DCAEVT1.force信号可以直接像TZ信号一样,去控制EPWMxA的输出状态(通过TZCTL[DCAEVT1]等寄存器配置),实现了通过模拟比较器结果直接进行硬件保护。
    • .inter: 产生Trip-Zone中断。通过使能TZEINT[DCAEVT1]等位,可以让DC事件触发CPU中断,进行软件处理。
    • .soc: 触发ADC开始转换。这是实现精准采样同步的关键。例如,在电流达到某个阈值(由CMPSS检测)时,立刻触发ADC采样该时刻的电流值,用于数字控制算法。
    • .sync: 产生同步信号,用于同步本模块或其他ePWM模块的时基计数器(TBCTR),实现多模块的精确相位联动。

3.2 消隐窗口:对抗噪声的利器

在功率变换中,开关管(如MOSFET、IGBT)开通和关断的瞬间会产生严重的电压和电流尖峰噪声。这些噪声如果被模拟比较器捕捉到,可能会产生虚假的故障信号,导致系统误保护。DC模块的消隐窗口(Blanking Window)功能就是为了解决这个问题。

工作原理: 消隐窗口是在每个PWM周期内,人为设置的一段“无视期”。在这段时间内,即使有DCxEVTy事件产生,也会被过滤掉,不会产生.force.inter等动作。

关键配置寄存器

  • DCFCTL[BLANKE]: 总使能位。
  • DCFCTL[PULSESEL]: 选择消隐窗口的同步基准。通常选择CTR=PRD(周期匹配点)或CTR=0(计数器零点)。这决定了窗口在周期内的起始参考点。
  • DCFOFFSET偏移量。从同步基准点(如CTR=PRD)之后,延迟多少个TBCLK时钟周期,才开始消隐窗口。这个值用于避开开关瞬间的噪声。
  • DCFWINDOW窗口宽度。消隐窗口持续多少个TBCLK时钟周期。

配置实例与计算: 假设你的PWM频率为100kHz(周期10us),TBCLK为100MHz(10ns)。开关噪声主要出现在开关管动作后的0.5us内。

  1. 设置DCFCTL[PULSESEL]CTR=PRD为基准。
  2. 计算偏移量:为了避开噪声,我们从周期点后开始消隐。Offset = 0.5us / 10ns = 50个时钟周期。所以DCFOFFSET = 50
  3. 计算窗口宽度:我们希望屏蔽掉持续约1us的噪声窗口。Window = 1us / 10ns = 100个时钟周期。所以DCFWINDOW = 100
  4. 这样,在每个PWM周期开始(CTR=PRD)后的0.5us到1.5us这段时间内,DC模块忽略所有事件。1.5us之后,系统恢复对真实故障信号的检测。

一个至关重要的提醒

手册中特别强调:你必须配置消隐窗口,使得故障输入信号在消隐窗口结束后,至少保持3个ePWM时钟周期(TBCLK)的有效状态。这是为了确保Trip-Zone的锁存器有足够的时间来可靠地捕捉到故障信号。如果信号有效时间太短,可能无法被锁存,导致保护失效。在设计比较器电路和设置消隐参数时,必须把这条硬件时序要求考虑进去。

3.3 高级功能:事件锁存与同步

在图26-52和26-53中,可以看到DCxEVT1LAT这个锁存器。这个功能对于像相移全桥(PSFB)这样复杂的拓扑非常有用。

锁存器的作用: 在某些应用中,我们需要对CBC事件和OST事件采取不同的动作。DCxEVT1LAT可以锁存住一个DC事件,直到特定的清除条件发生。其清除条件(DCxCTL.EVTy.LATCLRSEL)可以配置为:

  • CNT=0时清除
  • CTR=PRD时清除
  • CNT=0CTR=PRD时清除

这模仿了CBC故障的自动清除机制。你可以选择将.force信号来源于原始事件还是锁存后的事件(通过DCxCTL.EVTyLATSEL配置)。这样,就能实现诸如“第一次过流触发CBC动作,如果下个周期过流仍存在,则触发OST锁存并执行完全关断”的复杂保护逻辑。

同步信号(.sync)的应用DCAEVT1.syncDCBEVT1.sync可以输出到时间基子模块,用于同步TBCTR计数器。这意味着,你可以用一个外部事件(比如由CMPSS检测到的过零点)来重新同步PWM的相位,这在无传感器电机控制或需要与外部时钟严格同步的场合非常有用。

4. Event-Trigger模块:精准的事件调度器

Event-Trigger(ET)模块是ePWM内部的“事件管理器”和“定时触发器”。它接收来自时间基(TB)、计数器比较(CC)和数字比较(DC)子模块的各种事件,然后以可编程的节奏,去触发中断(EPWMxINT)和ADC转换启动(EPWMxSOCA/B)。

4.1 核心机制:事件预分频

ET模块最强大的功能之一是事件预分频。不是每个事件都需要立刻响应。例如,你可能只想在每第4个CTR=CMPA事件(即每4个PWM周期)才触发一次中断,用于执行速度较慢的控制环路计算。

这通过两个寄存器协同工作来实现:

  • ETSEL事件选择寄存器。决定哪些事件可以作为触发源。例如,ETSEL[INTSEL]选择中断源,可以是CTR=0,CTR=PRD,CTR=CMPA(上升/下降沿)等。
  • ETPS事件预分频寄存器。控制触发节奏。它包含一个计数器(INTCNTSOCACNT)和一个��期值(INTPRDSOCAPRD)。
    • 工作流程:当所选事件发生时,计数器INTCNT加1。当INTCNT累加到等于INTPRD时,才产生一个中断脉冲,同时INTCNT清零,重新开始计数。INTPRD可以设置为1(每个事件都中断)、2(每两个事件中断一次)等。

增强型预分频: 对于更精细的控制,ETINTPSETSOCPS寄存器提供了第二套计数器(INTCNT2/SOCACNT2)和周期值(INTPRD2/SOCAPRD2),支持最多每15个事件触发一次。通过ETPS[INTPSSEL]位来选择使用哪套计数器系统。

4.2 配置流程与ADC同步触发实战

以配置一个由DC模块事件触发、且每两次事件才启动一次ADC转换为例:

  1. 选择事件源: 假设我们想用DCAEVT1.soc事件来触发ADC的SOCA。

    • 配置ETSEL[SOCASEL] = 10b(选择DCAEVT1.soc作为SOCA事件源)。具体数值需查手册映射表。
  2. 配置预分频: 我们希望每发生两次DCAEVT1.soc事件,才启动一次ADC转换。

    • 设置ETPS[SOCAPRD] = 2(周期为2)。
    • ETPS[SOCACNT]寄存器是只读的,它会从0开始,每次事件发生时自动加1,到2时触发SOCA脉冲并归零。
  3. 使能SOCA生成

    • 设置ETSEL[SOCAEN] = 1,使能SOCA脉冲发生器。
  4. 关联ADC模块: 在ADC模块的配置中,需要将对应的EPWMxSOCA信号分配给某个ADC转换序列的启动触发器。

这样,当Digital Compare模块产生一个事件(比如电流超过阈值),DCAEVT1.soc信号有效。ET模块的计数器加1。当第二次事件发生时,计数器等于周期值2,ET模块便产生一个EPWMxSOCA脉冲信号,触发ADC启动一次精确的采样。这种硬件级的同步,消除了软件延迟带来的抖动,对于需要高精度采样时刻的应用(如功率因数校正、谐振变换器)至关重要。

4.3 计数器初始化与同步

ETCNTINITETCNTINITCTL寄存器提供了在特定时刻(如收到同步输入信号EPWMxSYNCI时)初始化INTCNT2/SOCACNT2计数器的能力。这用于在多模块同步系统中,确保所有ePWM模块的事件计数器从同一个起点开始,从而实现中断和ADC采样的严格同步触发。

5. 综合应用与高级调试技巧

理解了各个模块后,如何将它们串联起来解决实际问题,才是工程能力的体现。

5.1 构建一个完整的逐周期峰值电流保护系统

这是电机和电源控制中最经典的应用之一。

  1. 信号链: 电机相电流通过采样电阻和运放,送入CMPSS(模拟比较器子系统)。CMPSS内部与一个可编程的参考电压(即电流限值)进行比较。
  2. Digital Compare配置
    • 将CMPSS的输出(例如CMPSS1.TRIPH)通过Input X-BAR映射到DC模块的输入,例如配置为DCAH信号。
    • 配置TZDCSEL,使得当DCAH为高(电流超限)时,产生DCAEVT1事件。
    • 配置DCFCTL,DCFOFFSET,DCFWINDOW,设置合理的消隐窗口,避开开关噪声。
  3. Trip-Zone配置
    • DCAEVT1.force信号配置为Cycle-by-Cycle故障源(TZSEL[CBCx] = 1,具体x取决于映射)。
    • 配置TZCTL[TZA] = 2,使得当CBC故障触发时,强制对应的PWM输出为低(关闭该相上管或下管)。
  4. Event-Trigger配置(可选)
    • 使能DCAEVT1.inter中断(TZEINT[DCAEVT1]=1),用于在软件中记录过流事件次数,进行诊断或累计保护。
    • 或者,使能DCAEVT1.soc,在电流达到阈值的瞬间触发ADC采样,用于更复杂的算法。

这样,一旦电流超过设定值,CMPSS输出变高,DC模块在消隐窗口外检测到DCAH有效,立即产生DCAEVT1.force信号。Trip-Zone模块以CBC模式响应,在本PWM周期内立即强制关断PWM输出,限制电流上升。到了下一个PWM周期开始,如果电流已回落(CMPSS输出变低),则保护自动解除,PWM恢复正常输出。整个过程完全由硬件完成,响应时间在几十到几百纳秒级,软件无需干预。

5.2 调试与排查常见问题

  1. 故障无动作

    • 检查信号通路: 用示波器或寄存器查看工具,一级级确认。GPIO引脚有信号吗?Input X-BAR选择对了吗?DCTRIPSELDCAHTRIPSEL等寄存器配置正确吗?DCAH/DCAL状态位是否变化?
    • 检查使能TZSEL寄存器中对应的故障源使能了吗?TZCTL动作配置对吗?
    • 检查消隐窗口: 是否因为DCFOFFSETDCFWINDOW设置不当,把真实故障信号也给“消隐”掉了?计算一下时间参数。
  2. 误触发频繁

    • 首要怀疑对象是噪声: 检查硬件布局,电流采样回路是否远离功率开关回路?比较器参考电压是否干净?大概率需要调整消隐窗口参数(增加DCFOFFSET延迟,或加大DCFWINDOW宽度)。
    • 检查输入信号极性TZ引脚和DC输入信号是高电平有效还是低电平有效?TZCTL中配置的TZx信号极性选择位(如果支持)是否正确?
  3. One-Shot故障后无法恢复

    • 确认在中断服务程序(ISR)中是否清除了TZFLG[OST]标志(通过写TZCLR[OST]=1)。
    • 检查是否清除了TZFRC[OSHT]寄存器中的强制状态位(如果之前被置位)。
    • 检查故障源信号是否已经真正消失。有时需要软件复位整个ePWM模块或相关外设。
  4. 中断进不去

    • 检查本地使能TZEINT寄存器中对应的事件中断使能位开了吗?
    • 检查PIE配置EPWMxTZINT在PIE模块中是否正确映射到了中断向量表?该中断在PIE和CPU级别是否被使能(PIECTRL,IER寄存器)?
    • 检查标志位: 是否之前的中断标志未清除?TZFLG位为1时会阻止新的中断产生。

掌握ePWM的Trip-Zone和Digital Compare模块,意味着你掌握了在电力电子系统中实现纳秒级实时保护的钥匙。从简单的引脚故障保护,到基于模拟比较的复杂逐周期限流,再到与ADC采样的精密同步,这套硬件机制提供了无与伦比的可靠性和灵活性。配置时牢记“信号流”思想,从外部引脚到内部事件,再到最终动作,逐级检查。调试时善用寄存器的状态位和示波器,重点关注消隐窗口和时序要求。把这些模块吃透,你设计的电机驱动或电源产品,在稳定性和可靠性上就能甩开对手一个身位。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询