hall_sensor.h 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. /**********************************
  2. * 文件名称: hall_sensor.h
  3. * 功能描述: 霍尔传感器模块头文件
  4. * 主要内容:
  5. * 1. 定义霍尔传感器相关宏
  6. * 2. 声明霍尔传感器相关变量
  7. *
  8. * 注意事项:
  9. * - 包含霍尔传感器的时钟和采样频率定义
  10. * - 包含角度和速度计算的系数定义
  11. **********************************/
  12. #ifndef __HALL_SENSOR_H_
  13. #define __HALL_SENSOR_H_
  14. typedef struct
  15. {
  16. uint8_t state; // 当前霍尔状态
  17. uint8_t state_last; // 上一个霍尔状态
  18. float angle; // 霍尔计算得到的电机角度(原始)
  19. float angle_add; // 单次PWM周期角度自增值
  20. uint32_t ccr; // 捕获计数值
  21. float theta[6]; // 六个扇区的基准角度
  22. uint32_t count[6]; // 各扇区计数值
  23. uint32_t last_valid_count[6]; // 上次有效计数值
  24. uint8_t flag; // 进入闭环标志
  25. float speed[6]; // 各扇区电弧度
  26. float Speed; // 平均电弧度
  27. uint16_t enter_cnt; // 进入霍尔次数
  28. } Hall_TypeDef;
  29. /**
  30. * @brief 霍尔传感器定时器时钟频率
  31. * @details 设置为84MHz
  32. */
  33. #define HALL_TIM_CLOCK (u32)84000000
  34. /**
  35. * @brief 霍尔传感器采样频率
  36. * @details 设置为10kHz
  37. */
  38. #define HALL_SAMPLE_FREQ (u32)10000
  39. /**
  40. * @brief 相位偏移角度
  41. * @details 设置为60度,转换为弧度
  42. */
  43. // #define PHASE_SHIFT_ANGLE (float)(30.0f/360.0f*2.0f*PI)
  44. #define PHASE_SHIFT_RAD (float)(0.f)
  45. /**
  46. * @brief 角度计算因子
  47. * @details 用于将计数值转换为角度增量
  48. */
  49. #define HALL_ANGLE_FACTOR (float)((float)HALL_TIM_CLOCK/(float)HALL_SAMPLE_FREQ*PI/3.0f)
  50. /**
  51. * @brief 速度计算因子
  52. * @details 用于将计数值转换为电机速度 rad/s
  53. */
  54. #define HALL_SPEED_FACTOR (float)(HALL_TIM_CLOCK )
  55. extern Hall_TypeDef* Hall_Get(void);
  56. extern void Hall_Update_Interpolated_Angle(void); // 更新插值角度
  57. extern float Get_Filtered_Speed(void); // 速度滤波
  58. #endif