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

TI ePWM寄存器深度解析:从架构到代码的电机控制实践

1. ePWM模块核心架构与寄存器概览

在深入每个寄存器位域之前,我们有必要先理解TI ePWM模块的整体架构。它远不止一个简单的计数器加比较器。你可以把它想象成一个高度模块化、流水线化的“波形生成工厂”。这个工厂有明确的分工:时基(TB)模块是心脏,负责产生统一的节拍;计数比较(CC)模块是设计师,决定波形关键转折点;动作限定(AQ)模块是执行者,根据指令驱动输出引脚;而死区(DB)模块则是安全质检员,防止上下管直通。此外,还有故障联防(TZ)和事件触发(ET)等模块作为工厂的应急系统和联动装置。

寄存器就是配置这个工厂里每一台机器、每一条流水线的控制面板。从TBCTLTZSEL,这一系列寄存器并非孤立存在,它们共同构成了一套精密的控制系统。例如,TBCTR(计数器值)和TBPRD(周期值)共同定义了PWM的“时间尺子”,CMPA/CMPB则是在这把尺子上标记的“刻度”。AQCTLA/B寄存器规定了当指针(TBCTR)走到这些刻度时,输出引脚应该执行什么动作(置高、拉低或翻转)。这种硬件级的协同工作,使得CPU无需频繁干预即可产生精确、稳定的PWM波形,这是软件模拟PWM无法比拟的。

理解寄存器之间的联动关系至关重要。比如,TBCTL[CTRMODE]设置了计数器的计数方向(增、减、增减),这会直接影响AQCTLCAU(增计数时匹配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=CMPBCMPB设为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波形占空比和复杂波形形状的核心。CMPACMPB是两个比较寄存器,它们的值与不断变化的TBCTR进行比较,产生匹配事件。

CMPCTL:影子模式与加载逻辑CMPCTL寄存器控制着CMPACMPB的行为模式,其核心在于影子寄存器机制。SHDWAMODESHDWBMODE位决定比较寄存器是工作在影子模式(0)还是立即模式(1)。在绝大多数动态调整占空比的应用中,都应使用影子模式。在这种模式下,CPU写入CMPA/CMPB的值,实际上是写入了对应的影子寄存器,不会立即影响正在输出的PWM波形。这给了系统一个“缓冲期”。

那么,影子寄存器里的值何时才会生效呢?这由LOADAMODELOADBMODE位决定。它们提供了多种加载时机:

  • 00b (CTR=0):在计数器归零时加载。这是最常用的方式,确保新的比较值在一个PWM周期开始时生效,波形变化整齐。
  • 01b (CTR=PRD):在计数器达到周期值时加载。在增减计数模式下,这对应着计数器的峰值点。
  • 10b (CTR=0 or CTR=PRD):在计数器等于0或等于TBPRD时加载。这提供了双倍的机会更新比较值,适用于需要极高更新率的场合。
  • 11b (Freeze):冻结,不自动加载。需要软件手动触发。

SHDWAFULLSHDWBFULL是状态标志位。当你向影子寄存器写入数据时,该位会被置1,表示“影子��存器已满,有新数据待加载”。一旦指定的加载事件(如CTR=0)发生,该位会自动清零。在编写代码时,可以在写入前检查该位,但这并非必须,因为硬件会管理覆盖。更重要的应用是在高可靠系统中,通过监控这些标志位来确认参数更新是否已被硬件接收并排队。

CMPA与CMPB:占空比的直接控制器CMPACMPB寄存器的值直接决定了PWM脉冲的边沿位置。在增计数模式下,当TBCTR从0开始增长,在TBCTR < CMPx期间,你可以通过AQCTL设置输出为高电平;当TBCTR增长到等于CMPx时,产生匹配事件,可以触发输出动作变为低电平。这样,占空比 =CMPx / TBPRD

在增减计数模式下,情况变得更有趣。CMPA通常用于控制第一个边沿(例如,在增计数过程中,TBCTR从0增加到CMPA时,输出由低变高),而CMPB用于控制第二个边沿(在减计数过程中,TBCTRTBPRD减少到CMPB时,输出由高变低)。这样,你可以独立控制脉冲的上升沿和下降沿位置,生成非对称或带有死区的PWM。此时,占空比的计算公式为:占空比 = (CMPB - CMPA) / TBPRD(假设CMPB > CMPA,且输出在CMPA处变高,在CMPB处变低)。

实操心得:在电机控制中,我们常用增减计数模式配合CMPACMPB来生成中心对齐的PWM,并自然形成死区。例如,设置CMPATBPRD/2 - DeadTime/2CMPBTBPRD/2 + DeadTime/2。这样,在计数器增到CMPA时,上管关断(输出变低);在计数器减到CMPB时,下管开启(输出变高)。中间CMPBCMPA(在三角波的下坡段)的时间差就是死区时间。这种方法将死区逻辑整合在了比较值中,非常直观。

4. 动作限定模块寄存器精讲:AQCTLA、AQCTLB与AQSFRC

动作限定模块接收来自时基模块(CTR=PRD,CTR=0)和计数比较模块(CTR=CMPA,CTR=CMPB)的事件,并根据AQCTLAAQCTLB寄存器的配置,决定输出引脚EPWMxAEPWMxB的具体动作。

AQCTLA/AQCTLB:事件到动作的映射规则这两个寄存器结构完全对称,分别控制A和B两个输出。每个寄存器内部,又针对不同的事件源(ZRO,PRD,CAU,CAD,CBU,CBD)设置了2个控制位,用于定义四种动作:

  • 00b:无操作(忽略该事件)。
  • 01b:清除(强制输出低电平)。
  • 10b:置位(强制输出高电平)。
  • 11b:翻转(低变高,高变低)。

这里的精妙之处在于CAU/CADCBU/CBD的区分。CAU代表“计数器等于CMPA且正在递增”,CAD代表“计数器等于CMPA且正在递减”。在增减计数模式下,计数器会在CMPA值上经过两次:一次上升沿,一次下降沿。通过分别为CAUCAD设置不同的动作,可以生成非常复杂的波形。一个最经典的配置是生成带死区的互补PWM:

  1. 配置AQCTLACAU = SET(10b),CAD = CLEAR(01b)。这意味着在增计数匹配CMPA时,EPWMxA置高;在减计数匹配CMPA时,EPWMxA拉低。
  2. 配置AQCTLBCBU = CLEAR(01b),CBD = SET(10b)。这意味着在增计数匹配CMPB时,EPWMxB拉低;在减计数匹配CMPB时,EPWMxB置高。

假设CMPA < CMPB,并且CMPACMPB的值关于TBPRD/2对称,那么EPWMxAEPWMxB就会生成一对中心对称、带有死区的互补PWM波。EPWMxA的高电平区间是[CMPA, CMPA](在三角波的上坡段),而EPWMxB的高电平区间是[CMPB, CMPB](在三角波的下坡段),两者永不同时为高,完美规避了桥臂直通的风险。

AQSFRC:软件强制干预机制AQSFRC寄存器提供了软件直接干预输出状态的“后门”。它分为一次性强制和连续强制。

  • 一次性强制 (OTSFA,OTSFB):向这些位写1,会立即产生一个强制事件,并根据ACTSFA/ACTSFB的配置(清除、置位、翻转)改变输出状态一次。之后该位自动清零。这常用于测试或初始化时强制输出到一个已知状态。
  • 连续强制 (CSFA,CSFB):这些位可以强制输出持续为高、持续为低或禁用强制。在影子模式下,连续强制动作会在下一次影子加载事件后才生效;在立即模式下,则在下一个TBCLK边沿生效。这个功能在故障安全处理中非常有用,例如,当软件检测到某种异常(非硬件故障引脚触发),可以立即通过连续强制将PWM输出拉低,封锁驱动。

RLDCSF位控制着连续强制影子寄存器的加载时机,与CMPCTL中的LOADxMODE类似,可以选择在CTR=0CTR=PRD或两者时加载,或者立即加载。

5. 死区生成模块寄存器剖析:DBCTL、DBRED与DBFED

死区时间是功率电子中防止上下桥臂同时导通(直通短路)而引入的延迟。ePWM的死区模块可以独立地对上升沿和下降沿插入可编程的延迟。

DBCTL:死区工作模式与极性控制DBCTL寄存器是死区模块的配置中心。

  • IN_MODE[1:0]:选择输入信号源。默认(00b)是EPWMxA作为上升沿和下降沿延迟的共同源。其他模式允许你将EPWMxAEPWMxB信号交叉作为延迟源,用于生成更复杂的非对称死区或特定需求的波形。
  • 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输出带下降沿延迟的信号。这是最常用的模式。

DBRED与DBFED:延迟时间的精确设定DBREDDBFED是两个10位的寄存器,分别用于设置上升沿延迟和下降沿延迟的计数值。延迟时间T_delay = (DBRED or DBFED value) * T_TBCLK。如果使能了DBCTL[HALFCYCLE],则计数时钟为TBCLK/2,可以实现更精细的延迟分辨率。

配置死区的黄金法则是:死区时间必须大于功率器件的开关(关断)延迟时间。例如,你的MOSFET关断延迟是200ns,那么设置的死区时间至少应为250-300ns。计算时,根据TBCLK周期换算成计数值写入DBRED/DBFED。通常,上升沿和下降沿延迟设置为相同的值,以确保对称性。

常见���题排查:如果发现驱动波形有异常重叠或死区时间不符合预期,请按以下步骤检查:

  1. 确认DBCTL[OUT_MODE]是否已正确设置为使能模式(01b, 10b, 11b)。
  2. 检查POLSEL设置是否与你的驱动电路逻辑匹配。用示波器同时测量AQ模块后的原始信号和死区模块后的最终信号,对比验证。
  3. 确认DBRED/DBFED的值是否计算正确。TBCLK频率是否准确?是否使能了半周期时钟?
  4. 检查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个外部硬件故障引脚(TZ1TZ6)以及内部数字比较事件(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:计算关键参数并配置时基模块

  1. 选择增减计数模式以获得中心对齐波形:TBCTL[CTRMODE] = 10b
  2. 计算TBCLKTBPRD。为简化,先设置HSPCLKDIV=1,CLKDIV=1,则TBCLK = 200MHz
    • 周期Tpwm = 1 / 20kHz = 50us
    • 在增减模式下,Tpwm = (2 * TBPRD) / TBCLK。因此,TBPRD = (Tpwm * TBCLK) / 2 = (50e-6 * 200e6) / 2 = 5000
  3. 配置TBPRD = 5000
  4. 设置死区时间对应的计数值。死区时间Tdead = 500nsDBRED/DBFED值 =Tdead * TBCLK = 500e-9 * 200e6 = 100

步骤2:配置动作限定模块生成互补波形假设我们希望EPWMxA作为上管驱动信号,EPWMxB作为下管驱动信号(考虑死区插入后最终会调整极性)。

  1. 设置CMPA = 2400,CMPB = 2600。这会在中心点(TBPRD/2=2500)附近产生一个占空比约为(2600-2400)/5000 = 4%的脉冲(仅为示例,实际占空比由控制算法动态给出)。
  2. 配置AQCTLA
    • CAU = SET(10b): 增计数匹配CMPA时,EPWMxA置高。
    • CAD = CLEAR(01b): 减计数匹配CMPA时,EPWMxA拉低。
    • ZROPRD设为无操作,因为我们用CMPA/B控制边沿。
  3. 配置AQCTLB
    • CBU = CLEAR(01b): 增计数匹配CMPB时,EPWMxB拉低。
    • CBD = SET(10b): 减计数匹配CMPB时,EPWMxB置高。
    • 此时,EPWMxA高电平区间在三角波上升沿,EPWMxB在下降沿,两者互补但中间有重叠(因为CMPA < CMPB),需要死区隔离。

步骤3:配置死区模块插入死区并调整极性

  1. 配置DBCTL
    • IN_MODE = 00b: 使用EPWMxA作为两路延迟的源。
    • POLSEL = 01b(ALC): 对EPWMxA路径取反。假设我们的驱动芯片是低电平有效。
    • OUT_MODE = 11b: 使能上升沿和下降沿延迟。
  2. 配置DBRED = 100,DBFED = 100。插入500ns死区。

步骤4:配置影子寄存器与同步(可选)

  1. 配置CMPCTL[SHDWAMODE] = 0,LOADAMODE = 00b(CTR=0时加载)。CMPB同理。确保占空比更新无毛刺。
  2. 如果有多模块同步需求,配置TBCTL[PHSEN]=1,并设置TBPHS为相位偏移值。从机模块在接收到主机同步信号后,其计数器将从TBPHS值开始计数。

步骤5:使能PWM输出与故障保护

  1. 通过TZCTL寄存器配置故障动作,例如TZCTL[TZA] = 1(强制低),TZCTL[TZB] = 1
  2. 配置TZSEL,使能必要的硬件故障引脚(如TZSEL_CBC1 = 1)。
  3. 最后,通过EPWM模块的ETSELETPS寄存器配置中断(如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模块这颗强大的“心脏”按照你的意愿精准跳动,驱动复杂的电力电子系统可靠运行。

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

相关文章:

  • Dante Cloud测试报告:测试结果的统计与分析
  • 一文了解高速工业相机
  • 鸿蒙ArkUI实战:用基础布局绘制每日支出柱状图
  • 临清市博轩门窗|2026 临清老旧小区门窗改造行业盘点,改造实操实用技巧 - 国麟测评
  • 彻底搞懂 ISM 免费工业频段:从原理、标准、场景到实战代码(物联网嵌入式硬核教程)(二)
  • ToastFish:终极摸鱼学习指南,让Windows通知栏变身你的单词记忆神器
  • 从安装到部署:Transformers-ruby企业级应用完整指南
  • CANN/asc-devkit多核Tiling切分概述
  • 青岛劳力士原厂官方售后服务中心|真伪维修网点辨别官方公示(2026 年 7 月最新) - 劳力士售后服务官网
  • 苏州积家回收价格查询和各大平台实测排行(2026年7月最新) - 天价名表回收平台
  • 10分钟上手Eflatun.SceneReference:从安装到实现场景跳转全流程
  • 不想进厂打工?武汉科谷技工学校这几个专业不用进厂、环境还好 - 升学择校早知道
  • 如何高效部署COLMAP三维重建工具:从零到生产的完整指南
  • 5分钟掌握跨平台输入法词库转换:深蓝词库转换完全指南
  • 告别输入法束缚:深蓝词库转换器带你实现跨平台词库自由
  • 阴阳师百鬼夜行自动化脚本终极指南:告别手动砸豆,轻松收集式神碎片
  • 从0到1搭建Rix开发环境:超简单Makefile构建与环境配置教程
  • kvcached路线图:未来功能规划与技术发展方向
  • 2026 迪奥早春限定包袋 中检奢侈品鉴定中心全程核验 - 商业每日快报
  • ReconPi自动化侦察:daily脚本与Cron任务设置,实现24小时监控
  • 深入解析EDMA中断与事件寄存器:从概念到实战调试
  • 如何在个人电脑上实现专业级音频转录?Buzz离线转录工具完整指南
  • 天津大型黄金回收靠谱公司,正规门店变现避坑注意事项 - 日常比对手册
  • 重庆渝中区老牌建材店!20年老店,建材采购+施工一站式搞定 - 林州鸿途网络
  • CANN/asc-devkit分离模式矩阵乘法实现
  • KMP 全栈开发:从 Android 到 AI Agent(一)
  • 如何快速在React Native应用中实现Facebook风格的骨架屏加载动画
  • Litarvan主题实战案例:打造个性化Linux登录界面的3个创意方案
  • 深入解析向量中断管理器:嵌入式实时系统中断性能优化实战
  • 张恒汝的个人简介