目录
[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 三种计数模式
-
向上计数模式:TBCTR从0增加到TBPRD,然后复位到0重新开始。
- 特点:每个周期只产生一次周期事件(CTR=TBPRD),适合单次更新。
-
向下计数模式:TBCTR从TBPRD减小到0,再回到TBPRD。
- 类似向上,方向相反。
-
向上-向下计数模式: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输出强制为相应电平。
步骤:
-
配置AQSFRC,允许软件强制(例如设置ACT=1)。
-
配置ACTSFRC,对每个ePWM模块的A、B通道设置强制动作(例如:当开关状态要求上管导通时,强制输出高;下管导通时,强制输出低)。
-
在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模块,按照以下步骤配置:
-
时基(TB)
-
计数模式:向上-向下
-
时基周期(TBPRD):5000
-
时钟分频:1
-
-
动作限定器(AQ)
- 设定比较事件时,我们需要将CMPA/CMPB的输入端口设置为"输入端口",即由外部信号决定。但在软件强制模式下,这些事件其实不必要,只需保证强制寄存器有效。
-
死区单元(DB)
-
使能死区
-
上升沿延迟(RED):600
-
下降沿延迟(FED):600
-
极性:互补高电平有效
-
-
软件强制
-
在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的官方头文件为准。
六、活学活用:固化知识的技巧
-
画图理解:在纸上画出ePWM模块的框图(时基、比较、动作限定、死区),标注寄存器名称和关键参数,然后自己推导一遍配置公式。
-
动手实验:在Simulink中搭建一个极简模型,只包含ePWM模块和示波器,尝试改变TBPRD、计数模式、死区值,用示波器观察输出波形,验证你的理解。
-
结合数据手册:TI的TMS320F28379D Technical Reference Manual 中关于ePWM的章节(第17章)非常详细,可以对照学习。
-
从FOC官方示例中反向推导 :打开
mcb_pmsm_foc_model_f28379d.slx,查看ePWM模块的配置参数,对照寄存器手册,理解每个值是怎么来的。