开关电源模块并联供电系统设计.docx
《开关电源模块并联供电系统设计.docx》由会员分享,可在线阅读,更多相关《开关电源模块并联供电系统设计.docx(28页珍藏版)》请在冰点文库上搜索。
开关电源模块并联供电系统设计
--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--
开关电源模块并联供电系统设计(总24页)
选修课设计(论文)
题目开关电源模块并联供电系统设计
专业电子信息工程
班级111112班
姓名邓逸博孙浙飞汪超
指导教师王章权
所在学院信息学院
完成时间:
2014年5月
开关电源模块并联供电系统设计
电子信息工程专业邓逸博孙浙飞汪超
摘要:
本设计设计制作的是开关电源模块并联供电系统,能够广泛应用在小功率及各种电子设备领域,能够输出8V定压,功率可达到16W,并根据要求对两路电流进行按比例分配。
本系统由DC/DC模块,均流、分流模块,保护电路组成。
DC/DC模块以IRF9530芯片为开关,配以BUCK的外围电路实现24V-8V的降压与稳压。
采用LM328比较电路实现电流和电压的检测,控制由DC/DC模块构成的并联供电系统均流与分流工作模式,通过比较器电路实现过流保护。
同时进行LCD1602液晶同步显示、独立键盘输入控制。
输入的值经过单片机处理程序来控制输出电压,且输出电压和电流可实时显示。
关键词:
DC/DC模块,BUCK,电流分流
一、绪论
分布式直流开关电源系统取代传统的集中式直流开关电源系统已成为大功率电源系统的发展方向:
(1)单台大功率电源容易受技术、成本的限制;
(2)单台直流开关电源故障会导致整个系统的故障,而分布式电源系统由若干电源模块并联组成,某个电源模块故障不会导致整个电源故障;(3)可根据实际负荷的变化,自动确定需要投入运行的模块数量或者解列退出的模块数量,对变负荷运行很有意义;(4)由于多个电源模块并联运行,使每个电源模块承受的电应力较小,具有较高的运行效率,且具有较好的动态和静态特性。
分布式电源系统需要解决的主要问题是实现多个并联运行的模块输出相同的功率。
随着通信电源技术的高速发展,电力电子设备与人们的工作、生活的关系日益密切,而通信电子设备都离不开可靠的电源。
进入20世纪80年代,计算机电源全面实现了开关电源化,率先完成计算机的电源换代;进入20世纪90年代,开关电源相继进入各种电子、电气设备领域,程控交换机、通信、电力检测设备电源、控制设备电源等都已广泛使用了开关电源,更促进了开关电源技术的迅速发展。
二、设计的目标与基本要求
(一)、设计目标
设计并制作一个由两个额定输出功率均为16W的8VDC/DC模块构成的并联供电系统(见图)
图两路buck电路并联供电
(二)、基本要求
(1)调整负载电阻至额定输出功率工作状态,供电系统的直流输出电压UO=±。
在额定输出功率工作状态下,供电系统的效率不低于60%。
(2)调整负载电阻,保持输出电压UO=±,使两个模块输出电流之和IO=且按I1:
I2=1:
1模式自动分配电流,调整负载电阻,保持输出电压UO=±,使两个模块输出电流之和IO=且按I1:
I2=1:
2模式自动分配电流,每个模块输出电流的相对误差绝对值不大于5%。
调整负载电阻,保持输出电压UO=±,使两个模块输出电流之和IO=且按I1:
I2=1:
1模式自动分配电流,每个模块的输出电流的相对误差的绝对值不大于2%。
(3)调整负载电阻,保持输出电压UO=±,使负载电流IO在~之间变化时,两个模块的输出电流可在(~)范围内按指定的比例自动分配,每个模块的输出电流相对误差的绝对值不大于2%。
(4)具有负载短路保护及自动恢复功能,保护阈值电流为(调试时允许有±的偏差)。
在额定输出功率工作状态下,进一步提高供电系统效率。
三、系统设计
(一)、系统框图
图系统框图
系统说明:
以单片机为核心处理元件,DC-DC变换器为主电路。
按键、显示便于人机交互。
驱动电路将单片机和DC-DC变换器隔离,辅助电源给单片机和采样电路供电。
单片机将电压电流通过采样电路,运放采样回来在内部进行A/D处理,然后将数据输出液晶显示。
在内部进行算法调整。
使整个系统稳定,并达到基本要求。
整个系统设计如上图所示。
(二)、硬件设计与方案选择
1、单片机选择
方案一:
使用89C51单片机指令简单,易学易懂,外围电路简单,硬件设计方便,IO口操作简单,无方向寄存器,资源丰富,,价格便宜、容易购买,资料丰富容易查到,程序烧写简单,但要外接A/D、D/A芯片,来实现对整个供电系统的控制,需要占用较多的I/O接口,会使普通单片机承载过大的数据处理任务,功耗较大。
方案二:
使用ATmega16,ATmega16外设特点:
两个具有独立的预分频器和比较器功能的8位定时器/计数器,两个具有预分频器、比较功能和扑捉功能的16位定时器/计数器,具有独立预分频器的实时时钟计数器,两路8位PWM,4路分辨率可编程(2~16位)的PWM,输出比较调制器,8路10位ADC,面向字节的两线接口I^2C总线,两个可编程的串行USART,可工作于主机/从机模式的SPI串行接口,具有独立片内振荡器的的可编程看门狗定时器,片内模拟比较器。
特殊的处理器特点:
上电复位以及可编程的掉电检测,片内经过标定的RC振荡器,片内/片外中断源,6种睡眠模式,可以通过软件进行选择的时钟频率,通过熔丝位可以选择兼容模式,全局上拉禁止功能。
结合前两个方案优点,经过方案比较与论证,最终确定使用方案二,因为ATmega16速度快自带PWM,自带AD,而用89C51会使电路更加复杂与不稳定所以,用ATmega16单片机和其它控制器电路同实现整个系统的控制。
2、主电路选择
方案一:
有一种型号为LM2956的降压开关电压调节器,能够输出3A的驱动电流,同时具有很好的线性和负载调节特性,该器件内部集成频率补偿和固定频率发生器,极大地简化了开关电源电路的设计。
方案二:
采用SG3525自带脉宽调制电源芯片来设计DC-DC降压转换电路,SG3525简单可靠及使用方便灵活,输出驱动为推拉输出形式,增加了驱动能力;内部含有欠压锁定电路,死区时间可调、软启动控制电路、PWM锁存器,有过流保护功能,频率可调,同时能限制最大占空比。
由此设计而成的电路易于实现脉宽调制,然而在真正使用时会发现,为得到要求的电压输出值,开关管S的参数选取相当不易。
方案三:
将经过隔离变压器,整流滤波后得到的24VDC通过Buck降压电路进行DC-DC转换,由ATmega16单片机产生PWM控制其占空比,从而得到要求的直流电压。
此方案仅用一块控制芯片不但可以实现对Buck电路的控制,而且可以结合A/D和D/A对输出电压进行调整与显示。
由于ATmega16单片机自带能够产生脉宽调制所需的PWM信号的端口,在实际制作中用起来比较方便。
ATmega16单片机自带8路10位a/D转换。
结合前两个方案优点,经过方案比较与论证,最终确定使用方案三如图,因为ATmega16单片机,自带PWM模块,可以输出PWM方波控制电路,节约芯片成本,也可实现AD转换。
用单片机和其它控制器电路同实现整个系统的控制。
主电路图
3、驱动电路图
方案一:
单片机输出PWM,采用IR2101驱动DC-DC电路中的IRF9530,控制输出电压。
方案二:
先采用光耦TLP250和单片机进行隔离,有效保护单片机,之后用IRF3205去驱动MOS管IRF9530,控制输出电压。
结合两种方案的对比选择方案二如图,因为方案二中采用光耦,将单片机与主电路隔离,能够有效保护单片机,而且也能使正常使电路工作。
图驱动电路图
4、辅助电源
方案一:
采用集成的三端稳压集成芯片,7815和7805分别给光耦和运放,还有单片机供电,7815内含过流,过热,过载保护电路。
方案二:
采用LM2575开关稳压集成芯片,它内部集成了一个固定的振荡器,是一种高效的稳压芯片,大多数情况下无需加散热片。
内部有完善的保护电路,包括电流限制及热关断电路等。
它可以根据用户要求选择输出电压,可输出,5V,12V,15V。
然后再经过7805产生5V电压。
结合两种方案的对比选择方案二如图,因为方案二中的LM2575的是可调节输出电压的芯片,方便调控,而且它内部有电压基准比较,使输出的电压能够准确并稳定,比7815要精确,且性能好。
图辅助电源电路图
5、电流、电压采样
采样模块是输出电压经过采样回来,形成一个负反馈.经过单片机内部A/D进行处理,然后使输出更加稳定和准确。
电压采样模块直接采用LM358运放如图,将输出的电压缩小一定倍数后,然后送给单片机处理判断。
电流采样是经过欧/4瓦的采样电阻后,缩小一定倍数,然后经过一个差分电路,将电压值送入单片机进行处理如图。
图电压采样电路图
图电流采样电路图
6、显示、按键
显示部分采用字符型液晶1602,能够同时显示16x02即32个字符。
16个引脚,3个控制引脚,8位双向数据端引脚。
具有微功耗、体积小、显示内容丰富、超薄轻巧的特点。
用户可以对EN、RW、RS的数据进行编程,然后通过D0~D7输出显示数据。
其引脚功能图见下表
表1602引脚功能图
按键部分采用四个独立的按键,分别控制占空比的加和减,对输出的电压和电流进行控制,使输出能够达到期望的要求,其按键功能表如表。
表按键功能表
键名
S1
S2
S3
S4
功能
PWM1加%
PWM1减%
PWM2加%
PWM2减%
CPU端口号
PD0
PD1
PD2
PD3
(三)、软件设计
1、主程序
如图为主程序流程图,一开始给系统各部分初始化,包括按键初始化,液晶初始化,PWM初始化,AD采样初始化,中断初始化,然后在进入大循环,在循环内进行数据的显示,包括当前输入的占空比为多少,当前采样回来的数字量和实际的电压值为多少。
还有按键程序,和AD采样。
同时每10毫秒进入定时器0中断进行调整。
图主程序流程图
2、按键程序
按键程序流程图如图所示。
按键采用四个独立的按键,分别控制PWM1,PWM2的加和减,当有键按下时,扫描按键,然后进入判断。
判断当前寄存器对应的值是否大于了设定的上限值,如果没有则数值加1,如果达到了则钳位在最大的上限值。
然后返回数据。
通过按键程序,可以控制占空比的调节。
图按键程序流程图
3、液晶程序
图为1602液晶屏的程序框图,1602由3个控制引脚,8位双向数据端引脚控制显示的内容和位置。
因此,这部分程序主要有初始化函数,写命令函数和写数据函数组成。
初始化函数主要对液晶屏的显示模式进行设定,写命令函数主要是对显示的位置和显示的方式进行设置,写数据函数是决定显示的内容。
图1602程序流程图
4、采样程序
如图是采样程序流程图。
一开始配置AD寄存器,然后启动AD寄存器,然后将采样回来的数据组合成10位的数据,然后采样8次,去头去尾后,对其求平均值。
将数据处理后,给液晶显示。
然后进行电压判断,是否小于要求的最小值,如果是的话进行钳位,然后是否小于设定的最大值,是的话,就是在要求范围内,那就进行PID算法的调整,进行电流的分流。
如果大于最大值的话,就进行钳位。
图AD采样程序流程图
5、中断、PID流程图
如图和分别是中断流程图和PID算法程序流程图。
定时器0中断定时10毫秒溢出中断,在中断中进行PID调整,和电压反馈调整。
PID算法是根据公式,对采样电阻采样回来的电压进行反馈计算。
根据对P,I,D三个参数的设置,然后结合算法公式,对输出的数据进行不断的调整,达到要求的值。
图定时器0中断图PID算法流程图
四、调试过程
(一)、遇到的问题及解决办法
(1)、在对电路板进行设计,做板子的时候,经过封塑机出来后的板子,然后用腐蚀剂进行腐蚀,得到了一块单面板,当我们把器件焊上去的时候发现,跟我们预期的反了一下,所有的器件都反了一下,这样子,整个电路就不能用了。
经过我们的讨论和思考,我们认为是我们在打印出油印纸的时候没有将它镜像,使整块板子就是按照反面的印了出来,经过我们镜像后,发现和我们所需要的板子是一样的了,所有的元器件都能按照原来的位置进行装配。
而且板子也能正常工作。
(2)、在整个电路都做出来以后,进行模块调试的时候发现方波的波形并不是很好,有一点的曲线,经过老师上课的讲解指导了是,栅极旁边的电阻阻值太大,因为有分布电容,所有会充放电,使波形不是很理想。
经过计算后选取了一个合适的阻值,使波形能够达到电路的要求。
还有在整体调试的时候,发现上面一路的测试点,一直是0,下面一路一直是1A左右,经过主电路排查后,发现没有问题,然后对测试点进行排查,发现测试点的夹子松掉了,使电流都往下去了。
将夹子焊好后,电路正常工作。
(3)、在进行程序调试的时候,一直在使用内部的1M晶振,所以一直精度上不去,调节都是很粗的调节,电流一直达不到指标。
还有液晶刷新很慢,按键要按很久才能用。
后来查阅了资料,发现在烧写程序的时候要勾上熔丝位,如果使用的是8M以上的外部晶振的话,那就要把熔丝位全部勾上。
这样才是在使用外部的16M晶振。
将熔丝位勾上后,调节程序后,发现精度大大的提升了。
能够达到基本的要求。
还有在对PID参数设置的时候,一开始没有头绪,随便调,后来看论坛和同学谈论,发现要一个一个参数的调,在经过多次实验后,将PID参数调整好了,是指标达到了要求。
(二)、数据分析
表和表是在电流1:
1情况下,比例调节和PI调节的数据对比。
表负载为Ω,两模块电流按1:
1分配(比例反馈)
I1(A)
I2(A)
I总(A)
Uo(V)
给定值
0.5
测量值
绝对误差
1%
3%
%
3%
表负载为Ω,两模块电流按1:
1分配(PI反馈)
I1(A)
I2(A)
I总(A)
Uo(V)
给定值
0.5
测量值
绝对误差
%
%
%
1%
表和表是在电流1:
2情况下,比例调节和PI调节的数据对比。
表负载为Ω,两模块电流按1:
2分配情况(比例反馈)
I1(A)
I2(A)
I总(A)
Uo(V)
给定值
测量值
绝对误差
%
7%
%
%
表负载为Ω,两模块电流按1:
2分配情况(PI反馈)
I1(A)
I2(A)
I总(A)
Uo(V)
给定值
测量值
绝对误差
%
%
%
5%
对比表和表可以看出,同样是1:
1的电流分配情况下,比例调节的误差在5%以内,达到了基本的要求,但是在PI调节下,可以看出误差精度已经达到了2%的要求。
对比表和表可以看出,同样是1:
2的电流分配情况下,比例调节的误差已经超出了5%的要求,而在PI调节下精度达到了2%以内。
对比着两组数据,可以看出了在PI的调节下精度大大的提升,说明了PID算法在控制方面的优势,使整个系统更加完善。
五、体会与展望
通过这次选修课的学习,学到了专业知识方面的一些知识。
整个学习的过程是很重要的。
由于这个学期在学习《电力电子》这门课,而课题又正好和电力电子相关知识有关,所以对于这次的课程,通过对整个系统的设计,测试,调整。
更好的了解了电力电子和开关电源相关的知识,也更深入的学习到了一些课堂上无法学习到的东西。
将课堂的理论知识和实践想结合,将学习到的东西更加印象深刻,不用去死记硬背,能够灵活运用。
对于编写程序,整体的逻辑性还要加强。
流程图要写好再写程序。
对于展望,希望能够在以后的学习中把硬件方面学的更好,能够把不足给弥补。
在程序方面多学习一下别人的算法。
学的更好,希望一次比一次有进步。
参考文献
[1]程汉湘,武小梅.电力电子技术.第二版.科学出版社.
[2]谭浩强.C程序设计.第三版,北京:
清华大学出版社,.
[3]童诗白,华成英.模拟电子技术,第四版.北京:
高等教育出版社,.
[4]阎石.数字电子技术基础,第五版.北京:
高等教育出版社,.
[5]蒋燕君.自动控制原理.重庆大学出版社,
附录
附录1.整体电路图
附录2.程序代码
;
write_dat((shi*100+ge*10+xiaoshu)*100/beichu%10+0x30);;
write_dat((shi1*100+ge1*10+xiaoshu1)*100/beichu%10+0x30);;
s[2]=a%1000/100+'0';
s[3]=a%100/10+'0';
s[4]=a%10+'0';
s[5]='V';
k[0]='D';
k[1]=':
';
k[2]=b/1000+'0';
k[3]=b%1000/100+'0';
k[4]=b%100/10+'0';
k[5]=b%10+'0';
write_com(0xC0);
for(i=0;i<6;i++)
{
write_dat(s[i]);
}
write_com(0xC7);
for(j=0;j<6;j++)
{
write_dat(k[j]);
}
}
//*********电压比较*******//
voidcom_vol()
{
if(get_ADC2data()>=360)//实际电压值大于
{
OCR1A=265;//钳位到
OCR1B=265;
}
if(get_ADC2data()<=310)//实际电压值小于
{
OCR1A=240;//钳位到
OCR1B=240;
}
}
//*************************//
#ifndef_KEY_H_
#define_KEY_H_
voidkey_init();
voidpress();
ucharkey();
#endif
//***************************//
#include<>
#include<>
#include""
#defineucharunsignedchar
#defineuintunsignedint
uintcount_pwm=255;
uintcount_pwm1=255;
//**********按键初始化函数********//
voidkey_init()
{
DDRD&=~BIT(0);//独立键盘接口置高电平
PORTD|=BIT(0);
DDRD&=~BIT
(1);//独立键盘接口置高电平
PORTD|=BIT
(1);
DDRD&=~BIT
(2);//独立键盘接口置高电平
PORTD|=BIT
(2);
DDRD&=~BIT(3);//独立键盘接口置高电平
PORTD|=BIT(3);
DDRD&=~BIT(7);//独立键盘接口置高电平
PORTD|=BIT(7);
}
//*********按键函数***********//
voidpress()
{
ucharm;
m=PIND;
m&=0x0f;
if(m==0X0e)
{
count_pwm=OCR1A;//读取当前PWM值
count_pwm+=1;
count_pwm=OCR1B;//读取当前PWM值
count_pwm+=1;
delay
(1);//按键消抖
while(PIND==0x0e);
OCR1A=count_pwm;//OCR1A赋新值
OCR1B=count_pwm;//OCR1B赋新值
if(OCR1A>=265&&OCR1B>=265)
{
OCR1A=265;
OCR1B=265;
}
}
if(m==0X0d)
{
count_pwm=OCR1A;//读取当前PWM值
count_pwm-=1;
count_pwm=OCR1B;//读取当前PWM值
count_pwm-=1;
delay
(1);//按键消抖
while(PIND==0x0d);
OCR1A=count_pwm;//OCR1A赋新值
OCR1B=count_pwm;//OCR1B赋新值
if(OCR1A<=240&&OCR1B<=240)
{
OCR1A=240;
OCR1B=240;
}
}
if(m==0X0b)
{
count_pwm=OCR1A;//读取当前PWM值
count_pwm+=1;
count_pwm1=OCR1B;//读取当前PWM值
count_pwm1-=1;
delay
(1);//按键消抖
while(PIND==0x0b);
OCR1A=count_pwm;//OCR1A赋新值
OCR1B=count_pwm1;//OCR1B赋新值
if(OCR1A>=261||OCR1B<=251)
{
OCR1A=261;
OCR1B=251;
}
}
if(m==0X07)
{
count_pwm=OCR1A;//读取当前PWM值
count_pwm-=1;
count_pwm1=OCR1B;//读取当前PWM值
count_pwm1+=1;
delay
(1);//按键消抖
while(PIND==0x07);
OCR1A=count_pwm;//OCR1A赋新值
OCR1B=count_pwm1;//OCR1B赋新值
if(OCR1A<=250&&OCR1B>=260)
{
OCR1A=250;
OCR1B=260;
}
}
}
//************************//
#ifndef_PID_H_
#define_PID_H_
voidpid1_calculating();
voidpid2_calculating();
#endif
//**********************//
#include<>
#include<>
#include<>
#include""
#defineucharunsignedchar
#defineuintunsignedint
//pid的参数
#defineKp//PID调节的比例常数
#defineKp1//PID调节的比例常数
#defineki65536//PID调节的积分常数
#defineki165536//PID调节的积分常数
#definekd0//PID调节的微分时间常数
#definekd10//PID调节的微分时间常数
#defineT//采样周期
#defineT1//采样周期
#defineKppKp*(1++0)//计算公式
#defineKpp1Kp1*(1++0)//计算公式
#defineKii(-Kp)*(1+//计算公式
#defineKii1(-Kp1)*(1+//计算公式
#defineKdd0//计算公式
#defineKdd10