samples.c 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #include "foc/samples.h"
  2. #include "bsp/bsp.h"
  3. #include "bsp/adc.h"
  4. #include "math/fast_math.h"
  5. #include "math/fix_math.h"
  6. #include "os/os_task.h"
  7. #include "foc/foc_config.h"
  8. #include "bsp/delay.h"
  9. typedef struct {
  10. float value;
  11. float filted_value;
  12. float lowpass;
  13. }samples_t;
  14. static void sample_vbus(void);
  15. static void sample_throttle(void);
  16. static u32 sample_task(void *);
  17. static samples_t _vbus;
  18. #ifdef THROTTLE_CHAN
  19. static samples_t _throttle;
  20. #endif
  21. void samples_init(void){
  22. _vbus.filted_value = (MAX_vDC);
  23. _vbus.value = (MAX_vDC);
  24. _vbus.lowpass = (0.2f);
  25. #ifdef THROTTLE_CHAN
  26. _throttle.filted_value = (0);
  27. _throttle.value = (0);
  28. _throttle.lowpass = (0.2f);
  29. sample_throttle();
  30. #endif
  31. sample_vbus();
  32. shark_task_create(sample_task, NULL);
  33. }
  34. float get_vbus_float(void) {
  35. return (_vbus.filted_value);
  36. }
  37. s16 get_vbus_sfix5(void){
  38. return _vbus.filted_value;
  39. }
  40. float get_throttle_float(void) {
  41. #ifdef THROTTLE_CHAN
  42. return _throttle.filted_value;
  43. #else
  44. return 0.0f;
  45. #endif
  46. }
  47. static u32 sample_task(void *param) {
  48. sample_vbus();
  49. sample_throttle();
  50. return 0;
  51. }
  52. u32 sapmple_delta;
  53. static void sample_vbus(void){
  54. u32 ticks = task_ticks_abs();
  55. s16 vadc = adc_sample_regular_channel(VBUS_V_CHAN, 3);
  56. _vbus.value = (float)vadc * VBUS_VOL_CEOF;
  57. LowPass_Filter(_vbus.filted_value, _vbus.value, _vbus.lowpass);
  58. sapmple_delta = task_ticks_rel(ticks);
  59. }
  60. static void sample_throttle(void){
  61. #ifdef THROTTLE_CHAN
  62. s16 vadc = adc_sample_regular_channel(THROTTLE_CHAN, 16);
  63. _throttle.value = (float)vadc * THROTTLE_VOL_CEOF;
  64. LowPass_Filter(_throttle.filted_value, _throttle.value, _throttle.lowpass);
  65. #endif
  66. }