每个 ePWM 模块都有一个自己的时间基准单元(时基单元),用来决定该 ePWM 模块相关的事件时序,通过同步输入信号可以将所有的 ePWM 工作在同一时基信 号下,即所有的 ePWM 模块级联在一起,处于同步状态,在需要时,可以看成是 一个整体。其结构框图如下所示:
图5 时基模块
1时基模块作用
①确定ePWM时基模块的频率或者周期,进一步确定了事件发生的频率。主要是通过配置PWM 时基计数器(TBCTR)来标定与系统时钟(SYSCLKOUT)有关的时基时钟的频率或周期。
②管理 ePWM 模块之间的同步性。
③维护 ePWM 与其他 ePWM 模块间的相位关系。
④设置时基计数器的计数模块。可以工作在向上计数(递增计数)、向下计数(递减计数)、向上-向下计数模式(先递增后递减计数)。
⑤产生下列事件:
--CTR=PRD:时基计数器的值与周期寄存器的值相同(TBCTR=TBPRD)。 向上计数模式
--CTR=ZERO:时基计数器的值为 0(TBCTR=0x0000)。 向下计数模式
时基计数器按照指定模式进行计数,递增时会达到与周期寄存器的值一致,递减时则会减到最小值 0。
⑥配置时基模块的时钟基准,对系统时钟 SYSCLKOUT 进行分频可以得到时基时钟,通过合理分频系统时钟,计数的时候可以工作在相对较低的频率。
2.时基模块的关键信号和寄存器
寄存器 |
地址 |
影子寄存器 |
描述 |
TBCTL |
0x0000 |
无 |
控制寄存器 |
TBSTS |
0x0001 |
无 |
状态寄存器 |
TBPHSHR |
0x0002 |
无 |
扩展相位寄存器 |
TBPHS |
0x0003 |
无 |
相位寄存器 |
TBCTR |
0x0004 |
无 |
计数寄存器 |
TBPRD |
0x0005 |
有 |
周期寄存器 |
图6 时基模块原理框图
①ePWMxSYNCI:时基同步信号输入。输入脉冲用于时基计数器与之前的ePWM模块同步,每个ePWM模块可以通过软件配置为使用或者忽略此信号。对于第一个ePWM模块,这个信号从外部引脚或得。随后的模块的同步信号可以由其他 ePWM模块传递过来。例如第2个模块的同步信号可以从第1个模块的同步信号输出或得,第3个模块由第2个模块产生,以此类推。
②ePWMxSYNCO:时基同步信号输出。输出脉冲用于随后的 ePWM 的时基计数器同步。ePWM 模块产生该信号来源于下列3个事件源中的一件。
--ePWMxSYNCI(同步输入脉冲)。
--CTR=ZERO,时基计数器等于 0(TBCTR=0X0000)。
--CTR=CMPB,时基计数器等于比较寄存器。
③CTR=PRD,时基计数器等于指定周期值。无论什么时候当时基计数器的值与激活的周期寄存器(相对于影子寄存器而言)的值相等的时候,就会产生此信号。
④CTR=ZERO,时基计数器等于 0。无论什么时候当时基计数器的值为 0 的时候,会产生此信号。
⑤CTR=CMPB,时基计数器等于比较寄存器。时基计数器的值等于激活的比较寄存器 B 的时候,会产生此信号。该信号由比较计数器模块产生,用于同步输出逻辑。
⑥CTR_dir:时基计数器方向。表明时基计数器的计数方向,当高电平时计数器向上计数,低电平则向下计数。
⑦CTR_max:时基计数器的值为最大值。当时基计数器到最大值时会产生此信号。该信号用作状态指示。
⑧TBCLK:时基时钟信号。这个信号来源于预分频的系统时钟信号,用于所有的 ePWM 模块。该信号确定了时基计数器增减的速率。
3 ePWM 周期和频率的计算
ePWM 的频率是由时基周期寄存器值(TBPRD)和时基计数器的计数模式(TBCTRL)共同决定的。时基计数器的计数模式有向上计数(递增)模式、向下计数(递减)模式、向上-向下计数(先递增后递减)模式。下边就以周期寄存器设置为 4(TBPRD=4)举例说明
①向上-向下计数模式(先递增后递减)在此模式下,时基计数器先从 0 开始向上计数(递增)直到递增到周期寄存器的值 4,然后再由 4 向下计数(递减)直到减到 0,再重复以上动作,如下图所示:
图7 增减计数模式
在此模式下,随着同步信号的到来,时基模块的输出波形有两种情形,需要通过设置相位方向 TBCTL[PHSDIR]来确定。如果 TBCTL[PHSDIR]=0 时,那么当同步信号到来时,对应的输出波形如图8所示,当 TBCTL[PHSDIR]=1 时如图8所示
图8 输出波形TBCTL[PHSDIR]=0
图8 输出波形TBCTL[PHSDIR]=1
同步信号来临时,不管目前时基计数器已经到了什么值,都将置位为相位寄存器的值,这个作用可以协调各路ePWM模块间的固定相位差,对于先递增后递减模式,同一相位寄存器的值,同时对应着两个段,例如相位值 3,既出现在递增的过程中,又出现在递减的过程中,通过TBCTL寄存器的PHSDIR 位的设置,就可以确定究竟是递增过程还是递减过程中的3。TBCTL[PHSDIR]=1表示为相位寄存器的值是递增过程中的值,TBCTL[PHSDIR]=0时表示为相位寄存器的值是递减过程中的值。当时基计数器的值变化到特定值的时候,特定事件就会产生,特定信号就会发出。
每个 ePWM 模块可以通过软件配置使用或者忽略同步输入信号。如果TBCTL(PHSEN)位被设置为 1,那么时基计数器在下面任意两种情况下就会自动加载相位寄存器(TBPHS)的内容。
①ePWMxSYNCI:同步信号脉冲:当同步信号输入脉冲到来的时候,时基计数器就会在时基模块时钟 TBCLK 的下一个边沿自动加载 TBPHS 的值。
②软件强制同步信号脉冲:向 TBCTL 的 SWFYNC 位写入 1 后,时基计数器也会在时基模块时钟 TBCLK 的下一个边沿自动加载 TBPHS 的值。
TBCLKSYNC 位可以被用来同步在一个设备上所有使能的 PWM 模块。该位是系统时钟使能寄存器的一部分。当 TBCLKSYNC=0 时,ePWM 模块时基时钟停止(默认情况),TBCLKSYNC=1 时,所有的 ePWM 模块在 TBCLK 的时钟上升沿到来时同时被启动,为了更好的同步各 ePWM 模块的 TBCLK,每个 ePWM 模块的预分频系统时钟的时基时钟 TBCTL 的寄存器都要设置为相同的值。设置 ePWM 时钟的操作步骤如下:
①使能各 ePWM 模块的时钟。
②设置 TBCLKSYNC=0,停止所有已使能的 ePWM 模块的时基时钟。
③配置预分频值与 ePWM 工作模式。
④设置 TBCLKSYNC=1,启动时基时钟。
4影子寄存器
在时基模块中有个周期影子寄存器。影子寄存器允许寄存器可以随硬件进行同步更新。在 ePWM 模块中多处出现了影子寄存器,其意义都差不多。影子寄存器是相对于活动寄存器而言的。Active Register(活动寄存器)也就是被激活的寄存器,在工作的寄存器,控制着硬件,可以响应由硬件引起的相关事件。Shadow Register(影子寄存器)影子寄存器缓存器相当于为活动寄存器提供了一个暂时的存放地址,不能直接影响硬件的控制,当系统运行到一定的时候,影子寄存器的值会传递给活动寄存器,这样可以防止由于软件配置寄存器与硬件不同步时而出现的系统崩溃或一些奇怪的故障。
影子寄存器与活动寄存器的内存地址映射值是一致的,写或者读哪一个寄存器,主要取决于 TBCTL[PRDLD]位。该位可以对TBPRD的影子寄存器进行使能或者禁止。
①时基周期影子寄存器模式
当TBCTL[PRDLD]=0 时,TBPRD的影子寄存器是使能的,读写TBPRD的映射地址的内容时,会读写影子寄存器。时基模块计数器值为0时(TBCTR=0x0000),影子寄存器的值传递给活动寄存器。默认情况下,影子寄存器都是有效的。
②时基周期立即加载模式
当 TBCTL[PRDLD]=1 时,为立即加载模式,读写时基周期寄存器对应的地址时,都是直接到活动寄存器。