#ifndef __MOTOR_CONTROL_H #define __MOTOR_CONTROL_H #include "stm32f1xx_hal.h" #include "var.h" #include "adc.h" /*********************************类型定义*******************************/ //推行模式处理控制变量 typedef struct { TrueOrFalse_Flag_Struct_t IsEnterFlag; //进入推行模式标志 uint32_t MotorSpeedSetBegin; //进入推行模式电机转速值 }MC_WalkProcess_Param_Struct_t; //力矩模式处理控制变量 typedef struct { FlagStatus MotorStopLock_Flag; //停机锁定标志 uint16_t TorqueApp; //力矩采集值 int16_t TorqueRef; //助力计算结果 int16_t TorqueRefEnd; //助力给定值 }MC_TorqueProcess_Param_Struct_t; //踏频模式处理控制变量 typedef struct { FlagStatus MotorStopLock_Flag; //停机锁定标志 uint16_t CadenceInput; //踏频采集值 TrueOrFalse_Flag_Struct_t IsEnterFlag; //进入踏频模式标志 uint32_t MotorSpeedSetBegin; //进入踏频模式电机转速值 }MC_CadenceProcess_Param_Struct_t; //电机工作模式 typedef enum { MC_WorkMode_Run = 0U, MC_WorkMode_Config }MC_WorkMode_Struct_t; typedef enum { MC_GearSt_OFF = 0x00, MC_GearSt_Torque_ECO = 0x01, MC_GearSt_Torque_NORM = 0x02, MC_GearSt_Torque_SPORT = 0x03, MC_GearSt_Torque_TURBO = 0x04, MC_GearSt_Torque_5 = 0x05, MC_GearSt_Cadence_ECO = 0x11, MC_GearSt_Cadence_NORM = 0x12, MC_GearSt_Cadence_SPORT = 0x13, MC_GearSt_Cadence_TURBO = 0x14, MC_GearSt_SMART = 0x33, MC_GearSt_SMART_T = 0x44, MC_GearSt_WALK = 0x22 }MC_GearSt_Struct_t; //电机控制指令,占用空间2bytes typedef struct { MC_GearSt_Struct_t GearSt; //助力档位 MC_LightSwitch_Struct_t LightSwitch; //灯开关 0xF0-关,0xF1-开 }MC_ControlCode_Struct_t; typedef enum { MC_AssistRunMode_WALK = 1U, // 推行模式 MC_AssistRunMode_TORQUE, // 力矩模式 MC_AssistRunMode_CADENCE, // 踏频模式 MC_AssistRunMode_GAS , // 指拨模式 MC_AssistRunMode_INVALID // 无效模式 } MC_AssistRunMode_Struct_t; //电机控制参数 typedef struct { MC_AssistRunMode_Struct_t AssistRunMode; //助力模式 int16_t Ref_Torque; //力矩模式输入FOC值 int16_t Ref_Speed; //速度模式输入FOC值 FlagStatus Foc_Flag; //FCO运算标志 }MC_CalParam_Struct_t; /**********************************变量声明**********************************/ extern MC_WorkMode_Struct_t MC_WorkMode; extern MC_WorkMode_Struct_t MC_WorkMode_Back; extern MC_ControlCode_Struct_t MC_ControlCode; extern MC_ControlCode_Struct_t MC_ControlCode_Back; extern MC_CalParam_Struct_t MC_CalParam; extern MC_CalParam_Struct_t MC_CalParam_Back; extern uint8_t MC_CadenceLimit_K; extern FlagStatus MC_StarFlag; #define Update_MC_ControlCode_Back() { MC_ControlCode_Back.GearSt = (MC_GearSt_Struct_t)~MC_ControlCode.GearSt;\ MC_ControlCode_Back.LightSwitch = (MC_LightSwitch_Struct_t)~MC_ControlCode.LightSwitch; } #define Update_MC_CalParam_Back() { MC_CalParam_Back.AssistRunMode = (MC_AssistRunMode_Struct_t)~MC_CalParam.AssistRunMode;\ MC_CalParam_Back.Foc_Flag = (FlagStatus)~MC_CalParam.Foc_Flag;\ MC_CalParam_Back.Ref_Torque = ~MC_CalParam.Ref_Torque;\ MC_CalParam_Back.Ref_Speed = ~MC_CalParam.Ref_Speed; } #define CADENCE_MODE_ENABLE 0 /*****************************函数声明******************************/ extern void MC_SensorInit(void); extern void MC_Init(void); extern void MC_ControlParam_Init(void); extern void MC_CalParam_Cal(MC_WorkMode_Struct_t p_MC_WorkMode,\ ADC_SensorData_Struct_t p_ADC_SensorData,\ MC_GearSt_Struct_t GearSt, \ TrueOrFalse_Flag_Struct_t Break_Flag, \ TrueOrFalse_Flag_Struct_t GearSensor_Flag, \ MC_CalParam_Struct_t* p_MC_CalParam); extern void MC_MotorStar(FlagStatus* StarFlag); extern void MC_MotorStop(FlagStatus* StarFlag); extern void SpdProportion_calculate(void); #endif