paradoxfx

【原创】TI C2833x介绍---HRPWM(14)

0
阅读(4735)

下面用一个Buck变换器的小例子说明HRPWM的使用;Buck变换器的示意图为:

 

既然是Buck变化,那开关频率自然是非常高的,具体的参数是:

1.         SYSCLOCKOUT=100MHz

2.         PWM开关频率=1MHz (非对称模式下,ePWM的周期值为100,计数器为增计数模式)

3.         期望的PWM分辨率为1.27bit

4.         MEP步长为150ps

PWM的计数模式示意图为:

 

为了模块化的编程,在HRPWM相关的头文件里用宏定义:

// HRPWM的配置

#define HR_Disable 0x0

#define HR_REP 0x1 // 上升沿控制

#define HR_FEP 0x2 // 下降沿控制

#define HR_BEP 0x3 // 边沿控制

#define HR_CMP 0x0 // 调整CMPAHR

#define HR_PHS 0x1 // 调整TBPHSHR

#define HR_CTR_ZERO 0x0 // 计数值 = 0的事件

#define HR_CTR_PRD 0x1 // 周期匹配事件

 

然后在使能ePWM的计数器之前,初始化HRPWM

void HrBuckDrvCnf(void)

{

// 首先需要配置传统的PWM

EPwm1Regs.TBCTL.bit.PRDLD = TB_IMMEDIATE; // 立即装载模式

EPwm1Regs.TBPRD = 100; // 开关频率为1MHz

hrbuck_period = 200; // Q15Q0的转换

EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;

EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // EPWM1 is the Master

EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;

EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;

EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;

// EPWMxB都不能被调节,但是可以用来与HRPWM的波形做对比

EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;

EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;

EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; // 可选的

EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW; //可选的

EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET;

EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;

EPwm1Regs.AQCTLB.bit.ZRO = AQ_SET; //可选的

EPwm1Regs.AQCTLB.bit.CBU = AQ_CLEAR; //可选的

// 配置HRPWM相关寄存器的初始化

EALLOW; // HRPWM的几个配置寄存器为EALLOW保护的

// 28335上只有6EPWMxA可以调整

EPwm1Regs.HRCNFG.all = 0x0; // 初始化所有配置

EPwm1Regs.HRCNFG.bit.EDGMODE = HR_FEP; // 调整下降沿

EPwm1Regs.HRCNFG.bit.CTLMODE = HR_CMP; // CMPAHR完成MEP的调整

EPwm1Regs.HRCNFG.bit.HRLOAD = HR_CTR_ZERO; //在计数值为0时映射

EDIS;

MEP_ScaleFactor = 66*256; // 初始化为典型的MEP预定标因子值

// 100MHz系统时钟频率的情况

// 后面使用SFOMEP预定标因子进行实时调节

}

 

为了达到更快的处理速度,在这里使用一段简单的汇编代码进行CMPAHR寄存器的赋值:

MPYU ACC,T,@_hrbuck_period ; Q15Q0的转换

MOV T,@_MEP_ScaleFactor ; MEP预定标因子

MPYU P,T,@AL ; P <= T * AL,

MOVH @AL,P ; AL <= P, 把结果返回给ACC

ADD ACC, #0x180 ; MEP调整

MOVL *XAR3,ACC ; CMPA:CMPAHR(31:8) <= ACC

; EPWM1B (Regular Res) 只用来对比

MOV *+XAR3[2],AH ; ACCH保存到CMPB