合泰单片机智能充电器主程序HT46R47main.docx
- 文档编号:29333867
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:17
- 大小:16.48KB
合泰单片机智能充电器主程序HT46R47main.docx
《合泰单片机智能充电器主程序HT46R47main.docx》由会员分享,可在线阅读,更多相关《合泰单片机智能充电器主程序HT46R47main.docx(17页珍藏版)》请在冰豆网上搜索。
合泰单片机智能充电器主程序HT46R47main
#include"HT46R47-H.h"
//---------------def-----------------------
//pa
#define_pac0_13_0
#define_pac1_13_1
#define_pac2_13_2
#define_pac3_13_3
#define_pac4_13_4
#define_pac5_13_5
#define_pac6_13_6
#define_pac7_13_7
//pb
#define_pbc0_15_0
#define_pbc1_15_1
#define_pbc2_15_2
#define_pbc3_15_3
//pd
#define_pdc0_19_0
#defineCN_DOWN_pa1
#defineJM_pa4
#defineLED_GREEN_pa5
#defineLED_RED_pa6
#defineFAN_pa7
#definePWM_IO_pd0
#defineC_SAMP0x00
#defineBT_SAMP0x01
#defineV_SAMP0x02
#defineTIM_PRE7200//pre2H-7200
#defineTIM_NOML43920//CC/CV12.2H=13H
#defineOVER_VOLTAGE0x0c5//43.57V
#defineLOW_VOLTAGE0x068//24V0x06b
//#defineOVER_CURRENT0x0062//3.9A10.5A
#definePRE_CHARGER0x088//30V
#defineFULL_DOWN_V0x0b5//40V
#defineFULL_CURRENT0x05f//0.2A
#defineN20C_NTC0x0ec//-20度
#define_0C_NTC0x0d7//0度
#define_45C_NTC0x089//45度0x07e
//---------------var-----------------------
unsignedintadcvalue;
unsignedintI_by;
unsignedcharchargermode;
unsignedcharT_Mode;//Tmode
unsignedintChargingTimeValue;//
bitStartTimeFlg;
bitChargingT_OverFlg;
unsignedcharTcount;
unsignedcharSecondCnt;
bitUnLoad;
bitStart_5S;
bitFlg_5S;
unsignedcharCnt5s;//5seconds
//---------------exfuction----------------
externunsignedintADCStart(unsignedcharchanl);
//delay1msFsys=4Mhz实测1ms
voidDelay1ms(void)
{
unsignedintva;
for(va=0;va<60;va++)
{;}
}
//delayNms
voidDelayNms(unsignedintms)
{
unsignedintvb;
for(vb=0;vb { Delay1ms(); } } //---------------------------------------------- //上电自校准电压IV //自校电压是否在空载范围内 voids1_VI(void) { while (1) { adcvalue=ADCStart(V_SAMP);//voltage if(((adcvalue<0x01ff)||(adcvalue==0x01ff))&&((adcvalue>0x0000)||(adcvalue==0x0000))) { break; } } } //------------------------------------------------ //校正OP电流否正常,条件打开0.05A校正电流 //实测I-VOP放大电压,0x00744.2A=0X0141【0X0141-0X0074=D205, //4200/205=20.5mA/位AD voids1_VI1(void) { while (1) { adcvalue=ADCStart(C_SAMP);//current if(((adcvalue<0x01ff)||(adcvalue==0x01ff))&&((adcvalue>0x0000)||(adcvalue==0x0000))) { I_by=adcvalue; break; } } } //systeminitial voidSYS_Inital(void) { //IOport-------------- CN_DOWN=0; JM=0; FAN=0; PWM_IO=0; LED_GREEN=0; LED_RED=1; _pb3=0; _pac1=0; _pac4=0; _pac7=0; _pdc0=0; _pac5=0; _pac6=0; _pbc0=1; _pbc1=1; _pbc2=1; _pbc3=0; //var---------------------- chargermode=0x01; Tcount=0; SecondCnt=0; //Timer------------------- _tmrc=0x87;//timermodeFtimer=Fsys/128Fsys=4MTtimer=32us _tmr=(256-250);//32*250=8ms //PWM--------------------- _pwm=0xfc;//setpwmdutycycle //voltagecurrentjustself----- s1_VI(); DelayNms(1000); s1_VI1(); } //---------------------相关保护 voidToPretect(void) { //---------------短路保护 //---------------低压保护 /* adcvalue=ADCStart(V_SAMP);//voltage if(adcvalue<=LOW_VOLTAGE)//Lowvoltage { adcvalue=ADCStart(C_SAMP);//current if(adcvalue>20) { PWM_IO=0; JM=0; chargermode=0x05;//error return; } } */ //---------------过压保护 if(adcvalue>=OVER_VOLTAGE)//overvoltage { PWM_IO=0; JM=0; chargermode=0x05;//error return; } //---------------过流保护 /* adcvalue=ADCStart(C_SAMP);//current if(adcvalue>=OVER_CURRENT)//overcurrent { PWM_IO=0; JM=0; chargermode=0x05;//error return; } */ } //------------------main----------- voidmain() { SYS_Inital(); _intc=0x05;//EMIETIenable _ton=1;//starttimer while (1) { switch(chargermode) { case0x01: //start T_Mode=chargermode; ChargingTimeValue=0; StartTimeFlg=0; ChargingT_OverFlg=0; FAN=0; LED_GREEN=0; LED_RED=1; DelayNms(1000); adcvalue=ADCStart(V_SAMP);//voltage if((adcvalue>=OVER_VOLTAGE))//&&(adcvalue>=LOW_VOLTAGE)//overorlowvoltage { JM=0; chargermode=0x05;//error break; } else { //adcvalue=ADCStart(BT_SAMP);//Btemp //if(adcvalue<=N20C_NTC) //if(adcvalue>=LOW_VOLTAGE) //{ PWM_IO=0; JM=1; DelayNms(1000); adcvalue=ADCStart(C_SAMP);//Current if(adcvalue>=0x50) { //UnLoad=0; //Start_5S=0; //Cnt5s=0; //Flg_5S=0; //adcvalue=ADCStart(V_SAMP);//voltage //if(adcvalue<=PRE_CHARGER)//24 //{ PWM_IO=0; chargermode=0x02;//pre break; //} //else//V>30V-nor //{ //PWM_IO=1; //chargermode=0x03;//normal //break; //} } //} } break; case0x02: //PRE_CHARGER PWM_IO=0; JM=1; FAN=0; LED_GREEN=1; LED_RED=1; //-----------------------------------------//overtime if(T_Mode! =chargermode) { T_Mode=chargermode; ChargingTimeValue=TIM_PRE; StartTimeFlg=1; ChargingT_OverFlg=0; } if(ChargingT_OverFlg==1) { PWM_IO=0; JM=0; chargermode=0x05;//error break; } //----------低压,过压,过流,短路 ToPretect(); //----------BMSovertemp adcvalue=ADCStart(BT_SAMP);//Btemp if(((adcvalue>0xd7)||(adcvalue==0xd7))||((adcvalue<0x7f)||(adcvalue==0x7f))) { PWM_IO=0; JM=0; chargermode=0x05;//error break; } //----------pretoNormal adcvalue=ADCStart(V_SAMP);//voltage if(adcvalue>PRE_CHARGER)//>30V { PWM_IO=1; chargermode=0x03;//normal break; } //------------------------------batteryremove adcvalue=ADCStart(BT_SAMP);//batteryNTC if(adcvalue>=N20C_NTC)//nontc { PWM_IO=0; JM=0; chargermode=0x05;//standby break; } //--------------- adcvalue=ADCStart(V_SAMP);//voltage if(adcvalue<=0x16)//5V { adcvalue=ADCStart(C_SAMP);//current if(adcvalue>20) { JM=0; PWM_IO=0; chargermode=0x05;//error break; } } break; case0x03: //CC+CV PWM_IO=1; JM=1; FAN=1; LED_GREEN=1; LED_RED=1; //---------------------timer if(T_Mode! =chargermode) { T_Mode=chargermode; ChargingTimeValue=TIM_NOML; StartTimeFlg=1; ChargingT_OverFlg=0; } if(ChargingT_OverFlg==1) { PWM_IO=0; JM=0; chargermode=0x05;//error break; } //----------低压,过压,过流,短路 ToPretect(); //-----------------------------normaltoFULL adcvalue=ADCStart(V_SAMP);//voltage if(adcvalue>=FULL_DOWN_V)//>40V { adcvalue=ADCStart(C_SAMP);//current if(adcvalue<=(FULL_CURRENT))//getFULL { chargermode=0x04;//full break; } } //----------BMSovertemp adcvalue=ADCStart(BT_SAMP);//Btemp //0度-0xc245度-0x6b if(((adcvalue>0xdb)||(adcvalue==0xdb))||((adcvalue<0x82)||(adcvalue==0x82))) { PWM_IO=0; JM=0; chargermode=0x05;//error break; } //------------------normaltopre adcvalue=ADCStart(V_SAMP);//voltage if(adcvalue<(PRE_CHARGER-10))//PRE { chargermode=0x02;//pre break; } //------------------------------batteryremove adcvalue=ADCStart(BT_SAMP);//batteryNTC if(adcvalue>=N20C_NTC)//nontc { PWM_IO=0; JM=0; chargermode=0x05;//standby break; } //--------------- adcvalue=ADCStart(V_SAMP);//voltage if(adcvalue<=0x16)//5V { adcvalue=ADCStart(C_SAMP);//current if(adcvalue>20) { JM=0; PWM_IO=0; chargermode=0x05;//error break; } } break; case0x04: //FULL_DOWN T_Mode=chargermode; ChargingTimeValue=0;// StartTimeFlg=0; ChargingT_OverFlg=0; PWM_IO=0; JM=0; FAN=0; LED_GREEN=1; LED_RED=0; DelayNms(1000); adcvalue=ADCStart(V_SAMP);//voltage if(adcvalue>OVER_VOLTAGE)// { PWM_IO=0; JM=0; chargermode=0x05;//error break; } else { if(adcvalue<(LOW_VOLTAGE-20)) { PWM_IO=0; JM=0; chargermode=0x01;//standby break; } } break; case0x05: //error T_Mode=chargermode; ChargingTimeValue=0;// StartTimeFlg=0; ChargingT_OverFlg=0; PWM_IO=0; JM=0; FAN=0; LED_GREEN=0; LED_RED=1; DelayNms(1000); LED_GREEN=0; LED_RED=0; DelayNms(1000); break; default: break; } } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 智能 充电器 主程序 HT46R47main