|
|
@@ -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))
|
|
|
{
|