motor_control.h 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. #ifndef __MOTOR_CONTROL_H
  2. #define __MOTOR_CONTROL_H
  3. #include "stm32f1xx_hal.h"
  4. #include "var.h"
  5. #include "adc.h"
  6. /*********************************类型定义*******************************/
  7. //推行模式处理控制变量
  8. typedef struct
  9. {
  10. TrueOrFalse_Flag_Struct_t IsEnterFlag; //进入推行模式标志
  11. uint32_t MotorSpeedSetBegin; //进入推行模式电机转速值
  12. }MC_WalkProcess_Param_Struct_t;
  13. //力矩模式处理控制变量
  14. typedef struct
  15. {
  16. FlagStatus MotorStopLock_Flag; //停机锁定标志
  17. uint16_t TorqueApp; //力矩采集值
  18. int16_t TorqueRef; //助力计算结果
  19. int16_t TorqueRefEnd; //助力给定值
  20. }MC_TorqueProcess_Param_Struct_t;
  21. //踏频模式处理控制变量
  22. typedef struct
  23. {
  24. FlagStatus MotorStopLock_Flag; //停机锁定标志
  25. uint16_t CadenceInput; //踏频采集值
  26. TrueOrFalse_Flag_Struct_t IsEnterFlag; //进入踏频模式标志
  27. uint32_t MotorSpeedSetBegin; //进入踏频模式电机转速值
  28. }MC_CadenceProcess_Param_Struct_t;
  29. //电机工作模式
  30. typedef enum
  31. {
  32. MC_WorkMode_Run = 0U,
  33. MC_WorkMode_Config
  34. }MC_WorkMode_Struct_t;
  35. typedef enum
  36. {
  37. MC_GearSt_OFF = 0x00,
  38. MC_GearSt_Torque_ECO = 0x01,
  39. MC_GearSt_Torque_NORM = 0x02,
  40. MC_GearSt_Torque_SPORT = 0x03,
  41. MC_GearSt_Torque_TURBO = 0x04,
  42. MC_GearSt_Torque_5 = 0x05,
  43. MC_GearSt_Cadence_ECO = 0x11,
  44. MC_GearSt_Cadence_NORM = 0x12,
  45. MC_GearSt_Cadence_SPORT = 0x13,
  46. MC_GearSt_Cadence_TURBO = 0x14,
  47. MC_GearSt_SMART = 0x33,
  48. MC_GearSt_SMART_T = 0x44,
  49. MC_GearSt_WALK = 0x22
  50. }MC_GearSt_Struct_t;
  51. //电机控制指令,占用空间2bytes
  52. typedef struct
  53. {
  54. MC_GearSt_Struct_t GearSt; //助力档位
  55. MC_LightSwitch_Struct_t LightSwitch; //灯开关 0xF0-关,0xF1-开
  56. }MC_ControlCode_Struct_t;
  57. typedef enum
  58. {
  59. MC_AssistRunMode_WALK = 1U, // 推行模式
  60. MC_AssistRunMode_TORQUE, // 力矩模式
  61. MC_AssistRunMode_CADENCE, // 踏频模式
  62. MC_AssistRunMode_GAS , // 指拨模式
  63. MC_AssistRunMode_INVALID // 无效模式
  64. } MC_AssistRunMode_Struct_t;
  65. //电机控制参数
  66. typedef struct
  67. {
  68. MC_AssistRunMode_Struct_t AssistRunMode; //助力模式
  69. int16_t Ref_Torque; //力矩模式输入FOC值
  70. int16_t Ref_Speed; //速度模式输入FOC值
  71. FlagStatus Foc_Flag; //FCO运算标志
  72. }MC_CalParam_Struct_t;
  73. /**********************************变量声明**********************************/
  74. extern MC_WorkMode_Struct_t MC_WorkMode;
  75. extern MC_WorkMode_Struct_t MC_WorkMode_Back;
  76. extern MC_ControlCode_Struct_t MC_ControlCode;
  77. extern MC_ControlCode_Struct_t MC_ControlCode_Back;
  78. extern MC_CalParam_Struct_t MC_CalParam;
  79. extern MC_CalParam_Struct_t MC_CalParam_Back;
  80. extern uint8_t MC_CadenceLimit_K;
  81. extern FlagStatus MC_StarFlag;
  82. #define Update_MC_ControlCode_Back() { MC_ControlCode_Back.GearSt = (MC_GearSt_Struct_t)~MC_ControlCode.GearSt;\
  83. MC_ControlCode_Back.LightSwitch = (MC_LightSwitch_Struct_t)~MC_ControlCode.LightSwitch; }
  84. #define Update_MC_CalParam_Back() { MC_CalParam_Back.AssistRunMode = (MC_AssistRunMode_Struct_t)~MC_CalParam.AssistRunMode;\
  85. MC_CalParam_Back.Foc_Flag = (FlagStatus)~MC_CalParam.Foc_Flag;\
  86. MC_CalParam_Back.Ref_Torque = ~MC_CalParam.Ref_Torque;\
  87. MC_CalParam_Back.Ref_Speed = ~MC_CalParam.Ref_Speed; }
  88. #define CADENCE_MODE_ENABLE 0
  89. /*****************************函数声明******************************/
  90. extern void MC_SensorInit(void);
  91. extern void MC_Init(void);
  92. extern void MC_ControlParam_Init(void);
  93. extern void MC_CalParam_Cal(MC_WorkMode_Struct_t p_MC_WorkMode,\
  94. ADC_SensorData_Struct_t p_ADC_SensorData,\
  95. MC_GearSt_Struct_t GearSt, \
  96. TrueOrFalse_Flag_Struct_t Break_Flag, \
  97. TrueOrFalse_Flag_Struct_t GearSensor_Flag, \
  98. MC_CalParam_Struct_t* p_MC_CalParam);
  99. extern void MC_MotorStar(FlagStatus* StarFlag);
  100. extern void MC_MotorStop(FlagStatus* StarFlag);
  101. extern void SpdProportion_calculate(void);
  102. #endif