- /*
- CH4226
- 電池包充電控制程序
- 2017/03/11
- */
- //頭文件
- #include <hic.h>
- //全局變量
- unsigned char Cnt @0x3f;
- unsigned int ADV; //AD監測輸出電壓值
- unsigned int ADI; //AD監測輸出電流值
- unsigned char COUNT;
- //標志位聲明
- sbit t400ms_fg;
- //函數聲明
- void delay(unsigned int n);
- unsigned int GetADC(unsigned char chl);
- void Sys_unit(void);
- //宏定義
- #define CLRWDT() __Asm CWDT
- //常量定義
- #define CurrentOpenLimit 60 //判定有充電電流限制值
- #define CurrentShutLimit 30 //判定沒有充電電流限制值
- #define StopChargeLimit 2770 //判定停止充電電壓限制值
- #define KongZaiLimit 2820 //判定進入空載限制值
- #define ChargeLimit 2730 //判定開始充電限制值
-
- void main()
- {
- unsigned char K0count,K1count,K2count,K3count,K4count,upcount,downcount; //狀態標志位定義
- Sys_unit(); //初始化
- PA5=1; //開機紅燈綠燈全滅
- PA4=1;
- PA1=0; //控制口置零
- delay(1000); //開機延時
- while(1)
- {
- ADV=GetADC(0); //將AD監測到的值
- ADI=GetADC(2);
-
-
- //判斷當前狀態
- ///*
- if( ADI > CurrentOpenLimit) //有充電電流
- {
- if((ADV-ADI)>StopChargeLimit) //且電池電壓超過停止充電電壓限制值,有電流時檢流電阻存在壓降進行補償,電阻1.1歐姆
- {
- PA1=1; //停止充電,綠燈亮,紅燈滅
- PA4=1;
- PA5=0;
- }
- else //且電池電壓沒有超過停止充電電壓限制值
- {
- PA1=0; //紅燈亮,不停止充電
- PA4=0;
- PA5=1;
- }
- }
- else if(ADI < CurrentShutLimit) //無充電電流
- {
- if(ADV > KongZaiLimit) //且電池電壓達到空載限定值,判定進入空載
- {
- PA1=1; //停止充電,綠燈亮
- PA4=1;
- PA5=0;
- }
- else if(ADV<ChargeLimit) //且電池電壓小于開始充電電壓限定值
- {
- PA1=0; //開始充電,兩燈皆滅
- PA4=1;
- PA5=1;
- }
- }
- //*/
- while(t400ms_fg == 0) CLRWDT(); //每4ms一個循環
- t400ms_fg = 0;
-
- }}
復制代碼
|