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时基同步设置问题?急,谢谢!

Other Parts Discussed in Thread: CONTROLSUITE

大家好!

   我想用到335的4个pwm比较器,是需要时基同步,然后中断函数只写epwm1的中断函数,。

1,请问epwm2,epwm3,epwm4从epwm1时基启动同步的话需要加设那几个寄存器的位呢?

 2,中断函数只写epwm1使能中断,然后epwm2,epwm3,epwm4的比较值在额epwm1中断里更新,然后要求epwm2,epwm3.epwm4也产生pwm波?又需要如何设置呢?

   谢谢啊

  • 1. 需要配置PMW1的同步输出是PWM2的同步输入,依次类推。 需要配置PWM234的相位,如果都是从零开始的话,可以保持不变。需要设置在PWM1的Counter在什么时候同步,0还是CMPB等,依次类推。

    具体寄存器,需要看文档,不看文档在论坛上无法得到完整的答案,这里只有提示。

    2. 在PWM1里的ISR进行设置即可。更改PWM234的CMP值。

  • Jones Chen!

      你好!麻烦你看下我这样的设置 哪里有问题啊

     EPwm1Regs.TBPRD = TP;                        // Set timer period

      EPwm1Regs.TBPHS.half.TBPHS = 0x0000;           // Phase is 0

      EPwm1Regs.TBCTR = 0x0000;                      // Clear counter

     EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Count up

      EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;        // Disable phase loading

      EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV4;       // Clock ratio to SYSCLKOUT

      EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV4;

      EPwm1Regs.TBCTL.bit.SYNCOSEL = 00;

      EPwm1Regs.TBCTL.bit.SWFSYNC = 1;

      EPwm1Regs.TBSTS.bit.SYNCI = 1;

      EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO;     // Select INT on Zero event

      EPwm1Regs.ETSEL.bit.INTEN = 1;                // Enable INT

      EPwm1Regs.ETPS.bit.INTPRD = ET_3RD;           // Generate INT on 3rd event

      EPwm2Regs.TBPRD =TP;                        // Set timer period

      EPwm2Regs.TBPHS.half.TBPHS = 0x0000;           // Phase is 0

      EPwm2Regs.TBCTR = 0x0000;                      // Clear counter

      // Setup TBCLK

      EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Count up

      EPwm2Regs.TBCTL.bit.PHSEN = TB_DISABLE;        // Disable phase loading

      EPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV4;       // Clock ratio to SYSCLKOUT

      EPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV4;          // Slow just to observe on the scope

      EPwm2Regs.TBCTL.bit.SYNCOSEL =TB_SYNC_IN;

      EPwm2Regs.TBSTS.bit.SYNCI = 1;

    Jones Chen!我设置了epwm1的寄存器 和epwm2的寄存器有疑问的地方,有些没有写出的应该没问题,麻烦你看下 谢谢啊

  • 我只能给你一个例子,关于您代码上的问题还是需要自己查找。

    PWM1是基准给PWM2做同步:

    void HAL_afe_epwmCfg()

    {

      EALLOW;

      SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;

      EDIS;

      // Configure ePWM4 for ADC SOC

      EPwm1Regs.ETSEL.bit.SOCAEN = 0;                 // Disable SOC on EPwm1A group for now - enable when ADC needed

      EPwm1Regs.ETSEL.bit.SOCBEN = 0;                 // Disable SOC on EPwm1B group for now - enable when ADC needed

      EPwm2Regs.ETSEL.bit.SOCAEN = 0;                 // Disable SOC on EPwm1A group for now - enable when ADC needed

      EPwm2Regs.ETSEL.bit.SOCBEN = 0;                 // Disable SOC on EPwm1B group for now - enable when ADC needed

      EPwm1Regs.ETSEL.bit.SOCASEL= 1;                 // EPwm1 SOCA--Zero

      EPwm1Regs.ETSEL.bit.SOCBSEL= 2;                 // EPwm1 SOCB--Prd

      EPwm2Regs.ETSEL.bit.SOCASEL= 2;                 // EPwm2SOCA--Zero

      EPwm2Regs.ETSEL.bit.SOCBSEL= 1;                 // EPwm2 SOCB--Prd

      EPwm1Regs.ETPS.bit.SOCAPRD = 1;                 // Generate pulse on 1st event

      EPwm1Regs.ETPS.bit.SOCBPRD = 1;                 // Generate pulse on 1st event

      EPwm2Regs.ETPS.bit.SOCAPRD = 1;                 // Generate pulse on 1st event

      EPwm2Regs.ETPS.bit.SOCBPRD = 1;                 // Generate pulse on 1st event

      EPwm1Regs.TBPRD = XXXX;    

     EPwm2Regs.TBPRD = XXXX;

      EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;  // count up and down to trigger SOC

      EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;  // count up and down to trigger SOC

      // Setup TBCLK

      EPwm1Regs.TBPHS.half.TBPHS = 0x0000;           // Phase is 0

      EPwm1Regs.TBCTR = 0x0000;                      // Clear counter

      EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;        // Disable phase loading

      EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO;    // Sync out @ counter=zero

      EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;       // Clock ratio to SYSCLKOUT

      EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;          // Clock ratio to SYSCLKOUT

      EPwm2Regs.TBPHS.half.TBPHS = 240;              // Phase is 90

      EPwm2Regs.TBCTR = 0x0000;                      // Clear counter

      EPwm2Regs.TBCTL.bit.PHSEN = TB_ENABLE;         // enable phase loading//Jones added

      EPwm2Regs.TBCTL.bit.PHSDIR= 1;                 // count up when sync//Jones added

      EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO;    // Sync out @ counter=zero

      EPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;       // Clock ratio to SYSCLKOUT

      EPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV1;          // Clock ratio to SYSCLKOUT

      EALLOW;

      SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;

      EDIS;

    }

  • Jones Chen 您给的例程是从controlsuite里的例子么 还是从哪里可以下到呢

  • 我给的历程不是Control Suite的例子,是我以前自己写的工程。

    TI Control Suite上也有相应的历程。

  • 您好  我看了文档 跟您的例子有点差点  就是您的例子或者时基同步不用设置TBCTL寄存器的位

    EPwm1Regs.TBCTL.bit.SWFSYNC = 1;

     EPwm1Regs.TBSTS.bit.SYNCI = 1;

    这两个么,这两个为可以不用管不? 我看到您只设置了

    EPwm1Regs.ETSEL.bit.SOCASEL= 1;      

    再次麻烦您了 谢谢!

  • SYNCI是PWM1的输入同步允许,我的程序里面的SYNC是本身产生的。

    历程里面的是允许外部同步信号输入的。

    SOCASEL这是PWM触发ADC,跟同步无关。

  • Jones Chen你好,想向你请教个问题。我想对两片DSP的epwm时基进行同步。

    按datasheet上介绍,首先,我设置第一片dsp芯片的EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO,

    同时配置第一片dsp的GPIO33为epwmsynco同步信号输出(GpioDataRegs.GPBCLEAR.bit.GPIO33 = 1;EALLOW;GpioCtrlRegs.GPBPUD.bit.GPIO33 = 1;EDIS;GpioCtrlRegs.GPBMUX1.bit.GPIO33 = 2;);

    但是示波器观察,GPIO33没有信号输出。所以后续的第二片DSP就没有办法得到同步信号输入了。

    不知道若想将epwmsynco输出到dsp外部,应该怎么样配置?