深入解析C2000 ePWM死区生成与硬件故障保护机制
1. 项目概述:为什么我们需要关注ePWM的死区与保护?
在电力电子和电机驱动的世界里,PWM(脉冲宽度调制)信号就像是驱动系统的“心跳”。无论是控制一台伺服电机的转速和扭矩,还是让一台变频器输出稳定的交流电压,最终都要落实到对功率开关器件(如IGBT、MOSFET)的精确开关控制上。然而,这个看似简单的“开”和“关”背后,却隐藏着两个足以瞬间摧毁整个硬件系统的“杀手”:桥臂直通短路和外部故障。
想象一下,在一个典型的H桥或三相逆变器中,上下两个开关管是互补导通的。理想情况下,一个关断后,另一个再导通。但在现实中,半导体器件的开关并非瞬时完成,存在关断延迟。如果控制信号在逻辑上同时为“开”,哪怕只有几十纳秒的重叠,也会导致电源正负极直接短路,产生巨大的“直通”电流,轻则烧毁开关管,重则引发爆炸。这就是为什么我们必须引入“死区时间”——在互补的PWM信号切换之间,人为插入一段双方都为“关”的安全延迟区。
而另一个“杀手”是系统运行时突发的过流、过压、过热等故障。如果等软件检测到这些故障再做出反应,往往为时已晚。硬件必须能“本能”地、在微秒级甚至纳秒级的时间内,强制PWM输出进入安全状态(如全部拉低或高阻),这就是故障保护机制。
德州仪器(TI)C2000系列微控制器中的增强型脉宽调制器(ePWM)模块,之所以在工业界备受推崇,正是因为它将这两大关键功能——可编程死区生成和硬件级故障保护(Trip-Zone)——以高度集成和灵活配置的方式做进了硬件里。它不是一个简单的PWM发生器,而是一个完整的“安全驾驶系统”。今天,我们就抛开手册上那些冰冷的框图,从一线工程师的视角,深入拆解ePWM的死区生成与故障保护机制,看看它们如何协同工作,守护着每一次功率开关的安全。
2. ePWM模块架构与信号流:理解数据通路是基础
在深入死区和保护之前,我们必须先理清ePWM模块内部的数据流向。很多新手配置寄存器时感到混乱,根本原因是对信号从哪里来、到哪里去不清晰。ePWM模块是一个高度结构化的子系统,由多个子模块串联而成,每个子模块负责一项特定功能。
2.1 核心子模块的信号链
一个完整的ePWM通道(如ePWM1)生成一对互补输出(EPWMxA和EPWMxB)的典型信号链如下:
时基模块(TB):这是整个ePWM的“心脏”和“节拍器”。它包含一个计数器(TBCTR)和一个周期寄存器(TBPRD)。计数器在零和周期值之间循环计数(增、减或增/减模式),决定了PWM的载波频率。
CTR=PRD(计数器等于周期值)和CTR=0(计数器等于零)是两个最核心的时间基准事件,它们像节拍一样,驱动着后续所有动作的时序。计数比较模块(CC):这是决定PWM占空比的“大脑”。它包含两个比较寄存器CMPA和CMPB。当TB模块的计数器值(TBCTR)与CMPA或CMPB的值匹配时,就会产生
CTR=CMPA和CTR=CMPB事件。这些事件是PWM边沿位置的“发令枪”。动作限定模块(AQ):这是将“事件”转换为“动作”的“执行器”。它接收来自TB和CC的事件(如
CTR=PRD,CTR=CMPA等),并根据用户配置,决定在哪个事件发生时,对输出信号EPWMxA和EPWMxB执行何种动作:置高(Set)、清零(Clear)或翻转(Toggle)。AQ模块的输出,是未经死区处理的原始PWM信号对,我们称之为EPWMxA In和EPWMxB In。死区模块(DB):这是我们今天要重点剖析的第一个主角。它接收来自AQ的
EPWMxA In和EPWMxB In信号,并根据配置,对信号的上升沿和/或下降沿插入可编程的延迟,最终生成带死区的EPWMxA Out和EPWMxB Out。这是防止桥臂直通的关键硬件环节。PWM斩波模块(PC):这是一个可选模块,主要用于驱动脉冲变压器型栅极驱动器。它用一个高频载波信号去调制PWM波形,第一个脉冲宽度可调(One-Shot),用于提供足够的开启能量,后续维持脉冲的占空比也可调,以优化变压器磁特性,防止饱和。在很多使用直接驱动或光耦驱动的场合,此模块可以旁路。
故障保护模块(TZ):这是我们今天要剖析的第二个主角,系统的“紧急制动”装置。它监控多达6路外部故障输入信号(TZ1-TZ6)以及内部数字比较事件。一旦触发,它能以最高优先级、绕过CPU干预,直接强制ePWM输出进入预设的安全状态(高、低或高阻)。
事件触发模块(ET):负责管理ePWM内部产生的事件(如
CTR=CMPA,CTR=0),并可以将其分频后作为中断请求发送给CPU,或作为ADC转换的启动信号(SOC)。这对于实现基于PWM周期的同步采样至关重要。
关键理解点:信号流是单向且可配置的。例如,死区模块(DB)可以完全被旁路,让AQ的输出直通。故障保护模块(TZ)的作用点是在最终输出级,它能够覆盖前面所有模块(AQ, DB, PC)产生的输出状态,这是其实现硬件快速保护的基础。
2.2 寄存器配置的层次化思维
面对ePWM数十个寄存器,切忌盲目填写。我的经验是遵循“从全局到局部,从核心到辅助”的配置顺序:
- 时基(TB):先定下PWM的“心跳”频率(配置TBPRD和时钟预分频TBCTL[CLKDIV])和计数模式(增、减、增/减)。
- 比较(CC):根据所需的占空比,计算并填入CMPA和CMPB的值。注意影子寄存器的使用,以实现平滑更新。
- 动作(AQ):根据计数模式和想要的PWM波形(高有效、低有效、对称不对称等),配置AQCTLA和AQCTLB,定义在
CTR=CMPA,CTR=CMPB,CTR=PRD,CTR=0这些事件发生时,输出应该做什么。 - 死区(DB):根据驱动电路的需求(高侧/低侧驱动芯片的输入逻辑),配置死区模式、延迟时间。
- 故障保护(TZ):根据硬件保护电路的设计,配置哪些TZ信号有效、是单次触发还是周期循环触发、触发后输出强制为何种状态。
- 事件触发与中断(ET):最后配置在什么事件下产生中断或启动ADC,用于软件层的控制与保护。
这个顺序模拟了信号的实际生成流程,能帮助你建立清晰的逻辑,避免配置冲突。
3. 死区生成器(DB)子模块深度解析
死区时间不是简单的“两边都关”,其具体实现需要根据功率拓扑和驱动芯片的极性来灵活调整。ePWM的DB模块提供了工业级应用所需的全部灵活性。
3.1 死区的本质与硬件实现原理
死区的目的是确保在任何切换瞬间,互补的两个开关管都有一个共同关断的“安全窗口”。这个窗口时间必须大于功率器件的最长关断延迟时间。在硬件上,DB模块内部包含两个独立的10位计数器,分别用于上升沿延迟(RED)和下降沿延迟(FED)。
它的工作流程可以这样理解:模块的输入是来自AQ的EPWMxA In和EPWMxB In。对于每一个需要被延迟的边沿(上升或下降),对应的延迟计数器就开始从预设值(DBRED或DBFED)向下计数到零。在计数器归零之前,输出信号保持原状态;计数器归零时,输出信号才发生跳变。这就实现了边沿的“推迟”。
重要提示:延迟计数器是以时间基准时钟TBCLK为节拍的。TBCLK通常由系统时钟分频���来。因此,死区时间
T_dead = 延迟计数值 × T_TBCLK。如果使能了半周期时钟模式(DBCTL[HALFCYCLE]=1),则计数时钟频率加倍,分辨率提高一倍,此时T_dead = 延迟计数值 × (T_TBCLK / 2)。在计算死区时间时,务必确认TBCLK的频率。
3.2 四大核心配置模式详解
DB模块的灵活性主要体现在DBCTL[IN_MODE](输入模式)、DBCTL[OUT_MODE](输出模式)和DBCTL[POLSEL](极性选择)这三个控制位的组合上。手册中的表格列出了7种模式,但对于大多数应用,我们主要关注其中4种经典极性模式。为了直观理解,我们假设AQ模块产生了一个简单的、高有效的EPWMxA In信号作为源。
模式2:高有效互补(Active High Complementary, AHC)
- 配置:
POLSEL=1,OUT_MODE使能RED和FED(通常为0x3)。 - 波形行为:
EPWMxA Out是EPWMxA In同时经过上升沿和下降沿延迟后的信号。EPWMxB Out则是EPWMxA Out的反相信号。 - 应用场景:这是最常用的模式之一。适用于驱动高侧和低侧都需要高电平导通的桥臂。例如,很多半桥驱动芯片(如IR2110)的输入逻辑就是如此。AHC模式能确保两个输出永远不会同时为高,中间的死区时间双方都为低。
- 实操配置示例:
// 假设使用ePWM1, TBCLK = 100MHz (10ns) EPwm1Regs.DBFED.all = 50; // 下降沿延迟 50 * 10ns = 500ns EPwm1Regs.DBRED.all = 50; // 上升沿延迟 50 * 10ns = 500ns EPwm1Regs.DBCTL.bit.IN_MODE = 0; // EPWMxA In作为两个延迟的源(默认) EPwm1Regs.DBCTL.bit.POLSEL = 1; // 极性选择:AHC模式 EPwm1Regs.DBCTL.bit.OUT_MODE = 3; // 使能上升沿和下降沿延迟
模式3:低有效互补(Active Low Complementary, ALC)
- 配置:
POLSEL=0,OUT_MODE使能RED和FED。 - 波形行为:
EPWMxA Out是EPWMxA In同时经过上升沿和下降沿延迟后的信号。EPWMxB Out是EPWMxA Out的反相信号。 - 应用场景:同样常用。适用于驱动高侧和低侧都需要低电平导通的桥臂。在一些使用光耦隔离驱动的场合,低电平有效更常见。ALC模式确保两个输出永远不会同时为低,死区时间双方都为高。
- 与AHC的对比:AHC和ALC是“互补”的两种模式,区别仅在于
POLSEL的配置。它们生成的EPWMxA Out和EPWMxB Out在相位上始终是反相的。选择哪一种,完全取决于你的功率级驱动电路逻辑。
模式4:高有效(Active High, AH)
- 配置:
POLSEL=0,OUT_MODE使能RED和FED。 - 波形行为:
EPWMxA Out是EPWMxA In经过上升沿延迟后的信号。EPWMxB Out是EPWMxA In经过下降沿延迟后的信号。注意:这两个输出不是互补的!它们都是高有效,但在边沿上错开了一个死区时间。 - 应用场景:常用于驱动需要两个独立高有效信号的场合,并且这两个信号需要错开。例如,在某些非对称半桥拓扑或需要控制两个不同开关管的时序时。它不适用于标准的互补桥臂驱动,因为两个输出可能同时为高。
模式5:低有效(Active Low, AL)
- 配置:
POLSEL=1,OUT_MODE使能RED和FED。 - 波形行为:
EPWMxA Out是EPWMxA In经过上升沿延迟后的信号的反相。EPWMxB Out是EPWMxA In经过下降沿延迟后的信号的反相。两个输出都是低有效,且边沿错开。 - 应用场景:与AH模式类似,但输出极性为低有效。适用于需要两个独立低有效错相信号的场景。
模式1与6、7:模式1是旁路模式,DB模块不生效。模式6和7是部分旁路模式,只对一个边沿进行延迟,另一个直通,用于一些特殊的时序调整场景,在标准死区生成中较少使用。
3.3 死区时间计算与配置陷阱
死区时间的计算看似简单(计数值 × 时钟周期),但实际配置中容易踩坑。
1. 时钟源与分辨率: 死区延迟计数器DBFED和DBRED是10位寄存器,最大值为1023。延迟时间T_delay = Value × T_TBCLK。如果你的系统时钟SYSCLK为100MHz,TBCLK配置为SYSCLK/2(即50MHz,周期20ns),那么最大死区时间为1023 × 20ns = 20.46us。对于大多数开关频率在几十kHz的应用,这个范围足够。但如果你需要非常小的死区时间(如几十纳秒),就需要提高TBCLK的频率(减小分频比),或者使能半周期时钟模式来获得更高的分辨率。
2. 不对称死区的应用: DBFED和DBRED是独立配置的,这意味着你可以设置不对称的死区时间。例如,上管关断到下管导通的延迟(T_delay_off_on)设为500ns,而下管关断到上管导通的延迟(T_delay_on_off)设为700ns。这在某些对开关损耗或EMI有特殊要求的场景中可能有用。但绝大多数情况下,对称死区是标准做法。
3. 输入模式(IN_MODE)的灵活运用: 默认情况下(IN_MODE=0),EPWMxA In同时作为RED和FED的源。但IN_MODE可以配置为让EPWMxA In和EPWMxB In分别作为不同延迟的源。这有什么用?它允许你基于两个独立的AQ输出信号来生成死区。例如,在复杂的多电平逆变器或某些需要非对称PWM生成的场景中,你可能需要更复杂的死区逻辑。但对于标准的互补PWM生成,使用默认模式即可。
4. 与AQ模块的协同:死区模块处理的是边沿延迟,它不改变信号的占空比。占空比是由CMPA/CMPB的值和AQ的动作决定的。一个常见的误区是:设置了死区后,输出的有效占空比会变小。是的,从功率器件的导通时间来看确实如此,因为死区时间双方都不导通。但ePWM模块输出的PWM信号的占空比(高电平时间/周期)并没有被DB模块改变,它只是把边沿挪动了位置。真正的“有效占空比”损失需要在软件控制算法中预先补偿,这就是所谓的“死区补偿”。例如,如果你想在电机绕组上得到50%的电压,考虑到死区时间,你可能需要将CMPA的值设置为略高于50%占空比对应的值,以抵消死区期间无输出电压的影响。
4. 故障保护(Trip-Zone)子模块实战指南
如果说死区是“主动防御”,那么故障保护就是“被动应急”。Trip-Zone(TZ)子模块是ePWM安全体系的基石,它实现了纳秒级的硬件保护响应,速度远超任何软件中断。
4.1 故障信号来源与分类
TZ模块支持多达6路异步故障输入(TZ1-TZ6),它们都是低电平有效(即故障发生时信号拉低)。这些信号来源多样,构成了一个立体的保护网络:
- TZ1, TZ2, TZ3:通常连接到GPIO引脚,用于接收外部硬件故障信号。例如,来自电流采样比较器的过流信号、来自温度传感器的过热信号、来自驱动芯片的DESAT(去饱和)故障信号等。这是最常用、最直接的故障输入。
- TZ4:由正交编码器模块(eQEP)的错误信号
EQEP1ERR和EQEP2ERR组合生成。用于电机位置传感器断线或信号异常保护。 - TZ5:连接到系统时钟振荡器失效或PLL失锁逻辑。用于检测芯片时钟源故障,这是一种极其严重的系统级故障。
- TZ6:连接到CPU的调试模式暂停指示。当芯片处于仿真调试暂停状态时,此信号有效,可以用于在调��时安全关闭PWM输出。
此外,TZ模块还能响应来自数字比较(DC)子模块的内部事件DCAEVT1/2和DCBEVT1/2。DC子模块可以将片内ADC的比较结果或外部GPIO信号转换为数字事件,从而无需外部比较器硬件即可实现基于模拟量的快速保护(例如,母线电压的软件比较保护)。
4.2 两种保护模式:OSHT与CBC
这是TZ模块最核心的概念,理解它们的区别对于设计可靠的保护系统至关重要。
单次触发(One-Shot, OSHT)模式:
- 行为:当OSHT事件发生时,ePWM输出立即被强制为TZCTL寄存器中预设的安全状态(高、低、高阻),并且锁定在该状态。即使故障信号随后消失,输出也不会自动恢复。
- 清除方式:必须由软件显式地向
TZCLR[OST]位写1,才能清除OST标志,并释放对PWM输出的强制,使其恢复正常工作。 - 应用场景:用于处理严重的、不可自恢复的故障。例如:
- 硬件过流(DESAT保护):一旦触发,意味着开关管可能已损坏或处于危险状态,必须彻底关闭系统,等待人工干预或软件进行完整的状态检查和复位。
- 过热保护:温度超过绝对安全阈值。
- 母线过压/欠压:超出硬件安全范围。
- 系统级严重错误(如时钟失效)。
周期循环(Cycle-By-Cycle, CBC)模式:
- 行为:当CBC事件发生时,ePWM输出同样被立即强制为安全状态。但是,在每个PWM周期开始时(当时间计数器TBCTR归零时),硬件会自动检查故障信号是否仍然存在。如果故障消失,则输出自动恢复正常调制;如果故障依然存在,则输出在本周期内继续保持强制状态。
- 清除方式:故障状态的清除是硬件自动的,基于每个PWM周期。但CBC中断标志位
TZFLG[CBC]需要软件清除。 - 应用场景:用于处理可自恢复的、需要限流的故障。最典型的应用就是峰值电流限制。例如,在电机启动或负载突变时,电流可能会瞬间超过设定阈值。CBC模式可以在电流超限的PWM周期内立即关闭驱动,限制电流峰值;在下个周期如果电流回落,则自动恢复驱动。这样就实现了类似“打嗝”式的连续保护,既保护了器件,又允许系统在故障消除后继续运行。
模式选择的心得:简单来说,“要命”的故障用OSHT,“要钱”(限制性能)的故障用CBC。过流保护通常可以设计为两级:第一级用CBC做快速限流,防止偶尔的冲击;如果CBC持续触发(说明过载严重),则软件累计错误次数,最终触发第二级的OSHT,进行完全关断。
4.3 关键寄存器配置与实战代码
配置TZ模块,主要涉及以下几个寄存器:
TZSEL(Trip-Zone选择寄存器):决定本ePWM模块响应哪些TZ信号或DC事件,以及每个事件是OSHT模式还是CBC模式。
TZSEL[OSHTn]:置1表示TZn信号或对应的DC事件作为OSHT源。TZSEL[CBCn]:置1表示TZn信号或对应的DC事件作为CBC源。- 注意:同一个TZn信号不能同时配置为OSHT和CBC源,只能二选一。但不同的TZ信号可以配置为不同模式。
TZCTL(Trip-Zone控制寄存器):定义当故障发生时,输出引脚EPWMxA和EPWMxB被强制为何种状态。
TZCTL[TZA]和TZCTL[TZB]:各2位,控制对应引脚。00:强制为高阻状态(Hi-Z)。这是最安全、最常用的设置,因为它能同时关断上下桥臂,避免任何直通风险。01:强制为高电平。10:强制为低电平。11:无动作(忽略故障)。
- 对于DC事件(
DCAEVT1/2,DCBEVT1/2),也有独立的控制位,配置方式相同。
TZEINT(Trip-Zone中断使能寄存器):使能特定故障事件触发CPU中断。即使输出被硬件强制,我们通常也希望软件能及时知道故障发生,以便记录日志、进行故障分类或尝试恢复。
TZFLG(标志寄存器)和TZCLR(清除寄存器):用于查询和清除故障标志位。对于OSHT标志,必须在故障物理原因消除后,由软件清除标志,PWM输出才能恢复。
实战配置示例:实现基于TZ1的硬件过流保护(OSHT)和基于TZ2的峰值电流限制(CBC)
假设我们的硬件设计如下:
- TZ1引脚连接硬件比较器输出,用于严重过流保护(OSHT)。
- TZ2引脚连接另一个比较器或由DC模块产生,用于峰值电流限制(CBC)。
- 我们希望故障时,ePWM1A和1B输出都进入高阻状态。
// 第一步:配置TZ引脚为异步故障输入功能(通常在GPIO复用寄存器中设置) // 假设TZ1对应GPIO12, TZ2对应GPIO13。这部分代码依赖于具体型号,此处示意。 EALLOW; // 解除寄存器保护 GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 3; // 配置GPIO12为TZ1功能 GpioCtrlRegs.GPBMUX2.bit.GPIO61 = 3; // 配置GPIO13为TZ2功能 // 通常还需要配置输入限定器,但为了最快响应,常配置为异步、无同步、无滤波。 EDIS; // 第二步:配置ePWM1的Trip-Zone模块 EALLOW; // 1. 选择故障源及模式 EPwm1Regs.TZSEL.bit.OSHT1 = 1; // TZ1作为单次触发(OSHT)源 EPwm1Regs.TZSEL.bit.CBC2 = 1; // TZ2作为周期循环(CBC)源 // 注意:TZ1和TZ2不能同时使能为同一种模式源,此处是分别配置,正确。 // 2. 配置故障动作:强制输出为高阻(最安全) EPwm1Regs.TZCTL.bit.TZA = TZ_FORCE_HIZ; // 0, 高阻 EPwm1Regs.TZCTL.bit.TZB = TZ_FORCE_HIZ; // 0, 高阻 // 如果是DC事件触发的保护,也需要配置DCAEVT1/2等对应的TZCTL位。 // 3. 使能故障中断(可选,但强烈建议) EPwm1Regs.TZEINT.bit.OST = 1; // 使能OSHT中断 EPwm1Regs.TZEINT.bit.CBC = 1; // 使能CBC中断 // 注意:还需要在PIE控制器中使能EPWM1_TZINT中断,并编写对应的中断服务函数(ISR)。 EDIS; // 第三步:在中断服务函数(ISR)中处理故障 __interrupt void epwm1TzIsr(void) { // 1. 检查是哪种故障触发的 if (EPwm1Regs.TZFLG.bit.OST == 1) { // OSHT故障发生(严重过流) SystemFaultLog(FAULT_OVER_CURRENT_OSHT); // 记录故障 // 执行安全操作,如关闭其他PWM模块、断开接触器等 EPwm1Regs.TZCLR.bit.OST = 1; // 清除OST标志!这是恢复输出的前提。 // 注意:清除标志前,必须确保外部故障信号(TZ1)已消失,否则清除后标志会立刻再次置起。 } if (EPwm1Regs.TZFLG.bit.CBC == 1) { // CBC故障发生(峰值电流限制) SystemFaultLog(FAULT_CURRENT_PEAK_CBC); // 记录限流事件 // CBC标志会在下个PWM周期自动清除条件,但中断标志需手动清除 EPwm1Regs.TZCLR.bit.CBC = 1; // 清除CBC中断标志 // 可以在这里增加逻辑,如果CBC中断过于频繁,可升级为OSHT故障 } // 清除PIE中断应答位 PieCtrlRegs.PIEACK.all = PIEACK_GROUP3; }4.4 高级功能:数字比较(DC)子模块与软件保护联动
TZ模块的强大之处还在于它与数字比较(DC)子模块的联动。DC模块允许你将片内ADC的转换结果与预设的阈值进行比较,并在比较条件满足时,直接生成DCAEVT或DCBEVT事件来触发TZ保护。
这实现了“软件设定阈值,硬件执行保护”的快速模拟量保护。其速度比“ADC采样->CPU读取->软件比较->软件操作GPIO触发TZ”这条路径快得多。
配置思路:
- 配置ADC模块,使其在特定的时刻(如PWM周期中点)对电流或电压进行采样。
- 配置DC模块的
DCTRIPSEL寄存器,选择ADC结果作为DCAH/DCAL(高阈值/低阈值)的信号源。 - 在
DCCMPCTL寄存器中设置比较阈值。 - 配置
TZDCSEL寄存器,将DCAEVT1(例如,ADC结果大于高阈值)事件映射为TZ模块的OSHT或CBC事件源。 - 在
TZSEL和TZCTL中配置相应的保护和动作。
这样,当ADC采样值超过软件设定的安全阈值时,硬件在几个时钟周期内即可触发PWM输出保护,实现了微秒级的软件可配置的模拟量保护,极大地增强了系统的可靠性。
5. 死区与保护机制的协同设计与调试技巧
在实际系统中,死区生成和故障保护不是孤立工作的,它们需要协同设计,并与软件配合,才能构建一个既高效又安全的控制系统。
5.1 参数计算与系统考量
死区时间计算:
- 确定功率器件参数:查阅IGBT或MOSFET的数据手册,找到关键参数:关断延迟时间(td(off))和下降时间(tf)。最坏情况下的关断总时间约为
td(off) + tf。同时,也要考虑驱动芯片的传播延迟。 - 留取安全裕量:死区时间应大于上下管关断延迟时间的最大值之和,并留出至少20%-30%的裕量。例如,上管关断最慢需200ns,下管关断最慢需180ns,则死区时间至少设为
(200+180) * 1.3 ≈ 500ns。 - 计算寄存器值:根据系统时钟和TBCLK分频,计算DBFED/DBRED的值。例如,
TBCLK = 50MHz (20ns),所需死区500ns,则计数值为500ns / 20ns = 25。将其写入DBFED和DBRED。
保护响应时间评估: TZ保护是异步的,其响应时间极短,主要包括:
- TZ输入信号的传播延迟(几个ns)。
- ePWM模块内部逻辑延迟(通常小于1-2个TBCLK周期)。
- 输出强制电路的延迟。 总体通常在几十纳秒到一百纳秒以内,远快于软件响应。这是它能有效防止短路电流上升的关键。
5.2 常见问题与排查实录
问题1:死区时间设置后,电机运行时仍有异常噪音或发热严重。
- 排查:
- 测量验证:使用示波器同时测量EPWMxA和EPWMxB引脚输出的波形。确认死区时间是否与设定值相符,以及是否存在任何瞬间的重叠(毛刺)。
- 检查极性模式:确认DBCTL[POLSEL]和DBCTL[OUT_MODE]配置是否正确。最保险的方法是,在空载或轻载下,用示波器观察驱动芯片输入端的波形,确保互补的两路信号在任何时候都不会同时为“有效”电平(根据你的驱动芯片定义是高有效还是低有效)。
- 检查AQ配置:确保AQ模块生成的是正确的互补基础波形。如果AQ本身配置错误(例如两路输出同相),那么死区模块也无法纠正。
- 考虑最小脉宽:如果计算出的死区时间过长,或者PWM占空比非常小/非常大,可能导致有效脉冲宽度小于功率器件的最小导通/关断时间。此时需要软件限制最小占空比。
问题2:故障保护(TZ)触发后,PWM输出无法恢复正常。
- 排查:
- 检查TZ标志位:在调试器中查看
TZFLG寄存器。如果OST标志位为1,说明处于OSHT锁定状态。 - 检查清除操作:确认在中断服务程序或主循环中,是否对
TZCLR[OST]进行了写1操作。必须写1才能清除。 - 检查故障源是否持续:在清除OST标志前,用万用表或示波器检查TZ输入引脚的电平。如果故障源(如过流比较器)仍然输出低电平,那么你刚清除OST标志,它立刻又会被置起。需要先排除外部硬件故障。
- 检查TZCTL配置:确认
TZCTL[TZA/TZB]没有错误地配置为11(无动作)。
- 检查TZ标志位:在调试器中查看
问题3:CBC保护频繁触发,导致系统无法正常工作。
- 排查:
- 调整阈值:CBC的电流保护阈值可能设置得太接近正常工作电流。在负载波动时容易误触发。需要根据电机最大允许峰值电流重新校准。
- 检查采样时机:确保ADC在正确的时刻采样电流(例如在PWM周期中间,避开开关噪声)。错误的采样点会导致错误的过流判断。
- 增加滤波:如果硬件比较器有噪声,可以考虑在TZ输入引脚前端增加简单的RC滤波(但会略微增加响应时间),或者使用DC模块的软件滤波功能。
- 检查布线:大电流环路产生的噪声可能耦合到电流采样或比较器电路中。检查PCB布局,确保采样回路面积小,远离干扰源。
问题4:使用DC模块进行软件保护时,响应似乎不够快。
- 排查:
- ADC采样窗口:确保ADC的采样保持窗口足够宽,以准确捕获信号。太短的窗口可能导致采样值不准确。
- DC模块同步:DC模块的比较操作可能需要与ADC结果同步。检查
DCCTL寄存器中关于信号源选择和同步的配置。 - 阈值更新时机:如果你在动态更新DC的比较阈值,确保在安全的时刻(如PWM周期开始或结束)更新影子寄存器,避免在比较过程中改变阈值导致误触发。
5.3 软件层面的协同策略
硬件保护是最后防线,软件则需要构建更上层的保护和管理逻辑:
- 状态机管理:在故障TZ中断中,不仅清除标志,还要驱动系统进入一个明确的故障状态机。例如,OSHT触发后,系统进入“严重故障”状态,禁止所有PWM输出,点亮故障灯,等待上位机复位指令。
- 故障分级与恢复:区分OSHT(致命)和CBC(可恢复)故障。对于CBC故障,软件可以设置一个计数器,如果在短时间内连续触发超过N次,则判定为持续过载,自动升级为OSHT故障并执行完全关机。
- 死区补偿:在电流环、速度环等控制算法中,考虑死区时间引起的电压损失和非线性,引入死区补偿算法,以提高低速和换向时的控制性能。
- 监控与诊断:软件定期读取
TZFLG寄存器,即使没有进入中断,也能记录故障发生的次数和类型,用于系统健康诊断和预测性维护。
ePWM的死区与故障保护机制,是工业级电机驱动和电源产品可靠运行的基石。吃透其原理,精心配置参数,并做好软硬件协同设计,你的产品就拥有了应对严苛工业环境的“钢筋铁骨”。记住,在功率电子的世界里,对安全细节的偏执,就是对产品生命力的最大保障。
