foc_type.h 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. #ifndef _FOC_TYPE_H__
  2. #define _FOC_TYPE_H__
  3. #include <math.h>
  4. #include "os/os_type.h"
  5. #include "math/fast_math.h"
  6. #include "pi_controller.h"
  7. #include "ramp_ctrl.h"
  8. typedef struct _alphabeta {
  9. float alpha;
  10. float beta;
  11. }alpha_beta_t;
  12. typedef struct _dqaix {
  13. union {
  14. float Id;
  15. float Vd;
  16. };
  17. union {
  18. float Iq;
  19. float Vq;
  20. };
  21. }dq_t;
  22. typedef struct _motor_p {
  23. int poles; //电机极对数
  24. float ld; //q轴电感
  25. float lq; //d轴电感
  26. float rs; //定子内阻
  27. float flux_linkage; //永磁磁链
  28. float inertia;
  29. float b_emf;
  30. }motor_param_t;
  31. typedef struct _motor_s {
  32. float theta;//ת�ӵ�Ƕ�, PI
  33. int angle;//ת�ӵ�Ƕ�, ��
  34. float rpm; //ת��
  35. }motor_stat_t;
  36. typedef struct _phase_time {
  37. u32 A;
  38. u32 B;
  39. u32 C;
  40. u32 low;
  41. u32 midle;
  42. u32 high;
  43. }phase_time_t; //����pwn��duty cnt
  44. typedef enum {
  45. IDLE = 0,
  46. ANY_STOP,
  47. START,
  48. CURRENT_CALIBRATE,
  49. CHARGER_BOOT_CAP,
  50. READY_TO_RUN,
  51. RAMPING_START,
  52. RUNNING
  53. }foc_state_t;
  54. typedef enum {
  55. FOC_MODE_OPEN_LOOP, //开环模式,霍尔,电流等校准都在开环模式下,启动开始默认开环,等速度上来后切换到闭环
  56. FOC_MODE_CURRENT_LOOP, //ֻ电流环模式
  57. FOC_MODE_SPEED_LOOP, //ֻ速度环模式
  58. FOC_MODE_CLOSE_LOOP, //电流速度双闭环模式
  59. }control_mode_t;
  60. typedef enum {
  61. INVERT_NO,
  62. INVERT_A,
  63. INVERT_B,
  64. INVERT_C
  65. }phase_invert_t;
  66. typedef struct current_sample {
  67. s32 adc_offset_a;
  68. s32 adc_offset_b;
  69. s32 adc_offset_c;
  70. s32 adc_offset_ivbus;
  71. float Ia;
  72. float Ib;
  73. float Ic;
  74. float Rds_a; //各相MOS的DS极内阻,在线测量. 单位欧
  75. float Rds_b;
  76. float Rds_c;
  77. phase_invert_t vbus_i_invert;
  78. u8 sector;
  79. volatile int offset_sample_count;
  80. bool is_calibrating_offset;
  81. }current_samp_t;
  82. /*
  83. typedef struct _override {
  84. bool is_theta;
  85. float theta;
  86. bool is_vdq;
  87. dq_t vdq;
  88. }override_param_t;
  89. */
  90. typedef enum {
  91. foc_success = 0,
  92. foc_not_allowed = 1,
  93. foc_start_with_gas_error, //ready的时候检测到转把信号
  94. foc_stop_with_speed_error,
  95. foc_brake_error = 100,
  96. }foc_fault_t;
  97. typedef struct {
  98. int speed;
  99. u32 delta_ts; //ms
  100. }speed_cmd_t;
  101. typedef struct foc_s {
  102. bool is_motor_start;
  103. alpha_beta_t alpha_beta;
  104. current_samp_t current_samp; /*三相电流采集 */
  105. dq_t dq_command;
  106. speed_cmd_t speed_command;
  107. dq_t dq_last;
  108. u8 sector; //svpwm 扇区
  109. float vbus; //母线电压
  110. motor_param_t motor_param;
  111. motor_stat_t motor_stat;
  112. phase_time_t phase_time;
  113. pi_controller_t id_controller;
  114. pi_controller_t iq_controller;
  115. pi_controller_t speed_controller;
  116. foc_state_t state;
  117. control_mode_t mode;
  118. //override_param_t override;
  119. bool mosfec_gate;
  120. ramp_t voltage_ramp; //开环情况下直接设置svm的voltage
  121. ramp_t current_ramp; //���ٵ���б��
  122. ramp_t speed_ramp; //�ı��ٶȵ�ramp���������ű仯��Ҫ����speed_ramp
  123. foc_fault_t foc_fault;
  124. bool is_brake_in;
  125. }motor_foc_t;
  126. typedef enum {
  127. NoError = 0,
  128. STMNotAllow = 1,
  129. }FError;
  130. #define degree_2_pi(d) ((float)d * M_PI / 180.0f)
  131. #define pi_2_degree(d) ((float)d * 180.0f / M_PI)
  132. #define A_mA(a) ((a*1000))
  133. #define mA_A(ma) (((float)(ma))/1000.0f)
  134. #define RPM_FOR_CLOSE_LOOP 30.0F
  135. #define MAX_SPEED_RPM 3000
  136. #if 1
  137. #define SECTOR_1 0u
  138. #define SECTOR_2 1u
  139. #define SECTOR_3 2u
  140. #define SECTOR_4 3u
  141. #define SECTOR_5 4u
  142. #define SECTOR_6 5u
  143. #else
  144. #define SECTOR_1 3u
  145. #define SECTOR_2 4u
  146. #define SECTOR_3 5u
  147. #define SECTOR_4 0u
  148. #define SECTOR_5 1u
  149. #define SECTOR_6 2u
  150. #endif
  151. #endif /* _FOC_TYPE_H__ */