理解ePWM的工作原理和配置方法

目录

一、CPU频率与ePWM时钟的关系

二、时基子模块:计数模式与周期寄存器TBPRD

[2.1 三种计数模式](#2.1 三种计数模式)

[2.2 如何根据控制频率计算TBPRD](#2.2 如何根据控制频率计算TBPRD)

[三、死区单元(Deadband, DB)与TBCLK的关系](#三、死区单元(Deadband, DB)与TBCLK的关系)

[四、软件强制(Software Force)功能](#四、软件强制(Software Force)功能)

[4.1 什么是软件强制?](#4.1 什么是软件强制?)

[4.2 相关寄存器](#4.2 相关寄存器)

[4.3 在FCS-MPC中的应用](#4.3 在FCS-MPC中的应用)

五、一个完整的配置实例

[5.1 计算相关值](#5.1 计算相关值)

[5.2 Simulink模型中的配置(以ePWM模块为例)](#5.2 Simulink模型中的配置(以ePWM模块为例))

[5.3 在算法中更新输出](#5.3 在算法中更新输出)

六、活学活用


一、CPU频率与ePWM时钟的关系

在TI C2000系列芯片(如F28379D)中,整个硬件系统的"心跳"来自系统时钟(SYSCLK) ,它由外部晶振经锁相环(PLL)倍频得到。F28379D的最高SYSCLK为200 MHz,也就是我们常说的CPU频率200MHz

ePWM模块的时钟源正是这个SYSCLK。但ePWM内部有一个时基时钟(TBCLK),它由SYSCLK经分频器(TBCTL[CLKDIV]和TBCTL[HSPCLKDIV])得到。公式为:

text

复制代码
TBCLK = SYSCLK / (HSPCLKDIV * CLKDIV)

通常我们将这两个分频器设为1,使TBCLK = SYSCLK = 200 MHz,这样ePWM的计数步进时间就是 1/200MHz = 5 ns。


二、时基子模块:计数模式与周期寄存器TBPRD

ePWM的时基子模块(Time-Base)负责产生计数器的计数行为。关键寄存器有:

  • TBCTL:控制寄存器,其中设置计数模式(向上、向下、向上向下)和时钟分频。

  • TBPRD:周期寄存器,定义了计数器计数到多少时发生周期事件。

  • TBCTR:当前计数值。

2.1 三种计数模式

  1. 向上计数模式:TBCTR从0增加到TBPRD,然后复位到0重新开始。

    • 特点:每个周期只产生一次周期事件(CTR=TBPRD),适合单次更新。
  2. 向下计数模式:TBCTR从TBPRD减小到0,再回到TBPRD。

    • 类似向上,方向相反。
  3. 向上-向下计数模式:TBCTR从0增加到TBPRD,再减小到0,循环往复。

    • 特点:每个周期产生两次事件(CTR=TBPRD 和 CTR=0),常用于对称PWM。

2.2 如何根据控制频率计算TBPRD

假设我们要的PWM频率为 f_PWM,TBCLK已知,则TBPRD的计算公式依赖于计数模式。

  • 向上计数

    每个周期需要计数 (TBPRD+1) 个TBCLK周期。

    所以 f_PWM = TBCLK / (TBPRD+1)

    => TBPRD = TBCLK / f_PWM - 1

  • 向上-向下计数

    每个周期需要 2 * TBPRD 个TBCLK周期(因为先上后下)。

    所以 f_PWM = TBCLK / (2 * TBPRD)

    => TBPRD = TBCLK / (2 * f_PWM)

实例

TBCLK = 200 MHz,需要 f_PWM = 20 kHz。

  • 向上计数:TBPRD = 200M / 20k - 1 = 10000 - 1 = 9999。

  • 向上-向下:TBPRD = 200M / (2*20k) = 5000。


三、死区单元(Deadband, DB)与TBCLK的关系

死区单元用于生成互补的PWM信号,并插入死区时间。它位于动作限定器之后,接受原始的比较输出信号(EPWMxA和EPWMxB),然后输出经过死区处理的信号(EPWMxA_Out和EPWMxB_Out)。

死区时间由上升沿延迟(RED)下降沿延迟(FED) 寄存器控制,单位是TBCLK周期。
死区时间 = RED × TBCLK周期

例如,需要3 μs死区,TBCLK = 200 MHz(周期5 ns),则:

text

复制代码
RED = 3 μs / 5 ns = 600

在配置中,通常将RED和FED设为相同的值,以获得对称的死区。


四、软件强制(Software Force)功能

在FCS-MPC中,我们直接输出开关状态,不再依赖比较器与计数器的比较。这时就需要使用动作限定子模块的软件强制功能。

4.1 什么是软件强制?

软件强制允许我们通过直接写寄存器的方式,强制将PWM输出引脚置为高电平或低电平,而忽略当前计数器的位置和比较值。这实现了"直接控制"PWM输出的能力。

4.2 相关寄存器

  • AQSFRC:软件强制寄存器,用于选择软件强制是否有效以及强制动作。

  • ACTSFRC:软件强制动作寄存器,指定强制时输出的电平(高、低、翻转等)。

4.3 在FCS-MPC中的应用

在你的控制器中,每计算出一个开关状态(如Sabc = [1,0,1]),就需要立即将对应的ePWM输出强制为相应电平。

步骤:

  1. 配置AQSFRC,允许软件强制(例如设置ACT=1)。

  2. 配置ACTSFRC,对每个ePWM模块的A、B通道设置强制动作(例如:当开关状态要求上管导通时,强制输出高;下管导通时,强制输出低)。

  3. 在ISR中,将计算出的新开关状态通过软件强制更新到ePWM输出。

注意:使用软件强制时,必须确保死区单元仍然在后台工作,它会自动在强制信号上插入死区。因此,即使我们直接强制输出,硬件仍然会保证上下管不会直通。


五、将这些知识整合:一个完整的配置实例

以F28379D为例,我们要配置ePWM1用于A相:

  • 控制频率:20 kHz

  • 计数模式:向上-向下(便于对称PWM,但FCS-MPC中其实可用向上计数,不过向上-向下更常用)

  • 死区:3 μs

  • 软件强制:使能,用于直接输出开关状态

5.1 计算相关值

  • TBCLK = 200 MHz(分频系数均为1)

  • 计数模式向上-向下:TBPRD = 200M / (2*20k) = 5000

  • 死区计数:RED = FED = 3μs / 5ns = 600

5.2 Simulink模型中的配置(以ePWM模块为例)

在Simulink中,我们可以使用TI C2000的ePWM模块,按照以下步骤配置:

  1. 时基(TB)

    • 计数模式:向上-向下

    • 时基周期(TBPRD):5000

    • 时钟分频:1

  2. 动作限定器(AQ)

    • 设定比较事件时,我们需要将CMPA/CMPB的输入端口设置为"输入端口",即由外部信号决定。但在软件强制模式下,这些事件其实不必要,只需保证强制寄存器有效。
  3. 死区单元(DB)

    • 使能死区

    • 上升沿延迟(RED):600

    • 下降沿延迟(FED):600

    • 极性:互补高电平有效

  4. 软件强制

    • 在ePWM模块的"AQSFRC"参数中,设置"Software Force on A"为"Continuous Software Force"或"One-shot"(通常用Continuous)。

    • 在"ACTSFRC"参数中,设定当软件强制发生时,输出高还是低。注意,这里需要配合你的算法输出的逻辑(比如算法输出1表示上管通,0表示下管通)。

    • 由于我们有三个ePWM模块(三相),需要为每个模块分别配置,并确保它们同步(通过设置同步信号链)。

5.3 在算法中更新输出

在你的FCS-MPC中断服务函数(ISR)中,计算出最优开关状态(比如Sabc = [1,0,0]表示A相上管通,B、C相下管通),然后需要调用类似下面的函数(或通过Simulink生成的代码):

c

复制代码
// 伪代码
EPwm1Regs.AQSFRC.bit.ACTSFA = 1;   // 使能软件强制
EPwm1Regs.ACTSFRC.bit.SFA = (sabc[0]==1) ? 0 : 1; // 假设0代表高,1代表低,根据实际调整
// 对B、C相重复
EPwm2Regs.AQSFRC.bit.ACTSFA = 1;
EPwm2Regs.ACTSFRC.bit.SFA = (sabc[1]==1) ? 0 : 1;
// ...

注意:实际寄存器映射可能略有不同,具体以TI的官方头文件为准。


六、活学活用:固化知识的技巧

  1. 画图理解:在纸上画出ePWM模块的框图(时基、比较、动作限定、死区),标注寄存器名称和关键参数,然后自己推导一遍配置公式。

  2. 动手实验:在Simulink中搭建一个极简模型,只包含ePWM模块和示波器,尝试改变TBPRD、计数模式、死区值,用示波器观察输出波形,验证你的理解。

  3. 结合数据手册:TI的TMS320F28379D Technical Reference Manual 中关于ePWM的章节(第17章)非常详细,可以对照学习。

  4. 从FOC官方示例中反向推导 :打开 mcb_pmsm_foc_model_f28379d.slx,查看ePWM模块的配置参数,对照寄存器手册,理解每个值是怎么来的。

相关推荐
紫薯馍馍3 小时前
matlab R2024b License Manager Error -8怎么解决
matlab
思茂信息6 小时前
CST电磁铁的磁力仿真
开发语言·matlab·平面·cst·电磁仿真
listhi5206 小时前
基于模型预测控制的自动避障与汽车跟踪MATLAB实现
人工智能·matlab·汽车
机器学习之心8 小时前
HHO-LSBoost哈里斯鹰算法优化最小二乘提升多输入回归预测MATLAB代码
算法·matlab·回归·hho-lsboost
软件算法开发1 天前
基于瞪羚优化算法的LSTM网络模型(GOA-LSTM)的一维时间序列预测matlab仿真
人工智能·matlab·lstm·一维时间序列预测·瞪羚优化·lstm网络·goa-lstm
春日见1 天前
自动驾驶的四个演进阶段
开发语言·人工智能·驱动开发·matlab·docker·计算机外设
kebidaixu1 天前
matlab安装MinGW-w64 C/C++ 编译器
matlab
机器学习之心1 天前
基于GSWOA-SVM三种策略改进鲸鱼算法优化支持向量机的数据多变量时间序列预测,Matlab代码
算法·支持向量机·matlab·优化支持向量机·gswoa-svm·三种策略改进鲸鱼算法
3GPP仿真实验室1 天前
【MATLAB源码】THz ISAC:太赫兹通感一体化链路级仿真平台
开发语言·matlab