本人大學(xué)生一枚,最近兩天做了一下2020年省賽的B題:?jiǎn)雾?xiàng)在線式不間斷電源。做PFC電路和升壓電路還算比較順利,但是在做DC-AC逆變的時(shí)候著實(shí)遇到了一些問(wèn)題。
這是我搭的逆變電路
電路主體大概是一個(gè)使用STM32產(chǎn)生SPWM的波,經(jīng)過(guò)IR2110驅(qū)動(dòng)H橋逆變,再經(jīng)由LC濾波輸出,在這里我使用了雙極性調(diào)制。共兩個(gè)電感,每個(gè)電感是1.7mH,輸出有一個(gè)2.2uF的CBB電容。
明明沒(méi)有什么問(wèn)題,但是輸出的波形很奇怪。
這是逆變電路輸出空載的波形,同時(shí)功率部分有約13毫安的空載電流
當(dāng)輸出接了約30W純阻性負(fù)載之后,波形又變成了這個(gè)樣子
這里,H橋的直流母線電壓為30V。
我起初懷疑是硬件電路的問(wèn)題,就先用EG8010臨時(shí)搭了一個(gè)電路,結(jié)果發(fā)現(xiàn)出來(lái)的波形特別完美。
空載時(shí)電源輸出電流幾乎為0;
既然硬件電路沒(méi)啥問(wèn)題,那就只能去扒一扒軟件了
在SPWM里,我使用的是查表法來(lái)產(chǎn)生spwm,暫時(shí)用的開(kāi)環(huán)設(shè)計(jì)。
調(diào)制頻率是20kHz,基波是50Hz,表格里也應(yīng)該有400個(gè)數(shù),將這400個(gè)數(shù)導(dǎo)出來(lái)放到EXCEL里,生成的圖表是這樣的
主PWM輸出用到了高級(jí)定時(shí)器1的T1C1、T1C1N、T1C2、T1C2N,
這個(gè)是定時(shí)器1的配置程序,輸出4路PWM,定時(shí)器1的arr = 3600., psc = 0。
void TIM1_PWM_Init(u16 arr,u16 psc)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_BDTRInitTypeDef TIM_BDTRInitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //使能定時(shí)器1時(shí)鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE); //使能GPIO外設(shè)和AFIO復(fù)用功能模塊時(shí)鐘
//設(shè)置該引腳為復(fù)用輸出功能,輸出TIM1 CH1 CH2的PWM脈沖波形 GPIOA.9
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_8; //TIM_CH1 TIM_CH2
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //復(fù)用推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIO
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14;
GPIO_Init(GPIOB, &GPIO_InitStructure);
//初始化TIM1
TIM_TimeBaseStructure.TIM_Period = arr; //設(shè)置在下一個(gè)更新事件裝入活動(dòng)的自動(dòng)重裝載寄存器周期的值
TIM_TimeBaseStructure.TIM_Prescaler =psc; //設(shè)置用來(lái)作為TIMx時(shí)鐘頻率除數(shù)的預(yù)分頻值
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //設(shè)置時(shí)鐘分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上計(jì)數(shù)模式
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根據(jù)TIM_TimeBaseInitStruct中指定的參數(shù)初始化TIMx的時(shí)間基數(shù)單位
//初始化TIM1 Channel2 PWM模式
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
TIM_OCInitStructure.TIM_Pulse = 0;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;
TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;
TIM_OC2Init(TIM1, &TIM_OCInitStructure);
TIM_OC2PreloadConfig(TIM1,TIM_OCPreload_Enable);
TIM_OCInitStructure.TIM_Pulse = 0;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low;
TIM_OC1Init(TIM1, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable);
TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Disable;
TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Disable;
TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_OFF;
TIM_BDTRInitStructure.TIM_DeadTime = 5; //調(diào)節(jié)死區(qū)時(shí)間
TIM_BDTRInitStructure.TIM_Break = TIM_Break_Disable;
TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_Low;
TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Disable;
TIM_BDTRConfig(TIM1, &TIM_BDTRInitStructure);
TIM_ARRPreloadConfig(TIM1, ENABLE);
TIM_Cmd(TIM1, ENABLE); //使能TIM1
TIM_CtrlPWMOutputs(TIM1, ENABLE);
}
同時(shí),用和定時(shí)器1同頻率的定時(shí)器2來(lái)更新定時(shí)器1的占空比,下邊是定時(shí)器2的中斷服務(wù)函數(shù)
//定時(shí)器2中斷服務(wù)程序
void TIM2_IRQHandler(void) //TIM2中斷
{
if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) //檢查TIM2更新中斷發(fā)生與否
{
TIM_ClearITPendingBit(TIM2, TIM_IT_Update); //清除TIM2更新中斷標(biāo)志
//更新PWM1和PWM2的占空比
my_spwm.pwm_1++;
if(my_spwm.pwm_1 >= my_spwm.num_max)
my_spwm.pwm_1 = 0;
TIM1->CCR1 = num_list[my_spwm.pwm_1];
TIM1->CCR2 = num_list[my_spwm.pwm_1];
}
}
我還特意用了一下仿真,看了一下其中的一個(gè)互補(bǔ)通道
互補(bǔ)肯定是互補(bǔ),不然表示會(huì)炸管的,但是空載有大約13毫安的電流(功率部分)
至此,我已經(jīng)徹底懵了,不知道怎么辦,我又試探著用示波器的FFT測(cè)了一下輸出,突然被發(fā)現(xiàn)在約2kHz的地方發(fā)現(xiàn)一處尖峰
這好像是LC的諧振頻率,發(fā)現(xiàn)了這個(gè)問(wèn)題之后我也不知道該怎么解決,希望各位資深大佬們能給小弟一些建議