你好!在使用28335控制6轴脉冲输出过程中,发现不能及时关断PWM波。我是使用增减比较计数方式,一个周期产生两次比较事件刚好生成一个脉冲,占空比为50%,当减计数到0时产生中断,选择事件发生三次时产生中断,在中断中计数脉冲,当达到预置脉冲值时关中断软件动作强制限制PWM波(拉高或置低),重新启动时开PWM中断,取消软件动作强制,但是发现脉冲关断不及时,最后一个脉冲是窄的,我也试过改变SysCtrlRegs.PCLKCR1.bit.EPWM1ENCLK = 来停止相应PWM模块时钟,但是更离谱!请问专家有什么更好的办法实现吗?如果不行,这个项目就没了,花了那么多精力呀!谢谢!期待解决
Forrest:
什么是“最后一个脉冲是窄的‘?能否说明一下“最后一个脉冲是窄的‘的产生原因。
如果一个PWM模块2路PWM没法很好控制,是否能够用2个PWM模块输出2路PWM来更好地进行控制?或者改变中断的产生源来提前计算操作。
您用的是TZFRC强制PWM拉高或拉低吧,这是最好的办法,没有更好的了。
你好!在使用28335控制6轴脉冲输出过程中,发现不能及时关断PWM波。我是使用增减比较计数方式,一个周期产生两次比较事件刚好生成一个脉冲,占空比为50%,当减计数到0时产生中断,选择事件发生三次时产生中断,在中断中计数脉冲,当达到预置脉冲值时关中断软件动作强制限制PWM波(拉高或置低),重新启动时开PWM中断,取消软件动作强制,但是发现脉冲关断不及时,最后一个脉冲是窄的,我也试过改变SysCtrlRegs.PCLKCR1.bit.EPWM1ENCLK = 来停止相应PWM模块时钟,但是更离谱!请问专家有什么更好的办法实现吗?如果不行,这个项目就没了,花了那么多精力呀!谢谢!期待解决
LOFTY DVRE:
回复 Forrest:
你好!我是用输出动作限定连续软件强制寄存器(AQCSFRC)来拉低PWM输出的,我是用一个PWM模块来控制一路的,因为我要独立改变频率,所以一组PWM模块只能用来控制一路脉冲输出。窄脉冲的原因是当中断计数到时强制AQCSFRC动作,可能因为强制输出有延期,从而没等一个PWM周期结束就拉低封波了。你说的改变中断的产生源来提前计算操作,这个是不准的,因为你无法精确预知在不同的频率下它的差值是多少?
还有一种方法,我试了在主程式中什么都不做全力用来检测计数值当计数到时就停相应SysCtrlRegs.PCLKCR1.bit.EPWM1ENCLK 时钟,发现是可行的,这样波形输出正常,也无须关中断最根本的办法,但是关键是我如果将该语句放在中断中运行,程序只进一次中断就不中断了,而且时钟并没有停止照样输出PWM波的,我是怀疑在中断中不能对受保护的寄存器进行操作,因为开关每路PWM的时钟必须先解除保护。
我之前用51的时候都是采取关PWM时钟的,非常准!谢谢你的帮助!我再试下TZ限制输出和在中断中将周期改为0关中断看效果怎样!感觉如果TI能将关PWM时钟开放出来不受保护就更好了,或者提供一种方法关PWM时钟能够在一个完整的PWM周期后立即停止就好了,甚至新增一种功能能够预置32位计数值控制就更完美了,那样就可以先设预置值,再开时钟,计数到已经发完预置脉冲立即停止输出,并且当前计数值能够实时读取,那样我就可以通过读取该值来进行PWM频率的实时控制,如此在需脉冲定位运动控制方面将变得非常完美、实用!感觉现在的似乎TI没有考虑到该方面应用!
你好!在使用28335控制6轴脉冲输出过程中,发现不能及时关断PWM波。我是使用增减比较计数方式,一个周期产生两次比较事件刚好生成一个脉冲,占空比为50%,当减计数到0时产生中断,选择事件发生三次时产生中断,在中断中计数脉冲,当达到预置脉冲值时关中断软件动作强制限制PWM波(拉高或置低),重新启动时开PWM中断,取消软件动作强制,但是发现脉冲关断不及时,最后一个脉冲是窄的,我也试过改变SysCtrlRegs.PCLKCR1.bit.EPWM1ENCLK = 来停止相应PWM模块时钟,但是更离谱!请问专家有什么更好的办法实现吗?如果不行,这个项目就没了,花了那么多精力呀!谢谢!期待解决
Johnson Chen1:
回复 LOFTY DVRE:
应该是可以在计数到0时或者周期值时产生连续软件强制事件,楼主是否有试过将AQSFRC[RLDCSF]设置为:00或者01.这样的话,可以让连续软件强制事件发生在计数到0时或者周期值时的下一个TBCLK 发生软件强制事件。