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.

[参考译文] TMS320F28379D:将 EPWM1与外部同步

Guru**** 2478765 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1466043/tms320f28379d-synchronizing-the-epwm1-with-external-sync-in

器件型号:TMS320F28379D

工具与软件:

尊敬的专家:

我正在尝试使用 PWM 模块生成 PWM、而计数器与外部触发器同步。  为了实现这一点、我将 在 GPIO10上触发一个 与 INPUT5SELECT 相关联的脉冲。 此外、我还将 TBCTL 的位 PHSEN 初始化为1、以便在外部触发 CTR 时将其设为零。

这是代码初始化部分的片段。

void PWM0_Init(void)
{
          EALLOW;
          EPwm1Regs.TBCTL.bit.CTRMODE = 0;             // Count up
          EPwm1Regs.TBPRD = 10000;                    // Set timer period
          EPwm1Regs.TBCTL.bit.PHSEN = 1;               // Enable phase loading
          EPwm1Regs.TBPHS.bit.TBPHS = 0x0000;          // Phase is 0
          EPwm1Regs.TBCTR = 0x0000;                    // Clear counter
          EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0;           // Clock ratio to SYSCLKOUT
          EPwm1Regs.TBCTL.bit.CLKDIV = 0;
          EPwm1Regs.TBCTL.bit.SYNCOSEL = 1;            // SYNC output on CTR = 0
          // Setup shadow register load on ZERO
          EPwm1Regs.CMPCTL.bit.SHDWAMODE = 0;
          EPwm1Regs.CMPCTL.bit.SHDWBMODE = 0;
          EPwm1Regs.CMPCTL.bit.LOADAMODE = 0;
          EPwm1Regs.CMPCTL.bit.LOADBMODE = 0;
          // Set Compare values
                // Set compare A value
          // Set actions
          EPwm1Regs.AQCTLA.bit.ZRO = 2;                // Set PWM1A on Zero
          EPwm1Regs.AQCTLA.bit.CAU = 1;                // Clear PWM1A on event A, up count

          //SOCA to ADC
          EPwm1Regs.ETSEL.bit.SOCAEN=1;
          EPwm1Regs.ETSEL.bit.SOCASEL=1;
          EPwm1Regs.ETPS.bit.SOCAPRD = 1;
          EPwm1Regs.ETCLR.bit.SOCA = 1;
          EDIS;
}

void X_bar(void)

{
    EALLOW;

    InputXbarRegs.INPUT5SELECT = 10;

    EDIS;

}

尽管进行了这些初始化、但在我不断改变外部触发频率的同时、我没有看到 PWM 频率有任何变化。

提前感谢。

此致、

Rajesh

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

    您好、Allison、

    感谢您提供的信息。 我提到了上面的链接,我确实做了什么  Marlyn 说。 但是、我看不到任何变化。  

    让我困扰的是、在没有为 EXTSYNCIN1提供任何脉冲的情况下、仍然可以控制脉冲宽度。 它的行为就像 PWM1作为主器件被初始化一样(不由外部 SYNC 信号驱动)。

    以下是我的完整代码。

    #include "F28x_Project.h"
    
    extern void InitSysCtrl(void);
    extern void InitPieCtrl(void);
    extern void InitPieVectTable(void);
    
    interrupt void TimerOvf(void);
    interrupt void ADCs_EOC(void);
    
    void Initialize_GPIO(void);
    void Custom_Init(void);
    void timer0_init(void);
    void PWM0_Init(void);
    void Init_ADCs(void);
    void X_bar(void);
    
    int b=0;
    float a=0;
    
    
    void main(void)
    {
    
       InitSysCtrl();
       Custom_Init();
       PWM0_Init();
       Init_ADCs();
    
       DINT;
       Initialize_GPIO();
       InitPieCtrl();
    
       IER = 0x0000;
       IFR = 0x0000;
       InitPieCtrl();
       InitPieVectTable();
    
       EALLOW;
       PieCtrlRegs.PIEIER1.bit.INTx1 = 1;    //ADC-A1
       PieCtrlRegs.PIEIER1.bit.INTx7 = 1;
       PieCtrlRegs.PIEIER3.bit.INTx1 = 1;
    
    
       PieVectTable.TIMER0_INT = &TimerOvf;
       PieVectTable.ADCA1_INT = &ADCs_EOC;
       PieCtrlRegs.PIECTRL.bit.ENPIE= 1;
       EDIS;
    
       IER |= 3;
       EINT;  // Enable Global interrupt INTM
       ERTM;  // Enable Global realtime interrupt DBGM
       timer0_init();
       CpuTimer0Regs.TCR.bit.TSS=0;
       while(1)
           {
    
            }
    }
    void Initialize_GPIO(void)
    {
        EALLOW;
        GpioCtrlRegs.GPADIR.bit.GPIO10 = 0;
        GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1;
        GpioCtrlRegs.GPADIR.bit.GPIO31 = 1;
        GpioCtrlRegs.GPCDIR.bit.GPIO73= 1;
        GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1; //EPwm1
        EDIS;
    
    }
    void Custom_Init(void)
    {
        EALLOW;
        ClkCfgRegs.CLKSRCCTL1.bit.OSCCLKSRCSEL=1;
        ClkCfgRegs.AUXPLLMULT.bit.IMULT=20;
        ClkCfgRegs.SYSCLKDIVSEL.bit.PLLSYSCLKDIV=0;
        ClkCfgRegs.SYSPLLCTL1.bit.PLLCLKEN = 1;
        ClkCfgRegs.LOSPCP.bit.LSPCLKDIV = 2;
        ClkCfgRegs.PERCLKDIVSEL.bit.EPWMCLKDIV = 0;
        CpuSysRegs.PCLKCR0.bit.CPUTIMER0 = 1;
        CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 1;   ///source initsysctrl
        CpuSysRegs.PCLKCR2.bit.EPWM1 = 1;
        CpuSysRegs.PCLKCR13.bit.ADC_A = 1;
        CpuSysRegs.PCLKCR0.bit.CLA1 = 1;
        DevCfgRegs.CPUSEL0.bit.EPWM1 = 0;
        EDIS;
    }
    
    
    void timer0_init(void)
    {
        EALLOW;
        CpuTimer0Regs.PRD.bit.MSW = 0x0004;
        CpuTimer0Regs.PRD.bit.LSW = 0x0080;
        CpuTimer0Regs.TPR.bit.TDDR = 0x0013;
    
    
        CpuTimer0Regs.TCR.bit.TIE= 1;
        CpuTimer0Regs.TCR.bit.TSS=1;
        CpuTimer0Regs.TCR.bit.FREE=0;
        CpuTimer0Regs.TCR.bit.TRB=0;
        EDIS;
    }
    void TimerOvf(void)
    {
        b= b+1;
    
        if(b>10)
        {
            b=1;
        }
        GpioDataRegs.GPBTOGGLE.bit.GPIO34=1;
        GpioDataRegs.GPATOGGLE.bit.GPIO31=1;
        CpuTimer0Regs.TCR.bit.TIF = 1;
        PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
    }
    
    void ADCs_EOC(void)
    {
    
        a = AdcaResultRegs.ADCRESULT0; //Va
        EPwm1Regs.CMPA.bit.CMPA = 10000*a/4095;
    
    
        AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //clear INT1 flag
        PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
    }
    
    void X_bar(void)
    
    {
        EALLOW;
    
        InputXbarRegs.INPUT5SELECT = 10;
    
        GpioDataRegs.GPASET.bit.GPIO10 = 1;
        GpioDataRegs.GPACLEAR.bit.GPIO10 = 1;
    
        EDIS;
    
    }
    
    void PWM0_Init(void)
    {
              EALLOW;
              EPwm1Regs.TBCTL.bit.CTRMODE = 0;             // Count up
              EPwm1Regs.TBPRD = 10000;                    // Set timer period
              EPwm1Regs.TBCTL.bit.PHSEN = 1;               // Enable phase loading
              EPwm1Regs.TBPHS.bit.TBPHS = 0x0000;          // Phase is 0
              EPwm1Regs.TBCTR = 0x0000;                    // Clear counter
              EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0;           // Clock ratio to SYSCLKOUT
              EPwm1Regs.TBCTL.bit.CLKDIV = 0;
              EPwm1Regs.TBCTL.bit.SYNCOSEL = 1;            // SYNC output on CTR = 0
              // Setup shadow register load on ZERO
              EPwm1Regs.CMPCTL.bit.SHDWAMODE = 0;
              EPwm1Regs.CMPCTL.bit.SHDWBMODE = 0;
              EPwm1Regs.CMPCTL.bit.LOADAMODE = 0;
              EPwm1Regs.CMPCTL.bit.LOADBMODE = 0;
              // Set Compare values
                    // Set compare A value
              // Set actions
              EPwm1Regs.AQCTLA.bit.ZRO = 2;                // Set PWM1A on Zero
              EPwm1Regs.AQCTLA.bit.CAU = 1;                // Clear PWM1A on event A, up count
    
              //SOCA to ADC
              EPwm1Regs.ETSEL.bit.SOCAEN=1;
              EPwm1Regs.ETSEL.bit.SOCASEL=1;
              EPwm1Regs.ETPS.bit.SOCAPRD = 1;
              EPwm1Regs.ETCLR.bit.SOCA = 1;
              EDIS;
    }
    
    void Init_ADCs(void)
    {
        EALLOW;
                AdcSetMode(ADC_ADCA, ADC_RESOLUTION_12BIT, ADC_SIGNALMODE_SINGLE);
                AdcSetMode(ADC_ADCB, ADC_RESOLUTION_12BIT, ADC_SIGNALMODE_SINGLE);
                AdcSetMode(ADC_ADCC, ADC_RESOLUTION_12BIT, ADC_SIGNALMODE_SINGLE);
    
                AdcaRegs.ADCCTL1.bit.INTPULSEPOS = 1;
                AdcbRegs.ADCCTL1.bit.INTPULSEPOS = 1;
                AdccRegs.ADCCTL1.bit.INTPULSEPOS = 1;
    
                AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1;
                AdcbRegs.ADCCTL1.bit.ADCPWDNZ = 1;
                AdccRegs.ADCCTL1.bit.ADCPWDNZ = 1;
                DELAY_US(1000);
    
                AdcaRegs.ADCCTL2.bit.PRESCALE = 6;
                AdcbRegs.ADCCTL2.bit.PRESCALE = 6;
                AdccRegs.ADCCTL2.bit.PRESCALE = 6;
    
                AdcaRegs.ADCSOC0CTL.bit.CHSEL = 0;  //SOC0 will convert pin A0
                AdcaRegs.ADCSOC1CTL.bit.CHSEL = 1;  //SOC1 will convert pin A1
                AdcaRegs.ADCSOC2CTL.bit.CHSEL = 2;  //SOC2 will convert pin A2
                AdcaRegs.ADCSOC3CTL.bit.CHSEL = 3;  //SOC3 will convert pin A3
                AdcaRegs.ADCSOC4CTL.bit.CHSEL = 4;  //SOC4 will convert pin A4
                AdcaRegs.ADCSOC5CTL.bit.CHSEL = 5;  //SOC5 will convert pin A5
    
                AdcbRegs.ADCSOC0CTL.bit.CHSEL = 2;  //SOC0 will convert pin B2
                AdcbRegs.ADCSOC1CTL.bit.CHSEL = 3;  //SOC1 will convert pin B3
                AdcbRegs.ADCSOC2CTL.bit.CHSEL = 4;  //SOC2 will convert pin B4
                AdcbRegs.ADCSOC3CTL.bit.CHSEL = 5;  //SOC3 will convert pin B5
    
                AdccRegs.ADCSOC0CTL.bit.CHSEL = 2;  //SOC0 will convert pin C2
                AdccRegs.ADCSOC1CTL.bit.CHSEL = 3;  //SOC1 will convert pin C3
                AdccRegs.ADCSOC2CTL.bit.CHSEL = 4;  //SOC2 will convert pin C4
                AdccRegs.ADCSOC3CTL.bit.CHSEL = 5;  //SOC3 will convert pin C5
    
    
                AdcaRegs.ADCSOC0CTL.bit.ACQPS = 14; //sample window is 100 SYSCLK cycles
                AdcaRegs.ADCSOC1CTL.bit.ACQPS = 14; //sample window is 100 SYSCLK cycles
                AdcaRegs.ADCSOC2CTL.bit.ACQPS = 14; //sample window is 100 SYSCLK cycles
                AdcaRegs.ADCSOC3CTL.bit.ACQPS = 14; //sample window is 100 SYSCLK cycles
                AdcaRegs.ADCSOC4CTL.bit.ACQPS = 14; //sample window is 100 SYSCLK cycles
                AdcaRegs.ADCSOC5CTL.bit.ACQPS = 14; //sample window is 100 SYSCLK cycles
    
                AdcbRegs.ADCSOC0CTL.bit.ACQPS = 14; //sample window is 100 SYSCLK cycles
                AdcbRegs.ADCSOC1CTL.bit.ACQPS = 14; //sample window is 100 SYSCLK cycles
                AdcbRegs.ADCSOC2CTL.bit.ACQPS = 14; //sample window is 100 SYSCLK cycles
                AdcbRegs.ADCSOC3CTL.bit.ACQPS = 14; //sample window is 100 SYSCLK cycles
    
                AdccRegs.ADCSOC0CTL.bit.ACQPS = 14; //sample window is 100 SYSCLK cycles
                AdccRegs.ADCSOC1CTL.bit.ACQPS = 14; //sample window is 100 SYSCLK cycles
                AdccRegs.ADCSOC2CTL.bit.ACQPS = 14; //sample window is 100 SYSCLK cycles
                AdccRegs.ADCSOC3CTL.bit.ACQPS = 14; //sample window is 100 SYSCLK cycles
    
                AdcaRegs.ADCBURSTCTL.bit.BURSTEN = 1;
                AdcaRegs.ADCBURSTCTL.bit.BURSTSIZE = 5;
                AdcaRegs.ADCBURSTCTL.bit.BURSTTRIGSEL =5;
    
                AdcbRegs.ADCBURSTCTL.bit.BURSTEN = 1;
                AdcbRegs.ADCBURSTCTL.bit.BURSTSIZE = 5;
                AdcbRegs.ADCBURSTCTL.bit.BURSTTRIGSEL =5;
    
                AdccRegs.ADCBURSTCTL.bit.BURSTEN = 1;
                AdccRegs.ADCBURSTCTL.bit.BURSTSIZE = 5;
                AdccRegs.ADCBURSTCTL.bit.BURSTTRIGSEL =5;
    
    
                AdcaRegs.ADCINTSEL1N2.bit.INT1SEL = 0; //end of SOC0 will set INT1 flag
                AdcaRegs.ADCINTSEL1N2.bit.INT1E = 1;   //enable INT1 flag
                AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //make sure INT1 flag is cleared
    
        EDIS;
    }
    

    提前感谢。

    此致、

    Rajesh。

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

    尊敬的 Rajesh:

    您是否也查看了其他链接? 我想最后一个 示例有一个通过 GPIO32进行外部同步设置的项目示例。

    我还有一些关于如何帮助进行调试的建议:

    • 您还可以将 EPWM1的同步输出选择设置为"同步输入"、这意味着 ePWM 的同步输出脉冲将在从外部源接收到同步脉冲时发生反射。 从这里、您可以使用输出 XBAR 多路复用器14将 GPIO 上的同步脉冲输出到示波器(OUTPUTXBAR 多路复用器14您可以选择 EXTSYNCOUT)。  如果查看 SYNCOUT 脉冲、可以检查脉冲在更改外部 信号状态时是否可见。
    • 另一个技巧是逐行单步执行代码、并仔细检查 PWM 寄存器和 GPIO/外部同步相关寄存器是否按预期变化。 您是否看到 它们反映了期望的值?  

    此致、

    Allison

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

    您好、Allison、

    我尝试了使用 GPDAT 寄存器读取 GPIO10。 然而、如果读取它、PWM1将由 CMPA 调节。 代码如下:

    #include "F28x_Project.h"
    
    extern void InitSysCtrl(void);
    extern void InitPieCtrl(void);
    extern void InitPieVectTable(void);
    
    interrupt void TimerOvf(void);
    interrupt void ADCs_EOC(void);
    
    void Initialize_GPIO(void);
    void Custom_Init(void);
    void timer0_init(void);
    void PWM1_Init(void);
    void Init_ADCs(void);
    void X_bar(void);
    
    int b=0;
    float a=0;
    
    
    void main(void)
    {
    
       InitSysCtrl();
       Custom_Init();
       PWM1_Init();
       Init_ADCs();
    
       DINT;
       Initialize_GPIO();
       InitPieCtrl();
    
       IER = 0x0000;
       IFR = 0x0000;
       InitPieCtrl();
       InitPieVectTable();
    
       EALLOW;
       PieCtrlRegs.PIEIER1.bit.INTx1 = 1;    //ADC-A1
       PieCtrlRegs.PIEIER1.bit.INTx7 = 1;
       PieCtrlRegs.PIEIER3.bit.INTx1 = 1;
    
    
       PieVectTable.TIMER0_INT = &TimerOvf;
       PieVectTable.ADCA1_INT = &ADCs_EOC;
       PieCtrlRegs.PIECTRL.bit.ENPIE= 1;
       EDIS;
    
       IER |= 3;
       EINT;  // Enable Global interrupt INTM
       ERTM;  // Enable Global realtime interrupt DBGM
       timer0_init();
       CpuTimer0Regs.TCR.bit.TSS=0;
       while(1)
           {
    
            }
    }
    void Initialize_GPIO(void)
    {
        EALLOW;
        GpioCtrlRegs.GPADIR.bit.GPIO10 = 0;
        GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1;
        GpioCtrlRegs.GPADIR.bit.GPIO31 = 1;
        GpioCtrlRegs.GPCDIR.bit.GPIO73= 1;
        GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1; //EPwm1
        EDIS;
    
    }
    void Custom_Init(void)
    {
        EALLOW;
        ClkCfgRegs.CLKSRCCTL1.bit.OSCCLKSRCSEL=1;
        ClkCfgRegs.AUXPLLMULT.bit.IMULT=20;
        ClkCfgRegs.SYSCLKDIVSEL.bit.PLLSYSCLKDIV=0;
        ClkCfgRegs.SYSPLLCTL1.bit.PLLCLKEN = 1;
        ClkCfgRegs.LOSPCP.bit.LSPCLKDIV = 2;
        ClkCfgRegs.PERCLKDIVSEL.bit.EPWMCLKDIV = 0;
        CpuSysRegs.PCLKCR0.bit.CPUTIMER0 = 1;
        CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 1;   ///source initsysctrl
        CpuSysRegs.PCLKCR2.bit.EPWM1 = 1;
        CpuSysRegs.PCLKCR13.bit.ADC_A = 1;
        CpuSysRegs.PCLKCR0.bit.CLA1 = 1;
        DevCfgRegs.CPUSEL0.bit.EPWM1 = 0;
        EDIS;
    }
    
    
    void timer0_init(void)
    {
        EALLOW;
        CpuTimer0Regs.PRD.bit.MSW = 0x0004;
        CpuTimer0Regs.PRD.bit.LSW = 0x0080;
        CpuTimer0Regs.TPR.bit.TDDR = 0x0013;
    
    
        CpuTimer0Regs.TCR.bit.TIE= 1;
        CpuTimer0Regs.TCR.bit.TSS=1;
        CpuTimer0Regs.TCR.bit.FREE=0;
        CpuTimer0Regs.TCR.bit.TRB=0;
        EDIS;
    }
    void TimerOvf(void)
    {
        b= b+1;
    
        if(b>10)
        {
            b=1;
        }
        if(GpioDataRegs.GPADAT.bit.GPIO10==1)
        {GpioDataRegs.GPBTOGGLE.bit.GPIO34=1;
        GpioDataRegs.GPATOGGLE.bit.GPIO31=1;
        }
        CpuTimer0Regs.TCR.bit.TIF = 1;
        PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
    }
    
    void ADCs_EOC(void)
    {
    
        a = AdcaResultRegs.ADCRESULT0; //Va
        EPwm1Regs.CMPA.bit.CMPA = 10000*a/4095;
    
    
        AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //clear INT1 flag
        PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
    }
    
    void X_bar(void)
    
    {
        EALLOW;
    
        InputXbarRegs.INPUT5SELECT = 10;
    
      //  GpioDataRegs.GPASET.bit.GPIO10 = 1;
     //   GpioDataRegs.GPACLEAR.bit.GPIO10 = 1;
    
        EDIS;
    
    }
    
    void PWM1_Init(void)
    {
              EALLOW;
    
              EPwm1Regs.TBCTL.bit.CTRMODE = 0;             // Count up
              EPwm1Regs.TBPRD = 10000;                    // Set timer period
              EPwm1Regs.TBCTL.bit.PHSEN = 1;               // Enable phase loading
              EPwm1Regs.TBPHS.bit.TBPHS = 0x0000;          // Phase is 0
              EPwm1Regs.TBCTR = 0x0000;                    // Clear counter
              EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0;           // Clock ratio to SYSCLKOUT
              EPwm1Regs.TBCTL.bit.CLKDIV = 0;
              EPwm1Regs.TBCTL.bit.SYNCOSEL = 0;            // SYNC output on CTR = 0
              // Setup shadow register load on ZERO
              EPwm1Regs.CMPCTL.bit.SHDWAMODE = 0;
              EPwm1Regs.CMPCTL.bit.SHDWBMODE = 0;
              EPwm1Regs.CMPCTL.bit.LOADAMODE = 0;
              EPwm1Regs.CMPCTL.bit.LOADBMODE = 0;
              // Set Compare values
                    // Set compare A value
              // Set actions
              EPwm1Regs.AQCTLA.bit.ZRO = 2;                // Set PWM1A on Zero
              EPwm1Regs.AQCTLA.bit.CAU = 1;                // Clear PWM1A on event A, up count
    
              //SOCA to ADC
              EPwm1Regs.ETSEL.bit.SOCAEN=1;
              EPwm1Regs.ETSEL.bit.SOCASEL=1;
              EPwm1Regs.ETPS.bit.SOCAPRD = 1;
              EPwm1Regs.ETCLR.bit.SOCA = 1;
              EDIS;
    }
    
    void Init_ADCs(void)
    {
        EALLOW;
                AdcSetMode(ADC_ADCA, ADC_RESOLUTION_12BIT, ADC_SIGNALMODE_SINGLE);
                AdcSetMode(ADC_ADCB, ADC_RESOLUTION_12BIT, ADC_SIGNALMODE_SINGLE);
                AdcSetMode(ADC_ADCC, ADC_RESOLUTION_12BIT, ADC_SIGNALMODE_SINGLE);
    
                AdcaRegs.ADCCTL1.bit.INTPULSEPOS = 1;
                AdcbRegs.ADCCTL1.bit.INTPULSEPOS = 1;
                AdccRegs.ADCCTL1.bit.INTPULSEPOS = 1;
    
                AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1;
                AdcbRegs.ADCCTL1.bit.ADCPWDNZ = 1;
                AdccRegs.ADCCTL1.bit.ADCPWDNZ = 1;
                DELAY_US(1000);
    
                AdcaRegs.ADCCTL2.bit.PRESCALE = 6;
                AdcbRegs.ADCCTL2.bit.PRESCALE = 6;
                AdccRegs.ADCCTL2.bit.PRESCALE = 6;
    
                AdcaRegs.ADCSOC0CTL.bit.CHSEL = 0;  //SOC0 will convert pin A0
                AdcaRegs.ADCSOC1CTL.bit.CHSEL = 1;  //SOC1 will convert pin A1
                AdcaRegs.ADCSOC2CTL.bit.CHSEL = 2;  //SOC2 will convert pin A2
                AdcaRegs.ADCSOC3CTL.bit.CHSEL = 3;  //SOC3 will convert pin A3
                AdcaRegs.ADCSOC4CTL.bit.CHSEL = 4;  //SOC4 will convert pin A4
                AdcaRegs.ADCSOC5CTL.bit.CHSEL = 5;  //SOC5 will convert pin A5
    
                AdcbRegs.ADCSOC0CTL.bit.CHSEL = 2;  //SOC0 will convert pin B2
                AdcbRegs.ADCSOC1CTL.bit.CHSEL = 3;  //SOC1 will convert pin B3
                AdcbRegs.ADCSOC2CTL.bit.CHSEL = 4;  //SOC2 will convert pin B4
                AdcbRegs.ADCSOC3CTL.bit.CHSEL = 5;  //SOC3 will convert pin B5
    
                AdccRegs.ADCSOC0CTL.bit.CHSEL = 2;  //SOC0 will convert pin C2
                AdccRegs.ADCSOC1CTL.bit.CHSEL = 3;  //SOC1 will convert pin C3
                AdccRegs.ADCSOC2CTL.bit.CHSEL = 4;  //SOC2 will convert pin C4
                AdccRegs.ADCSOC3CTL.bit.CHSEL = 5;  //SOC3 will convert pin C5
    
    
                AdcaRegs.ADCSOC0CTL.bit.ACQPS = 14; //sample window is 100 SYSCLK cycles
                AdcaRegs.ADCSOC1CTL.bit.ACQPS = 14; //sample window is 100 SYSCLK cycles
                AdcaRegs.ADCSOC2CTL.bit.ACQPS = 14; //sample window is 100 SYSCLK cycles
                AdcaRegs.ADCSOC3CTL.bit.ACQPS = 14; //sample window is 100 SYSCLK cycles
                AdcaRegs.ADCSOC4CTL.bit.ACQPS = 14; //sample window is 100 SYSCLK cycles
                AdcaRegs.ADCSOC5CTL.bit.ACQPS = 14; //sample window is 100 SYSCLK cycles
    
                AdcbRegs.ADCSOC0CTL.bit.ACQPS = 14; //sample window is 100 SYSCLK cycles
                AdcbRegs.ADCSOC1CTL.bit.ACQPS = 14; //sample window is 100 SYSCLK cycles
                AdcbRegs.ADCSOC2CTL.bit.ACQPS = 14; //sample window is 100 SYSCLK cycles
                AdcbRegs.ADCSOC3CTL.bit.ACQPS = 14; //sample window is 100 SYSCLK cycles
    
                AdccRegs.ADCSOC0CTL.bit.ACQPS = 14; //sample window is 100 SYSCLK cycles
                AdccRegs.ADCSOC1CTL.bit.ACQPS = 14; //sample window is 100 SYSCLK cycles
                AdccRegs.ADCSOC2CTL.bit.ACQPS = 14; //sample window is 100 SYSCLK cycles
                AdccRegs.ADCSOC3CTL.bit.ACQPS = 14; //sample window is 100 SYSCLK cycles
    
                AdcaRegs.ADCBURSTCTL.bit.BURSTEN = 1;
                AdcaRegs.ADCBURSTCTL.bit.BURSTSIZE = 5;
                AdcaRegs.ADCBURSTCTL.bit.BURSTTRIGSEL =5;
    
                AdcbRegs.ADCBURSTCTL.bit.BURSTEN = 1;
                AdcbRegs.ADCBURSTCTL.bit.BURSTSIZE = 5;
                AdcbRegs.ADCBURSTCTL.bit.BURSTTRIGSEL =5;
    
                AdccRegs.ADCBURSTCTL.bit.BURSTEN = 1;
                AdccRegs.ADCBURSTCTL.bit.BURSTSIZE = 5;
                AdccRegs.ADCBURSTCTL.bit.BURSTTRIGSEL =5;
    
    
                AdcaRegs.ADCINTSEL1N2.bit.INT1SEL = 0; //end of SOC0 will set INT1 flag
                AdcaRegs.ADCINTSEL1N2.bit.INT1E = 1;   //enable INT1 flag
                AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //make sure INT1 flag is cleared
    
        EDIS;
    }

    我想知道如何在不使用 extsync 触发器的情况下调节 PWM!

    我曾考虑过 您的建议、我认为 ePWM1无论如何都会在 CTR = 0时生成到下一个外设的 SYNCOUT。 我的问题是 ePWM 完全不会与 EXTSYNCIN1相互影响!

    提前感谢。

    此致、

    Rajesh。

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

    尊敬的 Rajesh:

    感谢您的跟进。 EXSYNCOUT 的目的是检查外部同步输入源是否通过。 您可以设置 EPWM1、以便它只从外部同步源同步。 通过这种方式、您将能够确保外部同步按预期传递到 ePWM。

    您还可以监视正在接收的同步的状态:

    能否发送波形的示波器捕获以及尝试同步的外部信号和 EPWM1的 EXTSYNCOUT? 是否也能查看 SYNCI 位的设置?

    此致、

    Allison

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

    尊敬的 Rajesh:

    感谢您的跟进和努力。 我将详细介绍您的配置、看看我是否可以对其进行测试 。 我会尽快告诉你,但请允许,直到星期一,我最晚回到你。 感谢您的耐心!

    此致、

    Allison

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

    你好、Allison!

    问题已解决。 它实际上是一个愚蠢的错误-没有称为 Xbar 初始化函数。 ePWM1A 现在与外部触发器同步、但是、现在 ePWM1A 停止了 ADC 触发。

    下面是新问题的新主题。

    (1) TMS320F28379D:ePWM 在外部同步触发时无法由 ePWM 触发 ADC - C2000微控制器论坛- C2000 ︎ 微控制器- TI E2E 支持论坛

    此致、

    Rajesh。

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

    尊敬的 Rajesh:

    很高兴听到同步得到解决! 感谢您发布新主题、我将让分配的 ADC 专家在其中回答您的疑问。

    此致、

    Allison