Просмотр исходного кода

Merge remote-tracking branch 'origin/master' into fast_discharger

huhui 3 лет назад
Родитель
Сommit
22027b6a04
3 измененных файлов с 26 добавлено и 9 удалено
  1. 11 0
      Application/app/bms_message.c
  2. 1 0
      Application/app/protocol.h
  3. 14 9
      Application/app/sox/soc.c

+ 11 - 0
Application/app/bms_message.c

@@ -276,6 +276,17 @@ void process_bms_message(can_frame_t *frame, int len){
 			protocol_send_bms_info(frame->head.can_addr, frame->key, event, sizeof(event_record_t) * num + 1);
 			break;
 		}
+		case CAN_KEY_POWERDOWN: {
+			if (len < 4) {
+				return;
+			}
+			/*magic 0xFF005AA5*/
+			if (frame->data[0] == 0xA5 && frame->data[1] == 0x5A && frame->data[2] == 0x00 && frame->data[3] == 0xFF) {
+				bms_work_mode_set(WORK_MODE_PCBA_TEST, 1);
+				system_power_down();
+			}
+			break;
+		}
 		default:
 			break;
 	}

+ 1 - 0
Application/app/protocol.h

@@ -163,6 +163,7 @@ typedef struct {
 
 #define CAN_KEY_GET_EVENT 0xac /*»ñȡʼþÐÅÏ¢*/
 
+#define CAN_KEY_POWERDOWN 0xad /* power down, magic:0xFF005AA5*/
 
 #define CAN_KEY_IAP_ENTER   0xF0
 #define CAN_KEY_IAP_BEGIN   0xF1

+ 14 - 9
Application/app/sox/soc.c

@@ -398,27 +398,32 @@ static int _soc_update_by_ocv(uint8_t prev_charge_status){
 			return 1;
 		}	
 	}
-	if (chargering || prev_charge_status) {
-		if (chargering && (_soc.capacity != 100)) { 
-			if (bms_health()->sigle_cell_over_voltage && _is_normal_charging()) { //单电芯过压强制充满
+	if ((chargering || prev_charge_status) && (_soc.capacity != 100)) {
+		if (chargering) { 
+			if (bms_health()->sigle_cell_over_voltage) { //单电芯过压强制充满
 				_force_capacity_full();
 				push_event(Charger_Full, bms_state_get()->pack_voltage);
 				ocv_full_count = 0;
 				changed = 1;
-			}else if (bms_state_get()->pack_voltage >= (FULL_MAX_VOLTAGE_CHARGING) && _is_normal_charging()){
-				if (ocv_full_count++ >= 100) { //连续100次(电流采集25(小于4A)或者5ms一次)电压和电流满足条件,强制充满
+			}else if (bms_state_get()->pack_voltage >= (FULL_MAX_VOLTAGE_CHARGING)){
+				if (ocv_full_count++ >= CELLS_NUM) { //连续100次(电流采集25(小于4A)或者5ms一次)电压和电流满足条件,强制充满
 					_force_capacity_full();
-					push_event(Charger_Full, 4);
+					push_event(Charger_Full, bms_state_get()->pack_voltage);
 					ocv_full_count = 0;
 					changed = 1;
 				}
+			}else if (bms_state_get()->pack_voltage >= FULL_MAX_VOLTAGE) {
+				_force_capacity_full();
+				push_event(Charger_Full, bms_state_get()->pack_voltage);
+				ocv_full_count = 0;
+				changed = 1;
 			}else {
 				ocv_full_count = 0;
 			}
-		} else if (!chargering && prev_charge_status && (_soc.capacity != 100)){
+		} else if (prev_charge_status){
 			if ((bms_state_get()->pack_voltage >= FULL_MAX_VOLTAGE_STOP_CHARGING) && _is_normal_charging()){//充电容量几乎接近最大容量
 				_force_capacity_full();
-				push_event(Charger_Full, 5);
+				push_event(Charger_Full, 1);
 				changed = 1;
 			}
 		}
@@ -444,7 +449,7 @@ static void soc_calibrate(uint8_t prev_charge_status){
 						push_event(Charger_Full, 13);
 					}
 				}else {
-					if ((bms_state_get()->pack_voltage >= FULL_MAX_VOLTAGE_CHARGING) && _is_normal_charging()){
+					if ((bms_state_get()->pack_voltage >= FULL_MAX_VOLTAGE_CHARGING)){
 						_force_capacity_full();
 						push_event(Charger_Full, 10);
 					}else if (bms_health()->sigle_cell_over_voltage) {