#ifndef __VAR_H #define __VAR_H #include "stm32f1xx_hal.h" #include "cadence_sensor.h" #include "stdlib.h" #include "string.h" /******************************类型定义Begin*************************/ typedef enum { NoName = 0x00, STM32F103RBT6, APM32F103RBT6, HK32F103RBT6, GD32F103RBT6 }MCU_Manufacturter_Struct_t; typedef enum { MC_LightSwitch_OFF = 0xF0, MC_LightSwitch_ON = 0xF1 }MC_LightSwitch_Struct_t; //电机运行信息,占用空间32bytes typedef struct { uint16_t BikeSpeed; //车速 0.1km/h,地址偏移0 int16_t MotorSpeed; //输出转速 1rpm,地址偏移2 uint16_t Power; //电功率 1W,地址偏移4 uint16_t BusVoltage; //母线电压 1mV,地址偏移6 uint16_t BusCurrent; //母线电流 1mA,地址偏移8 uint8_t Cadence; //踏频 1rpm,地址偏移10 uint8_t Torque; //踩踏力矩 1Nm,地址偏移11 MC_CadenceDir_Struct_t CadenceDir; //踩踏方向 0-正,1-反,2-停止,地址偏移12 uint8_t GearSt; //助力档位,地址偏移13 MC_LightSwitch_Struct_t LightSwitch; //灯开关 0xF0-关,0xF1-开,地址偏移14 uint8_t SOC; //剩余电量 1%,地址偏移15 uint16_t RemainDistance; //续航里程 1km,地址偏移16 uint16_t ODO_Km; //总里程 1km,地址偏移18 uint8_t PowerPerKm; //平均功耗 0.01Ah/km ,地址偏移20 uint8_t T_PCB; //PCB温度 +40℃,地址偏移21 uint8_t T_Coil; //绕组温度 +40℃,地址偏移22 uint8_t T_MCU; //MCU温度 +40℃,地址偏移23 uint16_t Ride_Km; //开机后骑行里程 0.1km, 地址偏移24 uint16_t Ride_Time; //开机后骑行时间 1s,地址偏移26 uint8_t RS2[4]; //预留 4bytes }MC_RunInfo_Struct_t; //电机故障码,占用空间4bytes typedef union MC_ERRORCODE { struct { uint32_t Protect_OverCurrent :1;//过流保护 uint32_t Protect_UnderVoltage :1;//低压保护 uint32_t Protect_OverVoltage :1;//过压保护 uint32_t Protect_LockRotor :1;//堵转保护 uint32_t Protect_OverTemp :1;//过热保护 uint32_t Fault_SpeedSensor :1;//速度传感器故障 uint32_t Fault_TorqueSensor :1;//力矩传感器故障 uint32_t Fault_HallSensor :1;//霍尔传感器故障 uint32_t Fault_PhaseLine :1;//相线故障 uint32_t Fault_NtcSensor :1;//温度传感器故障 uint32_t Fault_BMS_Check :1;//BMS校验失败 uint32_t Fault_HMI_Check :1;//HMI校验失败 uint32_t Fault_PBU_Check :1;//PBU校验失败 uint32_t Fault_MCU :1;//MCU故障 uint32_t Fault_CadenceSensor :1;//踏频传感器故障 uint32_t Fault_GasSensor :1;//指拨故障 uint32_t Fault_MOS :1;//MOS短路 uint32_t Protect_VoltageChange :1;//电压波动异常 uint32_t Fault_Circuit :1;//电路故障 uint32_t Fault_TE_MCU :1;//TE MCU故障 uint32_t Fault_TE_Circuit :1;//TE 电路故障 uint32_t Fault_MC_Check :1;//MC校验失败 uint32_t Fault_Machine :1;//机械故障 uint32_t RS2 :1; uint32_t RS3 :1; uint32_t RS4 :1; uint32_t RS5 :1; uint32_t RS6 :1; uint32_t RS7 :1; uint32_t RS8 :1; uint32_t RS9 :1; uint32_t RS10 :1; }ERROR_Bit; uint32_t Code; }MC_ErrorCode_Struct_t; //在线检测结果,占用空间1byte typedef union ONLINE_STATUS { struct { uint8_t BMS_OffLine :1;//BMS离线 uint8_t PBU_OffLine :1;//PBU离线 uint8_t HMI_OffLine :1;//HMI离线 uint8_t RS1 :1; uint8_t RS2 :1; uint8_t RS3 :1; uint8_t RS4 :1; uint8_t RS5 :1; }Status_Bit; uint8_t Status; }OnLine_Status_Struct_t; //授权校验,占用空间24bytes typedef struct { uint8_t MAC_ID[12]; //物理ID uint8_t CheckCode[12]; //校验码 }Device_CheckInfo_Struct_t; //BMS设计信息,占用空间16bytes typedef struct { uint16_t Capacity; //电池设计容量,地址偏移0 uint8_t Voltage; //电池设计电压,地址偏移2 uint8_t CellMode[8]; //电芯型号,地址偏移3 uint8_t RS[5]; }BMS_DesignInfo_Struct_t; typedef enum STARMODE { NC = 0U, MC_StarMode_SOFT, //1 MC_StarMode_NORM, //2 MC_StarMode_DYNAMIC, //3 }MC_StarMode_Struct_t; typedef struct { uint8_t Assist_K_GAIN; //0.01 50-150 uint8_t StarModel_GAIN; //0.01 50-150 }UserAdjParam_Struct_t; typedef enum MC_SUPPORTFLAG { MC_SUPPORT_ENABLE = (uint8_t)0xAA, //支持 MC_SUPPORT_DISABLE = (uint8_t)0x55 //不支持 }MC_SupportFlag_Struct_t; typedef enum MC_SPEED_SIGNAL { MC_SPEED_CADENCE_CAL = (uint8_t)0xAA, //根据踏频估算 MC_SPEED_WHEEL_TRIG = (uint8_t)0x55, //根据车轮信号触发 MC_SPEED_COMMUNICATION = (uint8_t)0xEE //根据通信数据,车轮旋转1圈的时间 }MC_SpeedSignal_Struct_t; typedef enum MC_TAIL_LIGHT_MODE { MC_TAIL_LIGHT_MODE1 = (uint8_t)0x01, //模式1,连接尾灯,开灯时低亮,刹车时高亮 MC_TAIL_LIGHT_MODE2 = (uint8_t)0x02, //模式2,连接尾灯,开灯时高亮,刹车时闪烁 MC_TAIL_LIGHT_MODE3 = (uint8_t)0x03, //模式3,连接刹车灯,刹车时高亮 MC_TAIL_LIGHT_MODE4 = (uint8_t)0x04 //模式4,连接刹车灯,刹车时闪烁 }MC_TailLight_Mode_Struct_t; typedef enum MC_LIGHT_VOLTAGE { MC_LIGHT_VOL_6V = (uint8_t)0x06, //灯电压6V MC_LIGHT_VOL_12V = (uint8_t)0x0C, //灯电压12V MC_LIGHT_VOL_BATTERY = (uint8_t)0xFF //灯电压随电池电压 }MC_LightVoltage_Struct_t; //用户配置参数1,占用空间32bytes typedef struct { MC_SupportFlag_Struct_t GasCtrlMode_Flag; //指拨模式支持标志,地址偏移0 MC_StarMode_Struct_t StarModel; //启动模式,地址偏移1 uint16_t StopTime; //停机时间 ms,地址偏移2 uint8_t SpeedLimit; //限速 km/h,地址偏移4 uint8_t Deceleration; //下降速度,地址偏移5 uint8_t TeethNum_F; //前齿数 T,地址偏移6 uint8_t TeethNum_B; //后齿数 T,地址偏移7 uint8_t CurrentLimit; //限流 A,地址偏移8 uint8_t TempTH_Alarm; //高温预警值 +40℃,地址偏移9 uint8_t TempTH_Protect; //高温保护值 +40℃,地址偏移10 MC_SupportFlag_Struct_t NoPBU_Flag; //0x55-不支持,0x-AA支持,地址偏移11 uint8_t WheelSize; //轮胎周长 cm,地址偏移12 uint8_t SerialNum; //系列号,地址偏移13 UserAdjParam_Struct_t UserAdjParam_ECO; //用户微调助力比增益和加速度增益,地址偏移14 UserAdjParam_Struct_t UserAdjParam_NORM; //用户微调助力比增益和加速度增益,地址偏移16 UserAdjParam_Struct_t UserAdjParam_SPORT; //用户微调助力比增益和加速度增益,地址偏移18 UserAdjParam_Struct_t UserAdjParam_TURBO; //用户微调助力比增益和加速度增益,地址偏移20 UserAdjParam_Struct_t UserAdjParam_SMART; //用户微调助力比增益和加速度增益,地址偏移22 uint8_t SpeedSensorPoles; //速度传感器极数,地址偏移24 uint8_t CadenceStarNum; //踏频启动信号个数,地址偏移25 MC_SpeedSignal_Struct_t SpeedSignal; //0x55-车轮触发,0x-AA踏频计算,0xEE-通讯获取车轮旋转周期,地址偏移26 int8_t WheelSizeAdj; //周长微调值,地址偏移27 uint16_t UV_Protect_TH; //低压保护值,地址偏移28 uint8_t WalkMode_SpeedLimit; //推行模式限速,地址偏移30 uint8_t WalkMode_MotorSpeedSet; //推行模式电机转速设置,地址偏移31 }MC_ConfigParam1_Struct_t; //用户配置参数2,占用空间32bytes typedef struct { int16_t ZeroAngle_Pitch; //俯仰角零度偏移,地址偏移0 int16_t ZeroAngle_Roll; //横滚角零度偏移,地址偏移2 MC_SupportFlag_Struct_t UseAttitudeAngle_Flag; //支持姿态角度传感器标志,地址偏移4 MC_TailLight_Mode_Struct_t MC_TailLight_Mode; //尾灯功能,地址偏移5 MC_LightVoltage_Struct_t HeadLightVol; //前灯电压 MC_LightVoltage_Struct_t TailLightVol; //后灯电压 uint8_t RS2[24]; //地址偏移8 }MC_ConfigParam2_Struct_t; //姿态传感器数值 typedef struct { int16_t Angle_Pitch_Absolute; //俯仰角绝对角度 int16_t Angle_Roll_Absolute; //横滚角绝对角度 int16_t Angle_Pitch_Relative; //俯仰角相对角度 int16_t Angle_Roll_Relative; //横滚角相对角度 }MC_AttitudeAngle_Struct_t; //力矩传感器校正信息 typedef struct { uint16_t StarData;//启动值,地址偏移0 uint8_t K; //校正系数,地址偏移2 uint8_t Rs; //预留1byte,地址偏移3 }MC_TorqueCorrectParam_Struct_t; //马达配置参数,占用空间16bytes typedef struct { uint16_t Rate_Power; //W,地址偏移0 uint16_t Rate_Speed; //rpm,地址偏移2 uint16_t Coil_R; //mohm,地址偏移4 uint16_t Coil_Lq; //mH,地址偏移6 uint16_t Coil_Ld; //mH,地址偏移8 uint16_t Back_EMF; //mV,地址偏移10 uint8_t Rate_Voltage; //V,地址偏移12 uint8_t RS[3]; }MC_MotorParam_Struct_t; //MC运行历史,占用空间48bytes typedef struct { uint32_t PowerOnCnt; //开机次数,地址偏移0 uint32_t RunTime; //运行总时间 min,地址偏移4 uint16_t OC_ProtectCnt; //过流保次数 ,地址偏移8 uint16_t UV_ProtectCnt; //低压保护次数,地址偏移10 uint16_t OV_ProtectCnt; //高压保护次数,地址偏移12 uint16_t LockRotor_ProtectCnt; //堵转保护次数 ,地址偏移14 uint16_t OT_ProtectCnt; //温度保护次数,地址偏移16 uint16_t SPS_FaultCnt; //速度传感器错误次数,地址偏移18 uint16_t TQS_FaultCnt; //力矩传感器错误次数 ,地址偏移20 uint16_t Hall_FaultCnt; //霍尔传感器错误次数 ,地址偏移22 uint16_t PhaseLine_FaultCnt; //马达相线错误次数,地址偏移24 uint16_t NTC_FaultCnt; //NTC错误次数,地址偏移26 uint16_t BMS_Check_FaultCnt; //BMS校验错误次数,地址偏移28 uint16_t HMI_Check_FaultCnt; //HMI校验错误次数,地址偏移30 uint16_t PBU_Check_FaultCnt; //PBU校验错误次数 ,地址偏移32 uint8_t T_PCB_Max; //PCB历史最高温,地址偏移34 uint8_t T_PCB_Min; //PCB历史最低温,地址偏移35 uint8_t MachineFaultCnt; //单向器打滑故障次数,地址偏移36 uint8_t RS1[3]; uint8_t T_Coil_Max; //绕组历史最高温,地址偏移40 uint8_t T_Coil_Min; //绕组历史最低温,地址偏移41 uint8_t T_MCU_Max; //MCU历史最高温,地址偏移42 uint8_t T_MCU_Min; //MCU历史最低温,地址偏移43 uint8_t RS2[4]; }MC_RunLog1_Struct_t; //MC运行历史,占用空间24bytes typedef struct { uint16_t MCU_FaultCnt; uint16_t CadenceSensor_FaultCnt; uint16_t GasSensor_FaultCnt; uint16_t MOS_ShortCircuit_FaultCnt; uint16_t VoltageChange_FaultCnt; uint16_t Circuit_FaultCnt; uint16_t TE_MCU_FaultCnt; uint16_t TE_Circuit_FaultCnt; }MC_RunLog2_Struct_t; //MC骑行历史信息,占用空间16bytes typedef struct { uint32_t ODO_Km; //ODO里程,地址偏移0 uint32_t ODO_Time; //ODO时间,地址偏移4 uint32_t TRIP_Km; //TRIP里程,地址偏移8 uint32_t TRIP_Time; //TRIP时间,地址偏移12 }MC_RideLog_Struct_t; //MC版本信息,占用空间64bytes typedef struct { char Mode[16]; //型号 ASCII,0x2E结束,无效填充0x20 char SN_Num[16]; //序列号 ASCII,0x2E结束,无效填充0x20 char HW_Version[16]; //硬件版本 ASCII,0x2E结束,无效填充0x20 char FW_Version[16]; //软件版本 ASCII,0x2E结束,无效填充0x20 }MC_VerInfo_Struct_t; //MC生产信息,占用空间32bytes typedef struct { char Manufacturer[8]; //生产厂商 ASCII,0x2E结束,无效填充0x20 char MacAddr[8]; //生产地 ASCII,0x2E结束,无效填充0x20 char MacDate[8]; //生产日期 ASCII,0x2E结束,无效填充0x20 char RS[8]; }MC_MacInfo_Struct_t; //MC掉电临时保存数据,占用40bytes typedef struct { uint32_t ODO_Km; uint32_t ODO_Time; uint32_t Trip_Km; uint32_t Trip_Time; uint32_t Run_Time; uint32_t RS[5]; }MC_PowerOffBkp_Struct_t; //电池运行状态,占用空间1bytes typedef union BMS_STATUS { struct { uint8_t Charge :1;//充电 uint8_t Discharge :1;//放电 uint8_t RS1 :1; uint8_t RS2 :1; uint8_t RS3 :1; uint8_t RS4 :1; uint8_t RS5 :1; uint8_t RS6 :1; }Status_Bit; uint8_t Status; }BMS_STATUS_Struct_t; //电池运行信息,占用空间16bytes typedef struct { uint16_t Voltage; //电压 1mV,地址偏移0 uint16_t Current; //电流 1mA,地址偏移2 uint16_t RC; //剩余容量 1mAh,地址偏移4 uint16_t FCC; //满充容量 1mAh,地址偏移6 uint8_t Cell_NTC; //电芯温度 +40℃,地址偏移8 uint8_t SOC; //剩余电量 1%,地址偏移9 BMS_STATUS_Struct_t Status; //运行状态,地址偏移10 uint8_t RS[5]; }BMS_RunInfo_Struct_t; //PBU配置的参数,占用空间8bytes typedef struct { uint8_t GearsNum; //助力档位数量 MC_SupportFlag_Struct_t NoHMI_Flag; //支持无HMI标识,0x55-不支持,0x-AA支持 uint8_t RS[6]; }PBU_ConfigParam_Struct_t; typedef union TE_ERROR_CODE { struct { uint16_t BikeSpeed :1;//速度传感器, 电路故障 uint16_t TorqueSensor :1;//力矩传感器, 电路故障 uint16_t Current :1;//母线电流, 电路故障 uint16_t T_Coil :1;//绕组温度, 电路故障 uint16_t HallSensor_A :1;//霍尔传感器A, 电路故障 uint16_t HallSensor_B :1;//霍尔传感器A, 电路故障 uint16_t CadenseSensor_1 :1;//踏频传感器1, 电路故障 uint16_t CadenseSensor_2 :1;//踏频传感器2, 电路故障 uint16_t StopBreak :1;//刹车信号, 电路故障 uint16_t VCC :1;//3.3V异常, 电路故障 uint16_t ClockFreq :1;//系统时钟异常, 主控MCU故障 uint16_t ComFault :1;//串口通讯RX故障,主控MCU故障 uint16_t MCUFault :1;//MCU异常, TE MCU故障 uint16_t RS1 :1; uint16_t RS2 :1; uint16_t RS3 :1; }Status_Bit; uint16_t Code; }TE_ErrorCode_Struct_t; //TE传回传感器状态 typedef struct { TE_ErrorCode_Struct_t TE_ErrorCode; uint16_t MCU_Voltage; uint16_t SyncClockFreq; uint16_t RS; }MC_TE_SensorStatus_Struct_t; //发给TE传感器结果 typedef struct { uint16_t AD_Torque; //力矩传感器AD值,地址偏移0 uint16_t AD_BusCurrent; //母线电流AD值,地址偏移2 uint16_t AD_CoilTemp; //绕组温度AD值,地址偏移4 uint16_t AD_TE_Voltage; //TE电压AD值,地址偏移6 uint16_t CadenceHall_1_Cnt; //踏频霍尔1计数,地址偏移8 uint16_t CadenceHall_2_Cnt; //踏频霍尔2计数,地址偏移10 uint16_t MotorHall_A_Cnt; //马达霍尔1计数,地址偏移12 uint16_t MotorHall_B_Cnt; //马达霍尔2计数,地址偏移14 uint8_t BreakTrgiCnt; //刹车计数,地址偏移16 uint8_t SpeedSensorTrigCnt; //速度传感器计数,地址偏移17 uint16_t SynC_Clock_Freq; //地址偏移18 }MC_TE_SensorData_Struct_t; typedef enum _TO_TE_SENDSTEP { HANDSHAKE = 0U, SENDSENSOR, SENDUPDATA, }To_Te_SendStep; //助力计算参数 typedef struct { uint16_t Gain_K; //助力比系数,放大100倍,偏移地址 0 uint16_t TorqueApp_TH; //i-Sport档位力矩阈值,偏移地址 2 uint16_t Lower_Iq; //助力输出下限值,偏移地址 4 uint16_t Upper_Iq; //助力输出上限值,偏移地址 6 uint8_t AccCnt; //力矩控制ref加速斜率, 偏移地址 8 uint8_t DecCnt; //力矩控制ref减速斜率, 偏移地址 9 uint16_t CurrentMax_K; //最大电流 / 限流值百分比, 偏移地址 10 }nGearParam_Struct_t; //n档位控制参数结构体定义 typedef struct { nGearParam_Struct_t Gear_ECO; //ECO档控制参数,偏移地址 0 nGearParam_Struct_t Gear_NORM; //NORM档控制参数,偏移地址 12 nGearParam_Struct_t Gear_SPORT; //SPORT档控制参数,偏移地址 24 nGearParam_Struct_t Gear_TURBO; //TURBO档控制参数,偏移地址 36 nGearParam_Struct_t Gear_5; //新增的5档控制参数,偏移地址 48 nGearParam_Struct_t Gear_SMART; //SMART档控制参数,偏移地址 60 nGearParam_Struct_t Gear_SMART_T; //新增的T控制参数,偏移地址 72 }MC_AssistParam_Struct_t; typedef struct { TrueOrFalse_Flag_Struct_t IsOK_Flag; uint32_t OK_TrigTime; }ComOK_Check_Struct_t; //各个助力档位平均功耗 typedef struct { uint16_t GearSt_ECO; //ECO平均功耗,单位mAh/km uint16_t GearSt_NORM; //NORM平均功耗,单位mAh/km uint16_t GearSt_SPORT; //SPORT平均功耗,单位mAh/km uint16_t GearSt_TURBO; //TURBO平均功耗,单位mAh/km uint16_t GearSt_SMART; //SMART平均功耗,单位mAh/km uint16_t GearSt_SMART_T;//SMART_T平均功耗,单位mAh/km uint16_t GearSt_5; //新增的5档平均功耗,单位mAh/km uint16_t Rs[1]; }MC_AvgPower_Struct_t; //硬件版本定义表 extern const uint16_t Ver_Table[11]; /******************************类型定义End***************************/ /**************************全局变量声明Begin*************************/ extern MC_RunInfo_Struct_t MC_RunInfo; extern MC_ErrorCode_Struct_t MC_ErrorCode; extern MC_VerInfo_Struct_t MC_VerInfo; extern char Firmware_Special[32]; extern OnLine_Status_Struct_t DeviceOnLine_Status; extern BMS_RunInfo_Struct_t BMS_RunInfo; extern Device_CheckInfo_Struct_t BMS_CheckInfo; extern BMS_DesignInfo_Struct_t BMS_DesignInfo; extern Device_CheckInfo_Struct_t PBU_CheckInfo; extern PBU_ConfigParam_Struct_t PBU_ConfigParam; extern Device_CheckInfo_Struct_t HMI_CheckInfo; extern MC_ConfigParam1_Struct_t MC_ConfigParam1; extern MC_ConfigParam2_Struct_t MC_ConfigParam2; extern MC_TorqueCorrectParam_Struct_t MC_TorqueCorrectParam; extern MC_MotorParam_Struct_t MC_MotorParam; extern MC_RunLog1_Struct_t MC_RunLog1; extern MC_RunLog2_Struct_t MC_RunLog2; extern uint8_t RunLogSaveIndex; extern uint8_t Secret_Key[8]; extern MC_MacInfo_Struct_t MC_MacInfo; extern uint8_t UserString1[16]; extern uint8_t UserString2[16]; extern uint8_t UserString3[16]; extern MC_PowerOffBkp_Struct_t MC_PowerOffBkp; extern Device_CheckInfo_Struct_t MC_CheckInfo; extern MC_TE_SensorStatus_Struct_t MC_TE_SensorStatus; extern MC_TE_SensorData_Struct_t MC_TE_SensorData; extern uint16_t MC_TE_SyncClockFreqScan; extern TrueOrFalse_Flag_Struct_t TE_MCU_DataRefreshFlag; extern MC_AssistParam_Struct_t MC_AssisParam; extern uint8_t MC_WalkMode_Persent; extern ComOK_Check_Struct_t IsComOK_TE; extern ComOK_Check_Struct_t IsComOK_PBU; extern ComOK_Check_Struct_t IsComOK_HMI; extern ComOK_Check_Struct_t IsComOK_BMS; extern MC_AttitudeAngle_Struct_t MC_AttitudeAngle; extern MC_RideLog_Struct_t MC_RideLog; extern MC_AvgPower_Struct_t MC_AvgPower; extern MCU_Manufacturter_Struct_t MCUManufacturer; extern uint16_t SpeedRatio; /**************************全局变量声明End***************************/ /**************************全局函数声明Begin*************************/ extern void Var_Init(void); extern void UpdateGearParam(uint8_t SerialNum); extern void Var_SetToDefaultParam(void); extern void Var_SetToDefaultLog(void); /**************************全局函数声明End***************************/ #endif