【原创】TI C2833x介绍---HRPWM(15)
0赞脉宽调制PWM的本质就是把基波/调制波信号用三角载波(或者其它更新奇的载波,例如抛物线形式的载波)进行叠加、调制,从而得到脉宽可变的方波波形。一般情况下载波的频率远高于调制波的频率,所以如果我们使用一个低通滤波器或者限波器等滤除载波频率的话,基本上就能复原调制波的波形了(当然会有一定的相位滞后、幅值衰减、谐波造成的波形畸变)。基于同样的道理,在不使用外部DAC芯片的情况下(一般外部DAC价格相对较高,而且性能相对价格的比值也很高),并且不考虑相位滞后、幅值衰减等因素的情况下,我们可以使用PWM把想观察的信号调整输出,然后用简单的滤波电路提取出信号,就构成了一个基本的DAC电路了。
一般情况下使用的DAC其内部调制频率也在几百kHz到上MHz的级别上了,所以我们使用HRPWM来模拟这样的操作是非常合适的。假设以下参数:
PWM开关频率=400kHz(在系统时钟为100M的情况下,ePWM周期值为250);
PWM调制模式为非对称的单向增模式;
需要的PWM分辨率为14bit(考虑MEP步长为150ps的典型值情况);
则我们可以使用以下的代码模拟一个DAC(简化起见,暂不使用SFO实时校正)。
初始化代码:
void HrPwmDacDrvCnf(void) {
//与前面Buck变换器的初始化代码类似,思路是一样的,先初始化传统PWM
EPwm1Regs.TBCTL.bit.PRDLD = TB_IMMEDIATE; //立即装载模式
EPwm1Regs.TBPRD = 250; // 400 kHz PWM
hrDAC_period = 250; // Q15到Q0的转换
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // EPWM1主模式
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;
//B通道只用来对比
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保护的
EALLOW;
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; // CTR=Zero时加载影子寄存器的值
EDIS;
MEP_ScaleFactor = 66*256; //使用典型的MEP预定标因子
//可以添加SFO初始化
}
驱动HRPWM的代码为:
EPWM1_BASE .set 0x6800 ; 0x00 6800是ePWM1寄存器的地址
CMPAHR1 .set EPWM1_BASE+0x8
;=================================================
这段代码可以放在定时中断或者一个循环里
;=================================================
MOVW DP, #_HRDAC_In
MOVL XAR2,@_HRDAC_In ;指向输入的Q15格式的占空比(XAR2)
MOVL XAR3,#CMPAHR1 ;指向HRCMPA寄存器(XAR3)
; EPWM1A输出的HRPWM
MOV T,*XAR2 ; T <= duty
MPY ACC,T,@_hrDAC_period ; Q15到Q0的转换
ADD ACC,@_HrDAC_period<<15 ;双极性操作:有符号到无符号
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
; ePWMxB通道只用于对比观测
MOV *+XAR3[2],AH ;把ACCH存入CMPB