Explorar o código

force serise when battery full

Signed-off-by: FuangCao <cavan.cao@foxmail.com>
FuangCao %!s(int64=5) %!d(string=hai) anos
pai
achega
b1c0e757a0
Modificáronse 9 ficheiros con 82 adicións e 65 borrados
  1. 1 1
      Project/version.txt
  2. 10 6
      Source/app.c
  3. 3 10
      Source/app_end_ctr.c
  4. 1 1
      Source/app_rs485_1.c
  5. 16 16
      Source/delay.c
  6. 12 4
      Source/delay.h
  7. 29 21
      Source/shark_charge.c
  8. 9 5
      Source/shark_charge.h
  9. 1 1
      Source/sw_build_info.h

+ 1 - 1
Project/version.txt

@@ -1 +1 @@
-PS100XX_V11_11210046
+PS100XX_V11_11211314

+ 10 - 6
Source/app.c

@@ -99,8 +99,8 @@ uint8_t Check_Battery_2_On(void)
 
 shark_bool battery_wait_voltage_parallel(void)
 {
-	u64 time1 = shark_get_time() + 1000;
-	u64 time2 = shark_get_time() + 5000;
+	u64 time1 = shark_get_mseconds() + 1000;
+	u64 time2 = shark_get_mseconds() + 5000;
 	u32 voltage_min, voltage_max;
 
 	if (sub_bms_info_1.connected == CONFIG_UART_GOOD) {
@@ -151,7 +151,7 @@ shark_bool battery_wait_voltage_parallel(void)
 
 shark_bool battery_wait_voltage_series(u32 voltage_min)
 {
-	u64 time = shark_get_time() + 1000;
+	u64 time = shark_get_mseconds() + 1000;
 
 	if (sub_bms_info_1.connected != CONFIG_UART_GOOD) {
 		return shark_false;
@@ -191,6 +191,7 @@ static u8 shark_battery_switch_series(void)
 		return CB_BAT_NO;
 	}
 
+	shark_charger_set_enable(shark_false);
 	shark_bms_set_mos_series();
 
 	if (!battery_wait_voltage_series(voltage1 + (voltage2 / 3))) {
@@ -268,7 +269,7 @@ static u8 shark_battery_switch_single(void)
 {
 	u32 voltage1 = shark_battery_get_voltage1();
 	u32 voltage2 = shark_battery_get_voltage2();
-	u64 time = shark_get_time() + 500;
+	u64 time = shark_get_mseconds() + 500;
 	u32 open1 = 0;
 	u32 open2 = 0;
 
@@ -432,7 +433,10 @@ int8_t Battery_CB_Switch(uint8_t cb_operate)
 
 	sub_bms_info_1.exit_times = 0;
 	sub_bms_info_2.exit_times = 0;
-	shark_charger_set_enable(shark_true);
+
+	if (cb_operate_state != CB_BAT1_BAT2_SERIES) {
+		shark_charger_set_enable(shark_true);
+	}
 
 	println("switch: %d", cb_operate_state);
 
@@ -998,7 +1002,7 @@ void Intelligent_Management_Battery(void)
 	{
 		if(shark_charger_state != SHARK_CHG_REMOVE)
 		{
-			if (shark_charge_times < SHARK_CHG_TIME_SWITCH) {
+			if (shark_charge_get_time() < SHARK_CHG_TIME_SWITCH) {
 				return;
 			}
 

+ 3 - 10
Source/app_end_ctr.c

@@ -387,8 +387,8 @@ int8_t Rsp_Can_Ctr_CMD(CAN_FRAME*can_ctr_frame)
 			
 			buf[len++] = QD_switch_from;
 			buf[len++] = power_switch_from;
-			buf[len++] = (uint8_t)utc_seconds;
-			buf[len++] = (uint8_t)(utc_seconds >> 8);
+			buf[len++] = shark_seconds;
+			buf[len++] = shark_seconds >> 8;
 			
 			break;
 		case KEY_END_CTR_SWI_BAT:
@@ -508,10 +508,7 @@ int8_t Rsp_Can_Ctr_CMD(CAN_FRAME*can_ctr_frame)
 					break;
 				case 3:
 					shark_printf_enabled = buf[len];
-					if (shark_printf_enabled) {
-						println("log enabled");
-					}
-
+					println("seconds: %d, charge: %d", shark_get_seconds(), shark_charge_get_time());
 					buf[len++] = 0;
 					break;
 				case 4:
@@ -545,10 +542,6 @@ int8_t Rsp_Can_Ctr_CMD(CAN_FRAME*can_ctr_frame)
 					buf[len++] = shark_charger_state << 4 | shark_charger_enabled;
 					buf[len++] = sub_bms_info_1.packet_common.charge_flag << 4 | sub_bms_info_2.packet_common.charge_flag;
 					break;
-				case 8:
-					memcpy(buf + len, &shark_charge_times, sizeof(shark_charge_times));
-					len += sizeof(shark_charge_times);
-					break;
 				case 9:
 					memcpy(buf + len, &shark_mseconds, sizeof(shark_mseconds));
 					len += sizeof(shark_mseconds);

+ 1 - 1
Source/app_rs485_1.c

@@ -519,7 +519,7 @@ shark_bool shark_battery_check_power(SUB_BMS_INFO *info, shark_battery_power_t p
 
 static void shark_battery_serial_wait_ready(void)
 {
-	u64 time = shark_get_time() + 200;
+	u64 time = shark_get_mseconds() + 200;
 
 	while (sub_bms_info_1.send_state == SHARK_SEND_PENDING && time > shark_get_time_safe());
 	while (sub_bms_info_2.send_state == SHARK_SEND_PENDING && time > shark_get_time_safe());

+ 16 - 16
Source/delay.c

@@ -18,12 +18,11 @@
 #include "shark_xl.h"
 #include "shark_charge.h"
 
-u64 shark_mseconds;
+shark_u64 shark_mseconds;
+shark_u32 shark_seconds;
+shark_u16 shark_msecond;
 
-uint32_t utc_seconds = 1505216210;// 2017/9/12  19:37:50
-uint16_t s_ms ;
-
-u64 shark_get_time_safe(void)
+shark_u64 shark_get_time_safe(void)
 {
 	u64 time = shark_mseconds;
 	shark_uart_poll_safe();
@@ -60,8 +59,6 @@ void systick_config(void)
 		while (1);
 	}
     NVIC_SetPriority(SysTick_IRQn, 0x00U);
-
-	s_ms = 0;
 }
 
 /*!
@@ -94,19 +91,22 @@ void delay_decrement(void)
 }
 #endif
 
+void shark_second_tick(void)
+{
+	Measure_Temprature_Delay();
+	Save_Param_Time_Out();
+}
+
 void SysTick_Handler(void)
 {
 	shark_mseconds++;
 
-	if(++s_ms >= 1000)
-	{
-		utc_seconds++;
-		s_ms = 0;
-
-		Measure_Temprature_Delay();
-
-		Save_Param_Time_Out();
-
+	if (shark_msecond < 1000) {
+		shark_msecond++;
+	} else {
+		shark_msecond = 0;
+		shark_seconds++;
+		shark_second_tick();
 	}
 
 	shark_uart_tick();

+ 12 - 4
Source/delay.h

@@ -1,21 +1,29 @@
 #ifndef __DELAY_H
 #define __DELAY_H 			   
 
-extern uint32_t utc_seconds;
-extern uint64_t shark_mseconds;
+#include "shark_types.h"
 
+extern shark_u64 shark_mseconds;
+extern shark_u32 shark_seconds;
+extern shark_u16 shark_msecond;
 
 void systick_close(void);
 void systick_config(void);
 void delay_1ms(uint32_t count);
 void delay_1us(uint16_t cnt);
-uint64_t shark_get_time_safe(void);
 
-static inline uint64_t shark_get_time(void)
+shark_u64 shark_get_time_safe(void);
+
+static inline shark_u64 shark_get_mseconds(void)
 {
 	return shark_mseconds;
 }
 
+static inline shark_u32 shark_get_seconds(void)
+{
+	return shark_seconds;
+}
+
 #endif
 
 

+ 29 - 21
Source/shark_charge.c

@@ -7,7 +7,7 @@ shark_charger_state_t shark_charger_state;
 shark_bool shark_charger_enabled;
 shark_bool shark_charger_valid;
 shark_bool shark_battery_full;
-shark_u16 shark_charge_times;
+shark_u32 shark_charge_time;
 shark_u16 shark_charge_skip;
 
 static shark_u16 shark_charger_remove;
@@ -86,8 +86,8 @@ void shark_charger_set_enable(shark_bool enable)
 
 	if (enable) {
 		println("charger enable");
+		shark_charge_time = shark_get_seconds();
 		gpio_bit_set(GPIO_PORT_CHG_EN, GPIO_PIN_CHG_EN);
-		shark_charge_times = 0;
 	} else {
 		println("charger disable");
 		gpio_bit_reset(GPIO_PORT_CHG_EN, GPIO_PIN_CHG_EN);
@@ -99,7 +99,7 @@ void shark_charger_set_enable(shark_bool enable)
 
 void shark_charger_disable(void)
 {
-	if (shark_charge_times > SHARK_CHG_TIME_DETECT || shark_charger_valid) {
+	if (shark_charge_get_time() > SHARK_CHG_TIME_DETECT || shark_charger_valid) {
 		println("charger detect");
 		shark_charger_insert = 0;
 		shark_charge_skip = 6000;
@@ -110,37 +110,45 @@ void shark_charger_disable(void)
 
 void shark_charge_tick(void)
 {
-	if (gpio_input_bit_get(GPIO_PORT_CHG_DET, GPIO_PIN_CHG_DET) == RESET) {
-		shark_charger_remove = 0;
+	if (gpio_input_bit_get(GPIO_PORT_CHG_DET, GPIO_PIN_CHG_DET) != RESET) {
+		if (shark_charger_remove < SHARK_CHG_REMOVE_MIN) {
+			if (shark_charger_insert > 0) {
+				println("insert: %d", shark_charger_insert);
+				shark_charger_insert = 0;
+			}
+
+			shark_charge_skip = 0;
+			shark_charger_remove++;
 
-		if (shark_charger_insert > SHARK_CHG_INSERT_MIN) {
-			if (shark_charger_enabled && shark_charge_times < SHARK_CHG_TIME_MAX) {
-				shark_charge_times++;
+			if (shark_charger_remove == SHARK_CHG_REMOVE_MIN) {
+				shark_charger_state = SHARK_CHG_REMOVE;
+				shark_battery_full = shark_false;
+				println("charger remove");
 			}
+		}
+	} else if (shark_charger_insert < SHARK_CHG_INSERT_MIN) {
+		if (shark_charger_remove > 0) {
+			println("remove: %d", shark_charger_remove);
+			shark_charger_remove = 0;
+		}
 
-		} else if (shark_charge_skip > 0) {
+		if (shark_charge_skip > 0) {
 			shark_charge_skip--;
 		} else {
 			shark_charger_insert++;
 
-			if (shark_charger_insert > SHARK_CHG_INSERT_MIN) {
-				if (shark_battery_charge_full() || shark_xl_check_with_qd()) {
+			if (shark_charger_insert == SHARK_CHG_INSERT_MIN) {
+				if (shark_xl_check()) {
+					shark_charger_set_poll();
+				} else if (shark_battery_charge_full()) {
 					shark_charger_set_poll();
+					shark_battery_series_locked = shark_false;
 				} else {
 					shark_charger_state = SHARK_CHG_INSERT;
+					println("charger insert");
 				}
 			}
 		}
-	} else {
-		shark_charger_insert = 0;
-		shark_charge_skip = 0;
-
-		if (shark_charger_remove > SHARK_CHG_REMOVE_MIN) {
-			shark_charger_state = SHARK_CHG_REMOVE;
-			shark_battery_full = shark_false;
-		} else {
-			shark_charger_remove++;
-		}
 	}
 }
 

+ 9 - 5
Source/shark_charge.h

@@ -3,12 +3,11 @@
 #include "shark_types.h"
 #include "common.h"
 
-#define SHARK_CHG_TIME_DETECT		10000
-#define SHARK_CHG_TIME_SWITCH		12000
-#define SHARK_CHG_TIME_MAX			60000
+#define SHARK_CHG_TIME_DETECT		10
+#define SHARK_CHG_TIME_SWITCH		12
 
 #define SHARK_CHG_INSERT_MIN		50
-#define SHARK_CHG_REMOVE_MIN		1500
+#define SHARK_CHG_REMOVE_MIN		2000
 
 #define GPIO_PORT_CHG_DET			GPIOC
 #define GPIO_PIN_CHG_DET			GPIO_PIN_4
@@ -32,7 +31,7 @@ extern shark_charger_state_t shark_charger_state;
 extern shark_bool shark_charger_enabled;
 extern shark_bool shark_charger_valid;
 extern shark_bool shark_battery_full;
-extern shark_u16 shark_charge_times;
+extern shark_u32 shark_charge_time;
 
 void shark_charger_set_enable(shark_bool enable);
 shark_bool shark_battery_charge_full(void);
@@ -44,3 +43,8 @@ void shark_charge_tick(void);
 void shark_charge_poll(void);
 void shark_charge_isr(void);
 
+static inline shark_u32 shark_charge_get_time(void)
+{
+	return shark_get_seconds() - shark_charge_time;
+}
+

+ 1 - 1
Source/sw_build_info.h

@@ -1,3 +1,3 @@
 #pragma once
 
-#define CONFIG_VERSION "PS100XX_V11_11210046"
+#define CONFIG_VERSION "PS100XX_V11_11211314"