u_power.c 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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 (11000) // 短路时的电压对应值 低于10.5V 这里单位为mV
  10. #define POWER_ADC_ERR_PVT (9700)
  11. #define ADC_CHECK (1)
  12. extern void light_state_upload(void);
  13. static void power_check_cb(void)
  14. {
  15. static int det_cnt = 0, adc_temp_mean = 0, undervoltage_cnt = 0;
  16. uint32_t adc_val=0;
  17. adc_temp_mean += ADC_GetVoltage(ADC_CHANNEL_5); //读取adc数据
  18. //U_UART_PRINTF("ad=%d\n", adc_temp_mean);
  19. ++det_cnt;
  20. if (det_cnt >= 3)
  21. {
  22. det_cnt = 0;
  23. adc_temp_mean /= 3;
  24. if(adc_temp_mean<0)adc_temp_mean=0;//负数是错误值
  25. adc_temp_mean = (adc_temp_mean*123);//硬件衰减倍数12.3 还原硬件衰减倍数、
  26. adc_temp_mean/=10;
  27. if (adc_temp_mean < POWER_ADC_ERR_PVT && g_light_para.power_st)
  28. {
  29. if (++undervoltage_cnt >= 2)
  30. {
  31. light_power_set(GLO_DIS);
  32. light_state_upload();
  33. }
  34. }
  35. else
  36. {
  37. undervoltage_cnt = 0;
  38. }
  39. // U_UART_PRINTF("m_ad=%d mV\n", adc_temp_mean);
  40. adc_temp_mean = 0;
  41. u_ag_timer_start(AG_TIMER_ID_POWER_CHECK, TIMER_TIME_POWER_CHECK, power_check_cb);
  42. }
  43. else if (det_cnt == 1)
  44. {
  45. u_ag_timer_start(AG_TIMER_ID_POWER_CHECK, TIMER_TIME_POWER_CHECK / 100, power_check_cb);
  46. }
  47. }
  48. void power_check_init(void)
  49. {
  50. #if 0
  51. //bk3431
  52. GPIO_config(POWER_DET_PORT >> 4, POWER_DET_PORT & 0x0F, 2);
  53. ADC_Init(POWER_DET_CHN);
  54. #endif
  55. #if(ADC_CHECK==1)
  56. ADC_Configuration();
  57. u_ag_timer_start(AG_TIMER_ID_POWER_CHECK, TIMER_TIME_POWER_CHECK, power_check_cb);
  58. #endif
  59. }