u_power.c 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. //#include "driver_adc.h"
  2. #include "user_driver.h"
  3. #include "u_power.h"
  4. #include "u_main.h"
  5. #include "u_light_ctrl.h"
  6. #include "Drv_adc.h"
  7. #define POWER_DET_CHN (0x02)
  8. #define POWER_DET_PORT (0x32)
  9. #define POWER_ADC_ERR_PVT (229) //adc值 短路时的电压对应值
  10. #define ADC_CHECK (0)
  11. extern void light_state_upload(void);
  12. static void power_check_cb(void)
  13. {
  14. static int det_cnt = 0, adc_temp_mean = 0, undervoltage_cnt = 0;
  15. adc_temp_mean += ADC_GetVoltage(ADC_CHANNEL_5); //读取adc数据
  16. //U_UART_PRINTF("ad=%d\n", adc_temp_mean);
  17. ++det_cnt;
  18. if (det_cnt >= 3)
  19. {
  20. det_cnt = 0;
  21. adc_temp_mean /= 3;
  22. if (adc_temp_mean < POWER_ADC_ERR_PVT && g_light_para.power_st)
  23. {
  24. if (++undervoltage_cnt >= 2)
  25. {
  26. light_power_set(GLO_DIS);
  27. light_state_upload();
  28. }
  29. }
  30. else
  31. {
  32. undervoltage_cnt = 0;
  33. }
  34. U_UART_PRINTF("m_ad=%d\n", adc_temp_mean);
  35. adc_temp_mean = 0;
  36. u_ag_timer_start(AG_TIMER_ID_POWER_CHECK, TIMER_TIME_POWER_CHECK, power_check_cb);
  37. }
  38. else if (det_cnt == 1)
  39. {
  40. u_ag_timer_start(AG_TIMER_ID_POWER_CHECK, TIMER_TIME_POWER_CHECK / 100, power_check_cb);
  41. }
  42. }
  43. void power_check_init(void)
  44. {
  45. #if 0
  46. //bk3431
  47. GPIO_config(POWER_DET_PORT >> 4, POWER_DET_PORT & 0x0F, 2);
  48. ADC_Init(POWER_DET_CHN);
  49. #endif
  50. #if(ADC_CHECK==1)
  51. ADC_Configuration();
  52. u_ag_timer_start(AG_TIMER_ID_POWER_CHECK, TIMER_TIME_POWER_CHECK, power_check_cb);
  53. #endif
  54. }