vbus_sensor.c 713 B

1234567891011121314151617181920212223242526272829303132333435
  1. #include "vbus_sensor.h"
  2. #include "bsp/bsp.h"
  3. static vbus_t _vbus;
  4. void vbus_sensor_init(void){
  5. _vbus.voltage_avg = 0;
  6. _vbus.avg_count = 16;
  7. HAL_ADC1_ChanConfig(VBUS_SENSOR_ADC_CHANNEL);
  8. vbus_sample_voltage();
  9. }
  10. void vbus_sample_voltage(void){
  11. u32 vadc = 0;
  12. u32 max = 0, min = 0xFFFFFFF;
  13. for (int i = 0; i < _vbus.avg_count; i++) {
  14. u32 one = HAL_ADC1_ReadValue(VBUS_SENSOR_ADC_CHANNEL);
  15. vadc += one;
  16. if (min > one) {
  17. min = one;
  18. }
  19. if (max < one) {
  20. max = one;
  21. }
  22. }
  23. vadc -= (max + min);
  24. vadc = vadc / (_vbus.avg_count - 2);
  25. _vbus.voltage_avg = ((float)vadc)/(65536.0f) * ADC_REFERENCE_VOLTAGE / VBUS_PARTITIONING_FACTOR;
  26. }
  27. float vbus_get_voltage(void){
  28. return _vbus.voltage_avg;
  29. }