This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F2.8375万D:推荐的PWM开/关方法

Guru**** 2337880 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/582628/tms320f28375d-recommended-on-off-method-of-pwm

部件号:TMS320F2.8375万D

通过读取零件的ePWM,我可以看到如何创建所需的波形...

我想问题是:

1. 如何启动和停止PWM并在周期开始和结束时间执行...例如: 当我启动它时,我想在一个已知的起点启动它。当我停止它时,我基本上希望它在相同的起点位置完成,因此执行一个完整的周期,它不会在中流停止。

目前我的问题是,您似乎提供了同步信号,我可以通过软件发出此信号,这会将计数器设置到受控的开始位置...这是可取的, 但是,您在一个单独的位置有'冻结'控件...是否可以'冻结它',当发出同步脉冲时,它不仅开始按预加载值计数,而且会从冻结模式更改为所需的上/下或上或下模式?  这看起来目前不可能实现...

这不一定是这样的,但我想问题是,我如何将计数器保持在起始值,直到我准备好(发出软件触发器)开始计数?

此外,对于停止单元... 使用事件触发器,我可以使用等于零的基于时间的计数器(或比较寄存器,以二者为准)并生成中断, 但是CPU必须写入冻结寄存器才能将其冻结.... 由于PIE/CPU不能保证定时,因此计数器可能会开始新的周期...是否仍要'在周期结束时彻底终止并等待下一次启动?

谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Rob,您好!

    在许多使用C2000的系统中,每个PWM周期都会生成ISR。  在此中断中,通常运行某种控制环路,使用来自最近转换的ADC样本的数据,然后根据结果更新某些PWM寄存器。  在大多数情况下,PWM更新将使用ePWM的阴影模式。  我认为了解阴影模式将有助于解决您的问题。

    对于您的情况,即使您可能正在运行控制循环,也可以使用类似的理念。  使用CMPA将您的占空比设置为0或任何有效值。  在每个PWM周期中生成几个PWM中断(通过CMBB)。  在这里,您将更新CMPA (阴影寄存器),当PWM计时器返回0时,它将自动更新到活动寄存器。

    在这种方法的基础上,如果需要,同步在您希望基于某些外部事件(或上游PWM)启动PWM时非常有用。

    希望这能给您一些想法。  如果这不适合您的情况(例如,如果输出的PWM具有>2MHz的周期),则有其他可能的方法来执行此类操作。  然而,这往往是足够的。


    谢谢!
    Brett

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    void buck_on(void)
    {
    	EALLOW;
    
    		EPwm1Regs.CMPA.bit.CMPA		=0;//duty zero
    		EPwm1Regs.AQSFRc.bit.RLDCSF		=1;//加载事件计数器等于周期
    		EPw1Regs.AQCSF.All			=0;//强制
    
    	
    
    
    禁用,即无影响EDRC.1EFR=
    
    	
    
    		1EFR= 1EFR= 1EFR1= 1EFR1EDSF1= 1= 1EFR1= 1EFR1= 1EFR1E1EFR1= 1EFR1EFR1EFR1= 1EFR1= 1EDSF1E1= 1= 1EFR1EFR1EFR1EFR= 1EFR1EFR1EFR1E1= 1EFR 		
    					
    
    	
    

    通常我使用此例程来启动/停止PWM