samples.c 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #include "foc/samples.h"
  2. #include "bsp/bsp.h"
  3. #include "bsp/adc.h"
  4. #include "math/fast_math.h"
  5. #include "os/os_task.h"
  6. #include "math/fix_math.h"
  7. typedef struct {
  8. sfix16En6_t value;
  9. sfix16En6_t filted_value;
  10. sfix16En10_t lowpass;
  11. }samples_t;
  12. static void sample_vbus(void);
  13. static void sample_throttle(void);
  14. static u32 sample_task(void *);
  15. static samples_t _vbus;
  16. static samples_t _throttle;
  17. void samples_init(void){
  18. _vbus.filted_value = i2sFix5(MAX_VBUS_VOLTAGE);
  19. _vbus.value = i2sFix5(MAX_VBUS_VOLTAGE);
  20. _vbus.lowpass = ftoSfix10(0.2f);
  21. _throttle.filted_value = i2sFix5(0);
  22. _throttle.value = i2sFix5(0);
  23. _throttle.lowpass = ftoSfix10(0.2f);
  24. sample_throttle();
  25. sample_vbus();
  26. shark_task_create(sample_task, NULL);
  27. }
  28. s16 get_vbus_sfix6(void) {
  29. return _vbus.filted_value;
  30. }
  31. float get_vbus_float(void) {
  32. return sfix6toF(_vbus.filted_value);
  33. }
  34. float get_throttle_sfix6(void) {
  35. return (_throttle.filted_value);
  36. }
  37. float get_throttle_float(void) {
  38. return sfix6toF(_throttle.filted_value);
  39. }
  40. static u32 sample_task(void *param) {
  41. sample_vbus();
  42. sample_throttle();
  43. return 0;
  44. }
  45. static void sample_vbus(void){
  46. s32 vadc = adc_sample_regular_channel(VBUS_V_CHAN, 16);
  47. s32 fix_vbus = ((float)vadc * ADC_REFERENCE_VOLTAGE * 45.0F / 4096.0F);//1:44
  48. s32 fix_filter = _vbus.filted_value;
  49. LowPass_Filter(fix_filter, ftoSfix6(fix_vbus), _vbus.lowpass); //sfix6 * sfix10
  50. _vbus.filted_value = fix_filter >> 10; // to sfix6
  51. }
  52. static void sample_throttle(void){
  53. s32 vadc = adc_sample_regular_channel(THROTTLE_CHAN, 16);
  54. s32 fix_V = ((float)vadc * ADC_REFERENCE_VOLTAGE * 45.0F / 4096.0F);//1:44
  55. s32 V_filter = _throttle.filted_value;
  56. LowPass_Filter(V_filter, ftoSfix6(fix_V), _vbus.lowpass); //sfix6 * sfix10
  57. _throttle.filted_value = V_filter >> 10; // to sfix6
  58. }