foc_type.h 3.1 KB

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