时钟信号经时基模块 TB 产生时基信号,可以设定 PWM 波形的周期,通过计 数比较模块 CC,可以对 PWM 波形的脉宽进行配置,再由动作模块 AQ 限定 PWM 输 出状态即脉冲波形的起落,经过死区模块 DB,可以将同组内的互补输出 PWM波形进行边沿延迟,进入死区模块及进行边沿延迟的原因后面在死区模块内会详细 介绍,接着可选择是否进入 PWM 斩波模块,进行第一个脉冲宽度设置和后级脉冲 占空比调整以适应基于脉冲变压器的门级驱动控制,若 PWM 波形输出后,功率器 件有错误响应,可以将错误信号引入错误联防模块,从而强制复位 PWM 的输出。 也可以通过事件触发模块配置触发一些事件,如 ADC 转换开始;;下面我们逐一介绍这几个模块。
每一组 ePWM 模块都包 含以下 7 个模块:时基模块 TB、计数比较模块 CC、动作模块 AQ、死区产生模块 DB、PWM 斩波模块 PC、错误联防模块 TZ、时间触发模块;
时基模块 TB
从时基模块内部结构图来了解里面的关键信号,时基模块内部结构 图如下所示
时基模块相关寄存器如下 所示:
计数比较模块 CC
计数器比较模块是以时基计数器的值作为输入,与比较寄存器 CMPA 和比较 寄存器 CMPB 不断进行比较,当时基计数器的值等于其中之一时,就会产生相应 的事件。计数比较模块 CC 的原理框图如下所示:
①CTR=CMPA:时基计数器的值与 CMPA 的值相同时,PWM 可以根据 AQ 动作。 ②CTR=CMPB:时基计数器的值与 CMPB 的值相同时,PWM 可以根据 AQ 动作。 ③CTR=PRD:时基计数器的值与周期寄存器的值相同,PWM 可以根据 AQ 动作。 CMPA 与 CMPB 可以根据相关影子寄存器的值进行更新。
动作模块 AQ
(1)动作限定模块功能
①动作模块根据下列事件产生动作(置高、拉低、翻转)。
--CTR=PRD:时基模块来的信号,时基计数器的值等于周期寄存器的值。
--CTR=ZERO:时基模块来的信号,时基计数器的值等于 0。
--CTR=CMPA:计数比较模块来的信号,时基计数器的值等于比较寄存器 A 的 值。 --CTR=CMPB:计数比较模块来的信号,时基计数器的值等于比较寄存器 B
②管理以上事件发生后 PWM 的输出极性。
③针对时基计数器递增或者递减时提供独立的动作控制
动作限定模块在 PWM 波形形成过程中起到了关键作用,它决定了相应事件发 生时应该输出什么样的电平,从而使 ePWMxA 和 ePWMxB 输出所需要的开关波形。 其原理框图如下:
初始化步骤
(1)使能 ePWM 外设时钟及失能时基模块时
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0; // Disable TBCLK within the ePWM要保证时基同步的话,首先在配置TB/CC寄存器时先把时钟关闭,即所有TBCLK停止,不产生。等全部配置后之后再打开,保证时钟同步
SysCtrlRegs.PCLKCR1.bit.EPWM1ENCLK = 1; // 开启ePWM1外设时钟
EDIS;
(2)开启 ePWM 对应 GPIO 时钟及初始化配置
InitEPwm6Gpio();//开启时钟,对应ePWM复用功能的开启
(3)初始化时基模块,即配置 TB 相关寄存器值
// Setup Sync
EPwm6Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE; // 禁止(即不使用(输出))ePWMxSYNCO信号
// Allow each timer to be sync'ed
EPwm6Regs.TBCTL.bit.PHSEN = TB_DISABLE;//禁止TBCTR加载相位寄存器TBPHS中的值
EPwm6Regs.TBPHS.half.TBPHS = 0;//将相位寄存器中的值清零
EPwm6Regs.TBCTR = 0x0000; // Clear counter时间基准计数寄存器设置为0
EPwm6Regs.TBPRD = tbprd;//设定周期值
EPwm6Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Count up向上计数模式
EPwm6Regs.TBCTL.bit.HSPCLKDIV=TB_DIV1;//采用系统时钟作为TBCLK
EPwm6Regs.TBCTL.bit.CLKDIV=TB_DIV1;//同样是配置TBCLK的时钟
(4)初始化比较模块,即配置 CC 相关寄存器
// Setup shadow register load on ZERO EPwm6Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;// 使用影子寄存器 EPwm6Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;// 使用影子寄存器 EPwm6Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;//CTR等于0时加载 EPwm6Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; // Set Compare values EPwm6Regs.CMPA.half.CMPA = 0; // Set compare A value EPwm6Regs.CMPB = 0; // Set Compare B value
(5)初始化动作限定模块,即配置 AQ 相关寄存器值
// Set actions
EPwm6Regs.AQCTLA.bit.ZRO = AQ_CLEAR; // Set PWM1A on Zero
EPwm6Regs.AQCTLA.bit.CAU = AQ_SET; // Clear PWM1A on event A, up count
EPwm6Regs.AQCTLB.bit.ZRO = AQ_CLEAR; // Set PWM1B on Zero
EPwm6Regs.AQCTLB.bit.CBU = AQ_SET; // Clear PWM1B on event B, up count
(6)初始化事件触发模块,即配置 ET 相关寄存器
当需要事件触发输出控制,就需要对 ET 相关寄存器配置。比如计数器计数 到 0 时,同时使能事件触发中断,每发生一次触发事件就输出 PWM。相关配置代 码如下:、
EPwm6Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // Select INT on Zero event
EPwm6Regs.ETSEL.bit.INTEN = 1; // Enable INT
EPwm6Regs.ETPS.bit.INTPRD = ET_1ST; // Generate INT on 1st event每发生一次事件产生中断信号EPWM6_INT
(7)初始化死区模块、斩波模块,即配置 DB、PC 相关寄存器值
(8)使能时基计数器时钟
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1; // Start all the timers synced
EDIS;