83 lines
1.6 KiB
C
83 lines
1.6 KiB
C
|
#ifndef __FOC_H_
|
|||
|
#define __FOC_H_
|
|||
|
|
|||
|
/* 电机控旋转实现结构体 */
|
|||
|
|
|||
|
#define SPEED_FILTER_NUM 30 // 速度滤波次数
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
int timeout; // 定时器更新计数
|
|||
|
float speed; // 电机速度 rps(转/秒)
|
|||
|
int enable_flag; // 电机使能标志
|
|||
|
int speed_group[SPEED_FILTER_NUM];
|
|||
|
}motor_rotate_t;
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* @brief Two components q, d type definition
|
|||
|
*/
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
int q;
|
|||
|
int d;
|
|||
|
} qd_t;
|
|||
|
/**
|
|||
|
* @brief Two components a,b type definition
|
|||
|
*/
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
int a;
|
|||
|
int b;
|
|||
|
} ab_t;
|
|||
|
/**
|
|||
|
* @brief Two components alpha, beta type definition
|
|||
|
*/
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
int alpha;
|
|||
|
int beta;
|
|||
|
} alphabeta_t;
|
|||
|
|
|||
|
typedef enum {
|
|||
|
MC_NO_CTRL_MODE = 0x00,
|
|||
|
MC_OPEN_MODE = 0x01,
|
|||
|
MC_ELEC_CALIB_MODE = 0x02,
|
|||
|
MC_TEST_MODE = 0x03,
|
|||
|
MC_SPD_CLOSE_LOOP_MODE = 0x04,
|
|||
|
MC_POS_CLOSE_LOOP_MODE = 0x05,
|
|||
|
} mc_ctrl_loop_mode_e;
|
|||
|
|
|||
|
typedef struct {
|
|||
|
mc_ctrl_loop_mode_e ctrl_loop_mode;
|
|||
|
} mc_flag_t;
|
|||
|
|
|||
|
extern mc_flag_t mc_flag;
|
|||
|
|
|||
|
|
|||
|
#define UINT15_MAX 32768
|
|||
|
#define UINT32_MAX 0xFFFFFFFF
|
|||
|
|
|||
|
#define ANGLE_0 ((int)(0))
|
|||
|
#define ANGLE_90 ((int)(65536 * 90 / 360))
|
|||
|
#define ANGLE_180 ((int)(65536 * 180 / 360))
|
|||
|
|
|||
|
|
|||
|
#define PWM_FREQ (22000) // 5 k
|
|||
|
|
|||
|
#define PWM_PERIOD_CYCLES (uint32_t)(11*(unsigned long long)1000000u/((uint32_t)(PWM_FREQ)))
|
|||
|
|
|||
|
#define SQRT3FACTOR (uint32_t) 0xDDB4 /* = (16384 * 1.732051 * 2)*/ // 根号3的q15格式表示?
|
|||
|
|
|||
|
#define hT_Sqrt3 ((PWM_PERIOD_CYCLES*SQRT3FACTOR)/16384u)
|
|||
|
|
|||
|
void svpwm_calc(alphabeta_t v_alpha_beta);
|
|||
|
void foc_v_qd_set(qd_t set);
|
|||
|
void foc_update(void);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
#endif
|