| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- #ifndef _FOC_TYPE_H__
- #define _FOC_TYPE_H__
- #include <math.h>
- #include "os/os_type.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 {
- s32 adc_offset_a;
- s32 adc_offset_b;
- s32 adc_offset_c;
- s32 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 {
- int speed;
- u32 delta_ts; //ms
- }speed_cmd_t;
- typedef struct foc_s {
- bool is_motor_start;
- alpha_beta_t alpha_beta;
- current_samp_t current_samp; /*三相电流采集 */
- dq_t dq_command;
- speed_cmd_t 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__ */
|