深入解析ePWM模块:从核心原理到电机控制与数字电源实战
1. 项目概述为什么我们需要ePWM如果你在嵌入式领域特别是电机控制、数字电源或者逆变器这些行当里摸爬滚打过那对PWM脉宽调制肯定不陌生。说白了它就是让一个数字引脚一会儿高一会儿低通过调节高电平时间脉宽占整个周期的比例占空比来等效出一个模拟量比如电压或者电流。早期的单片机PWM外设功能比较单一基本上就是设定一个周期和一个比较值输出固定占空比的方波高级点的能支持互补输出和死区。但当你开始玩无刷电机驱动、三相逆变器或者需要多路严格同步的精密电源时就会发现基础PWM不够用了。你需要能灵活控制多路波形的相位关系需要硬件级的故障保护能在微秒级内关断输出需要动态调整占空比而不产生毛刺还需要用PWM波形本身来触发ADC采样……这时候增强型脉宽调制ePWM模块就该登场了。ePWM不是一个简单的定时器加比较器它是一个高度模块化、可编程的波形生成“流水线”。它把PWM生成的各个环节——定时、比较、动作决策、死区插入、故障保护、事件触发——都拆分成独立的子模块。每个子模块就像工厂里的一道工序你可以独立配置然后它们通过硬件自动衔接。这种设计带来的最大好处是灵活性与可靠性的统一软件只需要在合适的时机比如一个PWM周期开始或结束时更新配置硬件就能确保波形连续、无毛刺地输出同时还能响应紧急故障。我经手过不少从基础PWM迁移到ePWM的项目初期会觉得寄存器多得让人头疼但一旦理清各个子模块的职责和信号流你就会发现它带来的设计余量和系统可靠性是基础PWM无法比拟的。接下来我们就抛开数据手册的平铺直叙以工程师的视角把这套“流水线”的每个工位都拆开揉碎了讲明白。2. ePWM核心架构与信号流拆解理解ePWM最关键的是建立起清晰的信号流概念。数据手册里的框图往往很复杂我们把它简化成一条核心流水线并看看关键的控制信号是如何在其中传递的。2.1 核心子模块流水线ePWM模块的运作可以想象成一条精心设计的装配线时间基准TB子模块这是流水线的“节拍器”。它产生一个不断循环计数的核心计数器TBCNT决定了PWM波的“时间轴”。计数模式向上、向下、上下、频率周期TBPRD、相位TBPHS都由它控制。它输出关键的时间标签事件CTR0计数器零和CTRPRD计数器等于周期值以及计数方向信号CTR_dir。计数器比较CC子模块这是“标尺工位”。它持续将TB送来的“当前时间”TBCNT值与两个预设的“标尺”CMPA和CMPB寄存器进行比较。当时间走到标尺刻度时它就发出事件信号CTRCMPA和CTRCMPB。这两个事件是控制占空比的关键。动作限定AQ子模块这是“决策中心”。它接收来自TB和CC的所有事件CTR0,CTRPRD,CTRCMPA,CTRCMPB并结合当前的计数方向CTR_dir根据程序员预先设定的规则决定此刻对两个输出引脚EPWMxA和EPWMxB采取什么“动作”置高、拉低、翻转或保持不动。PWM波形的基本形状就是在这里被定义的。死区DB子模块这是“安全间隔插入器”。在电机驱动等H桥电路中同一桥臂的上下两个开关管不能同时导通否则会短路。AQ模块输出的原始波形经过DB模块会被自动插入一个可配置的延迟死区时间确保两个互补信号在状态切换时总有一个“全关断”的安全间隔。PWM斩波PC子模块这是一个“高频调制器”。它可以将AQ/DB模块生成的PWM波再次用一个更高频率的载波进行调制生成一串脉冲群。这个功能主要用于驱动隔离型栅极驱动器或变压器的原边开关因为这类器件通常需要高频交变的信号来维持磁芯复位或传递能量。故障保护TZ子模块这是流水线的“紧急制动拉绳”。它连接外部故障引脚如过流、过温、硬件故障信号。一旦故障发生TZ模块可以无视当前流水线的任何状态在几个时钟周期内强制将PWM输出设置为预定安全状态高、低、高阻实现硬件级保护速度远超软件中断。事件触发ET子模块这是“质量检测与报告点”。它监控流水线上的关键事件如周期开始、比较点匹配并可以据此产生中断EPWMxINT或触发ADC启动转换SOC实现控制环路如电流环的精准同步采样。这七个模块中TB、CC、AQ是生成任何PWM波都必需的“核心三件套”。DB在驱动半桥/全桥时必不可少。PC和TZ属于特定应用场景的“增强包”。ET则是实现高级控制算法的“连接器”。2.2 关键控制信号与寄存器映射每个子模块都由一组专用寄存器控制。理解寄存器功能的关键是区分“影子寄存器”和“活动寄存器”。活动寄存器直接控制硬件逻辑其值的变化会立刻影响波形输出。影子寄存器是活动寄存器的缓冲。软件平时读写的是影子寄存器。在硬件约定的一个安全时刻通常是CTR0或CTRPRD时影子寄存器的值被自动、同步地加载到活动寄存器。为什么需要影子寄存器想象一下你正在用PWM驱动电机此时需要改变占空比即修改CMPA值。如果你直接写入控制硬件的活动寄存器而这个写入动作恰好发生在计数器值与旧CMPA值相等的瞬间可能会导致输出产生一个极窄的毛刺脉冲甚至使桥臂直通这是灾难性的。影子寄存器机制确保了所有参数更新都发生在PWM周期的边界0或周期点从而保证了波形切换的平滑和无毛刺。主要的影子寄存器包括周期寄存器TBPRD、比较寄存器CMPA/CMPB。它们的加载时机可以通过对应的控制位如CMPCTL[LOADAMODE]来配置非常灵活。3. 核心子模块深度配置与实战了解了整体架构我们深入到最核心的三个模块TB CC AQ看看如何通过配置它们来生成我们想要的波形。3.1 时间基准TB子模块一切节奏的起源TB模块的核心是16位计数器TBCNT和周期寄存器TBPRD。3.1.1 计数模式与波形对称性TB支持三种计数模式这直接决定了PWM波的对称性向上计数模式Asymmetric UpTBCNT从0开始累加到达TBPRD后归零循环往复。此模式下CTRPRD事件在周期末尾发生一次。生成的PWM波是非对称的。向下计数模式Asymmetric DownTBCNT从TBPRD开始递减到0后重置为TBPRD循环往复。CTR0事件在周期末尾发生一次。生成的PWM波也是非对称的。向上-向下计数模式Symmetric Up-DownTBCNT从0开始加到TBPRD然后从TBPRD减回0循环往复。此模式下CTRPRD和CTR0事件在一个周期内各发生一次。生成的PWM波关于中心对称是对称PWM。如何选择模式电机控制如SPWM SVPWM通常使用对称向上-向下模式。因为对称PWM的谐波特性更好能有效降低电机损耗和噪音并且其波形中心对齐的特性便于在峰值进行电流采样。普通开关电源向上或向下模式更简单计算占空比更直观占空比 CMPA / TBPRD。需要中心对齐事件的应用如果需要在PWM周期中间点触发某些操作对称模式是唯一选择。3.1.2 频率与周期计算这是最基本的配置但容易出错。PWM频率Fpwm由系统时钟SYSCLKOUT、TB时钟预分频器、TBPRD值以及计数模式共同决定。假设系统时钟SYSCLKOUT 100 MHzTB预分频器HSPCLKDIV:CLKDIV 2:2即先2分频再2分频共4分频则TBCLK 100MHz / 4 25 MHz周期Ttbcik 40 ns。向上/向下计数模式Tpwm (TBPRD 1) * TtbcikFpwm 1 / Tpwm例如TBPRD 2499则Tpwm (2499 1) * 40 ns 100 usFpwm 10 kHz。这里有个坑公式是TBPRD 1因为计数器从0计数到TBPRD总共是TBPRD1个TBCLK周期。很多人直接TBPRD * Ttbcik会导致频率比预期慢一点。向上-向下计数模式Tpwm 2 * TBPRD * TtbcikFpwm 1 / Tpwm同样TBPRD 2499则Tpwm 2 * 2499 * 40 ns 199.92 usFpwm ≈ 5 kHz。注意在对称模式下为了获得相同的开关频率TBPRD值需要是向上计数模式的一半。例如要得到10kHz对称PWM需设置TBPRD (100MHz / 4 / 10kHz) / 2 1250。3.1.3 同步与相位控制这是ePWM的精华功能之一用于协调多个ePWM模块实现多相整流、交错并联等拓扑。同步链每个ePWM模块有一个同步输入EPWMxSYNCI和一个同步输出EPWMxSYNCO。你可以将ePWM1的SYNCO连接到ePWM2的SYNCI以此类推形成一个主从同步链。当主模块如ePWM1的计数器达到特定条件如CTR0它会发出一个同步脉冲从模块ePWM2收到后可以将其计数器TBCNT重置为相位寄存器TBPHS的值。相位控制通过设置从模块的TBPHS寄存器可以精确控制其波形相对于主模块的相位差。例如在交错并联Boost电路中两个通道需要180度错相。如果主模块ePWM1的TBPRD1000设置从模块ePWM2的TBPHS500那么在同步点ePWM2的计数器会从500开始计数从而实现半周期180度的相位延迟。实操心得同步配置顺序配置同步时务必遵循“先配置后启动”的原则。正确的初始化顺序是1停止所有相关ePWM模块的时钟TBCLKEN02配置主从模块的TB参数模式、周期、相位3配置同步源和同步使能TBCTL[PHSEN]4最后再统一启动时钟TBCLKEN1。这样可以避免计数器在混乱的初始状态下产生错误的同步行为。3.2 计数器比较CC与动作限定AQ子模块波形的雕塑家CC模块负责发出“时刻”事件而AQ模块则决定在这些“时刻”做什么。它们共同定义了PWM波的形状。3.2.1 占空比计算与影子寄存器加载占空比由比较寄存器CMPA和CMPB的值决定但计算方式因计数模式而异。向上计数模式占空比 CMPA / TBPRD。当TBCNT从0增加到CMPA时AQ可以设置输出高电平当TBCNT从CMPA增加到TBPRD时输出低电平。向下计数模式逻辑类似但方向相反。向上-向下计数模式情况复杂。在一个完整的上下周期内CTRCMPA事件会发生两次一次在上升沿一次在下降沿。通常我们通过配置AQ在CTRCMPA且计数器向上时清除输出在CTRCMPA且计数器向下时置位输出这样可以生成一个关于中心对称的PWM波。此时占空比 CMPA / TBPRD仍然成立但CMPA值控制的是脉冲两侧的边沿位置。影子寄存器加载时机为了动态调整占空比且无毛刺必须使用影子寄存器。CMPA和CMPB的加载时机LOADAMODE/LOADBMODE通常配置为在CTRPRD或CTR0时加载。在对称模式下CTRPRD和CTR0都可以作为加载点但选择CTR0更为常见因为它是一个周期的绝对起点逻辑更清晰。3.2.2 AQ配置从事件到动作的映射AQ模块的配置是ePWM编程中最体现技巧的部分。它通过AQCTLA和AQCTLB两个寄存器为EPWMxA和EPWMxB分别指定在特定事件ZRO,PRD,CAU,CAD,CBU,CBD发生时的动作。ZRO:CTR0事件PRD:CTRPRD事件CAU:CTRCMPA且计数器向上时CAD:CTRCMPA且计数器向下时CBU,CBD: 类似针对CMPB经典配置示例1生成一路简单的PWMEPWMxA输出假设使用向上计数模式希望EPWMxA在周期开始时为高当TBCNT等于CMPA时变低。AQCTLA配置ZRO SET(计数器为0时置位输出高),CAU CLEAR(计数器向上等于CMPA时清除输出低)。这样每个周期开始输出变高在CMPA时刻变低直到周期结束归零后再次变高。占空比 CMPA / TBPRD。经典配置示例2生成一对互补带死区的PWMEPWMxA和EPWMxB假设使用向上-向下计数模式希望生成一对中心对称的互补PWM用于驱动一个半桥。AQCTLA配置CAD SET(计数器向下等于CMPA时EPWMxA置高),CAU CLEAR(计数器向上等于CMPA时EPWMxA清除低)。AQCTLB配置CAD CLEAR(计数器向下等于CMPA时EPWMxB清除低),CAU SET(计数器向上等于CMPA时EPWMxB置位高)。这样EPWMxA和EPWMxB的输出在逻辑上是完全互补的。然后再将这两路信号送入死区DB模块插入硬件死区。注意事项AQ事件优先级如果多个事件在同一时刻发生例如在向上-向下模式中CMPATBPRD那么CAU和PRD事件可能同时发生AQ模块内部有固定的优先级裁决逻辑。通常PRD和ZRO的优先级高于CAU/CAD。在编写复杂波形如空间矢量PWM时必须仔细考虑事件发生的顺序和优先级避免出现非预期的输出跳变。最稳妥的方法是确保比较值CMPA/CMPB严格介于0和TBPRD之间避免与边界值相等。4. 高级功能模块死区、斩波与故障保护核心波形生成后ePWM还提供了几个关键模块来增强其在实际功率电路中的应用能力。4.1 死区DB子模块桥臂安全的守护神死区时间是互补PWM信号在状态切换时人为加入的一段两者均为低电平对于高侧有效、低侧有效的驱动逻辑的延迟时间目的是防止上下管“直通”短路。DB模块独立地对AQ输出的两路信号通常称为EPWMxA和EPWMxB的原始信号进行处理。它提供四种主要模式完全禁用信号直通。仅对A路引入上升沿延迟EPWMxA的上升沿被延迟下降沿不变EPWMxB不变。仅对B路引入下降沿延迟EPWMxA不变EPWMxB的下降沿被延迟上升沿不变。完全使能最常用对EPWMxA的上升沿和EPWMxB的下降沿同时引入延迟。或者反过来取决于极性配置。配置要点DBRED(上升沿延迟寄存器)定义信号从非有效态切换到有效态时需要插入的延迟时间以TBCLK周期为位。DBFED(下降沿延迟寄存器)定义信号从有效态切换到非有效态时需要插入的延迟时间。DBCTL[POLSEL](极性选择)决定哪路信号被视为“高有效”哪路是“低有效”从而决定对哪一路的哪个边沿施加延迟。这是最容易配置出错的地方。务必根据你驱动的功率器件IGBT MOSFET和栅极驱动器逻辑高有效还是低有效来仔细设置。死区时间计算Tdead DBRED_Value * Ttbcik。例如TBCLK25MHz (40ns)需要500ns死区则DBRED_Value 500ns / 40ns 12.5应向上取整为13。实际死区时间 13 * 40ns 520ns。死区时间并非越长越好过长的死区会降低输出电压利用率增加谐波。通常根据功率器件的开关特性开通/关断时间和驱动器传播延迟来设定留出足够余量即可一般在数百纳秒到一两微秒之间。4.2 PWM斩波PC子模块驱动隔离器与变压器的利器PC模块用于生成高频脉冲串主要目的是驱动需要交流耦合的器件如隔离型栅极驱动器如采用变压器隔离的驱动器需要高频载波来传递能量和信号。门极驱动变压器的原边需要交变电压防止变压器磁芯饱和。工作原理PC模块内部有一个高频载波发生器频率由CHPFREQ配置是TBCLK的分频。它将输入的PWM波来自DB模块与这个高频载波进行“与”操作。在输入PWM为高电平期间输出是一串高频脉冲在输入PWM为低电平时输出持续为低。CHPDUTY控制高频脉冲串中第一个脉冲的宽度。CHPFRQ控制高频载波的频率。OSHTWTH控制单次触发脉冲的宽度如果使能。应用技巧在使用PC功能时输入PWM的频率即主开关频率应远低于斩波频率通常至少10倍以上以确保有足够多的高频脉冲来维持被驱动侧的能量。同时需要根据隔离变压器或耦合电容的参数来调整第一个脉冲的宽度CHPDUTY以优化启动特性。4.3 故障保护TZ子模块硬件级的最后防线TZ模块是系统安全的关键。它连接外部数字故障引脚如TZ1~TZ6一旦故障发生可以在极短时间几个时钟周期内绕过CPU直接控制PWM输出状态。两种触发模式单次触发One-Shot故障信号有效后PWM输出立即被强制到安全状态高、低、高阻并且锁定在该状态直到软件通过写TZCLR寄存器来清除故障标志。周期循环Cycle-By-Cycle故障信号有效后PWM输出被强制到安全状态但仅持续当前PWM周期。在下一个PWM周期开始时如果故障信号已消失输出自动恢复正常如果故障依然存在则再次动作。这种模式适用于过流保护等需要逐周期限流的场景。配置核心TZSEL选择哪些TZ引脚TZ1~TZ6可以触发本ePWM模块的故障保护以及每个引脚是单次触发还是周期循环模式。TZCTL定义当故障发生时EPWMxA和EPWMxB输出应被强制为何种状态高、低、高阻、忽略。TZEINT选择是否在故障发生时产生中断以便软件记录故障原因或进行恢复操作。安全设计铁律对于任何可能导致硬件损坏的故障如过流、桥臂直通、过热必须配置为单次触发模式并将输出强制为高阻或关断状态。周期循环模式仅适用于需要动态限流、且不会立即损坏硬件的场景。故障保护电路的响应时间必须远快于软件中断响应时间这是ePWM硬件保护的核心价值。5. 事件触发ET与中断管理实现精准控制环路ET模块将ePWM的内部事件如周期开始、比较点到达与系统中断、ADC启动转换SOC关联起来是实现数字控制环路如电流环、速度环同步采样的基石。5.1 中断与ADC触发源ET模块可以产生两种类型的中断/触发EPWMx_INTePWM模块自身的中断。可以配置由多种事件触发如CTRPRD,CTR0,CTRCMPA/CMPB等。**EPWMx_SOCA和EPWMx_SOCB用于触发ADC开始转换的信号。这是实现**同步采样**的关键。例如在电机控制中我们希望在PWM波形的中心点对称模式的峰值点或谷底点采样相电流此时电流纹波最小采样最准确。通过配置ET模块在CTR0对称模式的中心点或CTRCMPB时产生SOCA 信号去触发ADC就可以实现硬件级的精准同步完全消除软件延迟带来的抖动。5.2 中断初始化与防误触发数据手册中特别强调了一个至关重要的初始化顺序这是无数人踩过的坑关闭全局中断操作CPU的INTM位。禁用ePWM模块中断清除ETSEL[INTEN]等。初始化所有ePWM寄存器配置TB CC AQ DB等。清除可能存在的虚假ePWM中断标志写ETCLR[INT]。使能ePWM模块中断。最后打开全局中断。为什么必须按这个顺序在ePWM模块时钟刚使能、寄存器还未正确配置的混沌期硬件可能因为随机状态产生一些虚假的事件从而置位中断标志。如果你先使能了中断这些虚假标志会立即触发中断导致程序跑飞。这个顺序确保了在打开中断水龙头之前水池中断标志寄存器已经是空的并且水龙头连接到了正确的管道中断服务程序。5.3 高级同步采样模式利用ET和CC模块的联动可以实现更复杂的采样模式。例如在交错并联PFC电路中需要在两个开关管电流的峰值点分别采样。可以配置两个ePWM模块ePWM1 ePWM2同步运行但相位差180度。为每个模块的ADC触发信号SOCA选择不同的触发源ePWM1在CTRCMPA时触发ePWM2在CTRCMPB时触发。通过精心设置CMPA和CMPB的值就可以让两个ADC采样时刻精确对准各自通道的电流峰值。6. 实战配置流程与常见问题排查理论说再多不如动手调一遍。下面以一个典型的电机控制应用——生成一对中心对称、带死区、可同步ADC采样的互补PWM为例梳理配置流程和避坑指南。6.1 完整配置流程清单时钟与引脚初始化使能ePWM模块的时钟。配置GPIO MUX将所需引脚功能设置为ePWM输出模式。时间基准TB模块配置设置TBCTL[CTRMODE] 2选择向上-向下对称计数模式。根据目标PWM频率和系统时钟计算并设置TBPRD值。例如SYSCLKOUT100MHzTBCLK25MHz目标Fpwm10kHz则TBPRD (TBCLK / Fpwm) / 2 (25MHz / 10kHz) / 2 1250。设置时钟预分频TBCTL[HSPCLKDIV]和TBCTL[CLKDIV]。如果需要同步配置TBCTL[PHSEN]和TBPHS相位寄存器并设置同步输出源TBCTL[SYNCOSEL]。计数器比较CC模块配置配置CMPCTL[LOADAMODE] 0在CTR0时加载影子寄存器确保占空比更新无毛刺。初始化CMPA和CMPB为初始占空比对应的值例如50%占空比则CMPA TBPRD / 2。使能CMPA和CMPB的影子寄存器模式CMPCTL[SHDWAMODE] 0,SHDWBMODE 0。动作限定AQ模块配置配置AQCTLACAD SET(向下过CMPA时置高),CAU CLEAR(向上过CMPA时清除低)。这将使EPWMxA输出一个中心对称的PWM。配置AQCTLBCAD CLEAR,CAU SET。这将使EPWMxB输出与EPWMxA互补的波形。可选配置软件强制寄存器AQSFRC用于调时手动控制输出。死区DB模块配置使能DB模块DBCTL[MODE] 3完全使能模式。根据功率器件需求计算死区时间并设置DBRED和DBFED寄存器。例如需要500ns死区TBCLK40ns则设置DBRED DBFED 13(520ns)。根据驱动逻辑设置DBCTL[POLSEL]。假设使用高电平有效驱动上管低电平有效驱动下管且AQ输出的原始互补信号中A路驱动上管B路驱动下管则通常选择ACTV_HIC或ACTV_LOC模式具体需参考数据手册和驱动器数据表。故障保护TZ模块配置配置TZSEL选择用于故障保护的TZ引脚并设置为单次触发模式CBCn0, OSHTn1。配置TZCTL定义故障发生时输出状态例如TZA TZ_FORCE_LO(强制低),TZB TZ_FORCE_HI(强制高)或两者都强制为高阻TZ_HIZ具体取决于安全状态需求。使能TZ中断TZEINT以便记录故障。事件触发ET模块配置遵循“防误触发初始化顺序”。配置ETSEL[INTSEL]选择中断源例如选择CTRPRD在周期结束时产生中断。配置ETPS[INTPRD]设置中断分频例如每个事件都中断ET_1ST。配置ETSEL[SOCASEL]选择ADC触发源例如选择CTR0在计数器为0对称PWM的中心点时触发ADC采样。使能SOCA触发ETSEL[SOCAEN]。启动与同步如果涉及多模块同步确保所有从模块配置完毕。最后通过设置PWMSS_CTRL寄存器中的TBCLKEN位同时启动所有ePWM模块的时基时钟。6.2 常见问题与排查技巧实录以下是我在调试中常遇到的“坑”及其解决方法问题现象可能原因排查步骤与解决方案无PWM输出1. 模块时钟未使能。2. GPIO引脚未正确复用为ePWM功能。3. 输出被强制AQSFTC或TZ模块强制。4. 计数器未启动TBCTL[CTRMODE]FREEZE。1. 检查外设时钟使能寄存器如PCLKCR0。2. 检查GPIOxMUX和GPIOxGMUX寄存器。3. 检查AQSFTC和AQCSFTC寄存器确保没有软件强制。检查TZFLG寄存器看是否发生故障锁定。4. 检查TBCTL[CTRMODE]是否为0,1,2。PWM频率不对1.TBPRD计算错误忽略了1或*2。2. 时钟预分频器HSPCLKDIV/CLKDIV配置错误。3. 系统时钟SYSCLKOUT频率与预期不符。1. 重新核对频率计算公式区分向上计数和向上-向下计数模式。2. 核对TBCTL寄存器中分频位设置。3. 检查PLL配置确认系统时钟频率。占空比无法改变1. 比较寄存器CMPA/CMPB配置在影子寄存器模式但未在正确时机写入。2. 写入的是影子寄存器但加载事件未发生如未使能加载或计数器未达到加载点。3. 写入了错误的寄存器地址。1. 确认CMPCTL[LOADAMODE]配置并确保在CTR0或PRD后更新CMPA值。2. 可以暂时切换到立即加载模式SHDWAMODE1测试但注意可能产生毛刺。3. 使用调试器查看CMPA活动寄存器的值是否随写入变化。互补波形有重叠直通风险1. 死区模块未使能或配置错误。2. DB模块的输入信号极性DBCTL[POLSEL]配置错误导致延迟加在了错误的边上。3. AQ模块生成的原始互补信号本身就有重叠逻辑错误。1. 首先用示波器观察DB模块输入的两路信号即AQ直接输出的信号确认它们是理想的互补方波。2. 再观察DB模块输出的信号检查死区时间是否出现以及出现在哪个边沿。根据结果调整POLSEL。3. 检查AQCTLA和AQCTLB配置确保是真正的互补逻辑。ADC采样时刻不精准1. ET模块的SOC触发源选择错误。2. ADC模块的SOC触发配置未正确关联到ePWM的SOC信号。3. 存在软件延迟未使用硬件触发而使用了软件触发。1. 确认ETSEL[SOCASEL]选择了正确的事件如CTR0。2. 检查ADC配置确认其SOC触发源设置为对应的ePWM SOC信号如EPWM1_SOCA。3.务必使用硬件触发。在中断服务程序中启动ADC会引入不可控的抖动。多路ePWM不同步1. 同步链未正确连接或使能。2. 从模块的相位寄存器TBPHS未配置。3. 主从模块的时钟预分频或计数模式不一致。4. 同步发生在配置完成之前。1. 检查TBCTL[SYNCOSEL]配置主模块的输出源检查从模块的TBCTL[PHSEN]是否使能。2. 设置从模块的TBPHS为期望的相位差对应的计数值。3. 确保主从模块的TBCTL[HSPCLKDIV],CLKDIV,CTRMODE一致。4. 严格按照第8步的启动顺序操作。调试ePWM示波器是最好用的朋友。一定要养成同时观察多路信号的习惯看TB的同步信号SYNCI/SYNCO看AQ输出的原始波形看DB插入死区后的波形最终再看驱动芯片输入端的波形。通过分段观察可以快速定位问题出在哪个模块。最后再分享一个软件架构上的小技巧将ePWM的所有配置参数TBPRD,CMPA,CMPB, 死区时间等封装在一个结构体中并编写一个统一的EPWM_Config()函数。在控制环路中更新占空比时不要直接写CMPA寄存器而是更新结构体中的变量然后在安全点如CTR0中断中统一批量写入影子寄存器。这样不仅代码清晰也更安全。ePWM是一个强大的工具理解其模块化思想你就能像搭积木一样构建出满足各种复杂需求的功率控制波形。

相关新闻