C51 COMPILER V9.01 BALANCE 02/13/2025 10:07:27 PAGE 1 C51 COMPILER V9.01, COMPILATION OF MODULE BALANCE OBJECT MODULE PLACED IN .\output\Balance.obj COMPILER INVOKED BY: D:\Tool\Keil\C51\BIN\C51.EXE code_drv\Balance.c LARGE OPTIMIZE(7,SIZE) REGFILE(.\output\MCUCore_Loa -d.ORC) BROWSE INTVECTOR(0X1000) INCDIR(.\header_app;.\header_drv;.\code_gasguage;.\code_classb\iec60730_lib\include;.\co -de_classb\iec60730_proc\Include;.\code_classb\config) DEBUG OBJECTEXTEND PRINT(.\output\Balance.lst) OBJECT(.\output\Bal -ance.obj) line level source 1 /******************************************************************************** 2 Copyright (C), Sinowealth Electronic. Ltd. 3 Author: Sino 4 Version: V0.0 5 Date: 2020/04/26 6 History: 7 V2.0 2020/04/26 Preliminary 8 ********************************************************************************/ 9 #include "Main.h" 10 11 12 BOOL bBalanceFlg; 13 BOOL bBalancingFlg; 14 BOOL bBalanceOddFlg; 15 BOOL bCTOValidFlg; //µ±µçоѹ²î³¬¹ý1200mVʱ£¬²ÅÈÏΪ´æÔÚ¶ÏÏߣ¬Ö÷Òª -½â¾öµçоµçѹµÍÓÚ2VÇé¿öÏ 16 BOOL bCellOpenDecFlag; 17 U16 xdata uiBalanceChannel; 18 U8 xdata ucBalanceTimeCnt; 19 U8 xdata ucBalanceStep; 20 U8 xdata ucCellOpenDecCnt; 21 U8 xdata ucCtoCnt; 22 23 /************************************************************************************************* 24 * º¯ÊýÃû: BalTurnOnCheck 25 * ²Î Êý: ÎÞ 26 * ·µ»ØÖµ: ÎÞ 27 * Ãè Êö: 28 1. ƽºâ¿ªÆôÌõ¼þÊǵçѹ¡¢Ñ¹²î¼°µçÁ÷ ͬʱÂú×ã 29 2. ƽºâ¹ý³ÌÖУ¬²»ÔÙ½øÐÐƽºâ¼ì²â 30 3. ¶ÏÏß¼ì²â½èÓÃƽºâ 31 *************************************************************************************************/ 32 void BalTurnOnCheck(void) 33 { 34 1 U8 i; 35 1 36 1 if(!bBalancingFlg && !bCellOpenDecFlag) //ÔÚÒ»¸öƽºâÖÜÆÚÖлò¿ªÆô¶ÏÏß¼ì²âʱ²»Åж¨ÊÇ·ñ½øÐÐÆ -½ºâ 37 1 { 38 2 if(bBAL_EN) 39 2 { 40 3 uiBalanceChannel = 0; 41 3 if(((uiCellVmax>E2uiOVvol)&&(!bOV)) //·¢Éúζȱ£»¤Ê±²»½øÐÐƽºâ,Åж¨½øÈë¹ýѹ¡¢¹ýѹ»Ö¸´¡¢½ -øÈë³äµç½ØֹʱÔÝͣƽºâ 42 3 ||((uiCellVmax < E2uiOVRvol)&&(bOV)) 43 3 || bOTC || bUTC || bOTD || bUTD) 44 3 { 45 4 bBalanceFlg = 0; 46 4 ucBalanceTimeCnt = 0; 47 4 } 48 3 else 49 3 { C51 COMPILER V9.01 BALANCE 02/13/2025 10:07:27 PAGE 2 50 4 if(((uiCellVmax>E2uiBalanceVol) && (uiCellVmax-uiCellVmin)>=E2uiBalanceVolDiff) && (Info.slCurr>=E2 -siBalCurrent)) 51 4 { 52 5 if(!bBalanceFlg) 53 5 { 54 6 ucBalanceTimeCnt++; 55 6 } 56 5 if(ucBalanceTimeCnt >= BAL_DELAY_CNT) 57 5 { 58 6 for(i=ucCellNumOffset; i=E2uiBalanceVolDiff)&&(Info.uiVCell[i]>=E2uiBalanceVol)) //µçо -µçѹ´óÓÚƽºâµçѹ£¬ÇÒѹ²î´óÓÚãÐÖµ£¬¿ªÆô¸Ãµçоƽºâ 61 7 { 62 8 uiBalanceChannel |= (1<= TIME_50MS_500MS) //¶ÏÏß 500mS 101 5 { 102 6 bCTO = 1; 103 6 } 104 5 } 105 4 else 106 4 { 107 5 bCTOValidFlg = 0; 108 5 ucCtoCnt = 0; 109 5 } C51 COMPILER V9.01 BALANCE 02/13/2025 10:07:27 PAGE 3 110 4 } 111 3 } 112 2 #ifdef SP_CTO_RECOVER else //¶ÏÏ߻ָ´¹¦ÄÜ£¬Ã¿250mSÒ»¸öÖÜÆÚÅжÏ×îСµçѹ { if(uiVadcVmin >= VOL_CELL_CUT_180MV) //180mV { if(++ucCtoRCnt >= TIME_250MS_1S) { bCTO = 0; } } else { ucCtoRCnt = 0; } } #endif 128 2 } 129 1 130 1 return bResult; 131 1 } 132 133 134 /************************************************************************************************* 135 * º¯ÊýÃû: BalProcess 136 * ²Î Êý: ÎÞ 137 * ·µ»ØÖµ: ÎÞ 138 * Ãè Êö: 139 1. ƽºâÖÜÆÚ·ÖΪ5¸öSTEP£¬ºÏ¼Æ250mS 140 2. ƽºâЧÂÊ<100/(250mS*2)(²ÉÓÃÆæżƽºâ) 141 3. Èç¹û¼ì²âµ½¶ÏÏߣ¬Ôò³ÖÐø¿ªÆôƽºâ½øÐжÏÏß¼ì²â 142 4. ƽºâ¿ªÆôºó£¬Õý³£µÄµçѹ±£»¤ÅжÏÑÓʱ¿ÉÄÜ»á¶àÑÓʱ250mS(Ò»¸öƽºâÖÜÆÚ) 143 *************************************************************************************************/ 144 void BalProcess(void) 145 { 146 1 U16 BalChTemp; 147 1 148 1 //Åжϵçоµçѹѹ²îÊÇ·ñ³¬¹ý1.2V£¬Èç¹û³¬¹ýÔòÔÊÐíÅж϶ÏÏߣ¬Ö÷Òª½â¾öµçоµçѹ<2VÇé¿öÏÂƽºâ»á´¥·¢¶ÏÏßÅжÏÌõ¼þ 149 1 //Åжϵçо×î´óµçѹÊÇ·ñСÓÚ1.38V£¬Èç¹ûСÓÚÔòÔÊÐíÅж϶ÏÏߣ¬Ö÷Òª½â¾öδÓÐЧ¼ì²âµçоµçѹµÄÇé¿öÏÂѹ²î²»Âú×ã¶ÏÏßÅ -жÏÌõ¼þ 150 1 if((uiCellVmax-uiCellVmin>=VOL_CELL_CUT_1200MV) || (uiCellVmax<=VOL_CELL_CUT_1380MV)) 151 1 { 152 2 bCTOValidFlg = 1; 153 2 } 154 1 155 1 switch(ucBalanceStep) 156 1 { 157 2 case BALANCE_ENABLE: //VADC²É¼¯µÄÊý¾ÝÓÃÓÚÕý³£µçѹÅÐ¶Ï 158 2 if(bCellOpenDecFlag || bBalanceFlg) 159 2 { 160 3 if(bBalanceOddFlg) //odd balance 161 3 { 162 4 BalChTemp = uiBalanceChannel&0x5555; 163 4 } 164 3 else //even balance 165 3 { 166 4 BalChTemp = uiBalanceChannel&0xAAAA; 167 4 } 168 3 AfeBalCtl(BalChTemp); //¿ªÆôƽºâ 169 3 ucBalanceStep = BALANCE_START; 170 3 bBalancingFlg = 1; C51 COMPILER V9.01 BALANCE 02/13/2025 10:07:27 PAGE 4 171 3 } 172 2 break; 173 2 174 2 case BALANCE_START: //VADC²É¼¯µÄµçѹÊý¾Ý¶ªµô 175 2 ucBalanceStep = BALANCING; 176 2 break; 177 2 178 2 case BALANCING: //VADC²É¼¯µÄµçѹÊý¾ÝÅж϶ÏÏß 179 2 if(!CTOCheckVol()) //Èç¹û·¢ÏÖÓжÏÏßÔòÁ¬Ðø¼ì²â¶ÏÏß 180 2 { 181 3 AfeBalCtl(0); //¹Ø±Õƽºâ 182 3 ucBalanceStep = BALANCE_DISABLE; 183 3 bBalanceOddFlg = ~bBalanceOddFlg; 184 3 } 185 2 break; 186 2 187 2 case BALANCE_DISABLE: //VADC²É¼¯µÄµçѹÊý¾Ý¶ªµô 188 2 if(!CTOCheckVol()) //Èç¹û·¢ÏÖÓжÏÏßÔòÁ¬Ðø¼ì²â¶ÏÏß 189 2 { 190 3 ucBalanceStep = BALANCE_NULL; 191 3 } 192 2 else 193 2 { 194 3 ucBalanceStep = BALANCE_ENABLE; 195 3 bBalanceOddFlg = ~bBalanceOddFlg; 196 3 } 197 2 break; 198 2 199 2 case BALANCE_NULL: //VADC²É¼¯µÄÊý¾ÝÓÃÓÚÕý³£µçѹÅÐ¶Ï 200 2 ucBalanceStep = BALANCE_ENABLE; 201 2 bCellOpenDecFlag = 0; 202 2 bBalanceFlg = 0; 203 2 bBalancingFlg = 0; 204 2 break; 205 2 } 206 1 } 207 208 209 /************************************************************************************************* 210 * º¯ÊýÃû: CellOpenProcess 211 * ²Î Êý: ÎÞ 212 * ·µ»ØÖµ: ÎÞ 213 * Ãè Êö: ÿ2S¿ªÆôÒ»´Î¶ÏÏß¼ì²â 214 *************************************************************************************************/ 215 void CTOTurnOnCheck(void) 216 { 217 1 #ifdef SP_CTO_RECOVER if(bCTO_EN) //Ö§³Ö¶ÏÏ߻ָ´ #else 220 1 if(bCTO_EN && !bCTO) //Èç¹ûÒÑ·¢Éú¶ÏÏßÔò²»¼ì²â 221 1 #endif 222 1 { 223 2 if(++ucCellOpenDecCnt >= TIME_50MS_2250MS) //2S 224 2 { 225 3 ucCellOpenDecCnt = TIME_50MS_2250MS; //±ÜÃâ¸Ã¼ì²âÖÜÆÚÊÇƽºâµÄżÊý±¶¹Øϵ 226 3 if(!bBalancingFlg) //Èç¹ûÕýÔÚƽºâ£¬ÔòµÈÒ»¸öƽºâÖÜÆÚ½áÊøºóÔÙ¿ªÆô¶ÏÏß¼ì²â 227 3 { 228 4 ucCellOpenDecCnt = 0; 229 4 bCellOpenDecFlag = 1; 230 4 uiBalanceChannel = 0x03ff; 231 4 } 232 3 } C51 COMPILER V9.01 BALANCE 02/13/2025 10:07:27 PAGE 5 233 2 } 234 1 } 235 236 /************************************************************************************************* 237 * º¯ÊýÃû: BalanceProcess 238 * ²Î Êý: ÎÞ 239 * ·µ»ØÖµ: ÎÞ 240 * Ãè Êö: ƽºâÓë¶ÏÏß¼ì²â´¦Àí 241 *************************************************************************************************/ 242 void BalanceProcess(void) 243 { 244 1 BalTurnOnCheck(); //¼ì²âÊÇ·ñÂú×ãƽºâ¿ªÆôÌõ¼þ 245 1 246 1 CTOTurnOnCheck(); //¶¨Ê±¿ªÆô¶ÏÏß¼ì²â 247 1 248 1 BalProcess(); //´¦ÀíƽºâºÍ¶ÏÏßʱÐò 249 1 } 250 251 252 253 MODULE INFORMATION: STATIC OVERLAYABLE CODE SIZE = 611 ---- CONSTANT SIZE = ---- ---- XDATA SIZE = 6 2 PDATA SIZE = ---- ---- DATA SIZE = ---- ---- IDATA SIZE = ---- ---- BIT SIZE = 5 1 END OF MODULE INFORMATION. C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)