hall_sensor.h 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #ifndef _HALL_SENSOR_H__
  2. #define _HALL_SENSOR_H__
  3. #include "os/os_type.h"
  4. #include "bsp/bsp.h"
  5. #define NEGATIVE (int8_t)-1
  6. #define POSITIVE (int8_t)1
  7. #define PHASE_60_DEGREE (60)
  8. #define PHASE_120_DEGREE (120)
  9. #define PHASE_180_DEGREE (180)
  10. #define PHASE_240_DEGREE (240)
  11. #define PHASE_300_DEGREE (300)
  12. #define PHASE_360_DEGREE (360)
  13. #define STATE_0 (uint8_t)0
  14. #define STATE_1 (uint8_t)1
  15. #define STATE_2 (uint8_t)2
  16. #define STATE_3 (uint8_t)3
  17. #define STATE_4 (uint8_t)4
  18. #define STATE_5 (uint8_t)5
  19. #define STATE_6 (uint8_t)6
  20. #define STATE_7 (uint8_t)7
  21. #define THETA_NONE (float)0xFFFF
  22. typedef struct {
  23. bool alignmnet;
  24. s32 theta;
  25. float est_theta;
  26. float rpm; //当前的电速度, 单位:RPM
  27. float angle_speed; //当前的电角速度, 单位:rad/s
  28. float angle_speed_avg; //滤波后的电角速度
  29. u8 state;
  30. u32 ticks;
  31. bool working;
  32. s8 direction;
  33. u32 phase_offset;
  34. bool is_override_theta;
  35. float override_theta;
  36. }hall_t;
  37. #define SAMPLE_MAX_COUNT 6
  38. typedef struct {
  39. u32 ticks[SAMPLE_MAX_COUNT];
  40. u32 index;
  41. bool full;
  42. }hall_sample_t;
  43. void hall_sensor_init(void);
  44. void hall_sensor_clear(void);
  45. float hall_sensor_get_theta(void); //return degree
  46. float hall_sensor_get_speed(void); //return rpm
  47. float hall_sensor_avg_speed(void);
  48. int hall_sensor_calibrate(float voltage, u16 *hall_table);
  49. void hall_sensor_set_theta(bool override, float theta);
  50. u16 *hall_phase_angle(void);
  51. int hall_offset_increase(int inc);
  52. #endif /* _HALL_SENSOR_H__ */