samples.c 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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. typedef struct {
  9. s16q5_t value;
  10. s16q5_t filted_value;
  11. s16q14_t lowpass;
  12. }samples_t;
  13. static void sample_vbus(void);
  14. static void sample_throttle(void);
  15. static u32 sample_task(void *);
  16. static samples_t _vbus;
  17. #ifndef GD32_FOC_DEMO
  18. static samples_t _throttle;
  19. #endif
  20. void samples_init(void){
  21. _vbus.filted_value = S16Q5(MAX_vDC);
  22. _vbus.value = S16Q5(MAX_vDC);
  23. _vbus.lowpass = S16Q14(0.2f);
  24. #ifndef GD32_FOC_DEMO
  25. _throttle.filted_value = (0);
  26. _throttle.value = (0);
  27. _throttle.lowpass = S16Q14(0.2f);
  28. sample_throttle();
  29. #endif
  30. sample_vbus();
  31. shark_task_create(sample_task, NULL);
  32. }
  33. float get_vbus_float(void) {
  34. return S16Q5toF(_vbus.filted_value);
  35. }
  36. s16 get_vbus_sfix5(void){
  37. return _vbus.filted_value;
  38. }
  39. float get_throttle_float(void) {
  40. return 0.0f;//(float)((s32)(_throttle.filted_value * 100.0f)/100.0f);
  41. }
  42. static u32 sample_task(void *param) {
  43. sample_vbus();
  44. sample_throttle();
  45. return 0;
  46. }
  47. static void sample_vbus(void){
  48. s16 vadc = adc_sample_regular_channel(VBUS_V_CHAN, 16);
  49. _vbus.value = S16_mul(vadc, VBUS_VOL_CEOF, 9);
  50. LowPass_Filter_Fix(_vbus.filted_value, _vbus.value, _vbus.lowpass);
  51. }
  52. static void sample_throttle(void){
  53. #ifndef GD32_FOC_DEMO
  54. s16 vadc = adc_sample_regular_channel(THROTTLE_CHAN, 16);
  55. _throttle.value = S16_mul(vadc, THROTTLE_VOL_CEOF, 9);
  56. LowPass_Filter_Fix(_throttle.filted_value, _throttle.value, _throttle.lowpass);
  57. #endif
  58. }