Kaynağa Gözat

停止均衡需要确认成功

Signed-off-by: huhui <huhui@sharkgulf.com>
huhui 4 yıl önce
ebeveyn
işleme
9c6ce4b563

+ 2 - 3
Application/app/sox/state.c

@@ -631,9 +631,8 @@ static uint32_t get_balance_mask(uint8_t current_max_index){
 static void check_cell_balance(uint8_t current_max_index){
 static void check_cell_balance(uint8_t current_max_index){
 	if (!_bms_state.charging || (_bms_state.cell_max_vol >= SIGLE_CELL_MAX_CHARGER_VOLTAGE)){ //not charging, need not do balance
 	if (!_bms_state.charging || (_bms_state.cell_max_vol >= SIGLE_CELL_MAX_CHARGER_VOLTAGE)){ //not charging, need not do balance
 		if (_bms_state.pack_balancing){
 		if (_bms_state.pack_balancing){
-			_bms_state.pack_balancing = 0;
-			_cell_balance.count = 10;
-			ml5238_cell_start_balance(0);
+			debounce_reset(_cell_balance);
+			_bms_state.pack_balancing = ml5238_cell_start_balance(0);
 			shark_timer_cancel(&_balance_timer);
 			shark_timer_cancel(&_balance_timer);
 		}
 		}
 		return;
 		return;

+ 11 - 1
Application/bsp/ml5238.c

@@ -134,9 +134,19 @@ int ml5238_is_discharging(void){
 	return _discharger_mosfet_is_open();
 	return _discharger_mosfet_is_open();
 }
 }
 
 
-void ml5238_cell_start_balance(uint16_t balance_mask){
+int ml5238_cell_start_balance(uint16_t balance_mask){
 	ml5238_write(ML5238_CBALH, (balance_mask >> 8) & 0xFF);
 	ml5238_write(ML5238_CBALH, (balance_mask >> 8) & 0xFF);
 	ml5238_write(ML5238_CBALL, balance_mask & 0xFF);
 	ml5238_write(ML5238_CBALL, balance_mask & 0xFF);
+	if (balance_mask == 0) { //stop balance need check
+		uint8_t datah = 0xFF;
+		uint8_t datal = 0xFF;
+		if ((ml5238_read(ML5238_CBALH, &datah) == 0) && (ml5238_read(ML5238_CBALL, &datal) == 0)) {
+			if ((datah == 0) && (datal == 0)) {
+				return 0;
+			}
+		}
+	}
+	return 1;
 }
 }
 
 
 
 

+ 1 - 1
Application/bsp/ml5238.h

@@ -8,7 +8,7 @@ int ml5238_enable_charger_mosfet(int enable);
 int ml5238_short_current_detect(int mode);
 int ml5238_short_current_detect(int mode);
 int ml5238_is_load_disconnect(void);
 int ml5238_is_load_disconnect(void);
 int ml5238_enable_load_detect(int enable);
 int ml5238_enable_load_detect(int enable);
-void ml5238_cell_start_balance(uint16_t balance_mask);
+int ml5238_cell_start_balance(uint16_t balance_mask);
 void ml5238_power_down(void);
 void ml5238_power_down(void);
 void ml5238_power_save(int save);
 void ml5238_power_save(int save);
 int ml5238_charger_is_disconnect(int small_current_on);
 int ml5238_charger_is_disconnect(int small_current_on);