foc_type.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. #ifndef _FOC_TYPE_H__
  2. #define _FOC_TYPE_H__
  3. #include <math.h>
  4. #include "libs/os.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. START,
  47. CURRENT_CALIBRATE,
  48. CHARGER_BOOT_CAP,
  49. READY_TO_RUN,
  50. RAMPING_START,
  51. RUNNING,
  52. ANY_STOP
  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 struct current_sample {
  61. u32 adc_offset_a;
  62. u32 adc_offset_b;
  63. u32 adc_offset_c;
  64. u32 adc_offset_ivbus;
  65. float Ia;
  66. float Ib;
  67. float Ic;
  68. u32 adc_vbus_ia;
  69. u32 adc_vbus_ib;
  70. u32 adc_vbus_ic;
  71. u8 sector;
  72. u32 adc_inject_flags;
  73. volatile int offset_sample_count;
  74. bool is_calibrating_offset;
  75. }current_samp_t;
  76. /*
  77. typedef struct _override {
  78. bool is_theta;
  79. float theta;
  80. bool is_vdq;
  81. dq_t vdq;
  82. }override_param_t;
  83. */
  84. typedef enum {
  85. foc_success = 0,
  86. foc_not_allowed = 1,
  87. foc_brake_error = 100,
  88. }foc_fault_t;
  89. typedef struct foc_s {
  90. bool is_ready;
  91. alpha_beta_t alpha_beta;
  92. current_samp_t current_samp; /*三相电流采集 */
  93. dq_t dq_command;
  94. int speed_command;
  95. dq_t dq_last;
  96. u8 sector; //svpwm 扇区
  97. float vbus; //母线电压
  98. motor_param_t motor_param;
  99. motor_stat_t motor_stat;
  100. phase_time_t phase_time;
  101. pi_controller_t id_controller;
  102. pi_controller_t iq_controller;
  103. pi_controller_t speed_controller;
  104. foc_state_t state;
  105. control_mode_t mode;
  106. //override_param_t override;
  107. bool mosfec_gate;
  108. ramp_t voltage_ramp; //开环情况下直接设置svm的voltage
  109. ramp_t current_ramp; //���ٵ���б��
  110. ramp_t speed_ramp; //�ı��ٶȵ�ramp���������ű仯��Ҫ����speed_ramp
  111. foc_fault_t foc_fault;
  112. bool is_brake_in;
  113. }motor_foc_t;
  114. typedef enum {
  115. NoError = 0,
  116. STMNotAllow = 1,
  117. }FError;
  118. #define degree_2_pi(d) ((float)d * M_PI / 180.0f)
  119. #define pi_2_degree(d) ((float)d * 180.0f / M_PI)
  120. #define A_mA(a) ((a*1000))
  121. #define mA_A(ma) (((float)(ma))/1000.0f)
  122. #define RPM_FOR_CLOSE_LOOP 30.0F
  123. #define MAX_SPEED_RPM 3000
  124. #if 1
  125. #define SECTOR_1 0u
  126. #define SECTOR_2 1u
  127. #define SECTOR_3 2u
  128. #define SECTOR_4 3u
  129. #define SECTOR_5 4u
  130. #define SECTOR_6 5u
  131. #else
  132. #define SECTOR_1 3u
  133. #define SECTOR_2 4u
  134. #define SECTOR_3 5u
  135. #define SECTOR_4 0u
  136. #define SECTOR_5 1u
  137. #define SECTOR_6 2u
  138. #endif
  139. #endif /* _FOC_TYPE_H__ */