enviolo_can.h 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. #ifndef __ENVIOLO_CAN_H_
  2. #define __ENVIOLO_CAN_H_
  3. #include "stdint.h"
  4. #include "can.h"
  5. #include "var.h"
  6. #define ENVIOLO_CONFIG_ID 0x7AC
  7. #define ENVIOLO_CONTROL_ID 0x7AD
  8. /*********************************Enviolo自动变速器通信协议内容******************************/
  9. //变速器运行信息
  10. typedef struct GEAR_INFO1
  11. {
  12. uint8_t Pedal_Rpm; //踏频 1bit = 1rpm
  13. uint8_t Actual_Ratio; //变速比 1bit = 0.1ratio
  14. uint8_t Bike_Speed; //车速 1bit = 0.5km/h
  15. uint8_t Battery_Vol; //电池电压 1bit = 0.25V
  16. uint16_t Wheel_Rpm; //车轮转速 1bit = 1rpm
  17. union STATUS_FLAG //状态标志
  18. {
  19. struct
  20. {
  21. uint8_t RS1 :1;
  22. uint8_t RS2 :1;
  23. uint8_t RS3 :1;
  24. uint8_t ShiftActiveFlag :1; //档位切换
  25. uint8_t CaliNeedFlag :1; //需要校准
  26. uint8_t CaliSuccessFlag :1; //校准成功
  27. uint8_t PowerOnFlag :1; //开机
  28. uint8_t InitialFlag :1; //初始化完成
  29. }StatusFlagBit;
  30. uint8_t Flag;
  31. }StatusFlag;
  32. union ERROR_FLAG //错误标志
  33. {
  34. struct
  35. {
  36. uint8_t OverCurrentFlag :1; //过流
  37. uint8_t CaliFailFlag :1; //校准失败
  38. uint8_t RS1 :1;
  39. uint8_t StallFlag :1; //工作异常
  40. uint8_t RS2 :1;
  41. uint8_t RS3 :1;
  42. uint8_t RS4 :1;
  43. uint8_t RS5 :1;
  44. }ErrorFlagBit;
  45. uint8_t Flag;
  46. }ErrorFlag;
  47. uint8_t RS1;
  48. }EnvioloGearInfo1_Struct_t;
  49. //变速器运行参数
  50. typedef struct GEAR_INFO2
  51. {
  52. uint8_t PCB_Version_Major;
  53. uint8_t PCB_Version_Mino;
  54. uint8_t PCB_Version_BugFix;
  55. uint8_t RS1;
  56. uint8_t Soft_Version;
  57. uint8_t RS2;
  58. uint8_t RS3;
  59. uint8_t RS4;
  60. }EnvioloGearInfo2_Struct_t;
  61. //变速器配置参数
  62. typedef struct CONFIG_PARAMS
  63. {
  64. uint8_t FrontChain; //前牙盘 1bit = 1tooth
  65. uint8_t RearTeeth; //后牙盘 1bit = 1tooth
  66. uint8_t CadenceMin; //自动模式最低踏频 1bit = 1rpm
  67. uint8_t CadenceMax; //自动模式最高踏频 1bit = 1rpm
  68. uint8_t RS1;
  69. uint8_t WheelSize; //轮胎周长 1bit = 1cm, offset = 100cm
  70. uint8_t SleepTime; //自动关机时间 1bit = 1min
  71. uint8_t RS2;
  72. }EnvioloConfigParams_Struct_t;
  73. //变速器模式枚举
  74. typedef enum GEAR_MODE
  75. {
  76. ENVIOLO_INACTIVE = 0x00,
  77. ENVIOLO_ACTIVE = 0x01,
  78. ENVIOLO_MANUAL_MODE = 0x03,
  79. ENVIOLO_AUTO_MODE = 0x04,
  80. ENVIOLO_CAL_MODE = 0x08
  81. }GearMode_Struct_t;
  82. //变速器控制参数
  83. typedef struct CONTROL_PARAMS
  84. {
  85. GearMode_Struct_t GearMode;
  86. uint16_t RatioMode_Data;
  87. uint16_t CadenceMode_Data;
  88. uint8_t RS1;
  89. uint8_t RS2;
  90. uint8_t RS3;
  91. }EnvioloControlParams_Struct_t;
  92. /**********************************End******************************/
  93. //变速器CAN报文数据
  94. typedef struct GEARBOX_CAN_DATA
  95. {
  96. TrueOrFalse_Flag_Struct_t RefreshFlag;
  97. uint8_t RS;
  98. uint16_t ID;
  99. uint8_t Data[8];
  100. }GearBox_CanData_Struct_t;
  101. /******************************仪表与变速器通信协议内容*******************************/
  102. //发送仪表运行信息变速器运行状态
  103. typedef enum GEAR_BOX_STATUS
  104. {
  105. GEAR_STATUS_INITIAL = (uint8_t)(1 << 5), //初始化模式
  106. GEAR_STATUS_MANUAL = (uint8_t)(2 << 5), //手动模式
  107. GEAR_STATUS_AUTO = (uint8_t)(4 << 5), //自动模式
  108. GEAR_STATUS_OFFLINE = (uint8_t)0xF0 //离线模式
  109. }GearBox_Status_Struct_t;
  110. //仪表发送变速器工作模式
  111. typedef enum GEAR_BOX_MODE
  112. {
  113. GEAR_MODE_NULL = (uint8_t)0x00, //初始化模式位无效值
  114. GEAR_MODE_MANUAL = (uint8_t)0x03, //自动模式
  115. GEAR_MODE_AUTO = (uint8_t)0x04, //手动模式
  116. GEAR_MODE_CAL = (uint8_t)0x08 //校准模式
  117. }GearBox_Mode_Struct_t;
  118. //发送仪表校准状态
  119. typedef enum GEAR_BOX_CAL_FLAG
  120. {
  121. GEAR_CAL_SUCCESS = 0X00, //无需校准或校准成功
  122. GEAR_CAL_NEED = 0x01, //需要校准
  123. GEAR_CAL_PEDAL = 0x02 //提示踩踏
  124. }GearBox_CalFlag_Struct_t;
  125. //仪表设置变速器模式 0x4008
  126. typedef struct OBC_SET_MODE
  127. {
  128. GearBox_Mode_Struct_t Mode; //变速器工作模式,手动、自动、校准
  129. uint8_t Value; //手动模式变速比或自动模式目标踏频
  130. uint8_t RS[6];
  131. }GearBox_OBC_SetMode_Struct_t;
  132. //仪表配置变速器参数 0x4208
  133. typedef struct OBC_SET_PARAMS
  134. {
  135. uint8_t GearNum; //手动模式档位数量
  136. uint8_t CadenceMin; //自动模式最低踏频
  137. uint8_t CadenceMax; //自动模式最高踏频
  138. uint8_t RS[5];
  139. }GearBox_OBC_SetParams_Struct_t;
  140. /*************************************End*************************************/
  141. //全局变量定义
  142. extern EnvioloGearInfo1_Struct_t EnvioloGearInfo1; //Enviolo变速器运行信息,踏频、传动比、车速、电压、车轮转速、状态、错误码等
  143. extern EnvioloGearInfo2_Struct_t EnvioloGearInfo2; //Enviolo变速器版本信息
  144. extern EnvioloConfigParams_Struct_t EnvioloConfigParams; //Enviolo变速器配置参数,前牙盘、后牙盘、最低踏频、最高踏频、周长、自动关机时间等
  145. extern EnvioloControlParams_Struct_t EnvioloControlParams; //Enviolo变速器控制参数,运行模式(手动、自动、校准)、目标传动比或目标踏频
  146. extern GearBox_CanData_Struct_t GearBox_CanData; //变速器CAN报文
  147. extern ComOK_Check_Struct_t GearBox_OnlineFlag; //变速器通信状态检测
  148. extern GearBox_OBC_SetMode_Struct_t GearBox_OBC_SetMode; //仪表设置变速器配置参数,手动或自动或校准、手动变速比或自动踏频
  149. extern GearBox_OBC_SetParams_Struct_t GearBox_OBC_SetParams; //仪表设置变速器工作参数,手动档位数量、自动最低踏频、自动最高踏频
  150. extern GearBox_Status_Struct_t GearBox_Status; //变速器当前状态,初始化、手动、自动、离线
  151. extern GearBox_CalFlag_Struct_t GearBox_CalFlag; //变速器校准标志,无需校准或校准成功、需要校准、提示踩踏
  152. extern uint16_t GearBox_RatioTable[24]; //变速器变速比与档位对照表
  153. //全局函数定义
  154. extern void GearBox_CanProcess(GearBox_CanData_Struct_t* CanData);
  155. extern void GearBox_Send_OBC_Params(GearBox_CalFlag_Struct_t CalFlag, GearBox_OBC_SetParams_Struct_t* p_GearBox_OBC_SetParams, uint8_t* p_EnvioloSoftVer);
  156. extern void GearBox_Init(void);//根据Enviolo的通信状态确定变速器是否在线,初始化变速器工作参数
  157. extern void GearBox_Loop(void);//变速器数据处理主函数
  158. #endif