本設計主要由雙向DC-DC變換電路、測控顯示電路、輔助電源三部分構成,其中雙向DC-DC變換電路降壓部分采用XL4016開關降壓型DC-DC轉換芯片,最高轉換效率可達93%,升壓部分采用XL6019開關型升壓/降壓芯片,具有低紋波,輸入范圍廣,轉換效率高的特點。恒流部分采用PWM控制原理,形成一個閉環回路,控制電流恒定,恒壓部分完全由硬件控制,單片機輔助控制的方式。以上部分確保系統滿足題目要求,實現恒流充電,恒壓放電,過壓保護功能,并且有著較高的轉換效率。
在本次設計中恒壓部分完全有硬件控制,硬件自身形成一個閉環控制回路,對電壓進行調節使其恒定題目要求的精度范圍。單片機通過光耦電路的工作與停止,恒流部分由PWM調節占空比,使其恒流。
一、系統方案
1、雙向DC-DC變換電路的論證與選擇
2、測量控制方案和輔助電源的論證與選擇
3、 控制方法的論證與選擇
二、系統理論分析與計算
三、電路與程序設計
1、電路的設計
(1)系統總體框圖
2、程序的設計
(1)程序功能描述與設計思路
(2)程序流程圖
3、程序流程圖
四、測試儀器與數據分析
附錄1:電路原理圖
附錄2:源程序
一、系統方案本設計主要由雙向DC-DC變換電路、測控顯示電路、輔助電源三部分構成,其中雙向DC-DC變換電路降壓部分采用XL4016開關降壓型DC-DC轉換芯片,最高轉換效率可達93%,升壓部分采用XL6019開關型升壓/降壓芯片,具有低紋波,輸入范圍廣,轉換效率高的特點。恒流部分采用PWM控制原理,形成一個閉環回路,控制電流恒定,恒壓部分完全由硬件控制,單片機輔助控制的方式。以上部分確保系統滿足題目要求,實現恒流充電,恒壓放電,過壓保護功能,并且有著較高的轉換效率。 1、雙向DC-DC變換電路的論證與選擇方案1:由降壓斬波變換電路(即Buck變換電路)和升壓斬波變換電路(即Boost電路)組成雙向DC-DC變換電路,分別各使用一個全控型器件VT(IGBT或MOSFET),對輸入直流電源進行斬波控制通過調整全控型器件VT的控制信號占空比來調整輸出電壓。 方案2:采用XL4016開關型降壓芯片和XL6019開關型升壓/降壓芯片構成升壓、降壓電路具有低紋波,內助功率MOS,具有較高的輸入電壓范圍,內置過電流保護功能與EN引腳邏輯電平關斷功能。 綜合以上兩種方案,考慮到時間的限制,選擇了比較容易實現的方案2。 2、測量控制方案和輔助電源的論證與選擇由于瑞薩單片機開發套件數量有限,所以我們選擇了一款相對便宜,速度快,性價比較高的STM32103V8T6作為控制器,顯示部分由于收到題目對作品重量的要求,選擇了質量輕,分辨率較高的0.96寸OLED屏幕顯示。由于市場上所售開關電源模塊的,紋波大的因素,所以輔助電源選擇了一個較小的9V變壓器,進行,整流濾波作為輔助電源。 3、控制方法的論證與選擇 方案1:采用PWM調節占空比的方法控制降壓芯片的控制端,達到控制恒流和控制恒壓的目的,采用PWM調節軟件較為復雜,而且PWM調節較為緩慢,軟件控制難度大。 方案2:恒壓部分完全有硬件控制,硬件自身形成一個閉環控制回路,對電壓進行調節使其恒定題目要求的精度范圍。單片機通過光耦電路的工作與停止,恒流部分由PWM調節占空比,使其恒流。 綜合以上兩種方案,選擇軟件較為簡單,硬件較為復雜的方案2。
二、系統理論分析與計算1、充電電路設計分析 充電電路也就是一個降壓電路,并且要求是一個恒流源,本次競賽選取XL4016為核心降壓芯片,其結構如圖所示。 管腳定義如下典型應用電路如下 2.2 放電電路設計分析 XL6019是一款專為升壓、升降壓設計的單片集成電路,可工作在DC5V到40V輸入電壓范圍,低紋波,內置功率MOS。XL6019內置固定頻率振蕩器與頻率補償電路,簡化了電路設計。PWM控制環路可以調節占空比從0~90%之間線性變化。內置過電流保護功能與EN腳邏輯電平關斷功能。典型應用電路如下 2.1 充電電路設計分析 充電電路也就是一個降壓電路,并且要求是一個恒流源,本次競賽選取XL4016為核心降壓芯片,其結構如圖所示。 XL4016降壓模塊電路圖如下所示 2.2 放電電路設計分析 XL6019是一款專為升壓、升降壓設計的單片集成電路,可工作在DC5V到40V輸入電壓范圍,低紋波,內置功率MOS。XL6019內置固定頻率振蕩器與頻率補償電路,簡化了電路設計。PWM控制環路可以調節占空比從0~90%之間線性變化。內置過電流保護功 能與EN腳邏輯電平關斷功能。典型應用電路如下 三、電路與程序設計1、電路的設計(1)系統總體框圖
(圖3-1)
系統總體框圖如圖3-1所示,主要由輔助電源、測控電路、雙向DC-DC變換電路等組成,輔助電源為測控電路供電,測控電路用于檢測和控制雙向DC-DC電路,以及電壓電流的采集與控制。
降壓電路采用XL4016型8A,180KHz,40V,PWM降壓型直流對直流轉換器,最大效率可達96%。輸出1.25V到36V可調,8A恒定輸出電流能力。 如下圖3-2所示為XL4016降壓部分電路圖,通過對FB引腳的控制,可有效的實現電流及電壓的控制。該轉換器外圍器件少,低紋波,調節簡單,內置短路保護功能。PWM占空比0%到100%連續可調。 (圖3-2)
(3)升壓電路原理圖 升壓電路使用XL6019型220KHz、60V、5A開關電流升壓/降壓型DC-DC轉換器。可工作在DC5V到40V輸入電壓范圍,低紋波,內置功率MOS、XL6019內置固定頻率振蕩器與頻率補償電路,簡化了電路設計。PWM控制環路可以調節占空比從0~90%之間線性變化。內置過流保護功能與EN腳邏輯電平關斷功能。使用單片機控制EN引腳實現對升壓模塊開啟與關斷。 (圖3-3) 測控電路如圖3-4所示,通過電阻分壓濾波后,使用單片機ADC采樣,得到輸入、輸出電壓,以及電流和2.5V基準電壓,使用TL431產生2.5V基準電壓用于矯正。恒壓恒流控制使用單片機輸出PWM,經濾波后使用LM358跟隨,增強驅動能力,同時可減小輸入控制端的能量消耗。使用比較器比較設定值與輸出值,再控制芯片的工作狀態。 (圖3-4) 電源 為減小高頻干擾,輔助電源使用220V到9V普通變壓器,經整流濾波后使用7812和HT7333分別輸出12V和3.3V電壓為LM358和單片機小系統板供電。
2、程序的設計(1)程序功能描述與設計思路1、程序功能描述 根據題目要求,軟件部分實現測量顯示,切換模式,充電過壓保護,控制調節系統。 (1)、首先進行,按鍵,OLED各個內設初始化; (2)、進行按鍵掃描; (3)、判斷模式; (4)、進行PWM控制電流,讓輸出為橫流模式; (5)、掃描按鍵; (6)進行打開光耦,讓升壓模塊工作;
3程序流程圖        1、系統總框圖
Vin/Vout 2、程序流程圖
四、測試儀器與數據分析4.1 測試儀器 5位半數字萬用表,4位半萬用表
4.2測試數據與分析 (1)U2=30V條件下對電池恒流充電,電流I1在1-2A變化過程中測量值如下表: , (2)設定I1=2A,使U2在24-36V范圍內變化時,測量記錄I1的值。數據如下: (3)設定I1=2A,在U2=30V,測量U1,I2,計算效率。數據如下: 當I1=2A,U2=30V時,測得I2=1.47A,U1=20V,由此計算效率為97%。 (4)放電模式下,保持U2=30V,計算效率,數據如下: 當U2=30V時,I2=1.02A,U1=18.9V,I1=0.63A,由此計算效率為98%。 (5)使US在32-38V范圍內變化時U2記錄如下:
以上數據可以說明,本次設計的雙向DCDC變換器,各項指標均在題設范圍內,是符合要求的。 1
附錄1:電路原理圖
單片機源程序如下:
- #include<reg52.h>
- #include <intrins.h>
- #include <I2c.h>
- unsigned char ReadADC(unsigned char Chl); //AD采樣,有返回值
- void DAC(unsigned char Data); //DA輸出
- void delay(unsigned char j); //
- unsigned int datpro(void); //電壓采樣數據處理
- void led(int g,int a); //數碼管顯示
- void out_AD_led(); //輸出采樣電壓1
- void DA_out(); //DA輸出控制
- sbit key_1 = P3^4;
- sbit key_2= P3^5;
- sbit duan=P2^6;
- sbit wei=P2^7;
- sbit in0 = P3^2;
-
- unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d ,0x07,0x7f,0x6f,0x00};
- unsigned char num=102; //DA數模輸出變量初始值
- int main()
- {
- while(1)
- {
-
- DA_out();
- DAC(num);
- out_AD_led();
- }
- }
- void out_AD_led() //
- {
- led(1,datpro()/1000);
- led(2,datpro()%1000/100);
- led(3,datpro()%100/10);
- }
- unsigned char ReadADC(unsigned char Ch) // 讀取AD模數轉換的值,有返回值
- {
- unsigned char Data;
- Start(); //寫入芯片地址
- Send(AddWr);
- Ack();
- Send(0x40|Ch);//寫入選擇的通道,本程序只用單端輸入,差分部分需要自行添加
- //Ch的值分別為0、1、2、3,分別代表1-4通道
- Ack();
- Start();
- Send(AddRd); //讀入地址
- Ack();
- Data=Read(); //讀數據
- Scl=0;
- NoAck();
- Stop();
- return Data; //返回值
- }
- unsigned int datpro(void) //
-
- {
- unsigned int dianyah,dianyal;
- unsigned int dianya=0;
- unsigned char x;
- for(x=0;x<6;x++)
- {
- dianya=ReadADC(1)+dianya;//輸入通道選擇通道
- }
- dianya=dianya/6;
- dianyah=dianya&0xf0;
- dianyah=dianyah>>4;
- dianyal=dianya&0x0f;
- dianya=dianyal*20+dianyah*310;
- return(dianya);
- }
-
- void DA_out() //
- {
- if(key_1 == 0)
- {
- delay(10);
- while(key_1 == 0);
- num=num - 1;
- }
- if(key_2==0)
- {
- delay(10);
- while(key_2==0);
- num=num + 1;
- }
- }
- void DAC(unsigned char Data) //
- {
- Start();
- Send(AddWr); //寫入芯片地址
- Ack();
- Send(0x40); //寫入控制位,使能DAC輸出
- Ack();
- Send(Data); //寫數據
- Ack();
- Stop();
- }
- void led(int g,int a) //
- {
- if(g==1)
- {
- P0 = 0Xfe ;
- wei = 1;
- wei = 0;
- P0 = table[a];
- duan = 1;
- delay(2);
- duan = 0;
- }
- if(g==2)
- {
- P0 = 0Xfd ;
- wei = 1;
- wei = 0;
- P0 = table[a]|0x80;
- duan = 1;
- delay(2);
- duan = 0;
- }
- if(g==3)
- {
- P0 = 0Xfb ;
- wei = 1;
- wei = 0;
- P0 = table[a];
- duan = 1;
- delay(2);
- duan = 0;
-
- }
- P0 = 0Xf7 ;
- wei = 1;
- wei = 0;
- P0 = 0x3e;
- duan = 1;
- duan = 0;
- }
- void delay(unsigned char j) //
- {
- unsigned int i;
- for(;j>0;j--)
- for(i=0;i<125;i++);
- }
-
-
- #include <intrins.h>
- #define AddWr 0x90 //寫數據地址
- #define AddRd 0x91 //讀數據地址
-
-
- sbit RST=P2^4; //關掉時鐘芯片輸出
- sbit Sda=P2^0; //定義總線連接端口
- sbit Scl=P2^1; //時鐘信號
-
-
- void Start(void) //啟動IIC總線
- {
- Sda=1;
- _nop_();
- Scl=1;
- _nop_();
- Sda=0;
- _nop_();
- Scl=0;
- }
-
- void Stop(void) //停止IIC總線
- {
- Sda=0;
- _nop_();
- Scl=1;
- _nop_();
- Sda=1;
- _nop_();
- Scl=0;
- }
-
- void Ack(void)//應答IIC總線
- {
- Sda=0;
- _nop_();
- Scl=1;
- _nop_();
- Scl=0;
- _nop_();
- }
-
- void NoAck(void) // 非應答IIC總線
- {
- Sda=1;
- _nop_();
- Scl=1;
- _nop_();
- Scl=0;
- _nop_();
- }
-
- void Send(unsigned char Data) //發送一個字節
- {
- unsigned char BitCounter=8;
- unsigned char temp;
- do
- {
- temp=Data;
- Scl=0;
- _nop_();
- if((temp&0x80)==0x80)
- Sda=1;
- else
- Sda=0;
-
- Scl=1;
- temp=Data<<1;
- Data=temp;
- BitCounter--;
- }
- while(BitCounter);
- Scl=0;
- }
-
- unsigned char Read(void) // 讀入一個字節并返回
- {
- unsigned char temp=0;
- unsigned char temp1=0;
- unsigned char BitCounter=8;
-
- Sda=1;
- do
- {
- Scl=0;
- _nop_();
- Scl=1;
- _nop_();
- if(Sda)
- temp=temp|0x01;
- else
- temp=temp&0xfe;
-
- if(BitCounter-1)
- {
- temp1=temp<<1;
- temp=temp1;
- }
- BitCounter--;
- }
- while(BitCounter);
- return(temp);
- }
復制代碼
完整的Word格式文檔51黑下載地址:
|