您好!
我的代码中生成的占空比有问题。 我在我的电源转换器中使用此代码、但在本例中、我只提供固定的占空比值、并且仅打开栅极驱动器电源(不运行转换器)。 但是、我会随机变化占空比、即使它是固定的、这也是我在闭环运行转换器时遇到尖峰的原因。 我在 下面插入了主代码的一个片段以及用于设置周期和占空比的函数。
我正在删除代码的子部分、并尝试找出问题所在。 对我来说、没有意义的是、当我只设置占空比值并调用函数时、代码运行良好、但添加代码行"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
}
下面的前两幅图显示了开关波形、最后一幅图显示了由于这种随机开关而发生的电压瞬态。



谢谢你。