#ifndef _ENC_INTF_H__ #define _ENC_INTF_H__ #include "os/os_types.h" #include "bsp/bsp.h" #define PWM_TIME_CLK 10000000U #ifdef GD32_FOC_DEMO #define ENC_A_GROUP GPIOA #define ENC_A_PIN GPIO_PIN_6 #define ENC_A_RCU RCU_GPIOA #define ENC_A_MODE GPIO_MODE_IN_FLOATING #define ENC_B_GROUP GPIOA #define ENC_B_PIN GPIO_PIN_7 #define ENC_B_RCU RCU_GPIOA #define ENC_B_MODE GPIO_MODE_IN_FLOATING #define ENC_PWM_GROUP GPIOB #define ENC_PWM_PIN GPIO_PIN_6 #define ENC_PWM_RCU RCU_GPIOB #define ENC_PWM_MODE GPIO_MODE_IN_FLOATING #define ENC_I_GROUP GPIOB /*测量编码器的ABI的I信号,360度同步一次*/ #define ENC_I_PIN GPIO_PIN_0 #define ENC_I_RCU RCU_GPIOB #define ENC_I_MODE GPIO_MODE_IPU #define ENC_I_IRQ EXTI0_IRQn #define ENC_I_EXTI EXTI_0 #define ENC_I_EXIT_SRC_GROUP GPIO_PORT_SOURCE_GPIOB #define ENC_I_EXIT_SRC_PIN GPIO_PIN_SOURCE_0 #define ENC_TIMER TIMER2 /* 测量编码器的ABI信号的AB信号 */ #define ENC_TIMER_RCU RCU_TIMER2 #define ENC_TIMER_IRQ TIMER2_IRQn #define ENC_TIMER_IRQHandler TIMER2_IRQHandler #define ENC_PWM_TIMER TIMER3 /* 测量绝对编码器PWM输出的占空比,获取转子angle*/ #define ENC_PWM_TIMER_RCU RCU_TIMER3 #define ENC_PWM_TIMER_IRQ TIMER3_IRQn #define ENC_PWM_TIMER_CHAN TIMER_CH_0 #define ENC_PWM_TIMER_IRQ_CH TIMER_INT_CH0 #define ENC_PWM_TIMER_INT_FLG TIMER_INT_FLAG_CH0 #define ENC_PWM_IRQHandler TIMER3_IRQHandler #else #define ENC_A_GROUP GPIOB #define ENC_A_PIN GPIO_PIN_8 #define ENC_B_GROUP GPIOB #define ENC_B_PIN GPIO_PIN_7 #define ENC_PWM_GROUP GPIOB #define ENC_PWM_PIN GPIO_PIN_6 #endif #define ENC_DIR_UP 1 #define ENC_DIR_DOWN 2 #define ENC_PWM_Calc_P(t) ((float)t / (float)PWM_TIME_CLK) #define ENC_COUNT TIMER_CNT(ENC_TIMER) #define ENC_Direction() ((TIMER_CTL0(ENC_TIMER) & TIMER_CTL0_DIR)?ENC_DIR_DOWN:ENC_DIR_UP) #define ENC_OverFlow() ((TIMER_INTF(ENC_TIMER) & TIMER_FLAG_UP)?true:false) #define ENC_ClearUpFlags() (TIMER_INTF(ENC_TIMER) = (~(uint32_t)TIMER_FLAG_UP)) void enc_intf_quadrature_init(u32 rate); void enc_intf_pwm_counter(void); void enc_intf_init(u32 rate); #endif /*_ENC_INTF_H__*/