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.

28335的几个epwm用的都是同个系统时钟,为什么还需要同步信号?



在三相pwm程序里,28335三个epwm模块配置了同步信号。能不能解释一下为什么同一片28335的几个epwm模块用的是同一个系统时钟,本来就应该是同步的了。直接配置相位差就可以了嘛,怎么共用一个系统时钟还需要同步。??始终想不明白,请大家指点指点,谢谢
  • 因为每个模块初始化都是独立的,也即是说他们不是同一时间使能的,如果没有使用下面这个指令来同时禁止或使能多个PWM的开始计数,那么就会导致每个PWM之间的计数不同步。

    EALLOW;
    SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;
    EDIS;

    另外,同步功能的另一个好处是,PWM1的同步信号可以给到PWM2,PWM2在接到同步信号的同时,会加载一个相位差的计数值在计数寄存器中,形成一个固定的相位差,这种也是可以用在一些数字电源上的。

    ERIC

  • 谢谢Eric ma。你的回答让我清晰了很多。我现在能这样理解吗?No1这个同步信号是让几个pwm模块在一个基准信号之下,严格按照某种规范工作,比方说我现在要epwm1跟epwm2错开一个相位差。No2要是几个pwm同时使能并工作,基于同一个系统时钟,那就是严格同步的。但实际上情况不是这样子的,同步信号就是解决这个矛盾用的。尤其是多片DSP的pwm协同工作的时候这个同步信号的左右尤为明显。 您看看我这样说行不?因为我还得给师弟师妹们讲解,所以我得对他们负责任,我必须得弄清楚了。
  • Jonny

    No1 没错。同步信号就是可以让PWM1,PWM2,... PWMx 在同步信号来的时候,可以错开某一个相位差,有些应用就需要这样的功能,尤其是数字电源。这也是同步信号最主要的功能。如果没有同步信号的功能,如果需要他们很精确的产生一个相差,就会很麻烦。

    No2, 在多个PWM初始化之前,一般会把这些PWM的时钟关掉,让他们停止计数,如

    // For this example, only initialize the ePWM
    EALLOW;
    SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;
    EDIS;

    InitEPwm1Example();
    InitEPwm2Example();
    InitEPwm3Example();

    EALLOW;
    SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;
    EDIS;

    在初始化完成之后,才把时钟PWM的TBCLK使能,这样就能让所有的PWM能够在同个时间点同步开始计数。这种情况下,就可以不用使用到同步信号进行同步啦。

    Eric

  • 谢谢您。祝您工作生活愉快