#ifndef _FOC_TYPE_H__ #define _FOC_TYPE_H__ #include #include "libs/os.h" #include "math/fast_math.h" #include "pi_controller.h" #include "ramp_ctrl.h" typedef struct _alphabeta { float alpha; float beta; }alpha_beta_t; typedef struct _dqaix { union { float Id; float Vd; }; union { float Iq; float Vq; }; }dq_t; typedef struct _motor_p { int poles; //电机极对数 float ld; //q轴电感 float lq; //d轴电感 float rs; //定子内阻 float flux_linkage; //永磁磁链 float inertia; float b_emf; }motor_param_t; typedef struct _motor_s { float theta;//ת�ӵ�Ƕ�, PI int angle;//ת�ӵ�Ƕ�, �� float rpm; //ת�� }motor_stat_t; typedef struct _phase_time { u32 A; u32 B; u32 C; u32 low; u32 midle; u32 high; }phase_time_t; //����pwn��duty cnt typedef enum { IDLE = 0, ANY_STOP, START, CURRENT_CALIBRATE, CHARGER_BOOT_CAP, READY_TO_RUN, RAMPING_START, RUNNING }foc_state_t; typedef enum { FOC_MODE_OPEN_LOOP, //开环模式,霍尔,电流等校准都在开环模式下,启动开始默认开环,等速度上来后切换到闭环 FOC_MODE_CURRENT_LOOP, //ֻ电流环模式 FOC_MODE_SPEED_LOOP, //ֻ速度环模式 FOC_MODE_CLOSE_LOOP, //电流速度双闭环模式 }control_mode_t; typedef enum { INVERT_NO, INVERT_A, INVERT_B, INVERT_C }phase_invert_t; typedef struct current_sample { u32 adc_offset_a; u32 adc_offset_b; u32 adc_offset_c; u32 adc_offset_ivbus; float Ia; float Ib; float Ic; float Rds_a; //各相MOS的DS极内阻,在线测量. 单位欧 float Rds_b; float Rds_c; phase_invert_t vbus_i_invert; u8 sector; volatile int offset_sample_count; bool is_calibrating_offset; }current_samp_t; /* typedef struct _override { bool is_theta; float theta; bool is_vdq; dq_t vdq; }override_param_t; */ typedef enum { foc_success = 0, foc_not_allowed = 1, foc_start_with_gas_error, //ready的时候检测到转把信号 foc_stop_with_speed_error, foc_brake_error = 100, }foc_fault_t; typedef struct foc_s { bool is_motor_start; alpha_beta_t alpha_beta; current_samp_t current_samp; /*三相电流采集 */ dq_t dq_command; int speed_command; dq_t dq_last; u8 sector; //svpwm 扇区 float vbus; //母线电压 motor_param_t motor_param; motor_stat_t motor_stat; phase_time_t phase_time; pi_controller_t id_controller; pi_controller_t iq_controller; pi_controller_t speed_controller; foc_state_t state; control_mode_t mode; //override_param_t override; bool mosfec_gate; ramp_t voltage_ramp; //开环情况下直接设置svm的voltage ramp_t current_ramp; //���ٵ���б�� ramp_t speed_ramp; //�ı��ٶȵ�ramp���������ű仯��Ҫ����speed_ramp foc_fault_t foc_fault; bool is_brake_in; }motor_foc_t; typedef enum { NoError = 0, STMNotAllow = 1, }FError; #define degree_2_pi(d) ((float)d * M_PI / 180.0f) #define pi_2_degree(d) ((float)d * 180.0f / M_PI) #define A_mA(a) ((a*1000)) #define mA_A(ma) (((float)(ma))/1000.0f) #define RPM_FOR_CLOSE_LOOP 30.0F #define MAX_SPEED_RPM 3000 #if 1 #define SECTOR_1 0u #define SECTOR_2 1u #define SECTOR_3 2u #define SECTOR_4 3u #define SECTOR_5 4u #define SECTOR_6 5u #else #define SECTOR_1 3u #define SECTOR_2 4u #define SECTOR_3 5u #define SECTOR_4 0u #define SECTOR_5 1u #define SECTOR_6 2u #endif #endif /* _FOC_TYPE_H__ */