//#include "driver_adc.h" #include "user_driver.h" #include "u_power.h" #include "u_main.h" #include "u_light_ctrl.h" #include "Drv_adc.h" #define POWER_DET_CHN (0x02) #define POWER_DET_PORT (0x32) //#define POWER_ADC_ERR_PVT (11000) // 短路时的电压对应值 低于10.5V 这里单位为mV //#define POWER_ADC_ERR_PVT (9700) //试产阶段的阈值电压 #define POWER_ADC_ERR_PVT (10300) // 最后批量版本使用的阈值电压 #define ADC_CHECK (1) extern void light_state_upload(void); static void power_check_cb(void) { static int det_cnt = 0, adc_temp_mean = 0, undervoltage_cnt = 0; uint32_t adc_val=0; adc_temp_mean += ADC_GetVoltage(ADC_CHANNEL_5); //读取adc数据 //U_UART_PRINTF("ad=%d\n", adc_temp_mean); ++det_cnt; if (det_cnt >= 3) { det_cnt = 0; adc_temp_mean /= 3; if(adc_temp_mean<0)adc_temp_mean=0;//负数是错误值 adc_temp_mean = (adc_temp_mean*123);//硬件衰减倍数12.3 还原硬件衰减倍数、 adc_temp_mean/=10; if (adc_temp_mean < POWER_ADC_ERR_PVT && g_light_para.power_st) { if (++undervoltage_cnt >= 2) { light_power_set(GLO_DIS); light_state_upload(); } } else { undervoltage_cnt = 0; } // U_UART_PRINTF("m_ad=%d mV\n", adc_temp_mean); adc_temp_mean = 0; u_ag_timer_start(AG_TIMER_ID_POWER_CHECK, TIMER_TIME_POWER_CHECK, power_check_cb); } else if (det_cnt == 1) { u_ag_timer_start(AG_TIMER_ID_POWER_CHECK, TIMER_TIME_POWER_CHECK / 100, power_check_cb); } } void power_check_init(void) { #if 0 //bk3431 GPIO_config(POWER_DET_PORT >> 4, POWER_DET_PORT & 0x0F, 2); ADC_Init(POWER_DET_CHN); #endif #if(ADC_CHECK==1) ADC_Configuration(); u_ag_timer_start(AG_TIMER_ID_POWER_CHECK, TIMER_TIME_POWER_CHECK, power_check_cb); #endif }