基于MAX1898的智能充電器設(shè)計(jì)
單片機(jī)在控制方面不僅可以在工業(yè)控制方面大展神通,如果用在控制一些很有意思的芯片方面也可以實(shí)現(xiàn)實(shí)用的功能。比如用單片機(jī)控制沖電芯片實(shí)現(xiàn)手機(jī)的智能充電器設(shè)計(jì),基于次參考有關(guān)資料學(xué)習(xí)了基于MAX1898的智能充電器設(shè)計(jì)。
主要器件:
1、 AT89C52單片機(jī)芯片,用于控制充電器芯片。
2、 可提供精確的恒流/恒壓充電,可對(duì)所有化學(xué)類型的Li+電池進(jìn)行安全充電的MAX1898。
3、 LM7805提供穩(wěn)定的+5v電壓。
試驗(yàn)流程圖:
試驗(yàn)電路圖:
試驗(yàn)程序代碼:
//BattCharger.h程序
#ifndef _BATTCHARGER_H // 防止BattCharger.h被重復(fù)引用
#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"
/* 定時(shí)器0中斷服務(wù)子程序 */
void timer0() interrupt 1 using 1
{
TR0 = 0; // 停止計(jì)數(shù)
TH0 = -5000/256; // 重設(shè)計(jì)數(shù)初值
TL0 = -5000%256;
t_count++;
if (t_count>600) // 第一次外部中斷0產(chǎn)生后3s
{
if (int0_count==1) // 還沒有出現(xiàn)第二次外部中斷0,則認(rèn)為充電完畢
{
GATE = 0; // 關(guān)閉充電電源
BP = 0; // 打開蜂鳴器報(bào)警
}
else // 否則即是充電出錯(cuò)
{
GATE = 1;
BP = 1;
}
ET0 = 0; // 關(guān)閉T0中斷
EX0 = 0; // 關(guān)閉外部中斷0
int0_count = 0;
t_count = 0;
}
else
TR0 = 1; // 啟動(dòng)T0計(jì)數(shù)
}
/* 外部中斷0服務(wù)子程序 */
void int0() interrupt 0 using 1
{
if (int0_count==0)
{
TH0 = -5000/256; // 5ms定時(shí)
TL0 = -5000%256;
TR0 = 1; // 啟動(dòng)定時(shí)/計(jì)數(shù)器0計(jì)數(shù)
t_count = 0; // 產(chǎn)生定時(shí)器0中斷的計(jì)數(shù)器清零
}
int0_count++;
}
/* 初始化 */
void init()
{
EA = 1; // 打開CPU中斷
PT0 = 1; // T0中斷設(shè)為高優(yōu)先級(jí)
TMOD = 0x01; // 模式1,T0為16位定時(shí)/計(jì)數(shù)器
ET0 = 1; // 打開T0中斷
IT0 = 1; // 外部中斷0設(shè)為邊沿觸發(fā)
EX0 = 1; // 打開外部中斷0
GATE = 1; // 光耦正常輸出電壓
BP = 1; // 關(guān)閉蜂鳴器
int0_count = 0; // 產(chǎn)生外部中斷0的計(jì)數(shù)器清零
}
void main()
{
/* 調(diào)用初始化函數(shù) */
init();
/* 無限循環(huán) */
while(1);
}