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.
工具与软件:
尊敬的专家:
我正在尝试使用 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
您好、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进行外部同步设置的项目示例。
我还有一些关于如何帮助进行调试的建议:
此致、
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