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.

TMS320F280025C: ECAP怎么和EPWM同步

Part Number: TMS320F280025C
Other Parts Discussed in Thread: C2000WARE, SYSCONFIG

这个是ePWM的配置

这个是ECAP2的APWM的配置

这个是ePWM7A的波形和eCAP2的APWM的波形

是哪个配置没配么  一直都对不上

  • Hi,

    您的代码是在哪个demo的基础上修改的?

  • D:\CCS\CSSc2000\C2000Ware_4_02_00_00\device_support\f28002x\examples\hrpwm

    这个文件夹里面两个程序都有借鉴

  • 以下是我的初始化程序

    void ePWM_Config(Uint16 ePWMx,float period,float dutyfactor_A)
    {
           float count;
           if(ePWMx==1)            ePWM=&EPwm1Regs;        //是初始化ePWM1
           else if(ePWMx==2)       ePWM=&EPwm2Regs;        //是初始化ePWM2
           else if(ePWMx==3)       ePWM=&EPwm3Regs;        //是初始化ePWM3
           else if(ePWMx==4)       ePWM=&EPwm4Regs;        //是初始化ePWM4
           else if(ePWMx==5)       ePWM=&EPwm5Regs;        //是初始化ePWM5
           else if(ePWMx==6)       ePWM=&EPwm6Regs;        //是初始化ePWM6
           else if(ePWMx==7)       ePWM=&EPwm7Regs;        //是初始化ePWM7
           dutyfactor_A = 1-dutyfactor_A / 100.0;            
           EALLOW;
           CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 0; 
           EDIS;
           count=50000000.0/period;                        //获取计数次数(是带小数的)

           (*ePWM).TBPRD = (Uint16)(count);                  //PWM频率=1/(2*TBPRD)   
           (*ePWM).CMPA.bit.CMPA    = (Uint16)(count * dutyfactor_A);   // 初始设定占空比
           (*ePWM).TBPHS.all = 0;                   //忽略同步事件 
           (*ePWM).TBCTR = 0;                    
           (*ePWM).TBCTL.bit.PRDLD = TB_SHADOW;    
           (*ePWM).TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;                //选择上下计数模式        
           (*ePWM).TBCTL.bit.HSPCLKDIV = TB_DIV1;                 
           (*ePWM).TBCTL.bit.CLKDIV = TB_DIV1;                   
           (*ePWM).TBCTL.bit.FREE_SOFT = 11;                           //仿真模式位
           (*ePWM).TBCTL.bit.SWFSYNC = 1;                // Synchronize high resolution phase to start HR period     
           (*ePWM).TBCTL.bit.PHSEN = TB_DISABLE;                // 不使用移相方式

           if(ePWMx % 2 == 0)     //如果是ePWM2、4、6就配置同步源输输入为上一个ePWM 禁止同步输出
           {
               (*ePWM).EPWMSYNCINSEL.bit.SEL = ePWMx -1;                       
               (*ePWM).EPWMSYNCOUTEN.all= SYNC_OUT_SRC_DISABLE_ALL;     
           }
           else        //如果是ePWM1、3、5、7就配置同步源输出 禁止同步输入
           {
               (*ePWM).EPWMSYNCINSEL.all = SYNC_IN_SRC_DISABLE_ALL;        
               (*ePWM).EPWMSYNCOUTEN.bit.ZEROEN= 1;                    
           }
           (*ePWM).CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;                  //A模块比较使能      
           (*ePWM).CMPCTL.bit.SHDWAMODE = CC_SHADOW;                    //A模块比较模式
           //AQCTLx为输出A比较方式控制寄存器
           if(ePWMx % 2 == 0)   //如果是ePWM2、4、6就先低后高
           {
               (*ePWM).AQCTLA.bit.CAU = AQ_CLEAR;                             //PWM开关高/低  
               (*ePWM).AQCTLA.bit.CAD = AQ_SET;
           }
           else
           {
               (*ePWM).AQCTLA.bit.CAU = AQ_SET;                             //PWM开关高/低  
               (*ePWM).AQCTLA.bit.CAD = AQ_CLEAR;
           }
           EALLOW;

           // 开启ePWMx中断进入服务函数
           (*ePWM).ETSEL.bit.INTSEL= ET_CTR_PRD; // Select INT on PRD event 
           (*ePWM).ETSEL.bit.INTEN = 1;// Enable INT
           (*ePWM).ETPS.bit.INTPRD = ET_1ST;// Generate INT on 1ST event    
           EDIS;
    }

  • Hi,

    方便指一下哪个波形分别代表哪个信号吗?两个的周期值分别是多少?设定的移相值是多少?实际的测量结果又是如何?

    --

    谢谢

  • 黄色是ePWM7    绿色是eCAP2的APWM

    频率都是100KHz

    移相值没设

    相位偏差逐渐增大  我用光标标了  相差时间在示波器左边

  • 前两张应该是初始化前后顺序问题所以会这样?

  • 初始化的时候要关闭同步时钟,在配置完成后再打开。

  • 不好意思哈   昨个有点事  

    这个么  这个我是在配置好后打开的

  • 两个波形之间的相位差有规律吗?

  • 没发现有规律

  • Hi,

    我手里目前没有这块板子,没有办法帮您调试。

    我建议您还是在例程的基础上做修改,这样我们好为您提供帮助。这样的远程调试针对大的改动效率并不是很高

    --

    谢谢

  • 可以将两个同步的程序发一下么 

  • TI提供的例程都在C2000ware中了

  • 但是在里面我没有发现有同步的程序    我看的是device_support文件夹

  • Hi,

    C:\ti\c2000\C2000Ware_4_02_00_00\driverlib\f28002x\examples\epwm

    C:\ti\c2000\C2000Ware_4_02_00_00\driverlib\f28002x\examples\ecap

    看一下这两个文件夹,里面例程很丰富。

  • OK  主要就是函数版本的有些感觉跳转不到配置寄存器的地方

  • 您可以对照这手册来看一下,EPWM模块这章的寄存器部分还是很清晰明了的

  • 行 我看看   多麻烦了

  • 在这两个文件中没发现同步设置   我观看波形发现是在EPWM7的半个高电平的位置ECAP的APWM开始低电平 黄色为EPWM 蓝色为ECAP的APWM

  • 方便看看么

  • 好的,我需要一些时间来看一下,包括您的另一个问题

  • 可以的话  优先解决这个问题

    在这两个文件中没发现同步设置   我观看波形发现是在EPWM7的半个高电平的位置ECAP的APWM开始低电平 黄色为EPWM 蓝色为ECAP的APWM
  • 好的,我需要时间来再看一下相关的内容,周四之前一定给您答复

  • OK  多麻烦了

  • 有没有观察一下EPWM间的同步是否正常?

  • 我配置的是EPWM1和2、  3和4、  5和6、  7和eCAP2的APWM  这4组,看波形的话他是同步的    不过就算我不配置同步他们也是同步的    所以我不确定是否配置正确

  • 看波形的话因为我设的频率不一样所以  1&2同步  3&4同步   5&6 同步   但是7和APWM不同步

  • 因为我设的频率不一样

    频率不一样的同步移相有什么应用场合呢?望指教

  • 可能是我没讲清楚    同步的两个PWM频率是一样的      不同步的频率不一样(可能也会在某时频率一样)

    解释一下:

    1、我的目的是为了将PWM1和PWM2同步   PWM3和PWM4同步  PWM5和PWM6同步    PWM7和eCAP的APWM同步   

    2、即将这8个PWM分为4组,同组频率相同且同步,   不同组的频率没有直接关系(频率可能在某一时刻会相同,没有硬性要求他们频率必须相同或者同步)

    3、当前我是通过示波器看出前3组可以实现同步      第4组PWM7和APWM(eCAP2)不能同步,APWM在PWM7的高电平的一半的位置才发生跳变,就是说他们没有同步,我需要他们同步

    4、我发现我不配置EPWMSYNCINSEL.bit.SEL  和 EPWMSYNCOUTEN.bit.ZEROEN  前3组也会同步,所以我不确定是他们本来就可以同步还是因为我配置了所以才同步,这一点可以后面讲,希望可以优先帮忙解答第3点

  • 同步是为了移相,即在同步的时刻装载移相值。可以设定不同的移相值,来比较到底有没有配置成功。

  • OK   后面我试下前3组有没有配置成功   但是第4组很明显没有同步  

    不过第4组有一点规律:在PWM7一半高电平的位置eCAP2的APWM会进行变化

  • 那第4组怎么解决呀

  • 抱歉,我无法给出进一步的判断

  • 我问一下其他工程师看他们能否提供帮助

  • 好的  多麻烦了

  • sync_between_epwm_ecap.zip

    ↑↑我实现了EPWM7和ECAP1的同步。

    信号从上到下依次是:

    ECAP1 : GPIO2

    EXTSYNCOUT(EPWM7_SYNC_OUT) : GPIO11

    EPWM7B : GPIO13

    (EPWM7A-GPIO12)

    配置摘要:

    Fullscreen
    1
    2
    3
    10ns
    20usPRD=2000EPWM7 up counter modeEPWM CMPA=1000CMPB=500ECAP APWM Compare=1500
    EPWM7CTR=0ECAP1OUTPUTXBAREXTSYNCOUTGPIO11
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    在此基础上做出如下修改,观察现象:


    section1:

    修改EPWM7的周期TBPRD为2300

    可以看到两个波形的周期都变成了23us,并且APWM有明显超前(超前多少取决于TBPRD修改为多少),这个和你说的:

    APWM在PWM7的高电平的一半的位置才发生跳变

    类似。

    因为在TBCTR=0时发生了同步(侧那根垂直黄色光标右边的紫色同步脉冲处),此时两个计数器的计数值都为0。当APWM的计数值到达2000时,溢出到0重新计数(侧那根黄色光标处);而EPWM7则计数到2300时才溢出到0,并发出同步脉冲侧那根黄色光标右边的紫色同步脉冲处,此时APWM已经计数到了300,同步脉冲到来,重新归0。所以APWM的周期被迫也变为23us,并且由于动作不变,所以便产生了整个波形超前的效果。

    *****************************************************************************************************************************************************

    section2:

    修改APWM的周期PRD为2300

    可以看到没有什么变化。因为虽然APWM的PRD为2300,但计数到2000时,就会被EPWM7的同步脉冲清零(侧那根黄色光标处)。

    周期是由发出同步脉冲的模块来控制

    *****************************************************************************************************************************************************

    section3:

    在section1的基础上,将同步信号的方向对调,即由APWM发出同步脉冲

    可以看到周期不受影响,验证了上述结论。

    *****************************************************************************************************************************************************

    section4:

    将TBCLK二分频

    紫色脉冲减半

    *****************************************************************************************************************************************************

    section5:

    设置APWM的移相值为200

    可以观察到明显的移相。


    你一直纠结的地方应该是section1描述的那种情况。

    比较值得注意的点在于时钟、周期、移相值这3个地方。

    另外sysconfig非常好用。这个工程就是完全用sysconfig配置的,高效便捷,强烈推荐!

  • CCS版本12.1.0

    CCS自带sysconfig

  • 再补充一点,经过我的测量,紫色的同步脉冲信号幅值为3.3V,持续100ns左右。

  • 感谢这么费心   当前手边没有板子,明天尝试下实现效果,十分感谢

  • Hi,

    你还有什么问题吗?

  • 没了   后续我再验证一下    这段时间别的安排下来   如果后续有问题的话还需多麻烦你    多谢了

  • 客气了。之后有什么问题也欢迎随时提问

x 出现错误。请重试或与管理员联系。