原创 【TI博客大赛】TI TMS320F28335的EPWM如何软件强制开关状态

2012-11-10 22:42 3180 14 17 分类: 处理器与DSP

在DSP用于电机控制的应用中,有时需要用到强制脉宽调制(PWM)的脉冲开关状态这种操作,比如封锁脉冲以停止电力电子开关管工作;在上电的初始时刻,经常也需要对PWM状态进行一种强制的初始化,比如强制高、强制低等等;一些特殊的PWM算法,如果不是基于三角载波比较法的,如一些SHEPWM、滞环PWM方法等等,也需要直接输出PWM脉冲的状态,此时不能使用比较值与定时器的直接比较来得到开关状态,而且在需要的开关状态已知情况下,直接强制PWM状态,即可得到需要PWM脉冲。

在基于事件管理器(EV)的TI C2000 DSP中,如TMS320LF2407A、F2810、2812中,强制脉冲状态是一件很简单的事情,直接写ACTRx寄存器就可以了,比如:

EvaRegs.ACTRA.all=0xfff;

这样的语句就能强制EVA对应的6个PWM管脚全部为高电平,等于0则可以全部强制低电平,需要强制特定管脚的值只需要修改对应的位即可。

在基于改进的PWM模块的C2000 DSP中,如2833x系列,都使用了新型的增强型PWM模块(EPWM),其每个PWM管脚都可以有单独的配置,这样就造成了PWM配置的复杂性增加了。在网上找了好久,都没有找到如何强制脉冲状态。本来想,换了个新片子,大不了照葫芦画瓢配置一番就行了,于是拿过EPWM的手册,照着AQSFRC寄存器配置了半天,却总是没反应。看名字,AQSFRC是Action-Qualifier Software Force Register,应该是可以force它听话的啊!代码

EPwm1Regs.AQSFRC.bit.OTSFA=1;

EPwm1Regs.AQSFRC.bit.ACTSFA=1;

这样子的根本不产生任何效果。

后来才发现是研究不深啊,原来真正需要配置的是AQCSFRC:

EPwm1Regs.AQSFRC.all=0xc0;

EPwm1Regs.AQCSFRC.all=state;

两个寄存器的datasheet的页码就差一页,下次真得要读仔细了。

PARTNER CONTENT

文章评论3条评论)

登录后参与讨论

用户377235 2014-12-14 16:51

很有用,学习了。

用户1752886 2014-4-24 11:28

你好,楼主。我也在进行这方面的编程。也需要在一些场合对pwm输出强制高或低,也用F28335.我现在需要A相导通,对上管进行PWM输出控制,对下管进行连续导通(也就是置高)。那是不是就是:ePWM1模块的进行如下: if(A相导通的条件) { ... //ePWMA1按照正常输出;输出PWM波 //ePWMB1置高 EPwm1Regs.AQSFRC.all=0xc0; EPwm1Regs.AQCSFRC.all=0x08; }

用户377235 2014-2-13 13:20

在控制电机停止,重新开启上,是很很有用的,谢谢!!!!

相关推荐阅读
用户1695909 2012-11-10 22:51
【TI博客大赛】用TMS320F28335做直流励磁控制
直流励磁在直流电动机和电励磁的同步电机控制中用来控制磁场,是电机控制的重要环节之一。原来都用晶闸管整流来做这个励磁控制,虽然能满足性能的要求,但是它的波形质量也比较差,污染电机的磁场。 TI的...
用户1695909 2012-11-10 22:46
【TI博客大赛】在TI C2000定点DSP的快速实现取整函数的一点心得
floor与ceil函数都是C语言的标准库函数,在<math.h>头文件引用之后一般即可直接调用。在浮点DSP上,通过TI 的FastFPU库,此类浮点函数一般可以通过查ROM的方法快...
EE直播间
更多
我要评论
3
14
关闭 站长推荐上一条 /3 下一条