当前位置: 首页 > news >正文

C2000 ePWM硬件保护:Trip-Zone与Digital Compare实战解析

1. 项目概述与核心价值

在搞电机驱动、数字电源或者任何需要高可靠性PWM输出的嵌入式系统时,最怕的就是“炸管”。一个瞬间的过流或过压,轻则烧毁MOSFET,重则整个系统瘫痪。传统的软件保护有延迟,等CPU反应过来,黄花菜都凉了。这时候,硬件级的即时保护机制就是你的“救命稻草”。德州仪器(TI)C2000系列微控制器中的增强型脉宽调制器(ePWM)模块,其Trip-Zone(故障区)和Digital Compare(数字比较)子模块,正是为此而生。它们不是锦上添花的功能,而是构建坚固系统护城河的基石。

简单来说,Trip-Zone(TZ)是你的紧急刹车系统。它通过专用的硬件引脚(TZ1-TZ6)实时监测故障信号,一旦发现问题,能在纳秒级时间内绕过CPU,直接强制PWM输出进入预设的安全状态(比如全部拉低),切断危险源。而Digital Compare(DC)子模块,则像是一个高度可配置的“信号翻译官”和“智能哨兵”。它能把来自模拟比较器输出或其他数字信号的状态,灵活地映射成ePWM模块能理解的“事件”(Event),进而触发Trip-Zone动作,或者直接产生中断、启动ADC转换,甚至同步其他PWM模块。这意味着你的保护逻辑可以基于更复杂的模拟量条件(比如“母线电压高于某阈值且电流也超标”),而不仅仅是简单的数字电平。

本文将彻底拆解这两个子模块。我不会只复述数据手册的寄存器描述,而是结合我多年在电机控制和电源项目中的实际踩坑经验,带你理解它们的设计哲学、联动方式,并给出从配置思路到寄存器操作、从常见陷阱到调试技巧的完整实战指南。无论你是正在评估方案,还是已经深陷调试泥潭,相信这些内容都能帮你把ePWM的“安全气囊”真正用起来,而不是让它躺在数据手册里睡大觉。

2. 深入理解Trip-Zone子模块:系统的硬件看门狗

2.1 TZ信号来源与架构设计

Trip-Zone的核心思想是异步、快速、可靠。每个ePWM模块都连接着6个TZ信号(TZ1至TZ6),但它们并非“一视同仁”,其来源和用途体现了分层保护的设计理念:

  • TZ1, TZ2, TZ3: 这三个信号来源于GPIO复用模块。这是最常用、最灵活的外部故障输入。你可以将电流采样电路的比较器输出、电压检测信号、驱动芯片的故障输出(如DESAT保护)等,直接连接到这三个引脚。它们通常用于用户自定义的、需要快速响应的故障,如逐周期电流限流、硬件过流保护。
  • TZ4: 其信号源是EQEP1ERR与EQEP2ERR的逻辑或。这是专为电机控制设计的安全特性。当正交编码器(QEP)模块检测到错误(例如信号丢失、计数错误)时,会自动触发此故障,让你能在电机位置反馈异常时立即停止PWM输出,防止失步或飞车。
  • TZ5: 连接到系统时钟(振荡器或PLL)失效逻辑。这是针对芯片自身“心跳”的监控。如果系统主时钟发生故障,PWM的时基将混乱,输出不可预测。TZ5能在此情况下强制PWM进入安全状态,是系统级的安全备份。
  • TZ6: 来源于CPU调试模式暂停指示输出。当你在仿真器中进行单步调试或遇到断点时,TZ6会自动生效,方便你安全地暂停PWM输出而不损坏外围电路。

这种设计将故障分为外部物理故障(TZ1-TZ3)、外围模块故障(TZ4)、时钟故障(TZ5)和调试故障(TZ6),实现了多维度、纵深防御。

实操心得:引脚分配策略在实际PCB布局时,一定要将TZ1-TZ3引脚优先分配给最关键的故障信号,并且走线要短,远离噪声源。例如,在三相逆变器中,我通常将下桥臂的直通保护(Shoot-Through)信号分配给TZ1,因为它要求最高的响应速度。TZ4、TZ5、TZ6通常由内部逻辑自动管理,但务必在软件初始化时确认其默认状态是否符合预期。

2.2 两种核心保护模式:OSHT与CBC

TZ子模块提供了两种响应模式,对应不同严重等级的故障:

2.2.1 单次触发单次触发模式用于处理严重的、不可恢复的故障,例如严重的短路、过压或系统级错误。其行为逻辑是“一击即锁”:

  1. 触发:当配置为OSHT源的TZ信号有效(低电平)时,立即触发。
  2. 动作:立即执行TZCTL寄存器中为TZA/TZBDCAEVT1/DCBEVT1配置的动作(如强制输出高、低或高阻)。
  3. 锁存故障状态会被硬件锁存。即使外部故障信号已经消失,PWM输出也将保持在被强制后的安全状态。
  4. 恢复必须通过软件手动清除。你需要向TZCLR[OST]位写1,才能清除锁存,使PWM输出恢复正常调制。同时,TZFLG[OST]状态标志位会置1,并可配置产生EPWMx_TZINT中断,通知CPU进行故障日志记录或系统复位。

2.2.2 逐周期触发逐周期触发模式用于处理可恢复的、周期性的限流或保护,例如峰值电流保护。其行为逻辑是“每周期仲裁”:

  1. 触发:当配置为CBC源的TZ信号有效时,立即触发。
  2. 动作:立即执行TZCTL寄存器中配置的对应动作。
  3. 自动清除故障状态不是锁存的。当时基计数器TBCTR归零(TBCTR = 0x0000)时,硬件会自动检查TZ信号。如果此时故障信号已消失,则PWM输出在下一个周期自动恢复正常调制;如果故障依然存在,则在新周期再次触发保护动作。
  4. 标志位TZFLG[CBC]标志位会在触发时置1,但它不会阻止PWM在新周期恢复。该标志需要软件手动清除(写TZCLR[CBC]),但如果清除时故障信号仍存在,它会立即再次被置1。

核心配置解析:TZSEL寄存器这是TZ模块的“总开关”和“路由表”。TZSEL[CBCn]TZSEL[OSHTn]位(n=1~6)分别决定每个TZ信号是作为CBC源还是OSHT源。一个TZ信号只能选择一种模式。例如,TZSEL[CBC1]=1TZSEL[OSHT1]=0,表示TZ1是CBC源。TZSEL[DCAEVT1/2]TZSEL[DCBEVT1/2]位则用于将Digital Compare事件映射为OSHT或CBC源,这是两个子模块联动的关键。

2.3 输出动作配置与优先级

当故障发生时,你可以独立配置每个PWM输出通道(EPWMxA和EPWMxB)的行为,通过TZCTL寄存器控制:

TZCTL[TZA]或[TZB]位域EPWMxA/B 动作适用场景与注释
0,0高阻抗最安全的模式。直接关闭驱动器的上下桥臂,使输出悬空。常用于防止短路,但需注意负载可能因惯性产生反电动势。
0,1强制为高强制输出恒定高电平。在某些拓扑中(如某些半桥驱动),这可能是安全状态。需根据具体功率电路判断。
1,0强制为低最常用、最安全的动作。对于大多数桥式电路,强制所有输出为低,可以关断所有开关管,切断电源与负载的连接。
1,1无变化忽略此次故障。可用于调试,或在多路PWM中仅让部分通道响应故障。

动作优先级是一个极易混淆但至关重要的概念。当多个故障源(如TZ信号和DC事件)同时或先后作用于同一个输出引脚时,硬件遵循固定的优先级裁决:

  • 对于EPWMxA引脚TZA配置的动作优先级最高,其次是DCAEVT1,最低是DCAEVT2
  • 对于EPWMxB引脚TZB配置的动作优先级最高,其次是DCBEVT1,最低是DCBEVT2

这意味着,如果一个TZ信号已将输出强制为低(通过TZA),那么即使后续发生一个配置为强制为高的DCAEVT1事件,���出也将保持为低,因为TZA的优先级更高。这确保了最严重的故障拥有最高控制权。

2.4 寄存器配置实战与代码示例

理解了原理,我们来看如何用代码配置。假设一个典型场景:我们使用TZ1(来自硬件比较器的过流信号)作为逐周期限流,使用TZ2(来自另一个比较器的过压信号)作为单次触发的严重故障保护。

// 假设 ePWM1 模块基地址为 EPWM1_BASE // 1. 配置故障源选择寄存器 (TZSEL) // 将 TZ1 配置为逐周期(CBC)源,将 TZ2 配置为单次触发(OSHT)源 EPWM_setTripZoneSource(EPWM1_BASE, EPWM_TZ_SOURCE_DCAEVT1, // DCAEVT1 未使用 EPWM_TZ_SOURCE_DCAEVT2, // DCAEVT2 未使用 EPWM_TZ_SOURCE_DCBEVT1, // DCBEVT1 未使用 EPWM_TZ_SOURCE_DCBEVT2); // DCBEVT2 未使用 // 使用位域操作更清晰(以TI的driverlib风格为例): HWREGH(EPWM1_BASE + EPWM_O_TZSEL) = 0x0000; // 先清零 HWREGH(EPWM1_BASE + EPWM_O_TZSEL) |= EPWM_TZSEL_CBC1; // TZ1 作为 CBC 源 HWREGH(EPWM1_BASE + EPWM_O_TZSEL) |= EPWM_TZSEL_OSHT2; // TZ2 作为 OSHT 源 // 2. 配置故障动作控制寄存器 (TZCTL) // 当CBC故障(TZ1)发生时,将A通道强制拉低,B通道强制拉低 EPWM_setTripZoneAction(EPWM1_BASE, EPWM_TZ_ACTION_EVENT_TZA, // 针对TZA事件(即CBC/OSHT事件) EPWM_TZ_ACTION_LOW); // 动作:强制为低 EPWM_setTripZoneAction(EPWM1_BASE, EPWM_TZ_ACTION_EVENT_TZB, EPWM_TZ_ACTION_LOW); // 当OSHT故障(TZ2)发生时,我们希望动作相同,但通常OSHT和CBC共用TZA/TZB配置。 // 如果需要为DC事件配置不同动作,需使用以下函数: EPWM_setDigitalCompareTripAction(EPWM1_BASE, EPWM_DC_TRIP_TRIPIN1, // DCAEVT1 EPWM_DC_TRIP_OUTPUT_A, EPWM_TZ_ACTION_HIGH); // 例如,DCAEVT1让A输出高 // 3. 使能故障中断(如果需要CPU记录) // 使能CBC和OSHT中断 EPWM_enableTripZoneInterrupt(EPWM1_BASE, EPWM_TZ_INTERRUPT_CBC); EPWM_enableTripZoneInterrupt(EPWM1_BASE, EPWM_TZ_INTERRUPT_OST); // 配置PIE中断向量等(此处省略)... // 4. 在中断服务函数中处理故障标志 __interrupt void epwm1TzISR(void) { uint16_t tzFlags = EPWM_getTripZoneFlags(EPWM1_BASE); if (tzFlags & EPWM_TZ_FLAG_CBC) { // 处理逐周期限流事件 // 可能是瞬时过载,可以记录或调整控制参数 EPWM_clearTripZoneFlag(EPWM1_BASE, EPWM_TZ_FLAG_CBC); } if (tzFlags & EPWM_TZ_FLAG_OST) { // 处理单次触发严重故障! // 1. 记录故障日志(如发生时的电流、电压) // 2. 可能需要执行系统安全停机序列 // 3. 清除标志(注意:清除OST标志不会恢复PWM输出!输出仍被锁存) EPWM_clearTripZoneFlag(EPWM1_BASE, EPWM_TZ_FLAG_OST); // 4. 在确保故障原因已排查后,再通过TZCLR[OST]恢复PWM(通常需要用户操作或重启) // EPWM_forceTripZoneEvent(EPWM1_BASE, EPWM_TZ_FORCE_EVENT_OST); // 这是强制触发,不是清除 // 正确的恢复操作通常是复位整个ePWM模块或重新初始化。 } // ... 清除PIE中断应答位 }

避坑指南:异步与同步TZ信号是异步输入的,这意味着即使系统时钟(SYSCLK)丢失,只要引脚上有有效的低电平脉冲(持续至少3个TBCLK周期宽度),保护仍然能动作。这是“救命”的特性。但这也带来了噪声敏感的问题。务必在硬件上对TZ输入信号进行适当的RC滤波,并在GPIO模块中启用数字滤波(如果支持),以防止误触发。数据手册中“3*TBCLK”的最小脉宽要求,是你设计滤波电路时的重要参考。

3. Digital Compare子模块:灵活的事件引擎

如果说Trip-Zone是简单的紧急按钮,那么Digital Compare就是一个功能强大的可编程逻辑控制器。它允许你将外部数字信号(主要是TZ1-TZ3)进行逻辑组合和条件判断,生成更复杂的事件来驱动ePWM的其他部分。

3.1 核心信号流:从输入到事件

DC子模块的核心流程可以概括为:选择信号 -> 定义条件 -> 生成事件 -> 分发执行

  1. 信号选择: 通过DCTRIPSEL寄存器,你可以指定哪些信号作为“数字比较A高/低”和“数字比较B高/低”的输入源。最常用的源就是TZ1, TZ2, TZ3这三个GPIO引脚。你可以将模拟比较器COMP1的输出接到TZ1,并配置为DCAH(数字比较A高)的信号源。
  2. 事件生成: 通过TZDCSEL寄存器(它属于TZ模块,但功能上服务于DC)来定义事件触发的条件。这是DC模块灵活性的关键。
    • 对于DCAEVT1DCAEVT2事件,你可以定义它们在DCAHDCAL信号处于何种逻辑状态时触发。例如,可以配置DCAEVT1DCAH=1且DCAL=0时触发(即信号为高),DCAEVT2DCAH=0且DCAL=1时触发(即信号为低)。这允许你对信号的上升沿和下降沿分别定义不同的事件。
    • DCBEVT1/2同理,对应DCBHDCBL信号。
  3. 事件分发与过滤: 生成的事件(DCAEVT1/2,DCBEVT1/2)有四个去处:
    • Force: 直接作为“强制”信号送入Trip-Zone模块,可以立即触发PWM输出动作(通过TZCTL[DCAEVT1]等位配置),或作为OSHT/CBC的源(通过TZSEL寄存器选择)。
    • Interrupt: 产生Trip-Zone中断(EPWMx_TZINT),通知CPU。
    • SOC: 作为事件触发子模块的源,用于启动ADC转换(SOCASOCB)。这是实现与模拟信号同步采样的强大工具。
    • Sync: 产生同步脉冲,可以同步本模块或其他ePWM模块的时基计数器(TBCTR)。

此外,事件在分发前还可以选择是否经过一个消隐窗口进行滤波。

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

在电机控制中,功率器件(如IGBT、MOSFET)开关瞬间会产生巨大的电压电流尖峰和噪声。这些噪声很可能被模拟比较器误判为故障信号,导致保护误动作。DC模块的消隐窗口功能就是为了滤除这些开关噪声。

其工作原理类似于一个可编程的“屏蔽时段”:

  1. 对齐点: 窗口的起始点与PWM的特定点对齐,由DCFCTL[PULSESEL]选择,通常是CTR=PRD(周期点)或CTR=0(零点)。这确保了窗口与PWM周期同步。
  2. 偏移量DCFOFFSET寄存器设定一个以TBCLK为单位的延迟。在对齐点之后,经过偏移量这么长时间,消隐窗口才开始。
  3. 窗口宽度DCFWINDOW寄存器定义了窗口的持续时间(同样以TBCLK为单位)。在此窗口期内,所有选定的DC事件都会被忽略。
  4. 应用场景: 例如,在一个采用双采样(中点采样和峰值采样)的电流环中,你知道功率管开关后的一段固定时间内(即死区时间及振铃衰减期)比较器输出是不可靠的。你可以将消隐窗口设置在这段时间,完美避开噪声。

配置示例:滤除开关噪声假设PWM频率为10kHz(周期100us),TBCLK=100MHz(10ns)。开关噪声大约持续2us。

  • 我们希望在每个PWM周期开始(CTR=0)后的0.5us开始屏蔽,持续2.5us。
  • 计算:偏移量 = 0.5us / 10ns = 50个TBCLK周期。窗口宽度 = 2.5us / 10ns = 250个TBCLK周期。
  • 配置:DCFCTL[PULSESEL] = 0(选择CTR=0对齐),DCFOFFSET = 50DCFWINDOW = 250
  • 效果:在每个PWM周期的前0.5us以及2.5us之后,DC事件正常响应;而在中间的2.5us窗口内,事件被忽略,从而避免了开关噪声干扰。

3.3 高级应用:基于DC的事件触发与同步

DC模块与事件触发子模块的联动,解锁了ePWM的高级同步与采样功能。

3.3.1 精准的ADC同步采样传统上,我们使用CTR=CMPACTR=PRD等时间点来触发ADC,这对于固定时刻采样是足够的。但有了DC,我们可以实现基于条件的自适应采样。例如,在功率因数校正电路中,我们希望在线电压过零点附近进行高精度采样。你可以将经过整流的线电压信号送入比较器,与一个阈值比较,输出接到TZ1并配置为DCAH信号。然后配置DCAEVT1.soc作为SOCA的触发源。这样,ADC的启动不再依赖于固定的计数器值,而是依赖于真实的模拟信号过零点事件,实现了与电网的严格同步。

3.3.2 复杂的多模块同步DCAEVT1.syncDCBEVT1.sync可以输出同步脉冲。这意味着,一个ePWM模块中由模拟信号触发的事件,可以作为同步源去同步其他ePWM模块的时基。这在需要多个PWM模块严格跟随某个外部物理事件(如转子位置)的应用中非常有用,比如在多相交错并联的电源中,实现精确的相位同步。

3.4 寄存器配置实战:实现一个基于比较器的逐周期限流

场景:使用模拟比较器COMP1监控电感电流,当其输出超过阈值(高电平)时,我们希望立即关断当前PWM周期(CBC动作),并在下个周期恢复。同时,记录该事件发生的时刻。

// 硬件连接:COMP1输出 -> GPIO引脚(配置为TZ1功能) // 目标:COMP1输出高电平时,触发ePWM1的逐周期保护,并强制A/B输出低。 // 1. 配置 Digital Compare 信号源选择 (DCTRIPSEL) // 将 TZ1 引脚信号映射为 Digital Compare A High (DCAH) 的信号源 // 假设 TZ1 对应 DCAH 的选项值为 1 (请查阅具体器件数据手册) HWREGH(EPWM1_BASE + EPWM_O_DCTRIPSEL) = 0x0000; // 先清零 HWREGH(EPWM1_BASE + EPWM_O_DCTRIPSEL) |= (1 << EPWM_DCTRIPSEL_DCAHCOMPSEL_S); // DCAH 源选择 TZ1 // 2. 配置 Trip-Zone Digital Compare 选择 (TZDCSEL) // 定义 DCAEVT1 事件在什么条件下产生。 // 我们希望当 DCAH=1 (即COMP1输出高,表示过流) 时触发 DCAEVT1。 // 同时,我们不关心 DCAL,将其条件设为“不关心”(X)。 // 通常,配置为:DCAEVT1 在 (DCAH=高, DCAL=低) 时触发,这对应信号为逻辑高。 // 假设寄存器值:DCAEVT1 在 DCAH高 & DCAL低 时触发。 HWREGH(EPWM1_BASE + EPWM_O_TZDCSEL) = 0x0000; // 设置 DCAEVT1 的触发条件为 DCAH高有效。具体位域需查手册,例如: // HWREGH(EPWM1_BASE + EPWM_O_TZDCSEL) |= (EPWM_TZDCSEL_DCAEVT1_SEL_DCAH_HI << EPWM_TZDCSEL_DCAEVT1_SEL_S); // 3. 配置 Trip-Zone 选择 (TZSEL) // 将 DCAEVT1 事件配置为逐周期(CBC)故障源 HWREGH(EPWM1_BASE + EPWM_O_TZSEL) |= EPWM_TZSEL_DCAEVT1; // DCAEVT1 作为事件源 // 同时,需要将其模式设为 CBC(注意:某些器件中 DCAEVT1 固定为OSHT或CBC,需查证。这里假设可配) // 更常见的做法是:DCAEVT1 通过 TZCTL 直接动作,或作为 CBC 源。我们选择后者。 // 需要设置 TZSEL 中对应 DCAEVT1 为 CBC 的位。假设该位为 TZSEL[DCEVTFILT] 或类似。 // 此处简化,实际需根据寄存器定义操作。 // 4. 配置 Trip-Zone 动作 (TZCTL) // 当 DCAEVT1 作为 CBC 事件发生时,我们希望它执行的动作。 // 由于我们将其配置为CBC源,它应通过 TZA/TZB 动作响应,或者有专用的 DCAEVT1 动作控制位。 // 假设我们通过 TZCTL[DCAEVT1] 位域来配置动作。 EPWM_setDigitalCompareTripAction(EPWM1_BASE, EPWM_DC_TRIP_TRIPIN1, // DCAEVT1 EPWM_DC_TRIP_OUTPUT_A, EPWM_TZ_ACTION_LOW); // A输出强制低 EPWM_setDigitalCompareTripAction(EPWM1_BASE, EPWM_DC_TRIP_TRIPIN1, EPWM_DC_TRIP_OUTPUT_B, EPWM_TZ_ACTION_LOW); // B输出强制低 // 5. (可选)配置消隐窗口以滤除开关噪声 EPWM_setDigitalCompareFilterInput(EPWM1_BASE, EPWM_DC_FILTER_INPUT_DCAEVT1); // 对 DCAEVT1 滤波 EPWM_setDigitalCompareFilterWindowOffset(EPWM1_BASE, 50); // 偏移 50 TBCLK EPWM_setDigitalCompareFilterWindowLength(EPWM1_BASE, 250); // 窗口 250 TBCLK EPWM_setDigitalCompareFilterEdge(EPWM1_BASE, EPWM_DC_FILTER_PULSE_CTR_ZERO); // 对齐到 CTR=0 EPWM_enableDigitalCompareFilter(EPWM1_BASE); // 使能滤波 // 6. (可选)使能中断并捕获故障时刻 EPWM_enableDigitalCompareCounterCapture(EPWM1_BASE); // 使能计数器捕获 EPWM_setDigitalCompareCounterCaptureMode(EPWM1_BASE, EPWM_DC_CAPTURE_MODE_SHADOW); // 影子模式 EPWM_enableTripZoneInterrupt(EPWM1_BASE, EPWM_TZ_INTERRUPT_DCAEVT1); // 在中断中,你可以读取捕获的计数器值,知道故障发生在PWM周期的哪个精确时刻: // uint16_t captureVal = EPWM_getDigitalCompareCounterCapture(EPWM1_BASE);

4. 联动应用与高级配置策略

4.1 TZ与DC的协同工作模式

在实际系统中,TZ和DC很少孤立工作,而是协同构建多层次保护:

  1. 初级保护: 使用TZ1(硬件比较器)实现纳秒级响应的逐周期限流。这是最后一道、也是最快的硬件防线,用于抑制每个PWM周期内的电流尖峰。
  2. 次级保护: 使用DC模块监控另一个比较器(或经过处理的信号),当条件满足时(如平均电流过高),触发单次故障,并产生中断。CPU在中断服务程序中可以执行更复杂的故障处理,如逐步降频、安全停机序列。
  3. 事件触发: 利用DCAEVT1.soc在电流过零点自动触发ADC采样,实现最优的采样时刻,提升控制精度。
  4. 同步: 利用DCAEVT1.sync,让一个从ePWM模块的时基与主模块的某个DC事件同步,实现复杂的多相调制。

4.2 配置流程 checklist

为了避免遗漏,建议按照以下清单进行配置:

  • [ ]GPIO/引脚配置: 将用于TZ输入的引脚配置为ePWM故障功能,并设置上拉/下拉、数字滤波。
  • [ ]模拟比较器配置: 如果使用内部COMP模块,配置其参考电压、 hysteresis、输出极性。
  • [ ]DCTRIPSEL: 明确每个DC信号(DCAH, DCAL, DCBH, DCBL)的来源(哪个TZ引脚)。
  • [ ]TZDCSEL: 定义每个DC事件(DCAEVT1/2, DCBEVT1/2)的触发逻辑(高有效、低有效、双边沿)。
  • [ ]TZSEL
    • 确定哪些TZ引脚用作故障源(CBC或OSHT)。
    • 确定哪些DC事件用作故障源,并指定其模式(CBC或OSHT)。
  • [ ]TZCTL: 为每个可能的故障源(TZA, TZB, DCAEVT1, DCAEVT2, DCBEVT1, DCBEVT2)配置输出动作。
  • [ ]消隐窗口: 根据开关噪声情况,计算并配置DCFOFFSETDCFWINDOW,并选择对齐脉冲。
  • [ ]中断: 在TZEINT寄存器中使能所需的中断源(CBC, OST, DCAEVT1等),并配置PIE/VIM。
  • [ ]软件强制与清除: 在调试时,善用TZFRC寄存器软件强制故障,以及TZCLR寄存器清除标志。

4.3 调试技巧与常见问题排查

问题1:保护功能不动作。

  • 检查引脚电平: 用示波器直接测量TZ输入引脚,确认故障信号确实达到了低电平,且脉宽大于3个TBCLK周期。
  • 检查GPIO复用: 确认引脚是否正确配置为ePWM TZ功能,而非普通GPIO。
  • 检查寄存器配置: 逐项核对上述checklist中的寄存器。特别注意TZSEL寄存器,是否使能了对应的故障源。一个常见的疏忽是只配置了TZCTL(动作),却忘了在TZSEL中使能信号源。
  • 检查消隐窗口: 如果使能了消隐,确认故障事件是否发生在窗口期内。可以暂时禁用消隐窗口进行测试。

问题2:保护误动作(没有故障时触发)。

  • 硬件噪声: 这是最常见原因。检查TZ走线是否远离功率回路,增加RC滤波,启用GPIO内部数字滤波。
  • 消隐窗口设置不当: 窗口未能覆盖开关噪声时段。用示波器观察比较器输出和PWM开关时刻,调整DCFOFFSETDCFWINDOW
  • 比较器振荡: 在阈值点附近,噪声可能导致比较器输出振荡。增加比较器的迟滞。
  • 接地与电源噪声: 确保模拟地(AGND)和数字地(DGND)单点连接良好,电源去耦电容充足。

问题3:OSHT故障后无法恢复PWM输出。

  • 理解锁存机制: 记住,OSHT是锁存的。清除TZFLG[OST]标志不会恢复输出。输出被TZCTL配置的动作强制锁存了。
  • 恢复方法
    1. 软件清除: 向TZCLR[OST]位写1,可以清除OST锁存器,但前提是故障源信号已无效。如果故障信号依然有效,清除后会被立即再次置位。
    2. 模块复位: 更可靠的方法是在确认安全后,通过软件复位整个ePWM模块(例如,将TBCTL寄存器中的SWFSYNC位置1并重新初始化),或者重新初始化ePWM的所有寄存器。
    3. 系统设计: 通常,触发OSHT意味着严重故障,系统应进入彻底的安全状态,可能需要用户干预或重启,而不是自动恢复。

问题4:DC事件未能触发ADC转换。

  • 信号路径检查: 确认DCAEVT1.soc信号是否已生成。检查DCTRIPSEL,TZDCSEL配置。
  • ETSEL配置: 在事件触发子模块中,是否将ETSEL[SOCASEL]ETSEL[SOCBSEL]正确设置为来自DC事件(例如DCAEVT1.soc)?
  • SOC使能: 是否使能了SOCA或SOCB输出(ETSEL[SOCAEN]ETSEL[SOCBEN])?
  • ADC配置: ADC模块是否已配置为接受ePWM的SOC信号作为触发源?

掌握Trip-Zone和Digital Compare子模块,意味着你掌握了ePWM安全与灵活性的钥匙。它们将保护动作从软件延迟中解放出来,交给了可靠的硬件逻辑。在调试时,务必结合示波器(观察TZ引脚、PWM输出)和寄存器的实时查看,从信号源头到最终动作,一步步验证你的配置。

http://www.jsqmd.com/news/1249718/

相关文章:

  • AI Agent自动化工作流设计:企业智能助手如何落地
  • 亨得利服务项目及价格查询|维修地址和电话权威信息通知(2026年7月更新) - 亨得利官方
  • 嵌入式系统参数动态更新利器:TI MCU POM模块原理与实战
  • 上海管道疏通避坑指南 虹口区快达师傅上门快不坑(2026年7月) - 余生黄金回收
  • CAN控制器消息对象与FIFO缓冲机制:从寄存器配置到实战应用
  • AI行业人才需求变化与职业发展策略
  • 强强联合,共拓数字化新蓝海|河南花仙子网络与金正集团(经营帮)达成战略合作
  • 抖音运营正在消失?AI自动化接管内容策划、发布、互动、复盘全流程(仅剩最后37个高阶策略未开放)
  • TI Hercules/C2000 IOMM模块:引脚复用、eCAP/eQEP配置与安全锁定机制详解
  • 深度学习优化稀疏相控阵:原理与实践
  • 告别“李鬼”鉴定师!北京钟表协会2026审验通过:这3家店首推 - 日常比对手册
  • 小米R3G路由器刷OpenWrt避坑指南:从Breed到固件编译全流程解析
  • RAG系统自动化评估:原理、实践与金融应用
  • 河北料箱堆垛机批量维保
  • 石家庄民办高中哪家好?2026 年7月份最新高升学率及师资院校榜单出炉 - 起跑123
  • 算法第一题:两数之和(第一次接触)
  • 智能查重工具革新:从算法原理到论文降重实战
  • GEE中的几个小技巧
  • Spring Boot Profile 多环境切换实战 —— 以 springboot-properties 为例(含踩坑)
  • 零基础小白如何去SRC平台挖漏洞赚钱?全网最全最强的干货教程一定要收藏!
  • 深入解析PWM模块:从计数器模式、死区生成到多通道同步机制
  • 批量自动化任务应该选择 Token 还是 Credit 套餐?
  • 深入解析Tiva TM4C129X时钟与电源管理:从PLL、LDO到低功耗唤醒实战
  • OpenClaw三层记忆架构与动态上下文管理解析
  • 深入解析TI ePWM事件触发与故障保护机制:从寄存器到电机控制实战
  • WAIC 2026|西部数据揭示AI存储新范式:AI不仅是计算,更是数据
  • 2026上海奢侈品包包回收深度行业解析|市场新规、行情底层逻辑、避坑体系、正规机构实测全攻略 - 大鱼奢侈品
  • 2026大模型智能体(Agent)面试全攻略与架构解析
  • Python毕设项目:基于 Python 的智能期货模拟交易分析系统 虚拟资金期货交易演练管理平台 (源码+文档,讲解、调试运行,定制等)
  • 鸿蒙 PC Markdown 编辑器千文件工作区压力测试