#include "powermanage.h" #include "stm32f10x.h" #include "adc.h" #include "RTC.h" #include "para.h" #include "delay.h" #include "fm25v02.h" #include "state_fun_init.h" #include "mem_warning_sizhu_log.h" #include "third_telecom_interface.h" BAT_TEST_PARA Bat_Test_Para; /*ÍⲿÄÚ²¿µçÔ´io³õʼ»¯*/ void Bat_Test_EN_io_dec_init(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = POWER_ELECTRIC_TEST_PIN_NUM; //amp GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //Ä£ÄâÊäÈë GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO¿ÚËÙ¶ÈΪ50MHz GPIO_Init(POWER_ELECTRIC_TEST_PIN_GROUP, &GPIO_InitStructure); } void Bat_Test_EN_io_dec_deinit(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = POWER_ELECTRIC_TEST_PIN_NUM; //amp GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //Ä£ÄâÊäÈë GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO¿ÚËÙ¶ÈΪ50MHz GPIO_Init(POWER_ELECTRIC_TEST_PIN_GROUP, &GPIO_InitStructure); } void Bat_Low_io_dec_init(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = POWER_LOW_PIN_NUM; // GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO¿ÚËÙ¶ÈΪ50MHz GPIO_Init(POWER_LOW_PIN_GROUP, &GPIO_InitStructure); } void Bat_Low_io_dec_deinit(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = POWER_LOW_PIN_NUM; // GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; // GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO¿ÚËÙ¶ÈΪ50MHz GPIO_Init(POWER_LOW_PIN_GROUP, &GPIO_InitStructure); } void HWIDO_EXPOW_io_dec_init(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = POWER_SELECT_DEC_PIN_NUM; //amp GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //ÍÆÍìÊä³ö GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO¿ÚËÙ¶ÈΪ50MHz GPIO_Init(POWER_SELECT_DEC_PIN_GROUP, &GPIO_InitStructure); } void HWIDO_EXPOW_io_dec_deinit(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = POWER_SELECT_DEC_PIN_NUM; //amp GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //ÍÆÍìÊä³ö GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO¿ÚËÙ¶ÈΪ50MHz GPIO_Init(POWER_SELECT_DEC_PIN_GROUP, &GPIO_InitStructure); } /*µÍѹ±¨¾¯io*/ void undervol_io_power_init(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = UNDERVOL_PIN_NUM; //amp GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //ÍÆÍìÊä³ö GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO¿ÚËÙ¶ÈΪ50MHz GPIO_Init(UNDERVOL_PIN_GROUP, &GPIO_InitStructure); // } /*µÍѹ±¨¾¯io*/ void lowvol_io_power_init(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = LOWVOL_PIN_NUM; //amp GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //ÍÆÍìÊä³ö GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO¿ÚËÙ¶ÈΪ50MHz GPIO_Init(LOWVOL_PIN_GROUP, &GPIO_InitStructure); /**/ } /*µÍѹ±¨¾¯io*/ void undervol_io_power_deinit(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = UNDERVOL_PIN_NUM; //amp GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //ÍÆÍìÊä³ö GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO¿ÚËÙ¶ÈΪ50MHz GPIO_Init(UNDERVOL_PIN_GROUP, &GPIO_InitStructure); // } /*µÍѹ±¨¾¯io*/ void lowvol_io_power_deinit(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = LOWVOL_PIN_NUM; //amp GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //ÍÆÍìÊä³ö GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO¿ÚËÙ¶ÈΪ50MHz GPIO_Init(LOWVOL_PIN_GROUP, &GPIO_InitStructure); /**/ } /*Êä³öÂö³å*/ void undervol_io_power(void) { /**/ undervol_io_power_init(); UNDERVOL_SIGNL_HIGH delay_ms(500); UNDERVOL_SIGNL_LOW // undervol_io_power_deinit(); } /*Êä³öÂö³å*/ void undervol_io_power_high(void) { /**/ undervol_io_power_init(); UNDERVOL_SIGNL_HIGH } /*Êä³öÂö³å*/ void undervol_io_power_low(void) { /**/ undervol_io_power_init(); UNDERVOL_SIGNL_LOW // undervol_io_power_deinit(); } /*Êä³öÂö³å*/ void lowvol_io_power(void) { /**/ lowvol_io_power_init(); LOWVOL_SIGNL_HIGH delay_ms(500); LOWVOL_SIGNL_LOW // lowvol_io_power_deinit(); } void lowvol_io_power_high(void) { /**/ lowvol_io_power_init(); LOWVOL_SIGNL_HIGH } /*Êä³öÂö³å*/ void lowvol_io_power_low(void) { /**/ lowvol_io_power_init(); LOWVOL_SIGNL_LOW // lowvol_io_power_deinit(); } /*¶ÁÈ¡µçÔ´io ״̬*/ u8 power_io_get(void) { u32 status; status = GPIOC->IDR & (1 << 2); //PC2¸ß´ú±íµç³Ø¹©µç£¬µÍ´ú±íÍâµç status = status >> 2; //return POWER_BAT; if( 0 == status ) { return POWER_EXTERN; }else { return POWER_BAT; } } /*±¨¾¯ÐźÅÏßÊä³ö µÍѹÐźţº µç³ØµçѹµÍÓÚ5.6VʱPE10£¨LP_ALM£©Êä³ö10Ãë¸ßµçƽ ¹Ø·§ÐźţºÓйط§ÐèҪʱ£¬PE9£¨CV_ALM£©Êä³ö10Ãë¸ßµçƽ¡£ ÐèÒª¹Ø·§µÄ±¨¾¯ÓУº1. µç³ØµçѹµÍÓÚ5.1V 2. Óз´ÏòÁ÷Á¿£¬¾ßÌå¼û·´ÏòÁ÷Á¿´¦Àí²¿·Ö */ void Alarm_pluse_out() { //¹Ø·§ÅÐ¶Ï // if((Bat_Test_Para.lith_bat_down_flag == 1)||(v20_system_para_g.system_backward_flow_flag==1)) if(Bat_Test_Para.lith_bat_down_flag == 1) { Bat_Test_Para.lith_bat_down_alarm_line_output = 1; }else { Bat_Test_Para.lith_bat_down_alarm_line_output = 0; } //µÍµçÅÐ¶Ï if(Bat_Test_Para.lith_bat_low_flag == 1) { if(Bat_Test_Para.lith_bat_low_alarm_line_cnt == 0) { Bat_Test_Para.lith_bat_low_alarm_line_output = 1; Bat_Test_Para.lith_bat_low_alarm_line_cnt = 3600; }else { Bat_Test_Para.lith_bat_low_alarm_line_cnt --; } }else { Bat_Test_Para.lith_bat_low_alarm_line_cnt = 0; } /*¹Ø·§±¨¾¯ÐźÅÏßÊä³ö*/ if(Bat_Test_Para.lith_bat_down_alarm_line_output == 1) { /*³ÖÐøÀ­¸ß*/ undervol_io_power_high(); // if(v20_system_para_g.system_close_valve_alarm_time < 15) // { // v20_system_para_g.system_close_valve_alarm_time ++; // }else // { // Bat_Test_Para.lith_bat_down_alarm_line_output = 0; // v20_system_para_g.system_close_valve_alarm_time = 15; // } // // /**/ // if(v20_system_para_g.system_close_valve_alarm_time < 3) // { // undervol_io_power_low(); // }else if(v20_system_para_g.system_close_valve_alarm_time < 13) // { // undervol_io_power_high(); // }else // { // undervol_io_power_low(); // } }else { v20_system_para_g.system_close_valve_alarm_time = 0; undervol_io_power_low(); } /*µÍµçѹ±¨¾¯ÏßÊä³ö*/ if(Bat_Test_Para.lith_bat_low_alarm_line_output == 1) { /*Êä³ö10SµÄÂö³å*/ if(v20_system_para_g.system_lowvoltage_time < 15) { v20_system_para_g.system_lowvoltage_time ++; }else { Bat_Test_Para.lith_bat_low_alarm_line_output = 0; v20_system_para_g.system_lowvoltage_time = 15; } /**/ if(v20_system_para_g.system_lowvoltage_time < 3) { lowvol_io_power_low(); }else if(v20_system_para_g.system_lowvoltage_time < 13) { lowvol_io_power_high(); }else { lowvol_io_power_low(); } }else { v20_system_para_g.system_lowvoltage_time = 0; lowvol_io_power_low(); } } /*ÖÜÆÚÐÔ¶ÁÈ¡µçѹ´¦Àíº¯Êý Âß¼­ÊÇÔÚ0µã0·Ö0-1ÃëµÄʱºò´ò¿ªPC0£¬È»ºóÏÂÒ»ÖÜÆÚ£¨ÏÂÒ»Ãë)²É¼¯µç³Øµçѹ£¬¹Ø±ÕPC0£¬ÎªÁË·ÀÖ¹PC0û¹Ø±Õ£¬ÔÚ3-4ÃëµÄʱºò¼ÌÐøÖ´ÐÐ¹Ø±Õ */ void get_bat_voltage_Pro(void) { // /*¶ÏµçÅжÏ*/ // Bat_Low_io_dec_init(); // // if(POWER_LOW_PIN_READ==0) // { // if(Bat_Test_Para.BAT_Low_Time_Cnt<250) // { // Bat_Test_Para.BAT_Low_Time_Cnt++; // } // }else // { // if(Bat_Test_Para.BAT_Low_Time_Cnt>=2) // { // // } // Bat_Test_Para.BAT_Low_Time_Cnt = 0; // } // // if(Bat_Test_Para.BAT_Low_Time_Cnt==2) //Á¬Ðø2Ãë¼ì²âµ½µÍµçƽ£¬´ú±íµôµç // { // /*¶Ïµç´¦Àí£¬±£´æÖØÒªÊý¾ÝºÍ¼Ç¼*/ // // flow_para_emergency_save(); // //// if(v20_system_para_g.system_extern_power_connect_flag == ACTIVE) //// { // //// } // } // // Bat_Low_io_dec_deinit(); /*µç³Ø¼ì²â´¦Àí*/ if((calendar.hour==23)&&(calendar.min==57)&&(calendar.sec<2)) //·ÀÖ¹0Ãë¿ÉÄÜ´í¹ý£¬ËùÒÔСÓÚ2£¬ 0ÃëºÍ1Ãë¶¼¿ÉÒÔ { Bat_Test_Para.BAT_Period_arrival = 1; } if((Bat_Test_Para.BAT_Period_arrival ==1)||(Bat_Test_Para.BAT_Test_Key_Flag==1)||(Bat_Test_Para.BAT_Test_power_INIT_Flag==1)) { Bat_Test_Para.BAT_Test_Run_Flag =1; Bat_Test_Para.BAT_Period_arrival = 0; Bat_Test_Para.BAT_Test_Key_Flag = 0; Bat_Test_Para.BAT_Test_power_INIT_Flag = 0; } if(Bat_Test_Para.BAT_Test_Run_Flag==1) { if(Bat_Test_Para.BAT_Test_Time_Cnt==10) { //10Sºó£¬Çå³ý±êÖ¾. Bat_Test_Para.BAT_Test_Run_Flag = 0; Bat_Test_Para.BAT_Test_Time_Cnt = 0; }else { Bat_Test_Para.BAT_Test_Time_Cnt++; } if(Bat_Test_Para.BAT_Test_Time_Cnt ==1) { //µÚÒ»Ãë´ò¿ªPC0£¬¼ì²âµç³ØÐèÒªÌáǰÖÁÉÙ500ms Bat_Test_EN_io_dec_init(); delay_ms(1); POWER_ELECTRIC_TEST_HIGH;//´ò¿ªPC0 BAT TEST }else if(Bat_Test_Para.BAT_Test_Time_Cnt ==2) { //µÚ¶þÃ룬¿ªÊ¼¼ì²â //Èç¹ûÉÏÒ»´Î²É¼¯µçѹ´óÓÚµÍѹֵ£¬¶øÕâÒ»´Î²É¼¯Ð¡ÓÚµÍѹֵ£¬ÔòÔٲɼ¯Ò»´Î£¬¼õÉÙµçѹ²É¼¯´íÎó¶øµ¼ÖÂÎó²úÉúµÍѹ±¨¾¯µÄ¸ÅÂÊ¡£Èç¹ûÉÏÒ»´Î²É¼¯¾ÍСÓÚµÍѹֵ£¬ÔòÖ»²É¼¯Ò»´Î if(v20_system_para_g.system_bat_power >=battery_para_g.lith_power_low_valve*10) { vol_get_data(); //²É¼¯µç³Øµçѹ if(v20_system_para_g.system_bat_power < battery_para_g.lith_power_low_valve*10 ) { vol_get_data(); //²É¼¯µç³Øµçѹ } }else { vol_get_data(); //²É¼¯µç³Øµçѹ } POWER_ELECTRIC_TEST_LOW; //¼ì²âÍê¿ÉÒÔÁ¢¼´¹Ø±ÕPC0 // Bat_Test_EN_io_dec_deinit(); if(Bat_Test_Para.Lith_low_pin_status_Flag==2) { //³öÏÖPC6µÍµçƽ£¬ÔòÅÐ¶Ïµç³ØµçѹÊÇ·ñ´óÓÚǷѹֵ£¬Èç¹ûÊÇ£¬Ôò´ú±íÊÇµç³ØÒÆ³ý£¬¶ø²»ÊÇÕý³£µÄµç³ØÇ·Ñ¹£¬Õý³£µÄµç³ØÇ·Ñ¹Í¨¹ýÊ×´Îµç³Øµçѹ½µµ½Ç·Ñ¹ÖµÒÔÏÂÀ´Åжϡ£ Bat_Test_Para.Lith_low_pin_status_Flag = 0; // if(system_alarm_ctrl_word_g.alarm_ctl_send.lith_remove == 1) if(1) //¸Ã¹¦ÄÜÏȳ£¿ª { if(v20_system_para_g.system_bat_power > battery_para_g.lith_power_down_valve*10 ) { if(Bat_Test_Para.Lith_removal_status_Flag != 1) { Bat_Test_Para.Lith_removal_status_Flag = 1; system_alarm_log_data_handle(ALARM_CLASS_BAT_POWER, ALARM_HAPPEN + ALARM_ID_LITH_BAT_REMOVAL); flow_para_emergency_save(); //±£´æÖØÒª²ÎÊý if(alarm_report_para_g.lith_battery_removal_cnt (battery_para_g.lith_power_down_valve*10 +50)) { if(Bat_Test_Para.Lith_removal_status_Flag ==1) { Bat_Test_Para.Lith_removal_status_Flag = 0; alarm_report_para_g.lith_battery_removal_flag =0; alarm_report_para_g.lith_battery_removal_cnt =0; system_alarm_log_data_handle(ALARM_CLASS_BAT_POWER, ALARM_HAPPEN + ALARM_ID_SYSTEM_START); } } } }else { Bat_Low_io_dec_init(); if(POWER_LOW_PIN_READ==1) { if(Bat_Test_Para.Lith_removal_status_Flag ==1) { //Èç¹û´¦ÓÚµç³ØÒÆ³ý״̬£¬¼ì²âµ½PC6µçƽΪ¸ß£¬ÔòÔÙ¼ì²âÒ»´Î£¬È·¶¨ÊǸßÖ®ºó£¬»Ö¸´×´Ì¬ delay_ms(10); if(POWER_LOW_PIN_READ==1) { Bat_Test_Para.Lith_removal_status_Flag = 0; alarm_report_para_g.lith_battery_removal_flag =0; alarm_report_para_g.lith_battery_removal_cnt =0; } } } } } } if(Bat_Test_Para.lith_bat_replace_flag==1) { Bat_Test_Para.lith_bat_replace_flag = 0; if(v20_system_para_g.system_bat_power>=7.0) { FM25V02_data_write_uint16(BAT1_TIME_SAVE_ADDR, 0); FM25V02_data_write_uint16(BAT2_TIME_SAVE_ADDR, 0); v20_system_para_g.system_bat_work_period1 = 0; v20_system_para_g.system_bat_work_period2 = 0; system_alarm_log_data_handle(ALARM_CLASS_BAT_POWER, ALARM_HAPPEN + ALARM_ID_SYSTEM_START); } } /*±¨¾¯ÐźÅÏßÊä³ö£¬°üÀ¨µÍѹÐźź͹ط§ÐźÅ*/ // Alarm_pluse_out(); ///jlcתÓÃΪµç»úÇý¶¯AB /*µç³ØµçÁ¿¼Çʱ*/ if(v20_system_para_g.system_extern_power_connect_flag == NOACTIVE) { v20_system_para_g.system_bat_work_period1 ++; if(v20_system_para_g.system_bat_work_period1 >= 3600) { v20_system_para_g.system_bat_work_period1 = 0; v20_system_para_g.system_bat_work_period2 ++; if(v20_system_para_g.system_bat_work_period2 > 65530) { v20_system_para_g.system_bat_work_period2 = 0; } FM25V02_data_write_uint16(BAT1_TIME_SAVE_ADDR, v20_system_para_g.system_bat_work_period1); FM25V02_data_write_uint16(BAT2_TIME_SAVE_ADDR, v20_system_para_g.system_bat_work_period2); }else if((v20_system_para_g.system_bat_work_period1 % 600)==0) { FM25V02_data_write_uint16(BAT1_TIME_SAVE_ADDR, v20_system_para_g.system_bat_work_period1); } if(v20_system_para_g.system_bat_work_period2 > 65530) { v20_system_para_g.system_bat_work_period2 = 0; } } if(v20_system_para_g.system_bat_power < battery_para_g.lith_power_low_valve*10 ) { Bat_Test_Para.lith_bat_Vol_low_flag = 1; } else if(v20_system_para_g.system_bat_power > (battery_para_g.lith_power_low_valve*10 + 20) ) { Bat_Test_Para.lith_bat_Vol_low_flag = 0; } if(v20_system_para_g.system_bat_power < battery_para_g.lith_power_down_valve*10 ) { Bat_Test_Para.lith_bat_Vol_down_flag = 1; } else if((v20_system_para_g.system_bat_power > (battery_para_g.lith_power_down_valve*10 + 20) )) { Bat_Test_Para.lith_bat_Vol_down_flag = 0; } if(v20_system_para_g.system_bat_work_period2 >= BAT_TIME_SCALE4) { Bat_Test_Para.lith_bat_Time_down_flag = 1; } else if(v20_system_para_g.system_bat_work_period2 >= (BAT_TIME_SCALE4*(1-0.01*BAT_PERSENT_LCD_2))) { Bat_Test_Para.lith_bat_Time_low_flag = 1; } else { Bat_Test_Para.lith_bat_Time_down_flag = 0; Bat_Test_Para.lith_bat_Time_low_flag = 0; } if((Bat_Test_Para.lith_bat_Time_low_flag == 1) || (Bat_Test_Para.lith_bat_Vol_low_flag == 1)) { if(system_alarm_ctrl_word_g.alarm_ctl_word.lith_low == 1) { if(Bat_Test_Para.lith_bat_low_flag != 1) { Bat_Test_Para.lith_bat_low_flag = 1; system_alarm_log_data_handle(ALARM_CLASS_BAT_POWER, ALARM_HAPPEN + ALARM_ID_LITH_BAT_LOW); if(alarm_report_para_g.lith_battery_low_power_cnt BAT_PERSENT_LCD_2) v20_system_para_g.system_bat_power_percent = BAT_PERSENT_LCD_2; //Ôݶ¨³¬¹ý7.2VΪÂúµç if(v20_system_para_g.system_bat_power_percent < 0) v20_system_para_g.system_bat_power_percent = 0; }else { if(v20_system_para_g.system_bat_work_period2 < BAT_TIME_SCALE4) { v20_system_para_g.system_bat_power_percent = (BAT_TIME_SCALE4 - v20_system_para_g.system_bat_work_period2) *100.0 / BAT_TIME_SCALE4; //µç³ØÊ±¼ä¼ÆÊý´Ó0µ½32000£¬ËùÒÔ }else { v20_system_para_g.system_bat_power_percent = 0; } } if(v20_system_para_g.system_bat_power_percent > 100) { v20_system_para_g.system_bat_power_percent = 100; } }