久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 19217|回復: 9
收起左側

雙向DC-DC變換器設計 XL4016+XL6019+單片機實現

  [復制鏈接]
ID:515632 發表于 2019-4-18 17:18 | 顯示全部樓層 |閱讀模式
   本設計主要由雙向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變化過程中測量值如下表:
按按鍵次數
1
2
3
4
5
6
7
8
9
10
I1測量值(A)
1
0.99
1.01
1.06
1.07
1.10
1.12
1.14
1.16
1.17
(2)設定I1=2A,使U2在24-36V范圍內變化時,測量記錄I1的值。數據如下:
U2(V)
24
25
26
27
28
29
30
31
32
36
I1(A)
1.99
1.98
1.98
1.99
1.97
1.98
1.99
1.96
2.01
1.99
(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記錄如下:
Us/V
32
33
33
34
35
36
37
U2/V
29.7
29.8
29.8
29.9
29.8
30.3
30.4









以上數據可以說明,本次設計的雙向DCDC變換器,各項指標均在題設范圍內,是符合要求的。

1




附錄1:電路原理圖

單片機源程序如下:

  1. #include<reg52.h>
  2. #include <intrins.h>
  3. #include <I2c.h>
  4. unsigned char ReadADC(unsigned char Chl); //AD采樣,有返回值
  5. void DAC(unsigned char Data);            //DA輸出
  6. void delay(unsigned char j);            //
  7. unsigned int datpro(void);             //電壓采樣數據處理
  8. void led(int g,int a);                //數碼管顯示
  9. void out_AD_led();                   //輸出采樣電壓1
  10. void DA_out();                      //DA輸出控制
  11. sbit key_1 = P3^4;
  12. sbit key_2= P3^5;
  13. sbit duan=P2^6;
  14. sbit wei=P2^7;
  15. sbit in0 = P3^2;

  16. unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d ,0x07,0x7f,0x6f,0x00};
  17. unsigned char num=102;  //DA數模輸出變量初始值
  18. int main()
  19. {
  20.               while(1)
  21.                             {            
  22.                                          
  23.                                           DA_out();
  24.                                           DAC(num);
  25.                                           out_AD_led();
  26.                             }
  27. }
  28. void out_AD_led()                          //
  29. {
  30.               led(1,datpro()/1000);
  31.               led(2,datpro()%1000/100);
  32.               led(3,datpro()%100/10);
  33. }
  34. unsigned char ReadADC(unsigned char Ch)  // 讀取AD模數轉換的值,有返回值
  35. {
  36.                             unsigned char Data;
  37.                             Start();        //寫入芯片地址
  38.                             Send(AddWr);
  39.                             Ack();
  40.                             Send(0x40|Ch);//寫入選擇的通道,本程序只用單端輸入,差分部分需要自行添加
  41.                                               //Ch的值分別為0、1、2、3,分別代表1-4通道
  42.                             Ack();
  43.                             Start();
  44.                             Send(AddRd);    //讀入地址
  45.                             Ack();
  46.                             Data=Read();    //讀數據
  47.                             Scl=0;
  48.                             NoAck();
  49.                             Stop();
  50.                             return Data;   //返回值
  51. }
  52. unsigned int datpro(void)                //

  53. {
  54.               unsigned int dianyah,dianyal;
  55.               unsigned int dianya=0;
  56.               unsigned char x;
  57.               for(x=0;x<6;x++)
  58.               {   
  59.                             dianya=ReadADC(1)+dianya;//輸入通道選擇通道
  60.               }
  61.               dianya=dianya/6;
  62.               dianyah=dianya&0xf0;
  63.               dianyah=dianyah>>4;
  64.               dianyal=dianya&0x0f;
  65.               dianya=dianyal*20+dianyah*310;
  66.               return(dianya);
  67. }

  68. void DA_out()                          //
  69. {
  70.               if(key_1 == 0)
  71.                             {  
  72.                                           delay(10);
  73.                                           while(key_1 == 0);
  74.                                           num=num - 1;
  75.                             }                                                            
  76.               if(key_2==0)
  77.                             {  
  78.                                           delay(10);
  79.                                           while(key_2==0);
  80.                                           num=num + 1;
  81.                             }
  82. }
  83. void DAC(unsigned char Data)          //
  84. {
  85.               Start();
  86.               Send(AddWr); //寫入芯片地址
  87.               Ack();
  88.               Send(0x40);  //寫入控制位,使能DAC輸出
  89.               Ack();
  90.               Send(Data);  //寫數據
  91.               Ack();
  92.               Stop();
  93. }
  94. void led(int g,int a)              //
  95. {
  96.               if(g==1)
  97.               {
  98.                             P0 = 0Xfe ;
  99.                             wei = 1;
  100.                             wei = 0;
  101.                             P0 = table[a];
  102.                             duan = 1;
  103.                             delay(2);
  104.                             duan = 0;
  105.               }
  106.                             if(g==2)
  107.               {
  108.                             P0 = 0Xfd ;
  109.                             wei = 1;
  110.                             wei = 0;
  111.                             P0 = table[a]|0x80;
  112.                             duan = 1;
  113.                             delay(2);
  114.                             duan = 0;
  115.               }
  116.                             if(g==3)
  117.               {
  118.                             P0 = 0Xfb ;
  119.                             wei = 1;
  120.                             wei = 0;
  121.                             P0 = table[a];
  122.                             duan = 1;
  123.                             delay(2);
  124.                             duan = 0;

  125.               }
  126.                             P0 = 0Xf7 ;
  127.                             wei = 1;
  128.                             wei = 0;
  129.                             P0 = 0x3e;
  130.                             duan = 1;
  131.                             duan = 0;
  132. }
  133. void delay(unsigned char j)       //
  134. {
  135.               unsigned int i;
  136.               for(;j>0;j--)
  137.               for(i=0;i<125;i++);
  138. }


  139. #include <intrins.h>
  140. #define AddWr 0x90    //寫數據地址
  141. #define AddRd 0x91   //讀數據地址


  142. sbit RST=P2^4;      //關掉時鐘芯片輸出
  143. sbit Sda=P2^0;     //定義總線連接端口
  144. sbit Scl=P2^1;    //時鐘信號


  145. void Start(void)  //啟動IIC總線
  146.   {
  147.    Sda=1;
  148.    _nop_();
  149.    Scl=1;
  150.    _nop_();
  151.    Sda=0;
  152.    _nop_();
  153.    Scl=0;
  154.   }

  155. void Stop(void) //停止IIC總線
  156.   {
  157.    Sda=0;
  158.    _nop_();
  159.    Scl=1;
  160.    _nop_();
  161.    Sda=1;
  162.    _nop_();
  163.    Scl=0;
  164.    }

  165.    void Ack(void)//應答IIC總線
  166.    {
  167.     Sda=0;
  168.               _nop_();
  169.               Scl=1;
  170.               _nop_();
  171.               Scl=0;
  172.               _nop_();
  173.               }

  174. void NoAck(void)  // 非應答IIC總線
  175.               {
  176.               Sda=1;
  177.               _nop_();
  178.               Scl=1;
  179.               _nop_();
  180.               Scl=0;
  181.               _nop_();
  182.               }

  183. void Send(unsigned char Data) //發送一個字節
  184.               {
  185.                 unsigned char BitCounter=8;
  186.                 unsigned char temp;
  187.                 do
  188.                   {
  189.                             temp=Data;
  190.                             Scl=0;
  191.                             _nop_();
  192.                             if((temp&0x80)==0x80)
  193.                                 Sda=1;
  194.                             else
  195.                                 Sda=0;

  196.                                           Scl=1;
  197.                                           temp=Data<<1;
  198.                                           Data=temp;
  199.                                           BitCounter--;
  200.                               }
  201.                 while(BitCounter);
  202.                     Scl=0;
  203.                 }
  204.             
  205. unsigned char Read(void) // 讀入一個字節并返回
  206.               {
  207.                  unsigned char temp=0;
  208.                  unsigned char temp1=0;
  209.                  unsigned char BitCounter=8;

  210.                  Sda=1;
  211.                  do
  212.                    {
  213.                               Scl=0;
  214.           _nop_();
  215.                               Scl=1;
  216.                               _nop_();
  217.                               if(Sda)
  218.                                  temp=temp|0x01;
  219.                               else
  220.                                  temp=temp&0xfe;

  221.                               if(BitCounter-1)
  222.                                  {
  223.                                             temp1=temp<<1;
  224.                                             temp=temp1;
  225.                                             }
  226.                                             BitCounter--;
  227.                                           }
  228.                             while(BitCounter);
  229.                             return(temp);
  230.               }
復制代碼

完整的Word格式文檔51黑下載地址:
雙向DC-DC變換器.doc (509 KB, 下載次數: 128)


回復

使用道具 舉報

ID:473159 發表于 2019-4-19 02:14 | 顯示全部樓層
芯龍芯片有過流嗎?好像比較貴啊,支持國產
回復

使用道具 舉報

ID:439144 發表于 2019-5-13 12:52 | 顯示全部樓層
電路原理圖看不清
回復

使用道具 舉報

ID:312535 發表于 2019-7-22 14:37 | 顯示全部樓層
這個圖片好模糊啊
回復

使用道具 舉報

ID:472364 發表于 2019-10-14 17:57 | 顯示全部樓層

電路原理圖看不清
回復

使用道具 舉報

ID:592475 發表于 2020-1-25 10:41 | 顯示全部樓層
#在這里快速回復# 電路原理圖看不清
回復

使用道具 舉報

ID:325624 發表于 2020-1-27 17:09 | 顯示全部樓層
這個用來參考制作可調電源非常不錯,贊一個?
回復

使用道具 舉報

ID:689942 發表于 2020-2-4 15:29 來自手機 | 顯示全部樓層
protues上找不到XL6019啊,請問怎么辦
回復

使用道具 舉報

ID:97678 發表于 2023-5-26 14:21 | 顯示全部樓層
請教一下: XL4003 芯片可以設計 輸出 正負電源?
回復

使用道具 舉報

ID:56054 發表于 2023-11-30 16:58 | 顯示全部樓層
沒有實際意義的資料,單片機PWM部份和LM358部份電路都沒有
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线黄av| www.伊人.com| 亚洲欧美一区二区三区国产精品 | 日本三级电影在线免费观看 | 中文字幕一区二区不卡 | 久久久久久国产精品mv | 成人片免费看 | 亚洲国产aⅴ成人精品无吗 国产精品永久在线观看 | 国产色爽 | 成人精品一区二区三区中文字幕 | 99精品99 | 国产第一区二区 | 国产精品毛片久久久久久 | 久久综合久色欧美综合狠狠 | 求毛片 | 精品国产成人 | 日本超碰在线 | 伊人精品国产 | 亚洲欧美视频 | 久草热在线| 亚洲激情自拍偷拍 | 亚洲精品短视频 | 久久精品av | 国产精品成人一区二区三区夜夜夜 | 亚洲免费在线观看视频 | 久久久影院| 午夜成人在线视频 | 国产精品欧美一区二区三区 | 欧美二三区 | 欧美成人在线网站 | 成人精品一区亚洲午夜久久久 | 日本一二区视频 | 97在线播放 | 最新国产精品 | 97av在线| 亚洲精品乱码久久久久久按摩 | 婷婷去俺也去 | 久久久久久99| 亚洲高清在线观看 | 久久国产欧美日韩精品 | 三级免费网 |