能量回饋裝置設計


1、本能量回饋裝置來源為2018全國電子設計大賽E題,

其中變流器進行負載試驗時,需在其輸出端接負載。通常情況下,輸出電能消耗在該負載上。為了節能,應進行能量回饋。負載試驗時,變流器1(逆變器)將直流電變為交流電,其輸出通過連接單元與變流器2(整流器)相連,變流器2將交流電轉換成直流電,並回饋至變流器1的輸入端,與直流電源一起共同給變流器1供電,從而實現了節能。其中系統結構圖如下:

 

其要求如下:

(1)變流器1輸出端c、d僅連接電阻性負載,變流器1能輸出50Hz、25V0.25V、2A的單相正弦交流電。                                                   

(2)在要求(1)的條件下,變流器1輸出交流電的頻率范圍可設定為20Hz~100H,

步進1Hz。                                                           

(3)變流器1與能量回饋裝置按圖1所示連接,系統能實現能量回饋,變流器1輸出電流I1 = 1A。                                                          

(4)變流器1與能量回饋裝置按圖1所示連接,變流器1輸出電流I1 = 2A,要求直流電源輸出功率Pd越小越好。    

2、分析如下,

(1)基本單個部分分析:題中變流器1為DC-AC模塊,基本兩路半橋實現互補輸出,通過兩路SPWM驅動半橋,輸出正弦波形,實現DC-AC的交流信號產生;其二連接單元,初始想法為信號隔離裝置,也就是將連接單元1和連接單元2的GND信號隔離開,放置波形出現失真,先是定做了30V-30V的1:1的100W變壓器,實現接地信號的隔離,后期發現變流器1和變流器2共地並沒有太大影響輸出交流信號,故后來沒有使用變壓器隔離;變流器2為AC-DC轉換器,即通過整流橋實現信號變化,

(2)連接整體相關分析,需要實現變流器的50Hz、25V、2A的正弦交流信號的產生,需要實現電壓值的恆定,以及電流值的穩定。個人思路如下:通過采集變流器1輸出電壓,實現PID調節電壓,再通過負載實現2A,通過恆壓以及負載調節實現電流值的穩定;第二問中的頻率步進可調,只要實現開環調節即可;第三問需要實現在加入能量回饋裝置之后,實現電流值的恆定,后來官方出題人補充:使得能量回饋裝置呈阻性,也就是將能量回饋裝置做成電流源,其基本原理就是:調節電流就是調節負載阻性,實現題目要求的實現,同時后半部分的電流回饋至輸入處時,需要實現后半部分的高壓回饋,原因:電壓值過低會使得電流值無法回饋造成電流倒灌,故最終選取方案為:PFC_BOOST升壓電路作為能量回饋裝置。同時對U1輸出電流進行采樣,進行反饋實現電流值的恆定,也就是調節能量回饋裝置的電流,作為恆流源使用;第四問為變流器1輸出電流為2A實現電路功率最大,即在輸出2A的基礎上,使得恆流源輸出電流值最大,確保功率最大化。

3、硬件電路實現

3.1 U1變流器電路實現

(1)光耦隔離電路,使用6N137實現對SPWM波形的隔離,防止信號耦合,原理圖如下:

 

(2)電壓采樣電路,通過電壓互感器實現降壓,完成電路電壓采樣,原理圖如下:

 

 

(3)電源產生,主要通過LM2596以及ICL7660進行電壓生成,原理如下:

 

 

(4)其驅動橋整體電路設計如下:

 

3.2 U2變流器的設計實現

(1)首先是整流橋的實現,將交流轉換成直流輸入值BOOST電路,完成升壓功能,原理如下:

 

(2)其次為基本驅動電路,選型為TLP250驅動電路:

 

 

3.3 電路有效值采樣電路,選型為AD637,進行采樣,其原理如下:

 

4、軟件設計.

主要設計PID電流反饋以及PID電壓反饋,其他基本采樣設計和配置,不多加贅述,有意者可另行留言,附上部分代碼,為SPWM產生代碼:

#include "pwm.h"

#include "led.h"

#include "oled.h"

#include "key.h"

#include "math.h"

#define P_I 3.1415926

u32 pwm_data[1000];

u16 sin_i;

static vu16 sign = 0;

vu16 Counter_sine=0;

extern u16 adc_i;

 

void sin_wave(u16 length);

 

void TIM1_Init(u16 arr, u16 psc)

{

GPIO_InitTypeDef         GPIO_InitStructure;

TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;

TIM_OCInitTypeDef       TIM_OCInitStructure;

TIM_BDTRInitTypeDef      TIM_BDTRInitStructure;

 

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1 | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB,ENABLE);

 

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; 

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA,&GPIO_InitStructure);

 

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;

GPIO_Init(GPIOB,&GPIO_InitStructure);

 

TIM_DeInit(TIM1);

TIM_TimeBaseInitStructure.TIM_Period = arr;    

TIM_TimeBaseInitStructure.TIM_Prescaler = psc; 

TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;   

TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;

TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStructure);

 

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_OC1Init(TIM1, &TIM_OCInitStructure);

TIM_OC2Init(TIM1, &TIM_OCInitStructure);

TIM_OC3Init(TIM1, &TIM_OCInitStructure);

 

TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable);

TIM_OC2PreloadConfig(TIM1,TIM_OCPreload_Enable);

TIM_OC3PreloadConfig(TIM1,TIM_OCPreload_Enable);

 

TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable;

TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable;

TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_OFF;

TIM_BDTRInitStructure.TIM_DeadTime = 30;

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_Cmd(TIM1, ENABLE);

 TIM_CCPreloadControl(TIM1,ENABLE);

TIM_CtrlPWMOutputs(TIM1, ENABLE);

}

 

TIM_ICInitTypeDef  TIM2_ICInitStructure;

extern u16 n;

u32 microsecond=0;

u32 EvenOdd=0;

void sin_wave(u16 length)

{

       for(sin_i = 0;sin_i < length;sin_i++)

       pwm_data[sin_i] = 3600*0.4 *sin(2*P_I * sin_i / length) + 1800;

}

void TIM4_Init(u16 arr, u16 psc)

{

    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

    NVIC_InitTypeDef NVIC_InitStructure;

 

       RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);

         TIM_DeInit(TIM4);               

         TIM_TimeBaseStructure.TIM_Period=arr;  

         TIM_TimeBaseStructure.TIM_Prescaler= psc; 

         TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;

         TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;

         TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);

         TIM_ClearFlag(TIM4, TIM_FLAG_Update);

         TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE);

               TIM_Cmd(TIM4, ENABLE);

 

         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);

         NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;

         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;

         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

         NVIC_Init(&NVIC_InitStructure);

}

void TIM4_IRQHandler(void)

{

 if (TIM_GetITStatus(TIM4 ,TIM_IT_Update) == SET)

 {

        Counter_sine++;

        TIM_SetCompare1(TIM1,(u16)(pwm_data[Counter_sine]));

        TIM_SetCompare2(TIM1,(u16)(pwm_data[Counter_sine]));

        TIM_SetCompare3(TIM1,(u16)(pwm_data[Counter_sine]));

        if(Counter_sine==n)

       {

               Counter_sine=0;

                  }

 }

 TIM_ClearITPendingBit(TIM4 , TIM_FLAG_Update);

}

5、此為18年電設A題,后續更新以前電設方案,個人本科經歷,多處不足,敬請指正,互相學習。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM