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

update acc2 logic

Signed-off-by: FuangCao <cavan.cao@foxmail.com>
FuangCao 5 лет назад
Родитель
Сommit
ceae8a28ea
7 измененных файлов с 57 добавлено и 162 удалено
  1. 1 1
      Project/version.txt
  2. 0 8
      Source/app.c
  3. 3 74
      Source/app_end_ctr.c
  4. 0 2
      Source/delay.c
  5. 46 74
      Source/drv_io.c
  6. 6 2
      Source/drv_io.h
  7. 1 1
      Source/sw_build_info.h

+ 1 - 1
Project/version.txt

@@ -1 +1 @@
-PS100XX_V01_11071600
+PS100XX_V01_11071816

+ 0 - 8
Source/app.c

@@ -101,14 +101,6 @@ uint8_t Check_Battery_2_On(void)
 	return 0;
 }
 
-uint8_t S11_May_Operate(void)
-{
-	if(cb_operate_state == CB_BAT2 || cb_operate_state == CB_BAT1_BAT2_PARRALLEL|| cb_operate_state == CB_BAT_NO)
-		return 1;
-	else
-		return 0;
-}
-
 shark_bool battery_wait_voltage_down(u32 voltage)
 {
 	u8 success = 0;

+ 3 - 74
Source/app_end_ctr.c

@@ -200,7 +200,7 @@ int8_t Handle_Can_Ctr_CMD(CAN_FRAME*can_ctr_frame)
 					case 1:
 						//QD_Enable(1);
 						QD_Enable_From(1,3);
-						if(ACC2_Is_On() == 0)
+						// if(ACC2_Is_On() == 0)
 							ACC2_Enable(1);
 						break;
 					default:
@@ -313,7 +313,7 @@ int8_t Handle_Can_Ctr_CMD(CAN_FRAME*can_ctr_frame)
 						}
 						break;
 					case 1:
-						if(ACC2_Is_On() == 0)
+						// if(ACC2_Is_On() == 0)
 							ACC2_Enable(1);		
 						break;
 					default:
@@ -340,7 +340,7 @@ int8_t Handle_Can_Ctr_CMD(CAN_FRAME*can_ctr_frame)
 					}
 					break;
 				case 1:
-					if(ACC2_Is_On() == 0)
+					// if(ACC2_Is_On() == 0)
 						ACC2_Enable(1);		
 					break;
 				default:
@@ -848,74 +848,3 @@ void End_Ctr_Self_Send_Timeout(void)
 		end_ctr_self_stimeout.count = 0;
 	
 }
-
-
-
-DELAY_COMMON acc12_delay;
-
-void ACC12_OVER_Loader_Timeout(void)
-{
-#if ACC2_USE_PWM
-	/*if(acc12_delay.set)
-	{
-		if(++acc12_delay.count >= 1)
-		{
-			memset(&acc12_delay,0x00,sizeof(acc12_delay));
-			gpio_bit_write(GPIOC,GPIO_PIN_15,(bit_status)0x01);
-		}
-	}*/
-#else
-
-	if(acc12_delay.set)
-	{
-	
-		if((acc12_delay.count&0x01UL) == 0)
-		{
-			if(ACC2_Over_Loader_Dect() == 1)
-			{
-				acc12_delay.set = 0;
-				acc12_delay.count = 0;
-				
-			}
-			else
-			{
-				//ACC2_Enable(0);
-				acc12_delay.count++;
-			}
-		}
-		else
-		{
-			//ACC2_Enable(1);
-			acc12_delay.count++;
-		}
-		
-
-	}
-#endif
-	
-} 
-
-void ACC12_OVER_Loader_Interrupt(void)
-{
-	if (end_ctr_self_ss_new.xl_sta != 0) {
-		QD_Enable(0);
-	}
-
-#if ACC2_USE_PWM
-	/*if(acc12_delay.set)
-			return;
-		
-	acc12_delay.set = 1;
-
-	acc12_delay.count = 0;
-	gpio_bit_write(GPIOC,GPIO_PIN_15,(bit_status)0x00);*/
-#else
-
-	if(acc12_delay.set)
-			return;
-		
-	acc12_delay.set = 1;
-
-	acc12_delay.count = 0;
-#endif		
-}

+ 0 - 2
Source/delay.c

@@ -112,8 +112,6 @@ void SysTick_Handler(void)
 
 	Uart2_Time_Out();
 
-	ACC12_OVER_Loader_Timeout();
-
 	if(sub_rs485_time_out_1.set)
 	{
 		if(++sub_rs485_time_out_1.count >= RS485_COM_TIMEOUT)

+ 46 - 74
Source/drv_io.c

@@ -11,7 +11,6 @@ DELAY_COMMON repair_dec_delay;
 DELAY_COMMON qd_dec_delay;
 DELAY_COMMON xl_dec_delay;
 DELAY_COMMON acc2_dec_delay;
-DELAY_COMMON acc2_delay;
 
 DELAY_COMMON left_light_delay;
 DELAY_COMMON right_light_delay;
@@ -29,47 +28,9 @@ uint32_t xl_count = 0;
 uint8_t battery_charged_full = 0;
 uint8_t QD_switch_from = 0;
 
-
-extern void S11_FL_On(uint8_t on);
-extern uint8_t S11_May_Operate(void);
-
-#if 0
-void Check_S11_May_Operate(void)
-{
-	if(QD_Dect() == 0 && ACC2_Is_On() == 0 && S11_May_Operate())
-		S11_FL_On(0);
-}
-void Check_S11(uint8_t on,uint8_t from)
-{
-	println("Check_S11: %d %d", on, from);
-
-	if(on)
-	{
-		if(S11_May_Operate())
-			S11_FL_On(1);
-			
-	}
-	else
-	{
-		if(S11_May_Operate())
-		{
-			switch(from)
-			{
-				case FROM_QD:
-					if(ACC2_Is_On() == 0)
-						S11_FL_On(0);	
-					break;
-				case FROM_ACC12:
-					if(QD_Dect() == 0)
-						S11_FL_On(0);	
-					break;
-				default:
-					return;
-			} 
-		}
-	}
-}
-#endif
+static shark_bool shark_bms_acc2_enabled;
+static u16 shark_bms_acc2_error_times;
+static u16 shark_bms_acc2_work_times;
 
 void QD_Enable_From(uint8_t on,uint8_t from)
 {
@@ -82,15 +43,12 @@ void QD_Enable_From(uint8_t on,uint8_t from)
 
 uint8_t ACC2_Is_On(void)
 {
-	if(acc2_delay.set == 0&&(gpio_output_bit_get(GPIOC,GPIO_PIN_15) == 0|ACC2_Over_Loader_Dect()== 0))
-		return 0;
-	else
-		return 1;
-
+	return shark_bms_acc2_enabled;
 }
 
 void ACC2_PWM(void)
 {
+#if 0
 	if(acc2_delay.set)
 	{
 		++acc2_delay.count;
@@ -102,29 +60,50 @@ void ACC2_PWM(void)
 		else
 			gpio_bit_write(GPIOC,GPIO_PIN_15,(bit_status)(acc2_delay.count&0x01));
 	}
-	
+#else
+	if (shark_bms_acc2_work_times < 200) {
+		if (shark_bms_acc2_enabled == shark_false) {
+			shark_bms_acc2_work_times = 0xFFFF;
+			QD_Enable_From(0, 9);
+		} else if (ACC2_Over_Loader_Dect()) {
+			gpio_bit_reset(GPIO_PORT_ACC2_EN, GPIO_PIN_ACC2_EN);
+			shark_bms_acc2_work_times = 0;
+			shark_bms_acc2_error_times++;
+
+			if (ACC2_Dect()) {
+				if (shark_bms_acc2_error_times > 1000) {
+					shark_bms_acc2_enabled = shark_false;
+					println("acc2 err1");
+				}
+			} else if (shark_bms_acc2_error_times > 500) {
+				shark_bms_acc2_enabled = shark_false;
+				println("acc2 err2");
+			}
+		} else {
+			gpio_bit_set(GPIO_PORT_ACC2_EN, GPIO_PIN_ACC2_EN);
+			shark_bms_acc2_work_times++;
+
+			if (shark_bms_acc2_work_times == 200) {
+				shark_bms_acc2_error_times = 0;
+				println("acc2 ready");
+			}
+		}
+	}
+#endif
 }
+
 void ACC2_Enable(uint8_t on)
 {
 	println("acc2: %d", on);
 
-	shark_bms_set_vgs(SHARK_BMS_VGS_ACC2, SHARK_BOOL(on));
+	shark_bms_acc2_enabled = SHARK_BOOL(on);
+	shark_bms_acc2_error_times = 0;
+	shark_bms_acc2_work_times = 0;
 
-#if ACC2_USE_PWM
-	if(on)
-	{
-		acc2_delay.set = 1;
-		acc2_delay.count = 0;
-	}
-	else
-	{
-		memset(&acc2_delay,0x00,sizeof(acc2_delay));
-		gpio_bit_write(GPIOC,GPIO_PIN_15,(bit_status)0x00);
-	}
-#else
-	gpio_bit_write(GPIOC,GPIO_PIN_15,(bit_status)(on));
-#endif
+	shark_bms_set_vgs(SHARK_BMS_VGS_ACC2, SHARK_BOOL(on));
+	gpio_bit_write(GPIO_PORT_ACC2_EN, GPIO_PIN_ACC2_EN, (bit_status) on);
 }
+
 void E_CTR_Dec_IRQ_Initial(void)
 {
 	rcu_periph_clock_enable(RCU_AF);
@@ -505,17 +484,10 @@ void EXTI10_15_IRQHandler(void)
 	
 	if (RESET != exti_interrupt_flag_get(EXTI_14))
 	{  
-        exti_interrupt_flag_clear(EXTI_14);
-
-		if(ht_mode)
-		{
-			over_12V = 1;
-			return;
-		}
-		extern void ACC12_OVER_Loader_Interrupt(void);
-		ACC12_OVER_Loader_Interrupt();
-	
-		
+		exti_interrupt_flag_clear(EXTI_14);
+		gpio_bit_reset(GPIO_PORT_ACC2_EN, GPIO_PIN_ACC2_EN);
+		shark_bms_acc2_work_times = 0;
+		over_12V = 1;
     }
 	if (RESET != exti_interrupt_flag_get(EXTI_15))
 	{  

+ 6 - 2
Source/drv_io.h

@@ -1,6 +1,8 @@
 #ifndef  __GPIO_Init_H__
 #define  __GPIO_Init_H__
 
+#include "common.h"
+
 #define CONFIG_BATT_DET_USE_IRQ		0
 
 #define GPIO_PORT_FL				GPIOB
@@ -15,6 +17,9 @@
 #define GPIO_PORT_SS				GPIOB
 #define GPIO_PIN_SS					GPIO_PIN_14
 
+#define GPIO_PORT_ACC2_EN			GPIOC
+#define GPIO_PIN_ACC2_EN			GPIO_PIN_15
+
 #define Can_Power_Enable(on) gpio_bit_write(GPIOA,GPIO_PIN_12,(bit_status)(!on))
 #define FL_Enable(on) gpio_bit_write(GPIOB,GPIO_PIN_2,(bit_status)(!on))
 
@@ -33,7 +38,7 @@
 #define QD_Dect() (!gpio_input_bit_get(GPIOB,GPIO_PIN_6))
 #define XL_Dect() gpio_input_bit_get(GPIOB,GPIO_PIN_7)
 #define ACC2_Dect() (!gpio_input_bit_get(GPIOD,GPIO_PIN_0))
-#define ACC2_Over_Loader_Dect() gpio_input_bit_get(GPIOC,GPIO_PIN_14)
+#define ACC2_Over_Loader_Dect() (!gpio_input_bit_get(GPIOC,GPIO_PIN_14))
 
 #define Lock_Dect() gpio_output_bit_get(GPIOB,GPIO_PIN_4)
 #define Carpet_Dect() gpio_output_bit_get(GPIOB,GPIO_PIN_1)
@@ -93,7 +98,6 @@ enum
 	FROM_MAX
 };
 
-
 void _CB_Operate_Initial(void);
 
 void GPIO_Initial(void);

+ 1 - 1
Source/sw_build_info.h

@@ -1,3 +1,3 @@
 #pragma once
 
-#define CONFIG_VERSION "PS100XX_V01_11071600"
+#define CONFIG_VERSION "PS100XX_V01_11071816"