当前位置:首页 > 基于AT89S51单片机的太阳能控制器设计与制作(终稿) - 图文
3.2 TLC549
TLC549是美国德州仪器公司生产的8位串行A/D转换器芯片,可与通用微处理器、控制器通过CLK、CS、DATA OUT三条口线进行串行接口。具有4MHz片内系统时钟和软、硬件控制电路,转换时间最长17μs,TLC548允许的最高转换速率为45 500次/s,TLC549为40 000次/s。总失调误差最大为±0.5LSB,典型功耗值为6mW。采用差分参考电压高阻输入,抗干扰,可按比例量程校准转换范围,VREF-接地,VREF+-VREF-≥1V,可用于较小信号的采样[2]。
TLC548/549的极限参数如下: ●电源电压:6.5V;
●输入电压范围:0.3V~VCC+0.3V; ●输出电压范围:0.3V~VCC+0.3V; ●峰值输入电流(任一输入端):±10mA; ●总峰值输入电流(所有输入端):±30mA; ●工作温度:-55℃~125℃
3.3 MOSEFT管
MOSEFT管是利用电场效应来控制电流的,由金属、氧化物和半导体制成,由于场效应管的栅极被绝缘层(例如SiO2)隔离,因此其输入电阻可达109欧以上。MOSEFT管所需驱动功率较小。而且MOSFET只有多数载流子参与导电,不存在少数载流子的复合时间,因而开关频率可以很高,非常适合作控制充放电开关。本设计采用IRF9540N P沟道场效应管,以下是IRF9540N的一些参数: VGS=0V,ID=-250uA VGS=-10V,ID=-11A VDS=VGS,ID=-250uA VDS=-50V,ID=-11A
VDS=-80V VGS=0V,IDSS=250uA VGS=20V,IGSS=100nA 3.4 光耦
光耦合器是以光为媒介传输电信号。光耦合器一般由三部分组成:光的发射、光的
图13 TLC549管脚图
接收及信号放大。光耦工作时对输入、输出的电信号有很好的隔离作用,因此被广泛用在各种电路中。光耦的内部结构如图14所示,在1、2极之间加正向电压,内部的发光二极管(LED)将会发出一定波长的光,被光探测器接收而产生光电流,3、4极之间导通。反之,光耦内部的发光二极管的电流近似为零,输出端两管脚间的电阻很大,相当于开关断开。由于单片机输出只有5V不足于驱动MOSFET管,因此驱动MOSFET管的电压从U3出接出。
3.5太阳能电池 如右图所示,太阳能电池是利用半导体光伏效应制成的,能够直接将太阳辐射转换成电能的器件。具有很强的光伏效应半导体材料,当吸收一定能量的光子后其内部导电的载流子分
图15太阳能电池产生光伏效应 图14 光耦合器 布和浓度发生变化。光照在半导体P/N结上,就会在其两端产生光生电压,当外部接通电路时,在该电压的作用下,将会有电流流过外部电路产生一定的输出功率。在这个过程中,光电池本身不发生任何化学反应,也没有转动磨损,因此使用太阳能电池的过程中没有噪声,没有环境污染,这是其他方式发电所不能比拟的。
3.6 蓄电池
国内目前被广泛使用的太阳能蓄电池主要是铅酸蓄电池,它的主要特点:寿命长,免维护安全可靠,具有比较好的循环充放电能力,具有很好的过充和过放能力。电池的正极活性物质是二氧化铅( PbO2 ),负极活性物质是海绵状金属铅( Pb),电解液是硫酸液(H2 SO4 )。本设计采用密封型铅酸电池,设计的蓄电池电压值为:12V,充满断开电压为:14.1~14.5V;恢复连接电压为:13.2V。
4 软件设计 4.1 程序主要流程图
开始初始化变量电压采集YVbat>14.5VNVbat>12VNVbat>10.8VN停止放电YY停止充电浮充充电快速充电结束4.2主要C程序
#include
sbit CLK = P0^0; /* AD时钟信号 */ sbit CS = P0^2; /* AD片选信号 */ sbit DOUT = P0^1; /* 数据输出 */ sbit FuZai = P1^1 ; sbit PWM = P1^0 ; sbit LED1 =P2^0; sbit LED2 =P2^1;
uchar t0,battery_v;
void delay(uint n) //延时函数 { while(n--) { _nop_(); } }
/*************************************/ void init()//初始化函数 { TMOD=0x01; TH0=(65536-50)/256; TL0=(65536-50)%6; EA=1; ET0=1; PWM=0; LED1=1; LED2=1; }
/***********************************/
uchar adc_549(void) //AD转换 {
uint data_out=0; uchar i; CS = 1; _nop_(); CS = 0;
for (i=0; i<8; i++) /* 读取8位数据 */ { CLK = 0;
data_out = (data_out<<1)|DOUT; CLK = 1; _nop_(); } CLK = 0; CS = 1;
delay(3); /* 延时21us以上 */ return(data_out); }
/**********************************/
共分享92篇相关文档