Bläddra i källkod

放电过程中,如果当前容量小于最小容量,并且还能继续放电,更新最小容量为当前容量

Signed-off-by: huhui <huhui@sharkgulf.com>
huhui 4 år sedan
förälder
incheckning
165576fc91
3 ändrade filer med 17 tillägg och 3 borttagningar
  1. 6 1
      Application/app/bms_message.c
  2. 2 0
      Application/app/protocol.h
  3. 9 2
      Application/app/sox/soc.c

+ 6 - 1
Application/app/bms_message.c

@@ -234,7 +234,12 @@ void process_bms_message(can_frame_t *frame, int len){
 			soc_restore_by_iap(nv->flags, nv->capacity);
 			protocol_send_ack(frame->head.can_addr, frame->key, 1);
 			break;
-		}
+			}
+		case CAN_KEY_MIN_SOC:
+			get_soc()->coulomb_min = (u32)frame->data[0] * 3600.0f;
+			nv_save_all_soc();
+			protocol_send_ack(frame->head.can_addr, frame->key, 1);
+			break;
 	}
 }
 

+ 2 - 0
Application/app/protocol.h

@@ -150,6 +150,8 @@ typedef struct {
 }restore_nv_cmd_t;
 #pragma pack(pop)
 
+#define CAN_KEY_MIN_SOC 0xab /*设置最小容量,测试使用*/
+
 #define CAN_KEY_IAP_ENTER   0xF0
 #define CAN_KEY_IAP_BEGIN   0xF1
 #define CAN_KEY_IAP_CHECK   0xF2

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

@@ -410,6 +410,12 @@ static void soc_update_by_current_and_time(float current_now, float delta_time,
 	double delta_q = current * delta_time; 
 	uint8_t est_capaticy = _soc.capacity;
 	int update_capticy = 0;
+
+	if (!chargering) {
+		soc_update_discharger_coeff();
+		delta_q = delta_q * _discharger_coefficient;
+	}
+	
 	double est_coulomb = _soc.coulomb_now + delta_q;//计算当前容量,充电加, 放电减
 
 	if (est_coulomb < 0){
@@ -427,9 +433,10 @@ static void soc_update_by_current_and_time(float current_now, float delta_time,
 			update_capticy = 1;
 		}
 	}else {
-		soc_update_discharger_coeff();
-		delta_q = delta_q * _discharger_coefficient;
 		_soc.dischrger_coulomb += abs(delta_q);
+		if (est_coulomb < _soc.coulomb_min) {
+			_soc.coulomb_min = est_coulomb;
+		}
 		if ((est_capaticy > 0) && (est_capaticy <= _soc.capacity)) {  //放电,容量不能等于0,需要靠欠压或者PowerDown 矫正到0
 			update_capticy = 1;
 		}