您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 能源与动力工程 > F28335-EPWM设置(同步功能)
F28335的EPWM的设置编者:Ah_thunderEmail:feilenker@163.comTMS320F28335的EPWM模块与TMS320F2812的PWM功能模块有较大不一样。主要体现在原来F2812中的PWM1,PWM2,PWM3由事件模块来管理,它们三个PWM模块共用一个定时器(即时基),当事件模块1的PWM1~3与事件模块2的PWM4~6之间要进行同步时,F2812有一个功能即是事件模块2的PWM4~6也使用Timer1,即可实现同步。但是F28335里面的已经没有事件管理器了,而是把事件管理器的模块全部打散放出来。其中的EPWM模块,也与F2812有较大变化。其中每个EPWM模块里面都有一个TB(可认为是基准时钟,即相当于F2812是的Timer1),故3个EPWM模块就有3个TB,这样就导致可能出现3个EPWM模块不同步的象现。1.本人使用方案如下:其中EPWM1~3采用对称法生成PWM信号,而EPWM4的目的是生成两倍开关频率的中断,及ADC触发信号。在没有使用同步功能时,其中读数器计数结果如下所示。ulTempCnt[18]为EPWM1向下时的计数结果,而ulTempCnt[19]为EPWM1向上时的计数结果。从结果可以看到他们的值不一样,还相差比较大。这可以说明是由于EPWM1与EPWM4不同步引起的。既然EPWM1与EPWM4会有不同步象现,那么EPWM1,EPWM2,EPWM3之间也会出现不同步象现,这是做控制时(如典型的电机控制、逆变电源控制等)绝对不允许出现的。另外,下面的计数值应该是2的次的关系,但是此时系统计数也与理论值有较大偏差,这也说明是EPW1与EPWM4不同步引起的。这说明我们使用F28335的时候必须使用他们的同步功能。2.TMS320F28335的同步功能使用:根据官方资料显示,同步功能可采用以下方法使用:如果有两块F28335之间的EPWM模块需要同步,则一块F28335是主模块通过GPIO引脚的同步输出功能输出同步信号,而另一块F28335则通过GPIO引脚的同步输入功能接收主CPU的同步信号,从而实现两块F28335之间的EPWM同步。本人在此只用了一块F28335,但是需要把EPWM1~EPWM4同步起来。从上图可以看出,我们就不需要使用GPIO引脚了,系统内部已经连接好线路了,我们只要设置几个标记位即OK了。从上图可以看出EPWM1设置为同步输出功能,而EPWM2~EPWM4设置同步输入功能。设置方法如下所示:设置EPWM1为同步输出功能:EPwm1Regs.TBPHS.half.TBPHS=0x0000;//clearTime-BasePhaseRegisterPhaseEPwm1Regs.TBCTL.bit.PHSEN=TB_DISABLE;//DisablephaseloadingEPwm1Regs.TBCTL.bit.SYNCOSEL=TB_CTR_ZERO;//设置在计数值为0时输出同步信号设置EPWM2为同步输入功能:EPwm2Regs.TBPHS.half.TBPHS=0x0000;//clearTime-BasePhaseRegisterPhaseEPwm2Regs.TBCTL.bit.PHSEN=TB_ENABLE;//DisablephaseloadingEPwm2Regs.TBCTL.bit.SYNCOSEL=TB_SYNC_IN;;//设置为接收同步输入信号设置EPWM3为同步输入功能:EPwm3Regs.TBPHS.half.TBPHS=0x0000;//clearTime-BasePhaseRegisterPhaseEPwm3Regs.TBCTL.bit.PHSEN=TB_ENABLE;//DisablephaseloadingEPwm3Regs.TBCTL.bit.SYNCOSEL=TB_SYNC_IN;;//设置为接收同步输入信号设置EPWM4为同步输入功能:EPwm4Regs.TBPHS.half.TBPHS=0x0000;//clearTime-BasePhaseRegisterPhaseEPwm4Regs.TBCTL.bit.PHSEN=TB_ENABLE;//DisablephaseloadingEPwm4Regs.TBCTL.bit.SYNCOSEL=TB_SYNC_IN;;//设置为接收同步输入信号测试结果如下所示。计数器ulTempCnt[18]与ulTempCnt[19]相等,且所有计数器都为理论值(2的次方值):说明EPWM1~EPWM4已经完全同步了。3.TMS320F28335使用同步功能时的一些小问题:在使用上述同步功能时,出现一点小问题,在这里写出来与大家分享。当EPWM4正常设置时,出现以下问题:即在中断里面使用if(1==EPwm1Regs.TBSTS.bit.CTRDIR)//1==上升沿,0==下降沿ulTempCnt[19]++;elseulTempCnt[18]++;时,发现只有ulTempCnt[18]在记数。原因分析如下所示:如上图EPWM1正常作对称的计数器进行周期计数,但是由于没有使用同步功能EPWM1上升到PRD时,EPWM4在上图中的A点还没有上升到PRD。当EPWM4上升到PRD时(即B点时),EPWM1的方向为向下计数了。这时EPWM4重新装载。EPWM4的下一个周期中,当EPWM1在0时,EPWM4在D点,还没有达到PRD(即不会产生中断),但是这时由于EPWM1的同步信号,使EPWM4强制重新装载,故EPWM4不会达到C点(即PRD)也就不会产生中断。再往下重复上述步骤。所以按照前面的方法计数时,只有ulTempCnt[18]在记数,而ulTempCnt[19]没有计数。既然知道问题所在,那么解决的办法是:让EPWM4的周期计数器PRD的值小于EPWM1的PRD的值一点点。因为EPWM4只产生中断,并不用于控制计算,所以不会影响控制系统的精度,但可以解决上述问题。代码如下:EPwm1Regs.TBPRD=CPU_CLK/(2*Para_uPWMFreq);//PWM频率,也即是开关频率。EPwm2Regs.TBPRD=CPU_CLK/(2*Para_uPWMFreq);//PWM频率,也即是开关频率。EPwm3Regs.TBPRD=CPU_CLK/(2*Para_uPWMFreq);//PWM频率,也即是开关频率。EPwm4Regs.TBPRD=CPU_CLK/(2*Para_uPWMFreq)-10;//PWM频率,也即是开关频率。经过测试EPWM4的PRD只要比EPWM1小1即可,这里考虑到安全系数问题所以使用了10。
本文标题:F28335-EPWM设置(同步功能)
链接地址:https://www.777doc.com/doc-6495107 .html