基于MAX1898的智能充电器设计

单片机在控制方面不仅可以在工业控制方面大展神通,如果用在控制一些很有意思的芯片方面也可以实现实用的功能。比如用单片机控制冲电芯片实现手机的智能充电器设计,基于次参考有关资料学习了基于MAX1898的智能充电器设计。

主要器件:

1、 AT89C52单片机芯片,用于控制充电器芯片。

2、 可提供精确的恒流/恒压充电,可对所有化学类型的Li+电池进行安全充电的MAX1898。

3、 LM7805提供稳定的+5v电压。

试验流程图:

 

试验电路图:

 

试验程序代码:

//BattCharger.h程序

#ifndef _BATTCHARGER_H // 防止BattCharger.h被重复引用

#define _BATTCHARGER_H

#include

#define uchar unsigned char

#define uint unsigned int

sbit GATE = P2^0;

sbit BP = P2^1;

uint t_count,int0_count;

#endif

//BattCharger.c程序

#include "BattCharger.h"

/* 定时器0中断服务子程序 */

void timer0() interrupt 1 using 1

{

TR0 = 0; // 停止计数

TH0 = -5000/256; // 重设计数初值

TL0 = -5000%256;

t_count++;

if (t_count>600) // 第一次外部中断0产生后3s

{

if (int0_count==1) // 还没有出现第二次外部中断0,则认为充电完毕

{

GATE = 0; // 关闭充电电源

BP = 0; // 打开蜂鸣器报警

}

else // 否则即是充电出错

{

GATE = 1;

BP = 1;

}

ET0 = 0; // 关闭T0中断

EX0 = 0; // 关闭外部中断0

int0_count = 0;

t_count = 0;

}

else

TR0 = 1; // 启动T0计数

}

/* 外部中断0服务子程序 */

void int0() interrupt 0 using 1

{

if (int0_count==0)

{

TH0 = -5000/256; // 5ms定时

TL0 = -5000%256;

TR0 = 1; // 启动定时/计数器0计数

t_count = 0; // 产生定时器0中断的计数器清零

}

int0_count++;

}

/* 初始化 */

void init()

{

EA = 1; // 打开CPU中断

PT0 = 1; // T0中断设为高优先级

TMOD = 0x01; // 模式1,T0为16位定时/计数器

ET0 = 1; // 打开T0中断

IT0 = 1; // 外部中断0设为边沿触发

EX0 = 1; // 打开外部中断0

GATE = 1; // 光耦正常输出电压

BP = 1; // 关闭蜂鸣器

int0_count = 0; // 产生外部中断0的计数器清零

}

void main()

{

/* 调用初始化函数 */

init();

/* 无限循环 */

while(1);

}

版权声明:aysz01 发表于 2024-05-08 15:12:52。
转载请注明:基于MAX1898的智能充电器设计 | 电工学习网

暂无评论

暂无评论...