foc_type.h 3.5 KB

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