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.
工具/软件:Code Composer Studio
您好,
我目前正在使用具有电压控制回路的ADC通过PWM工作。 我在我的循环中发出了一个命令,如果我的ADC输入大于2.5 v,我的脉冲应该关闭。我激活了ePWM1。
但现在发生的是ePWM1A正在关闭,而ePWM1B却没有关闭。 我将包含我的program..please帮助
/configure ADCINA4
ADC_setIntPulseGenMode (myAdc1,ADC_IntPulseGenMode_Prior);
ADC_enableInt (myAdc1,ADC_IntNumber_1);
ADC_setIntMode (myAdc1,ADC_IntNumber_1,ADC_IntMode_ClearFlag);//ADCINT1在AdcResults锁定后跳闸
ADC_setIntSrc (myAdc1,ADC_IntNumber_1,ADC_IntSrc_EOC2); //将EOC2设置为触发ADCINT1
ADC_setSocChanNumber (myAdc1,ADC_SocNumber_0,ADC_SocChanNumber_A4); //将SOC0通道选择设置为ADCINA4
ADC_setSocChanNumber (myAdc1,ADC_SocNumber_1,ADC_SocChanNumber_A4); //将SOC1通道选择设置为ADCINA4
ADC_setSocChanNumber (myAdc1,ADC_SocNumber_2,ADC_SocChanNumber_A4); //将SOC2信道选择设置为ADCINA2
ADC_setSocTrigSrc (myAdc1,ADC_SocNumber_0,ADC_SocTrigSrc_EPWM1_ADCSOCA); //由于循环SOC0先转换SOC1,因此在EPWM1A上设置SOC0启动触发器
ADC_setSocTrigSrc (myAdc1,ADC_SocNumber_1,ADC_SocTrigSrc_EPWM1_ADCSOCA); //由于循环SOC0先转换,然后转换SOC1,所以在EPWM1A上设置SOC1启动触发器
ADC_setSocTrigSrc (myAdc1,ADC_SocNumber_2,ADC_SocTrigSrc_EPWM1_ADCSOCA); //由于循环SOC0先转换为SOC1,然后转换为SOC2,因此在EPWM1A上设置SOC2启动触发器
ADC_setSocSampleWindow (myAdc1,ADC_SocNumber_0,ADC_SocSampleWindow ow_7_Cycles); //将SOC0 S/H Window设置为7个ADC时钟周期,(6个ACQPS加1个)
ADC_setSocSampleWindow (myAdc1,ADC_SocNumber_1,ADC_SocSampleWindow ow_7_Cycles); //将SOC1 S/H Window设置为7个ADC时钟周期,(6 ACQPS加1)
ADC_setSocSampleWindow (myAdc1,ADC_SocNumber_2,ADC_SocSampleWindow ow_7_Cycles);
PWM_enableSocAPulse (myPwm1);
//在组上启用SOC
// pwm_setSocBPulseSrc (myPwm2, PWM_SocPulseSrc_CounterEqualCmpAIncr);
PWM_setSocAPulseSrc (myPwm1,PWM_SocPulseSrc_CounterEqualCmpAIncr);//在计数时从CPMA中选择SOC
//PWM_setSocBPeriod (myPwm2,PWM_SocPeriod_FirstEvent);
PWM_setSocAPeriod (myPwm1,PWM_SocPeriod_FirstEvent);//在第一个事件上生成脉冲
//PWM_setCmpA (myPwm2,0x0000); //设置比较值
//PWM_setPeriod (myPwm2,0x05DC);
PWM_setPeriod (myPwm12500); //周期= 1500 (对于20Khz采样频率)
// PWM_setCounterMode (myPwm2,PWM_CounterMode_up);
PWM_setCounterMode (myPwm1,PWM_CounterMode_up);
clk_enableTbClockSync(myClk);
对于(;;)
PWM_setCmpA (myPwm1,VPI_5);
void InitEPwm1()
{
clk_disableTbClockSync(myClk);
clk_enablePwmClock (myClk,PWM_Number_1);
GPIO设置上拉(myGpio,GPIO编号_0,GPIO _上拉_禁用);
GPIO设置上拉(myGpio,GPIO编号_1,GPIO _上拉_禁用);
GPIO设置模式(myGpio,GPIO编号_0,GPIO _0_Mode_EPWM1A);
GPIO_setMode (myGpio,GPIO编号_1,GPIO _1_Mode_EPWM1B);
//设置同步
PWM_setSyncMode (myPwm1,PWM_SyncMode_EPWMxSYNC);
// PWM_setSyncMode (myPwm2,PWM_SyncMode_EPWMxSYNC);
//允许每个计时器同步
PWM_enableCounterLoad (myPwm1);
PWM_setPeriod (myPwm1,PWM1_TIMER_TBPRD);
PWM_setCounterMode (myPwm1,PWM_CounterMode_up); //计数
PWM_setIntMode (myPwm1,PWM_IntMode_CounterEqualZero); //在零事件中选择INT
PWM_enableInt (myPwm1); //启用INT
PWM_setIntPeriod (myPwm1,PWM_IntPeriod_FirstEvent); //在第一个事件上生成INT
PWM_setActionQual_Period_PwmA (myPwm1,PWM_ActionQual_Set);
PWM_setActionQual_CntUp_CmpA_PwmA (myPwm1,PWM_ActionQual_Clear);
PWM_setActionQual_Period_PwmB (myPwm1,PWM_ActionQual_Clear);
PWM_setActionQual_CntUp_CmpA_PwmB (myPwm1,PWM_ActionQual_Set);
clk_enableTbClockSync(myClk);
}
__interrupt void ADC_ISR(void)
{
Voltage1[ConversionCount]= ADC_readResult (myAdc1,ADC_ResultNumber_1);
//Voltage2[ConversionCount]= ADC_readResult (myAdc2,ADC_ResultNumber_2);
sum1 += Voltage1[ConversionCount];
//sum2 += Voltage2[ConversionCount];
IF (ConversionCount == 40)
{
vout计数1= sum1/ConversionCount;
VA1 =(Vout计数1 * 3.3)/(4096);//以3.3V格式检测到的电压
ERR_5 = 3.15 - VA1;
a_5 =(err_5 * kp);// kp b
B_5 =(ERR_5 * KI);// KI乘法
V_5 = k_5 +(B_5 + IN_A);
如果(v_5 >= 1200) v_5 = 1200; //最大占空比限制
如果(v_5 <= 10) v_5 = 10;
K_5 = v_5;
IN_A = B_5;
VPI_5 = a_5 + v_5;
如果(VPI_5 >= 1200) VPI_5 = 1200;//最大占空比限制
如果(VPI_5 <= 10) VPI_5 = 10;
如果(VA1 > 2.50) VPI_5 = 0;//最小占空比限制
ConversionCount = 0;
相扑1=0;
}
Else ConversionCount++;
//清除ADCINT1标志,为下一个SOC重新初始化
ADC_clearIntFlag (myAdc1,ADC_IntNumber_1);
//确认中断到PIE
PIE_clearInt (myPie,PIE_GroupNumber_10);
}
您好,Madhuri,
Madhuri Depuru 说:但发生的是ePWM1A正在关闭,而ePWM1B未关闭。
您是否将相应的CMPA和CMBB值更改为0?
您好Gautam:
我们没有使用OSHT TRIP。我们使用操作限定符集来关闭两个脉冲。
谢谢你