(仅供参考)F28335 EPWM设置(同步功能)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

F28335的EPWM的设置

编者:Ah_thunder Email:feilenker@ TMS320F28335的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; // clear Time-Base Phase RegisterPhase EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Disable phase loading

EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO;//设置在计数值为0时输出同步信号

设置EPWM2为同步输入功能:

EPwm2Regs.TBPHS.half.TBPHS = 0x0000; // clear Time-Base Phase RegisterPhase EPwm2Regs.TBCTL.bit.PHSEN = TB_ENABLE; // Disable phase loading

EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;;//设置为接收同步输入信号

设置EPWM3为同步输入功能:

EPwm3Regs.TBPHS.half.TBPHS = 0x0000; // clear Time-Base Phase RegisterPhase EPwm3Regs.TBCTL.bit.PHSEN = TB_ENABLE; // Disable phase loading

EPwm3Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;;//设置为接收同步输入信号

设置EPWM4为同步输入功能:

EPwm4Regs.TBPHS.half.TBPHS = 0x0000; // clear Time-Base Phase RegisterPhase EPwm4Regs.TBCTL.bit.PHSEN = TB_ENABLE; // Disable phase loading

EPwm4Regs.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]++;

else

ulTempCnt[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。

相关文档
最新文档