enc_intf.h 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #ifndef _ENC_INTF_H__
  2. #define _ENC_INTF_H__
  3. #include "os/os_types.h"
  4. #include "bsp/bsp.h"
  5. #define PWM_TIME_CLK 10000000U
  6. #ifdef GD32_FOC_DEMO
  7. #define ENC_A_GROUP GPIOA
  8. #define ENC_A_PIN GPIO_PIN_6
  9. #define ENC_A_RCU RCU_GPIOA
  10. #define ENC_A_MODE GPIO_MODE_IN_FLOATING
  11. #define ENC_B_GROUP GPIOA
  12. #define ENC_B_PIN GPIO_PIN_7
  13. #define ENC_B_RCU RCU_GPIOA
  14. #define ENC_B_MODE GPIO_MODE_IN_FLOATING
  15. #define ENC_PWM_GROUP GPIOB
  16. #define ENC_PWM_PIN GPIO_PIN_6
  17. #define ENC_PWM_RCU RCU_GPIOB
  18. #define ENC_PWM_MODE GPIO_MODE_IN_FLOATING
  19. #define ENC_I_GROUP GPIOB /*测量编码器的ABI的I信号,360度同步一次*/
  20. #define ENC_I_PIN GPIO_PIN_0
  21. #define ENC_I_RCU RCU_GPIOB
  22. #define ENC_I_MODE GPIO_MODE_IPU
  23. #define ENC_I_IRQ EXTI0_IRQn
  24. #define ENC_I_EXTI EXTI_0
  25. #define ENC_I_EXIT_SRC_GROUP GPIO_PORT_SOURCE_GPIOB
  26. #define ENC_I_EXIT_SRC_PIN GPIO_PIN_SOURCE_0
  27. #define ENC_TIMER TIMER2 /* 测量编码器的ABI信号的AB信号 */
  28. #define ENC_TIMER_RCU RCU_TIMER2
  29. #define ENC_TIMER_IRQ TIMER2_IRQn
  30. #define ENC_TIMER_IRQHandler TIMER2_IRQHandler
  31. #define ENC_PWM_TIMER TIMER3 /* 测量绝对编码器PWM输出的占空比,获取转子angle*/
  32. #define ENC_PWM_TIMER_RCU RCU_TIMER3
  33. #define ENC_PWM_TIMER_IRQ TIMER3_IRQn
  34. #define ENC_PWM_TIMER_CHAN TIMER_CH_0
  35. #define ENC_PWM_TIMER_IRQ_CH TIMER_INT_CH0
  36. #define ENC_PWM_TIMER_INT_FLG TIMER_INT_FLAG_CH0
  37. #define ENC_PWM_IRQHandler TIMER3_IRQHandler
  38. #else
  39. #define ENC_A_GROUP GPIOB
  40. #define ENC_A_PIN GPIO_PIN_8
  41. #define ENC_B_GROUP GPIOB
  42. #define ENC_B_PIN GPIO_PIN_7
  43. #define ENC_PWM_GROUP GPIOB
  44. #define ENC_PWM_PIN GPIO_PIN_6
  45. #endif
  46. #define ENC_DIR_UP 1
  47. #define ENC_DIR_DOWN 2
  48. #define ENC_PWM_Calc_P(t) ((float)t / (float)PWM_TIME_CLK)
  49. #define ENC_COUNT TIMER_CNT(ENC_TIMER)
  50. #define ENC_Direction() ((TIMER_CTL0(ENC_TIMER) & TIMER_CTL0_DIR)?ENC_DIR_DOWN:ENC_DIR_UP)
  51. #define ENC_OverFlow() ((TIMER_INTF(ENC_TIMER) & TIMER_FLAG_UP)?true:false)
  52. #define ENC_ClearUpFlags() (TIMER_INTF(ENC_TIMER) = (~(uint32_t)TIMER_FLAG_UP))
  53. void enc_intf_quadrature_init(u32 rate);
  54. void enc_intf_pwm_counter(void);
  55. void enc_intf_init(u32 rate);
  56. #endif /*_ENC_INTF_H__*/