1. ePWM模块核心架构与寄存器概览
在深入每个寄存器位域之前,我们有必要先理解TI ePWM模块的整体架构。它远不止一个简单的计数器加比较器。你可以把它想象成一个高度模块化、流水线化的“波形生成工厂”。这个工厂有明确的分工:时基(TB)模块是心脏,负责产生统一的节拍;计数比较(CC)模块是设计师,决定波形关键转折点;动作限定(AQ)模块是执行者,根据指令驱动输出引脚;而死区(DB)模块则是安全质检员,防止上下管直通。此外,还有故障联防(TZ)和事件触发(ET)等模块作为工厂的应急系统和联动装置。
寄存器就是配置这个工厂里每一台机器、每一条流水线的控制面板。从TBCTL到TZSEL,这一系列寄存器并非孤立存在,它们共同构成了一套精密的控制系统。例如,TBCTR(计数器值)和TBPRD(周期值)共同定义了PWM的“时间尺子”,CMPA/CMPB则是在这把尺子上标记的“刻度”。AQCTLA/B寄存器规定了当指针(TBCTR)走到这些刻度时,输出引脚应该执行什么动作(置高、拉低或翻转)。这种硬件级的协同工作,使得CPU无需频繁干预即可产生精确、稳定的PWM波形,这是软件模拟PWM无法比拟的。
理解寄存器之间的联动关系至关重要。比如,TBCTL[CTRMODE]设置了计数器的计数方向(增、减、增减),这会直接影响AQCTL中CAU(增计数时匹配CMPA)和CAD(减计数时匹配CMPA)动作的触发逻辑。再比如,CMPCTL[SHDWAMODE]和LOADAMODE共同决定了比较值CMPA是立即生效还是等待特定时刻(如计数器为零时)从影子寄存器载入,这对于实现无毛刺的PWM动态调整是关键。因此,学习ePWM寄存器,绝不能死记硬背每个位的定义,而是要建立起“模块功能-寄存器控制-波形结果”的闭环思维。
2. 时基模块寄存器深度解析:TBCTL、TBPHS、TBCTR与TBPRD
时基模块是整个ePWM的节拍器,它的配置决定了PWM波形的根本频率和相位基准。TBCTL(Time-Base Control Register)是这个模块的总指挥。
TBCTL寄存器:模式、时钟与同步的核心TBCTL寄存器功能繁杂,我们可以将其分为几个功能组来理解。首先是计数器模式控制位CTRMODE[1:0]。00b代表增计数模式,计数器从0开始累加到TBPRD值后归零,产生非对称PWM波形,这种模式简单直接,常用于LED调光等对波形对称性要求不高的场合。01b是减计数模式,从TBPRD值递减到0,其波形特性与增计数模式镜像对称。10b是增减计数模式,计数器从0增到TBPRD,再减回0,形成一个三角波。这是电机控制和数字电源中最常用的模式,因为它能生成中心对称的PWM,有效降低谐波分量。例如,在生成SPWM(正弦波PWM)时,增减模式能自然产生对称的脉冲,简化计算。
时钟预分频位CLKDIV[2:0]和HSPCLKDIV[2:0]共同决定了时基时钟TBCLK的频率。公式为TBCLK = SYSCLKOUT / (HSPCLKDIV * CLKDIV)。这里有个关键细节:HSPCLKDIV的复位默认值是/2,而CLKDIV是/1。这意味着如果你在初始化时没有显式配置它们,PWM的时基频率已经是系统时钟的一半了。许多新手在计算预期频率与实际频率对不上时,往往忽略了这一点。我的经验是,在初始化序列中,即使你想使用默认分频,也最好显式地写入一次值,这能使代码意图更清晰,避免后续维护的困惑。
同步控制是TBCTL的另一精髓。SWFSYNC位允许软件强制产生一个同步脉冲,这在多模块主从级联初始化时非常有用。SYNCOSEL[1:0]位则决定了本模块同步输出信号EPWMxSYNCO的来源。你可以选择将其直接转发输入同步信号(EPWMxSYNCI),或者在计数器等于零(CTR=0)或等于CMPB时产生同步信号。后者功能非常强大,它允许你以PWM波形中的某个特定点(而不仅仅是周期起点)作为同步基准,实现更复杂的多模块相位交错。例如,在交错并联Boost PFC电路中,你可以将两个ePWM模块设置为增减计数模式,并将一个模块的SYNCOSEL设为CTR=CMPB,CMPB设为TBPRD/2。这样,第二个模块的波形就会与第一个模块自然形成180度相位差,无需复杂的软件计算和干预。
TBPHS、TBCTR与TBPRD:相位、计数与周期的具象化TBPHS寄存器用于设置相位偏移。只有当TBCTL[PHSEN]=1时,在接收到同步信号(硬件SYNCI或软件SWFSYNC)的瞬间,TBCTR计数器的值会被立刻加载为TBPHS的值。这个功能是实现多通道PWM相位同步的关键。想象一下三个桥臂的逆变器,你需要互差120度的三相PWM。你可以将第一个ePWM模块设为主机(PHSEN=0),后两个设为从机(PHSEN=1)。为主机设置TBPRD对应360度电角度。那么,从机1的TBPHS应设置为TBPRD/3,从机2的TBPHS设置为2*TBPRD/3。当主机发出同步信号时,两个从机的计数器会分别从TBPHS值开始计数,从而精确生成120度相位差。
TBPRD寄存器设定PWM的周期。这里必须理解影子寄存器的概念。当TBCTL[PRDLD]=0(默认)时,TBPRD采用影子寄存器模式。你写入的值先进入影子寄存器,只有在TBCTR=0的时刻,影子寄存器的值才会载入到活跃寄存器中生效。这种机制确保了PWM周期可以在一个周期结束时“无缝”切换,不会在周期中间突然改变导致脉冲畸形。反之,如果PRDLD=1,则写入立即生效,这通常仅用于对实时性有极端要求或周期固定不变的场景。
TBCTR是当前计数器的值,可读可写。直接写入TBCTR可以强制跳变计数器当前值,但这是一项危险操作,会立即打断计数流程,通常只在调试或特定初始化序列中使用。正常运行时,应让计数器自由运行。
注意:在增减计数模式下,PWM频率的计算公式为Fpwm = TBCLK / (2 * TBPRD)。因为计数器需要经历从0到
TBPRD再回到0的一个完整三角波周期。许多初学者误用Fpwm = TBCLK / TBPRD,导致实际频率是预期值的一半。
3. 计数比较模块寄存器详解:CMPCTL、CMPA与CMPB
计数比较模块是定义PWM波形占空比和复杂波形形状的核心。CMPA和CMPB是两个比较寄存器,它们的值与不断变化的TBCTR进行比较,产生匹配事件。
CMPCTL:影子模式与加载逻辑CMPCTL寄存器控制着CMPA和CMPB的行为模式,其核心在于影子寄存器机制。SHDWAMODE和SHDWBMODE位决定比较寄存器是工作在影子模式(0)还是立即模式(1)。在绝大多数动态调整占空比的应用中,都应使用影子模式。在这种模式下,CPU写入CMPA/CMPB的值,实际上是写入了对应的影子寄存器,不会立即影响正在输出的PWM波形。这给了系统一个“缓冲期”。
那么,影子寄存器里的值何时才会生效呢?这由LOADAMODE和LOADBMODE位决定。它们提供了多种加载时机:
- 00b (CTR=0):在计数器归零时加载。这是最常用的方式,确保新的比较值在一个PWM周期开始时生效,波形变化整齐。
- 01b (CTR=PRD):在计数器达到周期值时加载。在增减计数模式下,这对应着计数器的峰值点。
- 10b (CTR=0 or CTR=PRD):在计数器等于0或等于
TBPRD时加载。这提供了双倍的机会更新比较值,适用于需要极高更新率的场合。 - 11b (Freeze):冻结,不自动加载。需要软件手动触发。
SHDWAFULL和SHDWBFULL是状态标志位。当你向影子寄存器写入数据时,该位会被置1,表示“影子��存器已满,有新数据待加载”。一旦指定的加载事件(如CTR=0)发生,该位会自动清零。在编写代码时,可以在写入前检查该位,但这并非必须,因为硬件会管理覆盖。更重要的应用是在高可靠系统中,通过监控这些标志位来确认参数更新是否已被硬件接收并排队。
CMPA与CMPB:占空比的直接控制器CMPA和CMPB寄存器的值直接决定了PWM脉冲的边沿位置。在增计数模式下,当TBCTR从0开始增长,在TBCTR < CMPx期间,你可以通过AQCTL设置输出为高电平;当TBCTR增长到等于CMPx时,产生匹配事件,可以触发输出动作变为低电平。这样,占空比 =CMPx / TBPRD。
在增减计数模式下,情况变得更有趣。CMPA通常用于控制第一个边沿(例如,在增计数过程中,TBCTR从0增加到CMPA时,输出由低变高),而CMPB用于控制第二个边沿(在减计数过程中,TBCTR从TBPRD减少到CMPB时,输出由高变低)。这样,你可以独立控制脉冲的上升沿和下降沿位置,生成非对称或带有死区的PWM。此时,占空比的计算公式为:占空比 = (CMPB - CMPA) / TBPRD(假设CMPB > CMPA,且输出在CMPA处变高,在CMPB处变低)。
实操心得:在电机控制中,我们常用增减计数模式配合
CMPA和CMPB来生成中心对齐的PWM,并自然形成死区。例如,设置CMPA为TBPRD/2 - DeadTime/2,CMPB为TBPRD/2 + DeadTime/2。这样,在计数器增到CMPA时,上管关断(输出变低);在计数器减到CMPB时,下管开启(输出变高)。中间CMPB到CMPA(在三角波的下坡段)的时间差就是死区时间。这种方法将死区逻辑整合在了比较值中,非常直观。
4. 动作限定模块寄存器精讲:AQCTLA、AQCTLB与AQSFRC
动作限定模块接收来自时基模块(CTR=PRD,CTR=0)和计数比较模块(CTR=CMPA,CTR=CMPB)的事件,并根据AQCTLA和AQCTLB寄存器的配置,决定输出引脚EPWMxA和EPWMxB的具体动作。
AQCTLA/AQCTLB:事件到动作的映射规则这两个寄存器结构完全对称,分别控制A和B两个输出。每个寄存器内部,又针对不同的事件源(ZRO,PRD,CAU,CAD,CBU,CBD)设置了2个控制位,用于定义四种动作:
- 00b:无操作(忽略该事件)。
- 01b:清除(强制输出低电平)。
- 10b:置位(强制输出高电平)。
- 11b:翻转(低变高,高变低)。
这里的精妙之处在于CAU/CAD和CBU/CBD的区分。CAU代表“计数器等于CMPA且正在递增”,CAD代表“计数器等于CMPA且正在递减”。在增减计数模式下,计数器会在CMPA值上经过两次:一次上升沿,一次下降沿。通过分别为CAU和CAD设置不同的动作,可以生成非常复杂的波形。一个最经典的配置是生成带死区的互补PWM:
- 配置
AQCTLA:CAU = SET(10b),CAD = CLEAR(01b)。这意味着在增计数匹配CMPA时,EPWMxA置高;在减计数匹配CMPA时,EPWMxA拉低。 - 配置
AQCTLB:CBU = CLEAR(01b),CBD = SET(10b)。这意味着在增计数匹配CMPB时,EPWMxB拉低;在减计数匹配CMPB时,EPWMxB置高。
假设CMPA < CMPB,并且CMPA和CMPB的值关于TBPRD/2对称,那么EPWMxA和EPWMxB就会生成一对中心对称、带有死区的互补PWM波。EPWMxA的高电平区间是[CMPA, CMPA](在三角波的上坡段),而EPWMxB的高电平区间是[CMPB, CMPB](在三角波的下坡段),两者永不同时为高,完美规避了桥臂直通的风险。
AQSFRC:软件强制干预机制AQSFRC寄存器提供了软件直接干预输出状态的“后门”。它分为一次性强制和连续强制。
- 一次性强制 (
OTSFA,OTSFB):向这些位写1,会立即产生一个强制事件,并根据ACTSFA/ACTSFB的配置(清除、置位、翻转)改变输出状态一次。之后该位自动清零。这常用于测试或初始化时强制输出到一个已知状态。 - 连续强制 (
CSFA,CSFB):这些位可以强制输出持续为高、持续为低或禁用强制。在影子模式下,连续强制动作会在下一次影子加载事件后才生效;在立即模式下,则在下一个TBCLK边沿生效。这个功能在故障安全处理中非常有用,例如,当软件检测到某种异常(非硬件故障引脚触发),可以立即通过连续强制将PWM输出拉低,封锁驱动。
RLDCSF位控制着连续强制影子寄存器的加载时机,与CMPCTL中的LOADxMODE类似,可以选择在CTR=0、CTR=PRD或两者时加载,或者立即加载。
5. 死区生成模块寄存器剖析:DBCTL、DBRED与DBFED
死区时间是功率电子中防止上下桥臂同时导通(直通短路)而引入的延迟。ePWM的死区模块可以独立地对上升沿和下降沿插入可编程的延迟。
DBCTL:死区工作模式与极性控制DBCTL寄存器是死区模块的配置中心。
IN_MODE[1:0]:选择输入信号源。默认(00b)是EPWMxA作为上升沿和下降沿延迟的共同源。其他模式允许你将EPWMxA和EPWMxB信号交叉作为延迟源,用于生成更复杂的非对称死区或特定需求的波形。POLSEL[1:0]:极性选择。这是容易出错的地方。它控制是否对经过死区延迟后的信号进行取反。- 00b (Active High, AH):都不取反。这是最直观的模式,输入高,输出最终也是高。
- 01b (Active Low Complementary, ALC):对
EPWMxA路径取反。常用于驱动需要低电平有效的功率器件,或者生成互补信号。 - 10b (Active High Complementary, AHC):对
EPWMxB路径取反。 - 11b (Active Low, AL):对两路都取反。 例如,在典型的半桥驱动中,我们常使用ALC模式。假设
AQ模块产生一对互补的EPWMxA(高有效)和EPWMxB(低有效)信号。EPWMxA进入死区模块后,POLSEL配置为ALC,意味着EPWMxA路径的信号会被取反。这样,最终输出的EPWMxA信号就变成了低有效,与EPWMxB(可能也经过处理)共同构成一对低有效的互补驱动信号,直接匹配许多IGBT或MOSFET驱动芯片的输入要求。
OUT_MODE[1:0]:输出模式。决定是否启用死区功能。- 00b:完全旁路死区模块。
AQ模块的输出直通。 - 01b:仅使能下降沿延迟。
EPWMxA直通,EPWMxB是带下降沿延迟的信号。 - 10b:仅使能上升沿延迟。
EPWMxA是带上升沿延迟的信号,EPWMxB直通。 - 11b:完全使能。
EPWMxA输出带上升沿延迟的信号,EPWMxB输出带下降沿延迟的信号。这是最常用的模式。
- 00b:完全旁路死区模块。
DBRED与DBFED:延迟时间的精确设定DBRED和DBFED是两个10位的寄存器,分别用于设置上升沿延迟和下降沿延迟的计数值。延迟时间T_delay = (DBRED or DBFED value) * T_TBCLK。如果使能了DBCTL[HALFCYCLE],则计数时钟为TBCLK/2,可以实现更精细的延迟分辨率。
配置死区的黄金法则是:死区时间必须大于功率器件的开关(关断)延迟时间。例如,你的MOSFET关断延迟是200ns,那么设置的死区时间至少应为250-300ns。计算时,根据TBCLK周期换算成计数值写入DBRED/DBFED。通常,上升沿和下降沿延迟设置为相同的值,以确保对称性。
常见���题排查:如果发现驱动波形有异常重叠或死区时间不符合预期,请按以下步骤检查:
- 确认
DBCTL[OUT_MODE]是否已正确设置为使能模式(01b, 10b, 11b)。- 检查
POLSEL设置是否与你的驱动电路逻辑匹配。用示波器同时测量AQ模块后的原始信号和死区模块后的最终信号,对比验证。- 确认
DBRED/DBFED的值是否计算正确。TBCLK频率是否准确?是否使能了半周期时钟?- 检查
IN_MODE,确保延迟处理的信号源是你期望的那一路。
6. 故障联防与数字比较模块寄存器解读:TZSEL与TZDCSEL
故障保护是工业控制系统的生命线。ePWM的Trip-Zone(TZ)模块和数字比较(DC)模块共同构成了强大的硬件级保护机制,能够在微秒级甚至纳秒级内响应故障并采取预设动作。
TZSEL寄存器:故障源选择TZSEL寄存器分为两部分:单次触发(One-Shot Trip, OST)和周期逐次触发(Cycle-By-Cycle Trip, CBC)。
- OST (
TZSEL_OSHTx,TZSEL_DCAEVT1,TZSEL_DCBEVT1):当使能的故障源信号有效时,ePWM模块会立即进入故障状态,输出被强制为安全状态(通过TZCTL寄存器配置,如高阻、拉低等)。一旦进入OST故障状态,只有通过软件显式清除TZ标志位才能恢复。这适用于过流、过压等严重故障,需要人工干预才能复位。 - CBC (
TZSEL_CBCx,TZSEL_DCAEVT2,TZSEL_DCBEVT2):当使能的故障源信号有效时,ePWM模块会在当前PWM周期结束后,立即将输出强制为安全状态。只要故障信号消失,下一个PWM周期就会自动恢复正常运行。这适用于需要限流或周期性保护的场景,比如峰值电流保护。
你可以为每个ePWM模块独立选择多达6个外部硬件故障引脚(TZ1至TZ6)以及内部数字比较事件(DCAEVT1/2,DCBEVT1/2)作为OST或CBC的触发源。例如,可以将硬件过流比较器的输出连接到TZ1,并在TZSEL中配置TZSEL_CBC1 = 1,实现每个PWM周期的电流峰值保护。
TZDCSEL寄存器:数字比较事件源选择数字比较模块是更高级的故障/事件生成器。它允许你将内部模拟比较器(COMP)的输出(DCAH/DCAL,DCBH/DCBL)进行逻辑组合,生成特定的事件(DCAEVT1/2,DCBEVT1/2)。TZDCSEL寄存器就是用来配置这些逻辑条件的。例如:
TZDCSEL_DCAEVT1[2:0] = 001b:表示当DCAH信号为低电平时,产生DCAEVT1事件。TZDCSEL_DCAEVT1[2:0] = 101b:表示当DCAL为高电平且DCAH为低电平时(即窗口比较),产生DCAEVT1事件。
然后,TZSEL寄存器中的TZSEL_DCAEVT1位决定是否将这个DCAEVT1事件作为本ePWM模块的故障源。这种架构提供了极大的灵活性。例如,你可以用一个比较器监控母线电压,设定一个阈值(DCAH)。当电压过高时,DCAH变低,触发DCAEVT1,进而通过TZSEL配置为OST故障,立即关闭所有PWM输出。
重要安全实践:在系统初始化时,务必先配置好
TZCTL(定义故障动作,如强制输出低)和TZEINT(使能故障中断),最后才使能TZSEL中的故障源。这个顺序可以避免在配置过程中因干扰信号误触发故障,导致系统无法启动。同样,在清除故障后,重新使能PWM输出前,也应确保所有故障条件已解除。
7. 从寄存器到代码:一个完整的ePWM配置实例
理解了所有寄存器之后,我们通过一个在电机控制中常见的中心对齐互补PWM带死区配置实例,将理论知识转化为实际的C代码(以TI C2000系列为例)。目标是:PWM频率20kHz,死区时间500ns,系统时钟SYSCLKOUT = 200MHz。
步骤1:计算关键参数并配置时基模块
- 选择增减计数模式以获得中心对齐波形:
TBCTL[CTRMODE] = 10b。 - 计算
TBCLK和TBPRD。为简化,先设置HSPCLKDIV=1,CLKDIV=1,则TBCLK = 200MHz。- 周期
Tpwm = 1 / 20kHz = 50us。 - 在增减模式下,
Tpwm = (2 * TBPRD) / TBCLK。因此,TBPRD = (Tpwm * TBCLK) / 2 = (50e-6 * 200e6) / 2 = 5000。
- 周期
- 配置
TBPRD = 5000。 - 设置死区时间对应的计数值。死区时间
Tdead = 500ns。DBRED/DBFED值 =Tdead * TBCLK = 500e-9 * 200e6 = 100。
步骤2:配置动作限定模块生成互补波形假设我们希望EPWMxA作为上管驱动信号,EPWMxB作为下管驱动信号(考虑死区插入后最终会调整极性)。
- 设置
CMPA = 2400,CMPB = 2600。这会在中心点(TBPRD/2=2500)附近产生一个占空比约为(2600-2400)/5000 = 4%的脉冲(仅为示例,实际占空比由控制算法动态给出)。 - 配置
AQCTLA:CAU = SET(10b): 增计数匹配CMPA时,EPWMxA置高。CAD = CLEAR(01b): 减计数匹配CMPA时,EPWMxA拉低。ZRO和PRD设为无操作,因为我们用CMPA/B控制边沿。
- 配置
AQCTLB:CBU = CLEAR(01b): 增计数匹配CMPB时,EPWMxB拉低。CBD = SET(10b): 减计数匹配CMPB时,EPWMxB置高。- 此时,
EPWMxA高电平区间在三角波上升沿,EPWMxB在下降沿,两者互补但中间有重叠(因为CMPA < CMPB),需要死区隔离。
步骤3:配置死区模块插入死区并调整极性
- 配置
DBCTL:IN_MODE = 00b: 使用EPWMxA作为两路延迟的源。POLSEL = 01b(ALC): 对EPWMxA路径取反。假设我们的驱动芯片是低电平有效。OUT_MODE = 11b: 使能上升沿和下降沿延迟。
- 配置
DBRED = 100,DBFED = 100。插入500ns死区。
步骤4:配置影子寄存器与同步(可选)
- 配置
CMPCTL[SHDWAMODE] = 0,LOADAMODE = 00b(CTR=0时加载)。CMPB同理。确保占空比更新无毛刺。 - 如果有多模块同步需求,配置
TBCTL[PHSEN]=1,并设置TBPHS为相位偏移值。从机模块在接收到主机同步信号后,其计数器将从TBPHS值开始计数。
步骤5:使能PWM输出与故障保护
- 通过
TZCTL寄存器配置故障动作,例如TZCTL[TZA] = 1(强制低),TZCTL[TZB] = 1。 - 配置
TZSEL,使能必要的硬件故障引脚(如TZSEL_CBC1 = 1)。 - 最后,通过
EPWM模块的ETSEL和ETPS寄存器配置中断(如CTR=PRD中断用于执行控制算法更新CMPA/CMPB),并使能ePWM时钟。
// 示例代码片段 (基于TI C2000 Driverlib) #include "driverlib.h" void InitEPWM1(void) { // 1. 时基配置 EPWM_setTimeBasePeriod(EPWM1_BASE, 5000); // TBPRD = 5000 EPWM_setPhaseShift(EPWM1_BASE, 0); // TBPHS = 0 EPWM_setTimeBaseCounter(EPWM1_BASE, 0); // TBCTR = 0 EPWM_setTimeBaseCounterMode(EPWM1_BASE, EPWM_COUNTER_MODE_UP_DOWN); // CTRMODE = 10b EPWM_disablePhaseShiftLoad(EPWM1_BASE); // PHSEN = 0 (主机) EPWM_setClockPrescaler(EPWM1_BASE, EPWM_CLOCK_DIVIDER_1, EPWM_HSCLOCK_DIVIDER_1); // CLKDIV=1, HSPCLKDIV=1 // 2. 比较器配置 EPWM_setCounterCompareValue(EPWM1_BASE, EPWM_COUNTER_COMPARE_A, 2400); // CMPA EPWM_setCounterCompareValue(EPWM1_BASE, EPWM_COUNTER_COMPARE_B, 2600); // CMPB EPWM_setCounterCompareShadowLoadMode(EPWM1_BASE, EPWM_COUNTER_COMPARE_A, EPWM_COMP_LOAD_ON_CNTR_ZERO); // LOADAMODE=00b EPWM_setCounterCompareShadowLoadMode(EPWM1_BASE, EPWM_COUNTER_COMPARE_B, EPWM_COMP_LOAD_ON_CNTR_ZERO); // LOADBMODE=00b // 3. 动作限定配置 EPWM_setActionQualifierAction(EPWM1_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_HIGH, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA); // CAU = SET EPWM_setActionQualifierAction(EPWM1_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_LOW, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA); // CAD = CLEAR EPWM_setActionQualifierAction(EPWM1_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_LOW, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPB); // CBU = CLEAR EPWM_setActionQualifierAction(EPWM1_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_HIGH, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPB); // CBD = SET // 4. 死区配置 EPWM_setDeadBandDelayMode(EPWM1_BASE, EPWM_DB_FED, 100); // DBFED = 100 EPWM_setDeadBandDelayMode(EPWM1_BASE, EPWM_DB_RED, 100); // DBRED = 100 EPWM_setDeadBandControl(EPWM1_BASE, EPWM_DB_IN_MODE, EPWM_DB_IN_MODE_DISABLE); // 简化配置,使用库函数预设的典型模式 // 注意:库函数可能将IN_MODE, POLSEL, OUT_MODE封装为一个调用,需查阅具体手册。 // 假设配置为:IN_MODE=EPWMxA源,POLSEL=ALC,OUT_MODE=全使能。 EPWM_setDeadBandCounterClock(EPWM1_BASE, EPWM_DB_COUNTER_CLOCK_FULL_CYCLE); // HALFCYCLE = 0 // 5. 故障保护配置 (示例) EPWM_setTripZoneAction(EPWM1_BASE, EPWM_TZ_ACTION_EVENT_TZA, EPWM_TZ_ACTION_LOW); // TZA故障时强制低 EPWM_setTripZoneAction(EPWM1_BASE, EPWM_TZ_ACTION_EVENT_TZB, EPWM_TZ_ACTION_LOW); // TZB故障时强制低 EPWM_enableTripZoneSignals(EPWM1_BASE, EPWM_TZ_SIGNAL_CBC1); // 使能CBC1故障源 // 6. 使能ePWM模块 // ... 其他全局和模块使能代码 }通过这个从理论到实践的完整流程,我们可以看到,ePWM的寄存器配置是一个环环相扣的系统工程。每一步设置都影响着最终的波形形态和系统行为。掌握这些寄存器的内涵,就能让ePWM模块这颗强大的“心脏”按照你的意愿精准跳动,驱动复杂的电力电子系统可靠运行。