6.1 EPWM介绍
一个有效的 PWM 外设能够占用最少的 CPU 资源和中断,但可以产生灵活配置的脉冲波形,并且可以方便被理解与使用。单周期的 PWM 波形很简单,主要就是控制脉冲的周期,脉冲的宽度,脉冲起落的时间,一个周期内的脉冲个数,F28377中每个 ePWM 模块由两路 ePWM 输出组成,分别为 ePWMxA 和 ePWMxB,这一对 PWM输出,可以配置成两路独立的单边沿 PWM 输出,或者两路独立的但互相相对称的双边沿 PWM 输出,或者一对双边沿非对称的 PWM 输出,共有12对这样的 ePWM。因为每对 PWM 模块中的两个 PWM 输出均可以单独使用,所以也可以认为有24 路单路 ePWM。每一组 ePWM 模块都包含以下 7 个模块:时基模块 TB、计数比较模块 CC、动作模块 AQ、死区产生模块DB、PWM 斩波模块 PC、错误联防模块 TZ、时间触发模块 ET。
①PWM 输出信号(ePWMxA 和 ePWMxB);PWM 输出引脚与 GPIO 引脚复用,具体配置时需参考 GPIO 引脚配置。
②时间基础同步输入(ePWMxSYNCI)和输出(ePWMxSYNCO)信号;同步时钟信号将 ePWM 各个模块的所有单元联系在一起,每个 ePWM 模块都可以根据需要被配置为使用同步信号或忽略它的同步输入成为独立单元。时钟同步输入和输出信号仅由 ePWM1 引脚产生,ePWM1 的同步输出也与第一个捕获模块(eCAP1)的同步信号相连接。
③错误联防信号(TZ1~TZ6);当外部被控单元符合错误条件时,诸如 IGBT等功率器件模块过电压、过电流或过热时,这些输入信号为 ePWM 模块发出错误警告。每个模块都可以被配置使用或忽略错误联防信号,同时 TZ1~TZ6 可以设置为 GPIO 外设的异步输入。
④ADC 启动信号(ePWMSOCA 和 ePWMSOCB);每个 ePWM 模块都有两个 ADC 转换启动信号,任何一个 ePWM 模块都可以启动 ADC。触发 ADC 的转换信号的事件由 PWM 模块中事件触发子模块来配置。
⑤外设总线;外设总线宽度为 32 位,允许 16 位和 32 位数据通过外设总线写入 ePWM 模块寄存器。
时钟信号经时基模块 TB 产生时基信号,可以设定 PWM 波形的周期,通过计数比较模块 CC,可以对 PWM 波形的脉宽进行配置,再由动作模块 AQ 限定 PWM 输出状态即脉冲波形的起落,经过死区模块 DB,可以将同组内的互补输出 PWM 波形进行边沿延迟,进入死区模块及进行边沿延迟的原因后面在死区模块内会详细介绍,接着可选择是否进入 PWM 斩波模块,进行第一个脉冲宽度设置和后级脉冲占空比调整以适应基于脉冲变压器的门级驱动控制,若 PWM 波形输出后,功率器件有错误响应,可以将错误信号引入错误联防模块,从而强制复位 PWM 的输出。也可以通过事件触发模块配置触发一些事件,如 ADC 转换开始。
6.1.1时基模块
每个 ePWM 模块都有一个自己的时间基准单元(时基单元),用来决定该 ePWM模块相关的事件时序,通过同步输入信号可以将所有的 ePWM 工作在同一时基信号下,即所有的 ePWM 模块级联在一起,处于同步状态,在需要时,可以看成是一个整体。
(1)时基模块的功能
用户通过对时基模块的设定和配置可实现以下功能:
①确定 ePWM 时基模块的频率或者周期,进一步确定了事件发生的频率。主要是通过配置 PWM 时基计数器(TBCTR)来标定与系统时钟(SYSCLKOUT)有关的时基时钟的频率或周期。
②管理 ePWM 模块之间的同步性。
③维护 ePWM 与其他 ePWM 模块间的相位关系。
④设置时基计数器的计数模块。可以工作在向上计数(递增计数)、向下计数(递减计数)、向上-向下计数模式(先递增后递减计数)。
⑤产生下列事件:
--CTR=PRD:时基计数器的值与周期寄存器的值相同(TBCTR=TBPRD)。
--CTR=ZERO:时基计数器的值为 0(TBCTR=0x0000)。
时基计数器按照指定模式进行计数,递增时会达到与周期寄存器的值一致,递减时则会减到最小值 0。
⑥配置时基模块的时钟基准,对系统时钟 SYSCLKOUT 进行分频可以得到时基时钟,通过合理分频系统时钟,计数的时候可以工作在相对较低的频率。
(2)时基模块的关键信号和寄存器
①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)共同决定的。时基计数器的计数模式有向上计数(递增)模式、向下计数(递减)模式、向上-向下计数(先递增后递减)模式。
6.1.2 计数比较模块CC
计数器比较模块是以时基计数器的值作为输入,与比较寄存器 CMPA 和比较寄存器 CMPB 不断进行比较,当时基计数器的值等于其中之一时,就会产生相应的事件。
①产生比较事件具体取决于编程时是采用寄存器还是寄存器 B:
--CTR=CMPA:时基计数器的值与比较寄存器 A 的值相等。
--CTR=CMPB:时基计数器的值与比较寄存器 B 的值相等。
②动作模块 AC 恰当配置后可以控制 PWM 的占空比。
③采用影子寄存器来更新比较值可以有效防止在 PWM 周期内出现故障以及毛刺。
(1)计数器比较模块 CC 的功能
计数器比较模块可以产生两个独立的比较事件,对于向上(递增)或者向下(递减)计数模式来说,在一个 PWM 周期内,比较事件只发生一次。而对于向上向下(先递增后递减)计数器模式来说,如果比较寄存器的值在 0-TBPRD 之间,在一个 PWM 周期内,比较事件就会发生两次。这些事件都会直接影响动作模块。计数器比较模块比较寄存器 CMPA、CMPB 各自都有一个影子寄存器。CMPA 影子寄存器通过清除 CMPCTL[SHDWAMODE]位使能,CMPB 影子寄存器通过清零CMPCTL[SHDWAMODE]位使能。默认情况下,CMPA 和 CMPB 影子寄存器是使能的。若 CMPA 影子寄存器被使能的话,那么在以下几种情况时,影子寄存器的值会传递到有效寄存器中。
--CTR=PRD:时基计数器值与周期寄存器值相同。
--CTR=ZERO:时基计数器为 0。
立即加载模式:如果影子寄存器被禁止,就进入立即加载模式,一旦将值写入到 CMP 寄存器时,这个值直接送到有效寄存器中,立即起作用。
(2)计数器比较模块 CC 的关键信号与寄存器
①CTR=CMPA:时基计数器的值与 CMPA 的值相同时,PWM 可以根据 AQ 动作。
②CTR=CMPB:时基计数器的值与 CMPB 的值相同时,PWM 可以根据 AQ 动作。
③CTR=PRD:时基计数器的值与周期寄存器的值相同,PWM 可以根据 AQ 动作。CMPA 与 CMPB 可以根据相关影子寄存器的值进行更新
④CTR=ZERO:时基计数器的值递减到 0 时,PWM 可以根据 AQ 动作。CMPA 与CMPB 可以根据相关影子寄存器的值进行更新。
6.1.3 动作限定模块AQ
动作限定模块在 PWM 波形形成过程中起到了关键作用,它决定了相应事件发生时应该输出什么样的电平,从而使 ePWMxA 和 ePWMxB 输出所需要的开关波形。
其原理框图如下
(1)动作限定模块功能
①动作模块根据下列事件产生动作(置高、拉低、翻转)。
--CTR=PRD:时基模块来的信号,时基计数器的值等于周期寄存器的值。
--CTR=ZERO:时基模块来的信号,时基计数器的值等于 0。
--CTR=CMPA:计数比较模块来的信号,时基计数器的值等于比较寄存器 A 的值。
--CTR=CMPB:计数比较模块来的信号,时基计数器的值等于比较寄存器 B值。
②管理以上事件发生后 PWM 的输出极性。
③针对时基计数器递增或者递减时提供独立的动作控制
(2)动作限定模块关键信号
ePWMA 和 ePWMB 输出的几种操作方式如下:
①置高(SET HIGH):使 ePWMA 和 ePWMB 输出高电平。
②置低(CLEAR LOW):使 ePWMA 和 ePWMB 输出低电平。
③取反(TOOGLE):当 ePWMA 或者 ePWMB 当前状态是低电平时,那么下一刻就是高电平;当 ePWMA 或者 ePWMB 当前状态是高电平时,那么下一时刻就是低电平。
④不动作(DO NOTHING):不对 ePWM 输出做任何改变。但是还是可以产生相应的事件触发信号以及相关中断。
(3)动作限定模块一般配置条件下的输出波形
PWM 波形在通过 AQ 模块后是什么样的呢?需要根据时基计数器的工作模式来分别讨论。上下计数模式(先增后减)的波形图如下所示:
在这个模式下占空比可以从 0-100%变化。当计数器递增到 CMPA 的值时,PWM输出电平经 AQ 模块被置高,同样,当计数器递减到 CMPA 时,PWM 输出电平被置低。若 CMPA=0 时,则 PWM 信号一直输出低电平,占空比为 0%。当 CMPA=TBPRD时,PWM 信号输出高电平,占空比为 100%。
实际使用中,如果装载 CMPA 或者 CMPB 为 0 时,那么设置 CMPA 或者 CMPB 的值要大于或等于 1,如果装载 CMPA 或 CMPB 为周期寄存器的值时,那么设置 CMPA或 CMPB 的值要小于或等于 TBPRD-1,这就意味着每个 PWM 周期至少有一个时基时钟周期的脉冲,在系统角度来看,这个周期很短,所以可以忽略。
6.1.3 死区控制模块DB
(1)死区控制模块的作用
死区模块主要作用就是让两个互补的对称的 PWM 波形中,上升沿的发出滞后于 PWM 波的下降时间发出。在实际编程或者实际情况中更灵活一些,有可能管子是低电平状态开通,所以延时的方式可以更灵活。在动作限定模块中就可以产生死区,但是如果要严格控制死区的边沿延时和极性,则需要通过死区模块来实现。
死区模块的主要功能如下:
①根据型号 ePWMxA 输入产生带死区的信号对(ePWMxA 和 ePWMxB),也就是输出一对互补 PWM 输出边沿延时。
②信号对可编程完成如下操作:
--ePWMA\B 输出高有效(AH)。
--ePWMA\B 输出低有效(AL)。
--ePWMA\B 输出互补高有效(AHC)。
--ePWMA\B 输出互补低有效(ALC)。
③加入可编程上升沿延时(RED)。
④加入可编程下降沿延时(FED)。
⑤可以忽略延时。
(2)死区控制模块的特点
死区模块有两组(ePWMxA 与 ePWMxB)独立的选择机制,选择过程中主要有 3类选择,如下:
①输入源选择。死区模块的输入源来自动作模块输出的 ePWMA 和 ePWMB,通过 DBCTL[IN_MODE]位选择输入源。
--ePWMxA 是上升沿和下降沿延时的输入源,系统默认选择。
--ePWMxA 是上升沿时的输入源、ePWMxB 是下降沿延时的输入源。
--ePWMxA 是下降沿延时的输入源、ePWMxB 是上升沿延时的输入源。
--ePWMxB 是上升沿和下降沿延时的输入源。
②输出模式选择。输出模式选择是通过 DBCTL[OUT_MODE]位决定的。
③极性选择。极性选择是通过 DBCTL[POLSEL]位决定的
死区控制模块一共有 7种选择模式:
模式 1:不使用上升沿和下降沿延时以及死区控制模块,PWM 信号直接输出。
模式 2~模式 5:死区极性设置,这些典型的极性配置,适用于功率控制系统的开关控制。这些典型波形如下所示,配置的动作限定模块所产生的 ePWMxA 为死区控制的输入信号。
模式 6:上升沿不延时。
模式 7:下降沿不延时。
综上所述,可以把死区看成是由选择模块和延时模块组成的,其中延时模块又分为上升沿延时模块(RED)和下降沿延时模块(FED)。而且死区还可以分别通过延时寄存器 DBRED 和 DBFED 单独编程,从而决定延时时间。这两个延时寄存器一共有 10 位有效位数,其值代表对时基时钟的倍数。
计算边沿延时的计算公式:
FED=DBFED*T(TBCLK)
RED=DBRED*T(TBCLK)
其中 T(TBCLK)表示 TBCLK 周期,是 SYSCLKOUT 预定标后的输出。