samples.c 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #include "foc/samples.h"
  2. #include "bsp/bsp.h"
  3. #include "bsp/adc.h"
  4. #include "math/fast_math.h"
  5. #include "os/co_task.h"
  6. #include "os/timer.h"
  7. typedef struct {
  8. float value;
  9. float filted_value;
  10. float lowpass;
  11. }samples_t;
  12. static void sample_vbus(void);
  13. static void sample_gas(void);
  14. static void sample_timer_handler(timer_t *);
  15. static samples_t _vbus;
  16. static samples_t _gas;
  17. static timer_t sample_timer = TIMER_INIT(sample_timer, sample_timer_handler);
  18. void samples_init(void){
  19. _vbus.filted_value = MAX_VBUS_VOLTAGE;
  20. _vbus.value = MAX_VBUS_VOLTAGE;
  21. _vbus.lowpass = 0.2f;
  22. _gas.filted_value = 0.0f;
  23. _gas.value = 0.0f;
  24. _gas.lowpass = 0.2f;
  25. sample_vbus();
  26. sample_gas();
  27. timer_post(&sample_timer, 1);
  28. }
  29. float get_vbus_sample(void) {
  30. return _vbus.filted_value;
  31. }
  32. float get_gas_sample(void) {
  33. return _gas.filted_value;
  34. }
  35. static void sample_timer_handler(timer_t *timer) {
  36. sample_vbus();
  37. sample_gas();
  38. timer_post(&sample_timer, 5);
  39. }
  40. static void sample_vbus(void){
  41. u32 vadc = adc_sample_regular_channel(VBUS_V_CHAN, 16);
  42. _vbus.value = ((float)vadc)/(4096.0f) * ADC_REFERENCE_VOLTAGE * 45 / 1000; //1:44
  43. LowPass_Filter(_vbus.filted_value, _vbus.value, _vbus.lowpass);
  44. }
  45. static void sample_gas(void){
  46. #ifdef GD32_DEMO
  47. #else
  48. u32 vadc = adc_sample_regular_channel(HANDLERBAR_CHAN, 16);
  49. _gas.value = vadc * ADC_REFERENCE_VOLTAGE /4096.0f;
  50. LowPass_Filter(_gas.filted_value, _gas.value, _gas.lowpass);
  51. #endif
  52. }