commands.h 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. #ifndef _FOC_CMD_H__
  2. #define _FOC_CMD_H__
  3. #include "os/os_types.h"
  4. #include "config.h"
  5. typedef enum {
  6. Foc_Start_Motor = 32, //foc_start_stop_t, ready, unread, 014d01
  7. Foc_Cali_Hall_Phase, //calibrate hall phase, get the angle when motor running 0-360
  8. Foc_Cali_Hall_Offset,//calibrate hall offset from A phase 0x034d00
  9. Foc_Set_iDC_Limit, //u32, set the limited current//mA
  10. Foc_Set_Speed_Limit, //u32, set the limited speed//rpm
  11. Foc_Set_Speed_Target, //u32, set the target speed, just for test
  12. Foc_Set_Cruise_Speed, //u32, set the speed for curise riding
  13. Foc_Set_Cruise_Mode,
  14. Foc_Set_Phase_CurrLim,
  15. Foc_Set_Ctrl_Mode,
  16. Foc_Set_Gear_Limit, //通过设置限速,限相电流,限母线电流上层可以实现任意挡位
  17. Foc_Set_Open_Dq_Vol, //u32, u32, 114d000000000a000000, 114d0000000000000000
  18. Foc_Set_EPM_Mode,
  19. Foc_Start_EPM_Move,
  20. Foc_Conf_Pid,
  21. Foc_Start_DQ_Calibrate,
  22. Foc_Set_IS_Curr_Angle, //设置DQ电流矢量和超前角
  23. Foc_Set_Plot_Type,
  24. Foc_Set_Throttle_throld,
  25. Foc_Set_eBrake_Throld,
  26. Foc_Lock_Motor,
  27. Foc_Auto_Hold,
  28. Foc_Set_Config,
  29. Foc_Get_Config,
  30. Foc_Get_Pid,
  31. Foc_Fan_Duty, //57
  32. Foc_Get_Gear_Limit,
  33. Foc_Set_Thro_Ration,
  34. Foc_Use_SensorLess_Angle,
  35. Foc_Force_Open_Run,
  36. Foc_Enc_Zero_Cali_Result,
  37. Foc_Set_Limiter_Config,
  38. Foc_Get_Limiter_Config,
  39. Foc_Write_Config,
  40. Foc_Read_Config,
  41. Foc_SN_Write, //66
  42. Foc_SN_Read,
  43. Foc_Set_DQ_Current, //0x44
  44. Foc_Set_Gear_Mode,//0-3, eco, normal, sport, turbo
  45. Foc_Set_Adrc_Params,
  46. Foc_Get_Adrc_Params,
  47. Foc_Get_MC_NV_Err_RT,
  48. Foc_Get_MC_NV_Crit_Err,
  49. Foc_IF_Start,
  50. Foc_Hall_Phase_Cali_Result = 160,
  51. Foc_Hall_Offset_Cali_Result,
  52. Foc_Report_Speed,
  53. Foc_Report_Vbus_Current, //u32
  54. Foc_Report_Phase_Current, //s32,s32,s32
  55. Foc_Report_Dq_Current, //s32,s32
  56. Foc_Report_Vbus_Vol, //u32
  57. Foc_Report_Phase_Vol, //u32,u32,u32
  58. Foc_Report_Dq_Vol, //u32, u32
  59. Foc_Report_Power,
  60. Foc_Report_Pid,
  61. Foc_Report_Status,
  62. Foc_Report_MTPA_DQ_Angle,
  63. Foc_Report_Plot,
  64. Foc_Report_Temp,
  65. Foc_Set_LogLevel,
  66. Foc_MotPara_Ind,
  67. Foc_MotPara_Report,
  68. Foc_Set_Force_Torque,
  69. Foc_Cmd_Max = 0xDF
  70. }foc_cmd_t;
  71. #define CMD_2_CAN_KEY(cmd) ((u16)(((u16)cmd) | (CAN_MY_ADDRESS<<8)))
  72. typedef enum {
  73. Foc_Start = 1,
  74. Foc_Stop,
  75. }FSwith_t;;
  76. typedef struct {
  77. foc_cmd_t cmd;
  78. u16 ext_key;
  79. u8 can_src;
  80. u8 len;
  81. void *data;
  82. }foc_cmd_body_t;
  83. #pragma pack (push,1)
  84. typedef struct {
  85. //0-15 bit
  86. u16 start :2; //1:stop, 2:start, 0&3:ignore
  87. u16 gear :3; //0-6 gear, 7:ignore
  88. u16 idc :11;//0-1024A, 0x7FF:ignore
  89. //16-31 bit
  90. u16 ebrk_lvl:4; //0-14, 0xF:ignore
  91. u16 brkpower:2; //1:disable, 2:enable, 3:ignore
  92. u16 etcs :2; //1:disable, 2:enable, 3:ignore
  93. u16 epm :2; //1:disable, 2:enable
  94. u16 epm_dir :2; //0:stop, 1:back, 2 forword
  95. u16 thro_dec:1; //0:do noting, 1:do throttle auto detect
  96. //32-47 bit
  97. u16 cruise :2; //1:disable, 2:enable
  98. u16 inc :2; //1:dec, 2:inc
  99. u16 spd_rel :12;
  100. //48-63 bit
  101. u16 res; //when response, this is the error code
  102. }cmd_2A01_t;
  103. typedef struct {
  104. //0-15 bit
  105. union {
  106. u16 status;
  107. struct _x{
  108. u16 start :1;
  109. u16 gear :2;
  110. u16 autohold :1;
  111. u16 hw_brk :1;
  112. u16 cruise :1;
  113. u16 epm_mode :1;
  114. u16 lock_mot :1;
  115. u16 e_brk :1;
  116. u16 crit_err :1;
  117. u16 fan_run :1;
  118. u16 stall :1;
  119. u16 idc_lim :1;
  120. u16 trq_lim :1;
  121. u16 etcs_run :1;
  122. u16 thro_err :1;
  123. }s;
  124. }ustat;
  125. //16-31 bit
  126. u16 vdc :9;
  127. u16 mot_ll :2; //motor temp limiter level
  128. u16 mos_ll :2; //mos temp limiter level
  129. u16 res :3;
  130. //31-63 bit
  131. u32 idc :11;// -1024 ~ +1023
  132. u32 rpm :14;
  133. u32 thro_e :4 ;//throttle error bit mask
  134. }indicat_2A02_t;
  135. typedef struct {
  136. u8 start_stop; //1: start, 2: stop
  137. }foc_start_cmd_t;
  138. typedef struct {
  139. u32 vq_mvol; //mV
  140. }hall_phase_cali_cmd_t;
  141. typedef struct {
  142. u32 vq_mvol; //mV
  143. u32 step_inc; //degree
  144. u32 step_time;//second
  145. }hall_offset_cali_cmd_t;
  146. #pragma pack(pop)
  147. void foc_command_init(void);
  148. bool foc_send_command(foc_cmd_body_t *command);
  149. void can_debug(bool enable);
  150. #endif /*_FOC_CMD_H__ */