#ifndef MOTOR_H
|
#define MOTOR_H
|
#include "gpio.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 (30000u)
|
/* ͨÓÿØÖƶ¨Ê±Æ÷ʱÖÓÔ´TIMxCLK = HCLK = 64MHz
|
É趨¶¨Ê±Æ÷ƵÂÊΪ = TIMxCLK / (SPEED_PRESCALER_COUNT) / SPEED_PERIOD_COUNT = 33.333Hz
|
ÖÜÆÚ T = 30ms */
|
#define HALL_PRESCALER_COUNT (110)
|
|
#define HALL_C_EXTI (EXTI_4)
|
#define HALL_B_EXTI (EXTI_5)
|
#define HALL_A_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)
|
|
#define MOTOR_U_L_ENABLE (gpio_bit_write(PWM_LIN2_PORT, PWM_LIN2_PIN, SET))
|
#define MOTOR_U_L_DISABLE (gpio_bit_write(PWM_LIN2_PORT, PWM_LIN2_PIN, RESET))
|
|
#define MOTOR_V_L_ENABLE (gpio_bit_write(PWM_LIN3_PORT, PWM_LIN3_PIN, SET))
|
#define MOTOR_V_L_DISABLE (gpio_bit_write(PWM_LIN3_PORT, PWM_LIN3_PIN, RESET))
|
|
#define MOTOR_W_L_ENABLE (gpio_bit_write(PWM_LIN1_PORT, PWM_LIN1_PIN, SET))
|
#define MOTOR_W_L_DISABLE (gpio_bit_write(PWM_LIN1_PORT, PWM_LIN1_PIN, RESET))
|
|
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);
|
extern void Motor_Init(void);
|
#endif
|