foc_type.h 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  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 Samp_p1; //单电阻方案两个采样时刻可能不是连续的
  41. u32 Samp_p2;
  42. u32 low;
  43. u32 midle;
  44. u32 high;
  45. }phase_time_t; //����pwn��duty cnt
  46. typedef enum {
  47. IDLE = 0,
  48. ANY_STOP,
  49. START,
  50. CURRENT_CALIBRATE,
  51. CHARGER_BOOT_CAP,
  52. READY_TO_RUN,
  53. RAMPING_START,
  54. RUNNING
  55. }foc_state_t;
  56. typedef enum {
  57. FOC_MODE_OPEN_LOOP, //开环模式,霍尔,电流等校准都在开环模式下,启动开始默认开环,等速度上来后切换到闭环
  58. FOC_MODE_CURRENT_LOOP, //ֻ电流环模式
  59. FOC_MODE_SPEED_LOOP, //ֻ速度环模式
  60. FOC_MODE_CLOSE_LOOP, //电流速度双闭环模式
  61. }control_mode_t;
  62. typedef enum {
  63. INVERT_NO,
  64. INVERT_A,
  65. INVERT_B,
  66. INVERT_C
  67. }phase_invert_t;
  68. typedef struct current_sample {
  69. s32 adc_offset_a;
  70. s32 adc_offset_b;
  71. s32 adc_offset_c;
  72. s32 adc_offset_ivbus;
  73. float Ia;
  74. float Ib;
  75. float Ic;
  76. float Rds_a; //各相MOS的DS极内阻,在线测量. 单位欧
  77. float Rds_b;
  78. float Rds_c;
  79. phase_invert_t vbus_i_invert;
  80. u8 sector;
  81. volatile int offset_sample_count;
  82. bool is_calibrating_offset;
  83. }current_samp_t;
  84. /*
  85. typedef struct _override {
  86. bool is_theta;
  87. float theta;
  88. bool is_vdq;
  89. dq_t vdq;
  90. }override_param_t;
  91. */
  92. typedef enum {
  93. foc_success = 0,
  94. foc_not_allowed = 1,
  95. foc_start_with_gas_error, //ready的时候检测到转把信号
  96. foc_stop_with_speed_error,
  97. foc_brake_error = 100,
  98. }foc_fault_t;
  99. typedef struct {
  100. int speed;
  101. u32 delta_ts; //ms
  102. }speed_cmd_t;
  103. typedef struct foc_s {
  104. bool is_motor_start;
  105. alpha_beta_t alpha_beta;
  106. current_samp_t current_samp; /*三相电流采集 */
  107. dq_t dq_command;
  108. speed_cmd_t speed_command;
  109. dq_t dq_last;
  110. u8 sector; //svpwm 扇区
  111. float vbus; //母线电压
  112. motor_param_t motor_param;
  113. motor_stat_t motor_stat;
  114. phase_time_t phase_time;
  115. pi_controller_t id_controller;
  116. pi_controller_t iq_controller;
  117. pi_controller_t speed_controller;
  118. foc_state_t state;
  119. control_mode_t mode;
  120. //override_param_t override;
  121. bool mosfec_gate;
  122. ramp_t voltage_ramp; //开环情况下直接设置svm的voltage
  123. ramp_t current_ramp; //���ٵ���б��
  124. ramp_t speed_ramp; //�ı��ٶȵ�ramp���������ű仯��Ҫ����speed_ramp
  125. foc_fault_t foc_fault;
  126. bool is_brake_in;
  127. }motor_foc_t;
  128. typedef enum {
  129. NoError = 0,
  130. STMNotAllow = 1,
  131. }FError;
  132. #define degree_2_pi(d) ((float)d * M_PI / 180.0f)
  133. #define pi_2_degree(d) ((float)d * 180.0f / M_PI)
  134. #define A_mA(a) ((a*1000))
  135. #define mA_A(ma) (((float)(ma))/1000.0f)
  136. #define RPM_FOR_CLOSE_LOOP 30.0F
  137. #define MAX_SPEED_RPM 3000
  138. #if 1
  139. #define SECTOR_1 0u
  140. #define SECTOR_2 1u
  141. #define SECTOR_3 2u
  142. #define SECTOR_4 3u
  143. #define SECTOR_5 4u
  144. #define SECTOR_6 5u
  145. #else
  146. #define SECTOR_1 3u
  147. #define SECTOR_2 4u
  148. #define SECTOR_3 5u
  149. #define SECTOR_4 0u
  150. #define SECTOR_5 1u
  151. #define SECTOR_6 2u
  152. #endif
  153. #endif /* _FOC_TYPE_H__ */