#ifndef __ENVIOLO_CAN_H_ #define __ENVIOLO_CAN_H_ #include "stdint.h" #include "can.h" #include "var.h" #define ENVIOLO_CONFIG_ID 0x7AC #define ENVIOLO_CONTROL_ID 0x7AD /*********************************Enviolo自动变速器通信协议内容******************************/ //变速器运行信息 typedef struct GEAR_INFO1 { uint8_t Pedal_Rpm; //踏频 1bit = 1rpm uint8_t Actual_Ratio; //变速比 1bit = 0.1ratio uint8_t Bike_Speed; //车速 1bit = 0.5km/h uint8_t Battery_Vol; //电池电压 1bit = 0.25V uint16_t Wheel_Rpm; //车轮转速 1bit = 1rpm union STATUS_FLAG //状态标志 { struct { uint8_t RS1 :1; uint8_t RS2 :1; uint8_t RS3 :1; uint8_t ShiftActiveFlag :1; //档位切换 uint8_t CaliNeedFlag :1; //需要校准 uint8_t CaliSuccessFlag :1; //校准成功 uint8_t PowerOnFlag :1; //开机 uint8_t InitialFlag :1; //初始化完成 }StatusFlagBit; uint8_t Flag; }StatusFlag; union ERROR_FLAG //错误标志 { struct { uint8_t OverCurrentFlag :1; //过流 uint8_t CaliFailFlag :1; //校准失败 uint8_t RS1 :1; uint8_t StallFlag :1; //工作异常 uint8_t RS2 :1; uint8_t RS3 :1; uint8_t RS4 :1; uint8_t RS5 :1; }ErrorFlagBit; uint8_t Flag; }ErrorFlag; uint8_t RS1; }EnvioloGearInfo1_Struct_t; //变速器运行参数 typedef struct GEAR_INFO2 { uint8_t PCB_Version_Major; uint8_t PCB_Version_Mino; uint8_t PCB_Version_BugFix; uint8_t RS1; uint8_t Soft_Version; uint8_t RS2; uint8_t RS3; uint8_t RS4; }EnvioloGearInfo2_Struct_t; //变速器配置参数 typedef struct CONFIG_PARAMS { uint8_t FrontChain; //前牙盘 1bit = 1tooth uint8_t RearTeeth; //后牙盘 1bit = 1tooth uint8_t CadenceMin; //自动模式最低踏频 1bit = 1rpm uint8_t CadenceMax; //自动模式最高踏频 1bit = 1rpm uint8_t RS1; uint8_t WheelSize; //轮胎周长 1bit = 1cm, offset = 100cm uint8_t SleepTime; //自动关机时间 1bit = 1min uint8_t RS2; }EnvioloConfigParams_Struct_t; //变速器模式枚举 typedef enum GEAR_MODE { ENVIOLO_INACTIVE = 0x00, ENVIOLO_ACTIVE = 0x01, ENVIOLO_MANUAL_MODE = 0x03, ENVIOLO_AUTO_MODE = 0x04, ENVIOLO_CAL_MODE = 0x08 }GearMode_Struct_t; //变速器控制参数 typedef struct CONTROL_PARAMS { GearMode_Struct_t GearMode; uint16_t RatioMode_Data; uint16_t CadenceMode_Data; uint8_t RS1; uint8_t RS2; uint8_t RS3; }EnvioloControlParams_Struct_t; /**********************************End******************************/ //变速器CAN报文数据 typedef struct GEARBOX_CAN_DATA { TrueOrFalse_Flag_Struct_t RefreshFlag; uint8_t RS; uint16_t ID; uint8_t Data[8]; }GearBox_CanData_Struct_t; /******************************仪表与变速器通信协议内容*******************************/ //发送仪表运行信息变速器运行状态 typedef enum GEAR_BOX_STATUS { GEAR_STATUS_INITIAL = (uint8_t)(1 << 5), //初始化模式 GEAR_STATUS_MANUAL = (uint8_t)(2 << 5), //手动模式 GEAR_STATUS_AUTO = (uint8_t)(4 << 5), //自动模式 GEAR_STATUS_OFFLINE = (uint8_t)0xF0 //离线模式 }GearBox_Status_Struct_t; //仪表发送变速器工作模式 typedef enum GEAR_BOX_MODE { GEAR_MODE_NULL = (uint8_t)0x00, //初始化模式位无效值 GEAR_MODE_MANUAL = (uint8_t)0x03, //自动模式 GEAR_MODE_AUTO = (uint8_t)0x04, //手动模式 GEAR_MODE_CAL = (uint8_t)0x08 //校准模式 }GearBox_Mode_Struct_t; //发送仪表校准状态 typedef enum GEAR_BOX_CAL_FLAG { GEAR_CAL_SUCCESS = 0X00, //无需校准或校准成功 GEAR_CAL_NEED = 0x01, //需要校准 GEAR_CAL_PEDAL = 0x02 //提示踩踏 }GearBox_CalFlag_Struct_t; //仪表设置变速器模式 0x4008 typedef struct OBC_SET_MODE { GearBox_Mode_Struct_t Mode; //变速器工作模式,手动、自动、校准 uint8_t Value; //手动模式变速比或自动模式目标踏频 uint8_t RS[6]; }GearBox_OBC_SetMode_Struct_t; //仪表配置变速器参数 0x4208 typedef struct OBC_SET_PARAMS { uint8_t GearNum; //手动模式档位数量 uint8_t CadenceMin; //自动模式最低踏频 uint8_t CadenceMax; //自动模式最高踏频 uint8_t RS[5]; }GearBox_OBC_SetParams_Struct_t; /*************************************End*************************************/ //全局变量定义 extern EnvioloGearInfo1_Struct_t EnvioloGearInfo1; //Enviolo变速器运行信息,踏频、传动比、车速、电压、车轮转速、状态、错误码等 extern EnvioloGearInfo2_Struct_t EnvioloGearInfo2; //Enviolo变速器版本信息 extern EnvioloConfigParams_Struct_t EnvioloConfigParams; //Enviolo变速器配置参数,前牙盘、后牙盘、最低踏频、最高踏频、周长、自动关机时间等 extern EnvioloControlParams_Struct_t EnvioloControlParams; //Enviolo变速器控制参数,运行模式(手动、自动、校准)、目标传动比或目标踏频 extern GearBox_CanData_Struct_t GearBox_CanData; //变速器CAN报文 extern ComOK_Check_Struct_t GearBox_OnlineFlag; //变速器通信状态检测 extern GearBox_OBC_SetMode_Struct_t GearBox_OBC_SetMode; //仪表设置变速器配置参数,手动或自动或校准、手动变速比或自动踏频 extern GearBox_OBC_SetParams_Struct_t GearBox_OBC_SetParams; //仪表设置变速器工作参数,手动档位数量、自动最低踏频、自动最高踏频 extern GearBox_Status_Struct_t GearBox_Status; //变速器当前状态,初始化、手动、自动、离线 extern GearBox_CalFlag_Struct_t GearBox_CalFlag; //变速器校准标志,无需校准或校准成功、需要校准、提示踩踏 extern uint16_t GearBox_RatioTable[24]; //变速器变速比与档位对照表 //全局函数定义 extern void GearBox_CanProcess(GearBox_CanData_Struct_t* CanData); extern void GearBox_Send_OBC_Params(GearBox_CalFlag_Struct_t CalFlag, GearBox_OBC_SetParams_Struct_t* p_GearBox_OBC_SetParams, uint8_t* p_EnvioloSoftVer); extern void GearBox_Init(void);//根据Enviolo的通信状态确定变速器是否在线,初始化变速器工作参数 extern void GearBox_Loop(void);//变速器数据处理主函数 #endif