12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- //#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
- }
|