#ifndef MOTOR_H #define MOTOR_H #include "gd32e23x_exti.h" /* µç»ú¿ØÐýתʵÏֽṹÌå */ #define SPEED_FILTER_NUM 30 // ËÙ¶ÈÂ˲¨´ÎÊý typedef struct { unsigned long timeout; // ¶¨Ê±Æ÷¸üмÆÊý float speed; // µç»úËÙ¶È rps£¨×ª/·ÖÖÓ£© unsigned long enable_flag; // µç»úʹÄܱêÖ¾ signed int speed_group[SPEED_FILTER_NUM]; } motor_rotate_t; /* ÀÛ¼Æ TIM_Period¸öºó²úÉúÒ»¸ö¸üлòÕßÖÐ¶Ï µ±¶¨Ê±Æ÷´Ó0¼ÆÊýµ½65535£¬¼´Îª65535´Î£¬ÎªÒ»¸ö¼ÆÊýÖÜÆÚ */ #define HALL_PERIOD_COUNT (0xFFFF) #define SPEED_PRESCALER_COUNT (6400u) #define SPEED_PERIOD_COUNT (300u) /* ͨÓÿØÖƶ¨Ê±Æ÷ʱÖÓÔ´TIMxCLK = HCLK = 64MHz É趨¶¨Ê±Æ÷ƵÂÊΪ = TIMxCLK / (SPEED_PRESCALER_COUNT) / SPEED_PERIOD_COUNT = 33.333Hz ÖÜÆÚ T = 30ms */ #define HALL_PRESCALER_COUNT (110) #define HALL_A_EXTI (EXTI_4) #define HALL_B_EXTI (EXTI_5) #define HALL_C_EXTI (EXTI_15) #define MOTOR_OUT_CH_U (TIMER_CH_1) #define MOTOR_OUT_CH_V (TIMER_CH_0) #define MOTOR_OUT_CH_W (TIMER_CH_2) extern void HAL_HallExti_TriggerCallback(void); extern void BLDC_SpeedAndPID(void); extern float get_motor_speed(void); void hall_enable(void); void hall_disable(void); void set_pwm_pulse(uint16_t pulse); #endif