您好!
我的代码中生成的占空比有问题。 我在我的电源转换器中使用此代码、但在本例中、我只提供固定的占空比值、并且仅打开栅极驱动器电源(不运行转换器)。 但是、我会随机变化占空比、即使它是固定的、这也是我在闭环运行转换器时遇到尖峰的原因。 我在 下面插入了主代码的一个片段以及用于设置周期和占空比的函数。
我正在删除代码的子部分、并尝试找出问题所在。 对我来说、没有意义的是、当我只设置占空比值并调用函数时、代码运行良好、但添加代码行"Vbuck_new=3;"可实现随机切换。
while (1){ /* P1OUT = 0b0; adc_chan=7; ADC10MCTL0 = (ADC10MCTL0 & ~ADC10INCH_1) | ADC10INCH_7; GetADC(); // Vin_temp Vin_3=Vin_2; Vin_2=Vin_1; Vin_1=Vin_0; Vin_0=Vin_temp; Vin=(Vin_0+Vin_1+Vin_2+Vin_3)>>2; __delay_cycles(10); __no_operation(); Vin_new=Vin/52; */ Vbuck_new=3; //Vbuck_temp/57; D_buckH=85;//333*(Vbuck_new/Vin_new); if (D_buckH>280){ D_buckH=280; } else if (D_buckH<75){ D_buckH=75; } D_buckL=D_buckH+1; __delay_cycles(10); // Delay between sequence convs SetDuty_Buck (D_buckH, D_buckL); __no_operation(); } void SetPWM(unsigned int tbuck, unsigned int tboost){ // Configure TimerD in Hi-Res Regulated Mode - for TD0 TD0CTL0 = TDSSEL_2; // TDCLK=SMCLK=25MHz=Hi-Res input clk select TD0CTL1 |= TDCLKM_1; // Select Hi-res local clock TD0HCTL1 |= TDHCLKCR; // High-res clock input >15MHz TD0HCTL0 = TDHM_0 + // Hi-res clock 8x TDCLK = 200MHz TDHREGEN + // Regulated mode, locked to input clock TDHEN; // Hi-res enable // Configure TimerD in Hi-Res Regulated Mode - for TD1 TD1CTL0 = TDSSEL_2; // TDCLK=SMCLK=25MHz=Hi-Res input clk select TD1CTL1 |= TDCLKM_1; // Select Hi-res local clock TD1HCTL1 |= TDHCLKCR; // High-res clock input >15MHz TD1HCTL0 = TDHM_0 + // Hi-res clock 8x TDCLK = 200MHz TDHREGEN + // Regulated mode, locked to input clock TDHEN; // Hi-res enable while(!TDHLKIFG); // Wait until hi-res clock is locked - frequency lock Interrupt Flag TD0CTL0 |= TDCLR; // Reset timer for TD1 TD0CCR0 = tbuck; // Period Register - 200MHz/(100kHz)= 2000 - using high resolution clock TD1CTL0 |= TDCLR; // reset timer for TD1 TD1CCR0 = tboost; // Period Register - 200MHz/(100kHz)= 2000 - using high resolution clock } void SetDuty_Buck (unsigned int dbuckH, unsigned int dbuckL) { TD0CTL0 |= TDCLR; // reset timer for TD1 TD0CCTL1 |= OUTMOD_2 + CLLD_2; // CCR1 toggle/reset TD0CCR1 = dbuckH; // CCR1 PWM duty cycle of 1000/2000 = 50% TD0CCTL2 |= OUTMOD_6 + CLLD_2; // CCR2 toggle/set TD0CCR2 = dbuckL; // CCR2 PWM duty cycle of 500/2000 = 25% TD0CTL0 |= MC_3 + TDCLR; // up/down-mode, clear TDR, Start timer }
下面的前两幅图显示了开关波形、最后一幅图显示了由于这种随机开关而发生的电压瞬态。
谢谢你。