开关电源模块并联供电系统.docx
《开关电源模块并联供电系统.docx》由会员分享,可在线阅读,更多相关《开关电源模块并联供电系统.docx(30页珍藏版)》请在冰豆网上搜索。
![开关电源模块并联供电系统.docx](https://file1.bdocx.com/fileroot1/2023-2/23/c8e68003-c107-466a-8b67-e5549f051a69/c8e68003-c107-466a-8b67-e5549f051a691.gif)
开关电源模块并联供电系统
开关电源模块并联供电系统
摘要
本系统以STC12C5A48AD为核心,通过AD采样和DA控制,调节运放,从而改变恒流大小,设计并制作了两路可均流的DC/DC开关电源,并联构成供电系统。
当负载电阻至额定输出功率工作状态,供电系统的直流输出电压UO=8.0±0.4V。
IO=1.0A且按I1:
I2=1:
1模式自动分配电流,两个模块的输出电流的相对误差绝对值分别为3.4%和3.8%。
当两个模块输出电流之和IO=4.0A且I1:
I2=1:
1模式自动分配时,误差是1.9%。
系统的效率在60%以上,最大效率可以达到72%。
此供电系统还可以将两个模块电流比例及大小实时显示出来,具有过流保护功能,阀值电流可在程序里更改。
关键词:
STC12C5A48AD均流过流保护
一、 方案比较与选择
1.1、整体方案选择
方案一:
采用TI公司的脉宽调制控制器TL494CN作为DC/DC拓扑的PWM控制芯片。
TL494的最高工作频率300KHz,内有两个误差信号比较器,能同时实现电压模式和电流模式控制,方便做过流保护;但由于MOS管驱动需外加上管驱动芯片IR2110,而IR2110会有0.2W左右的功耗,会消耗掉1个多百分点的效率。
方案二:
采用模数电搭配,搭建恒流稳压开关电源,用回路自振荡形成PWM波,通过STC12C5A48AD单片机通过AD采样,控制DA输出电压,自主调节每个DC/DC模块的电流大小,使整个供电系统的反应速度大大提高,而且供电效率高,系统原材料较便宜。
故选用方案二作为本供电系统的实现方式。
1.2、提高效率的方案选择
方案一:
用集成三端稳压器来供电。
由于UIn端输出的电压比较高,变化范围大,而单片机系统只需5V供电,若采用7812,7805两级降压来供电,会大大降低效率,从而降低供电系统。
方案二:
采用高效率的DC-DC芯片34063,片内包含有温度补偿带隙基准源,一个占空比周期控制振荡器驱动器和大电流输出开关,能输出1.5A的开关电流,而且,它能使用最少的外接元件构成开关降压式变换器,输入允许范围大,效率比高,驱动能力强。
考虑效率的要求,本设计采用了方案二。
总体方案确定:
经过以上比较我们确定总体设计方案框图如下图1-4:
图1-4、系统整体方案框图
二、理论分析与计算
2.1、DC/DC变换器稳压方法
本系统选择串联开关电源形式来降压,选用二极管,
电感及
电容构成基本拓扑用MOS管NPN沟道及两个10K的电阻构建PWM控制端口,用基本运放采样,设置基本参数通过计算分析得采样电压
,(I为该路的恒流),取0.1欧姆,是为了降低功耗,提高供电效率。
举例:
若选用1欧姆的电阻,而模块电流为2A,则功耗为4W,功耗达25%,不可取。
下图为降压降波部分,选择串联开关模式。
图2-1
2.2、电流电压检测设计
本系统采用AD采样电路,当AD采样电路采集的电流信号达到一定数值时,单片机根据采样信号大小控制DA转换器件输出一定大小的电流,然后电路通过自身反馈,改变另一个DCDC模块的输出电流。
来达到控制电路电流比例的大小。
当AD采样电路采集到的信号超过一定数值时,单片机则根据信号控制DA使DCDC模块的输出电流恒定。
2.3、均流方法
并联的两个模块采用相同的DC-DC主回路拓扑,即方案比较选择中提到的串联开关电源,使电压信号并联进入,只要控制模块软件部分参数设置相同,而外部的硬件部分,两模块的元器件参数也完全相同,即达到均流的效果。
具体则是主电路通过电压反馈稳定输出电压,从电路通过运放检测主从两路的电压差控制输出电压,使得两路压差为零,从而达到均流的目的。
因为采用的模块对称,所以误差较小,而且加入采样电阻后,影响也不会很大。
图2-2均流原理图
2.4、过流保护
使用STC12C5A48AD单片机实时监测电流。
因为ADC采样的电压与模块的恒流成正相关,通过计算判断比较,用AD定时采样两模块电压,并把它们的和与预先设定的电压比较来判断过流。
当连续两次检测到电流过大时,关断使系统不输出电流,5秒延时后,重新启用原始状态,再次判断。
三、 电路设计
3.1、硬件核心电路如下:
(模块电路见附录一)
图3-1DC/DC模块
电路原理:
如图所示,当输入电压经过电容滤波后,稳定输出,当输出电压变化时,若输出电压升高,经0.1欧姆电阻采样电压然后由放大器进行,放大器输出正电压,则反馈到稳压稳流放大器的负输入端,则放大器输出为0,开关三级管基极电压降低,导致其关闭,进而MOSFET管也关闭,经电容电感放电后,输出电压降低,使得0.1欧姆电阻采样电压又降低,使得放大器输出为0,则又经下一级放大器后,放大器输出正电压,是开关三级管又导通,则MOSFET管导通,从而使得输出电压又上升,如此循环产生相于与PWM的波形,使得输出电压自行稳定。
对于输出电流的控制,则需要在输出端加电流采样电路,当输出电流上升时,若放大器的基准电压小于输入采集电压,则放大器输出为0,控制电流的三极管关断,则前一级三极管也断开,导致MOSFET管也断开,输出电压减小,则采集电流也减小,当放大器的基准电压大于输入采集电压时,则放大器输出为高电平,导致三极管导通,开关三极管导通,MOSFET管也导通。
当AD采集电流达到一定数值,可通过单片机控制DA,输出电压使输出电流稳定在一数值。
四、系统调试
调试过程共分三部分:
硬件调试,软件调试,软硬件联调。
4.1 硬件调试:
由于该系统的闭环控制主要由三极管和放大器反馈电路自动控制输出电压,单片机主要起输出参考电压,显示等一些辅助作用,再者根据理论值进行元器件的选择由于精度和干扰的影响,往往得到的结果和理论分析值又有一定的偏差,所以硬件调试难度很大。
此题目对A/D采样回路要求都非常高,其稳定性、精度直接影响最终结果。
我们采取了一些抗干扰措施。
例如引线尽量短,减少交叉,每个芯片的电源与地之间都接有滤波电路。
实践证明,这些措施对消除某些引脚上的“毛刺”及高频噪声起到了很好的效果。
4.2软件调试:
本系统的软件程序完全由KEIL-C编写,在调试过程中采取的是自上至下的调试方法,单独调试好每一个模块,然后在联结成一个完整的系统调试。
4.3软硬联调:
由于本系统的软硬件联系不是很紧密,一般是软件D/A输出后就能直接和硬件相联进行工作,因此在软硬件通调的情况下,系统的软硬件联调的难度有点大。
五、 指标测试及分析
(具体数据见附录二)
5.1、测试仪器
TDS1002数字存储示波器、DT9207数字万用表、三位半数字万用表,PCHW-WYJ-20A30V直流稳压电源。
5.2、输出电压的测量
调节负载电阻至额定状态,测出电压
。
符合题目要求。
5.3、系统效率的测量计算及分析
先测出系统的输入电压UIN,输入电流IIN,输出电压U0,输出电流I0,
由功率公式
,及
计算得(具体见附表2-1,2-2):
供电系统的供电效率均大于60%,符合题目要求。
5.4、每个模块的电流及总电流IO及误差分析
5.4.1、保持输出电压UO=8.0±0.4V,使两个模块输出电流之和IO=1.0A且按I1:
I2=1:
1模式自动分配电流时,见附表2-3:
由表格数据分析可得,每一模块的电流相对误差都小于5%,符合题目要求。
5.4.2、保持输出电压UO=8.0±0.4V,使两个模块输出电流之和IO=1.5A且按I1:
I2=1:
2模式自动分配电流时,见表2-4:
由附表分析:
误差
(测量值
C-理论值
L)/理论值可得,每一模块的电流相对误差都小于5%,符合题目要求。
5.4.3、保持输出电压UO=8.0±0.4V,使负载电流IO在1.5~3.5A之间变化时,两个模块的输出电流可在(0.5~2.0)范围内按指定的比例自动,任取四组测量(见附表)及误差分析,与5.4.2同理:
通过以上分析,能按照自定的比例通过调节完成要求,但误差较大,有待进一步改进。
5.5.5、保护阈值电流
当测得总电流I0=4.5A时,供电系统复位。
5.5.6、系统对题目的完成情况如下表
表5-1系统对题目的完成情况对照表
基本部分
要求
实现
输出电压UO=8.0±0.4V
输出电压UO=7.98V
IO=1.0A且按I1:
I2=1:
1输出电流的相对误差绝对值不大于5%
符合要求
IO=1.5A且按I1:
I2=1:
2输出电流的相对误差绝对值不大于5%
实际测得I1=0.482A,I2=1.082A
符合要求
供电系统的效率不低于60%
实测电路效率为72%
发挥部分
按指定的比例自动
分配绝对值不大于2%。
可自动调节,实际测得为1.98%
IO=4.0A且按I1:
I2=1:
1绝对值不大于2%
效果不稳定
保护阈值电流为4.5A
偏差0.18A
六、结论
本设计很好的满足了题目各个要求,也响应发挥部分,可以在
(1)中自主切换电流比例档位,还能额外的显示出当前电流比例和总电流大小;能高效率、低成本、简单、方便地实现并联系统供电。
不过,其实本设计还有很大的提升空间,但由于我们的动手能力以及理论水平有限,没能很好的达到,我们将继续努力争取更大的进步。
参考文献:
【1】张奇、朱宁西,《单片机应用系统设计技术》,电子工业出版社,2009
【2】童诗白,《模拟电子技术基础第三版》,高等教育出版社,2001
【3】吴少军、刘光斌,《单片机实用低功耗设计》,人民邮电出版社2004
【4】黄智伟,《全国大学生电子设计竞赛训练教程》,电子工业出版式社,2005
【5】曲学基等,《新编低频开关稳压电源》,电子工业出版社2005
附录一:
模块电路图
附图1-1、24V转5V单片机供电电路
附录二:
要求指标的测量情况
附表2-1输入输出电压电流
输入电压UIN/V
输入电流IIN/A
输出电压U0/V
输出电流I0/A
第一次
24.0
0.54
7.98
1.12
第二次
24.0
1.10
7.98
2.05
第三次
24.0
1.62
7.98
3.31
附表2-2输入输出功率及效率
输入功率/W
输出功率/W
供电效率
是否符合要求
第一次
12.96
8.94
69%
是
第二次
26.4
16.36
62%
是
第三次
38.88
24.82
64%
是
附表2-3IO=1.0A时电流比例的精确度
I1/A
I2/A
IO/A
是否符合要求
理论值
0.5
0.5
1
是
测量值
0.504
0.498
1.003
每一模块相对误差
0.04
0.02
0.002
附表2-4IO=1.5A时电流比例的精确度
I1/A
I2/A
IO/A
是否符合要求
理论值
0.5
1.0
1.5
是
测量值
0.491
0.998
1.52
每一模块相误差
0.01
0.02
0.02
附表2-5发挥部分电流指定比例可调
IO/A
比例
I1/A
I2/A
第一次
1.5
1:
2
0.502
1.0
第二次
1.5
2:
1
1.01
0.499
第三次
2
1:
1
1.0
1.0
第四次
2.5
1:
4
2.01
0.05
附录二:
核心源程序
#include
#include"intrins.h"
#defineucharunsignedchar
#defineuintunsignedint
#defineADC_POWER0x80
#defineADC_FLAG0x10
#defineADC_START0x08
#defineADC_SPEEDLL0x00
#defineADC_SPEEDL0x20
#defineADC_SPEEDH0x40
#defineADC_SPEEDHH0x60
#defineFOSC12000000L
#defineT1MS(65535-FOSC/12/200)//20ms
#defineIN_0_5A
#defineIN_1A
#defineIN_1_5A
#defineIN_2A
#defineIN_2_25A
#defineOUT_0_5A25
#defineOUT_1A35
#defineOUT_1_5A42
#defineOUT_2A47
#defineOUT_2_25A48
#defineOUT_1_8A46
#defineI2G_0_5A
#defineI2G_1A
#defineI2G_1_5A
#defineI2G_2A
#defineI2G_2_25A
typedefunsignedcharBYTE;
typedefunsignedintWORD;
#defineDAC_dataP3
//sbite=P2^5;
//sbitrs=P2^7;
//sbitrw=P2^6;
sbite=P2^7;
sbitrs=P2^6;
sbitrw=P2^5;
//sbitLED=P2^1;
sbitKEY1=P2^4;
sbitKEY2=P2^3;
sbitKEY3=P2^2;
bdataucharflag;
sbitKEY1_FLAG=flag^0;
sbitKEY2_FLAG=flag^1;
sbitKEY3_FLAG=flag^2;
sbitSTATUS_FLAG=flag^3;
sbitIN1=flag^4;
sbitIN2=flag^5;
ucharwolf=0;
ucharpor;
//BYTEch=0;
voidadc_isr()interrupt5using1
{
ADC_CONTR&=!
ADC_FLAG;
//ADC_CONTR=ch|ADC_POWER|ADC_SPEEDLL|ADC_START;
}
voidtm0_isr()interrupt1using1
{
staticabc;
TL0=T1MS;
TH0=T1MS>>8;
abc++;
if(abc>=50)
{
abc=0;
//LED=~LED;
}
}
voidtm0_init()
{
TMOD=0x01;
TL0=T1MS;
TH0=T1MS>>8;
TR0=1;
ET0=1;
}
voidDelay(WORDn)
{
WORDx;
while(n--)
{
x=5000;
while(x--);
}
}
voidInitADC()
{
P1ASF|=0x03;//两路AD
ADC_RES=0;
//EADC=1;
//Delay
(2);
}
voiddelay_50us(uintt)
{
uintj;
for(;t>0;t--)
for(j=19;j>0;j--);
}
voidwrite_com(ucharcom)
{
rs=0;
rw=0;
e=0;
P0=com;
delay_50us(10);
e=1;
delay_50us(20);
e=0;
}
voidwrite_dat(uchardat)
{
e=0;
rs=1;
rw=0;
P0=dat;
delay_50us(10);
e=1;
delay_50us(20);
e=0;
}
voidLCD_string(uchary,ucharx,uchar*pointer)
{
if(y==0)
write_com(0x80+x);
if(y==1)
write_com(0xc0+x);
while((*pointer)!
=0x00)
{
write_dat(*pointer);
pointer++;
}
}
voidlcd_init(void)
{
delay_50us(300);
write_com(0x38);
delay_50us(100);
write_com(0x38);
delay_50us(100);
write_com(0x38);
write_com(0x38);
write_com(0x08);
write_com(0x01);
write_com(0x06);
write_com(0x0c);
}
voidkey_scan()
{
if(KEY3==0)//状态改变
{
delay_50us(200);
if(!
KEY3)
{
while(!
KEY3);
STATUS_FLAG=~STATUS_FLAG;
if(STATUS_FLAG==0)
LCD_string(0,10,"S:
auto");
else
LCD_string(0,10,"S:
hand");
delay_50us(200);
while(!
KEY3);
}
}
if(KEY2==0)
{
delay_50us(200);
if(!
KEY2)
{
while(!
KEY2);
por--;
if(por==4)
por=20;
write_com(0xcb);
write_dat(0x30+por/10);
write_com(0xcd);
write_dat(0x30+por%10);
delay_50us(200);
while(!
KEY2);
}
}
if(KEY1==0)
{
delay_50us(200);
if(!
KEY1)
{
while(!
KEY1);
por++;
if(por==21)
por=5;
write_com(0xcb);
write_dat(0x30+por/10);
write_com(0xcd);
write_dat(0x30+por%10);
delay_50us(200);
while(!
KEY1);
}
}
}
voidmain()
{
ucharADC_BARK;
CLK_DIV=0x02;//分频时钟
lcd_init();
InitADC();
//tm0_init();
EA=1;
flag=0;
//CS=0;//DAC0832片选
IN1=0;
por=5;
LCD_string(0,10,"S:
auto");
while
(1)
{
while(STATUS_FLAG==0)//auto
{
DAC_data=OUT_2A;
Delay
(2);
while
(1)
{
ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ADC_START|0;//AD0
Delay
(2);
while(!
(ADC_CONTR&ADC_FLAG));
ADC_CONTR&=~ADC_FLAG;
ADC_BARK=ADC_RES;
ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ADC_START|1;//AD0
Delay
(2);
while(!
(ADC_CONTR&ADC_FLAG));
ADC_CONTR&=~ADC_FLAG;
ADC_BARK+=ADC_RES;
if(ADC_BARK<=75)
IN1=1;
if(IN1==1)
break;
if(KEY3==0)//状态改变
{
delay_50us(200);
if(!
KEY3)
{
while(!
KEY3);
STATUS_FLAG=~STATUS_FLAG;
if(STATUS_FLAG==0)
LCD_string(0,10,"S:
auto");
else
LCD_string(0,10,"S:
hand");
delay_50us(200);
while(!
KEY3);
break;
}
}
}
IN1=0;
DAC_data=OUT_1_5A;
Delay
(2);
while
(1)
{
ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ADC_START|0;//AD0
Delay
(2);
while(!
(ADC_CONTR&ADC_FLAG));
ADC_CONTR&=~ADC_FLAG;
ADC_BARK=ADC_RES;
ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ADC_START|1;//AD0
Delay
(2);
while(!
(ADC_CONTR&ADC_FLAG));
ADC_CONTR&=~ADC_FLAG;
ADC_BARK+=ADC_RES;
if(ADC_BARK<=60)
IN1=1;
if(IN1==1)
break;
if(KEY3==0)//状态改变
{
delay_50us(200);
if(!
KEY3)
{
while(!
KEY3);
STATUS_FLAG=~STATUS_FLAG;
if(STATUS_FLAG==0)
LCD_string(0,10,"S:
auto");
else
LCD_string(0,10,"S:
hand");
delay_50us(200);
while(!
KEY3);
break;
}
}
}
IN1=0;
DAC_data=OUT_0_5A;
Delay
(2);
while
(1)
{
ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ADC_START|1;//AD0
Delay(