双电源供电系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
路由器双电源供电及管理系统
1.1背景
工作日定点停电几乎是每个学校的惯例,当你在下载资料或正在打游戏的时候宿舍电被关了给同学的学习与生活带来了诸多的无奈。后来发现即使宿舍的电被停了而校园网并没有断此时有一个双电源供电了的路由器或者交换机就显得非常有必要了,这样完全可以忽视宿舍断电带来的麻烦与不便。刚好利用手头的一块12V锂电池,查资料发现Tenda W3111R路由器采用lv1482SN宽电源芯片12V锂电池完全可用。结合所学知识制作了一个双电源管理系统。该设备造价便宜使用方便。
1.2设计要求和主要内容
本系统有主电源和备用电源。平时主电源供电,当主电源地停电或主电源电压低于备用电源电压0.8V时,备用电源供电。两电源转换时间低于1us完全不影响路由器工作,此部分由硬件电路完成。根据12V锂电池(输出电压10.8-12.5V)输出电压曲线,当电池电压低于10.8V主电源有电时开始充电。若主电源停电则断开对外供电电路保护备用电源等主电源有电时开始充电并回复外电路供电。当电池电压达到12.5V时停止充电。有定时功能:工作日宿舍停电半小时后停止对路由器供电,断网睡觉。星期天则全天不断网,增加红外遥控功能能人为地控制对备用电源充电及是否对路由器供电。
2系统主要硬件电路设计
2.1单片机简介
STC15F104W单片机时STC生产的单时钟(1T)单片机,此单片机只有8个引脚其中有6个IO口,剩下2个是VCC和GND ,不需要带晶振内部自带有时钟发生电路。这6个IO口实际上是我们普通单片机上的P3口,实际编程时也是使用P3.X来实现IO口操作,除P3.1没有复用功能外,其他引脚均有复用功能。芯片默认是不需要复位电路的,上电自复位的。可以通过软件来选择引脚作为复位脚。同时在烧录软件上可以选择低压复位。有两个定时器分别是定时器0和2。T0工作在方式0时是16位可自动重装初始值的定时计数器,方式2时是8位自动重装的计数器,方式3时是可分解的;T2的工作模式固定在16位自动重装初始值模式该芯片的定时器模块可产生更高精度的定时时间。
电路如下
单片机检测P3.0引脚是否为高电平若为高电平则系统需要充电,检测P3.1引脚若为高电平则充电完成,P3.2外接红外接头,接收红外信号,P3.3检测主电源是否有电若为高电平则表示主电源有电若为低电平则表示主电源断电。P3.4是向外供电电路控制端口,P3.5是充电控制接口。
2.2双电源自动切换电路
J1是主电源,J2是备用电源。当J1有电时Q3基极为高电平Q3截止,若P3.4为高电平Q4导通,否则截止。当J1断电时Q3导通,若P3.4为高电平Q4导通,若为低电平Q4截止。
2.3备用电源电量监控电路
LM393为主要芯片。LM 393是由两个独立的、高精度电压比较器组成的集成电路,失调电压最大为2.0mv ,它专为获得宽电压范围,单电源供电而设计的,也可以双电源供电;而且无论电源电压大小,电源消耗的电流都很低即使单电源供电比较器的共模输入电压范围接近地电平。单电源:2.0V to 36V。电源电流消耗很低(0.4mA);最大输入失调电压:±3mA
控制电路如下:
电压比较器从R7获取基准电压,分别通过R4、R5与备用电源电压相比较。若INA-电压小于INA+则备用电源需要充电OUTA为低电平。若INB+电压大于INB-则充电完成OUTB为高电平。
2.4红外接收电路
红外接收电路主要有VS1838组成解码原理为当一个键按下超过22ms,振荡器使芯片激活,将发射一组108ms的编码脉冲,这108ms发射代码由一个起始码(9ms),一个结果码(4.5ms),低8位地址码(用户编码)(9ms~18ms),高8位地址码(用户编码)(9ms~18ms),8位数据码(键值数据码)(9ms~18ms)和这8位数据的反
码(键值数据码反码)(9ms~18ms)组成。红外接头收到信号后单片机判断脉冲的长短确定是0还是1计算出键值。
#include
#include
#include
#define uchar unsigned char //定义无符号字符
#define uint unsigned int
#define TURE 1
#define FALSE 0
sbit outa=P3^0;
sbit outb=P3^1;
sbit IR=P3^2;
sbit j1=P3^3;
sbit kg=P3^4;
sbit cd=P3^5;
uchar irtime;//红外全局变量
uint dstime ;//定时全局变量
bit irpro_ok,irok;
uchar IRcord[4];
uchar irdata[33];
uint b=1;
uint a=0;
void tim0 (void) interrupt 1 using 1//定时器0中断服务函数
{
irtime++; //用于计数2个下降沿之间的时间
}
void ex0_isr (void) interrupt 0 using 0//外部中断0服务函数
{
static unsigned char i; //接收红外信号处理
static bit startflag; //是否开始处理标志位
if(startflag)
{
if(irtime<63&&irtime>=33)//引导码 TC9012的头码,9ms+4.5ms
i=0;
irdata[i]=irtime;//存储每个电平的持续时间,用于以后判断是0还是1
irtime=0;
i++;
if(i==33)
{
irok=1;
i=0;
}
}
else
{irtime=0;startflag=1;}
}
void TIM0init(void)//定时器初始化
{
TMOD=0x02;//定时器工作方式2
TH0=0x00;