本设计主要由双向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黑下载地址:
|