var.c 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716
  1. #include "var.h"
  2. #include "torque_sensor.h"
  3. MC_RunInfo_Struct_t MC_RunInfo; //MC运行信息
  4. MC_DebugInfo_Struct_t MC_DebugInfo; //MC调试信息
  5. MC_ErrorCode_Struct_t MC_ErrorCode; //MC故障代码
  6. MC_VerInfo_Struct_t MC_VerInfo; //MC版本信息
  7. char Firmware_Special[32]; //MC软件版本特性说明
  8. OnLine_Status_Struct_t DeviceOnLine_Status; //设备在线检测结果
  9. BMS_RunInfo_Struct_t BMS_RunInfo; //BMS运行信息
  10. Device_CheckInfo_Struct_t BMS_CheckInfo; //BMS授权校验
  11. BMS_DesignInfo_Struct_t BMS_DesignInfo; //BMS设计信息
  12. Device_CheckInfo_Struct_t PBU_CheckInfo; //PBU授权校验
  13. PBU_ConfigParam_Struct_t PBU_ConfigParam; //PBU配置参数
  14. Device_CheckInfo_Struct_t HMI_CheckInfo; //HMI授权校验
  15. MC_GasMode_Struct_t MC_GasMode_Param; //转把模式控制参数
  16. MC_ConfigParam1_Struct_t MC_ConfigParam1; //MC配置参数1
  17. MC_ConfigParam2_Struct_t MC_ConfigParam2; //MC配置参数1
  18. MC_MotorParam_Struct_t MC_MotorParam; //马达参数
  19. MC_RunLog1_Struct_t MC_RunLog1; //MC历史信息1
  20. MC_RunLog2_Struct_t MC_RunLog2; //MC历史信息2
  21. uint8_t RunLogSaveIndex = 0; //MC历史信息存储序号,0:不存储,1:存储MC_RunLog1,2:存储MC_RunLog2
  22. uint8_t Secret_Key[8]; //授权验证密钥
  23. MC_MacInfo_Struct_t MC_MacInfo; //MC生产信息
  24. uint8_t UserString1[16]; //MC自定义字符串1
  25. uint8_t UserString2[16]; //MC自定义字符串2
  26. uint8_t UserString3[16]; //MC自定义字符串3
  27. MC_PowerOffBkp_Struct_t MC_PowerOffBkp; //MC关机时刻临时存储的数据
  28. Device_CheckInfo_Struct_t MC_CheckInfo; //MC授权信息
  29. MC_TE_SensorStatus_Struct_t MC_TE_SensorStatus; //TE传回传感器状态
  30. MC_TE_SensorData_Struct_t MC_TE_SensorData; //发给TE传感器结果
  31. uint16_t MC_TE_SyncClockFreqScan; //TE同步时钟频率
  32. TrueOrFalse_Flag_Struct_t TE_MCU_DataRefreshFlag = FALSE; //TE MCU数据更新标志
  33. MC_AssistParam_Struct_t MC_AssisParam; //助力输出计算参数
  34. uint8_t MC_WalkMode_Persent = 100; //推行模式最高转速百分比设置
  35. ComOK_Check_Struct_t IsComOK_TE = {FALSE, 0}; //TE通信状态标志
  36. ComOK_Check_Struct_t IsComOK_PBU = {FALSE, 0}; //PBU通信状态标志
  37. ComOK_Check_Struct_t IsComOK_HMI = {FALSE, 0}; //HMI通信状态标志
  38. ComOK_Check_Struct_t IsComOK_BMS = {FALSE, 0}; //BMS通信状态标志
  39. MC_AttitudeAngle_Struct_t MC_AttitudeAngle; //姿态传感器数值
  40. MC_RideLog_Struct_t MC_RideLog; //骑行历史
  41. MC_AvgPower_Struct_t MC_AvgPower; //助力平均功耗
  42. MCU_Manufacturter_Struct_t MCUManufacturer; //MCU生厂商
  43. uint16_t SpeedRatio;
  44. uint16_t HardwareVersion_AD=0;
  45. TrueOrFalse_Flag_Struct_t VersionIdentifyFinishedFlag = FALSE;
  46. TrueOrFalse_Flag_Struct_t PowerDown_SaveFlag = FALSE;
  47. TrueOrFalse_Flag_Struct_t IsFirstPowerOnFlag = FALSE;
  48. Bike_RatioCal_Struct_t Bike_RatioCalParam = {0,0,0,100,10,0,0};//传动比计算
  49. //BMS默认设计信息
  50. const BMS_DesignInfo_Struct_t BMS_DesignInfo_Default =
  51. {
  52. (uint16_t)10400, //设计容量
  53. (uint8_t)36, //设计电压
  54. {0,0,0,0,0,0,0,0} //电芯型号
  55. };
  56. //PBU默认配置
  57. const PBU_ConfigParam_Struct_t PBU_ConfigParam_Default =
  58. {
  59. 4, //档位数量
  60. MC_SUPPORT_DISABLE, //是否支持无PBU操作
  61. };
  62. //MC默认配置参数1,占用32bytes
  63. #if defined (PEGASI_36V)
  64. const MC_ConfigParam1_Struct_t MC_ConfigParam1_Default =
  65. {
  66. (uint8_t)0x55, //指拨模式参数,0x55-不支持
  67. (MC_StarMode_Struct_t)MC_StarMode_NORM, //启动模式
  68. (uint16_t)100, //停机时间 ms
  69. (uint8_t)25, //限速 km/h
  70. (uint8_t)3, //下降速度
  71. (uint8_t)16, //前齿数 T
  72. (uint8_t)16, //后齿数 T
  73. (uint8_t)17, //限流 A
  74. (uint8_t)135, //高温预警值 +40℃
  75. (uint8_t)165, //高温保护值 +40℃
  76. (MC_SupportFlag_Struct_t)MC_SUPPORT_DISABLE, //无码表支持,0x55-不支持,0x-AA支持
  77. (uint8_t)219, //轮胎周长 cm
  78. (uint8_t)3, //系列号,
  79. {100,100}, //ECO
  80. {100,100}, //NORM
  81. {100,100}, //SPORT
  82. {100,100}, //TURBO
  83. {100,100}, //SMART
  84. (uint8_t)1, //速度传感器极数
  85. (uint8_t)2, //踏频启动信号个数
  86. (MC_SpeedSignal_Struct_t)MC_SPEED_WHEEL_TRIG, //速度信号来源,0x55-车轮触发,0x-AA踏频估算,0x-EE通信获取车轮旋转周期
  87. (int8_t)0, //轮胎周长微调值
  88. (uint16_t)3000, //低压保护阈值,单位mV,针对单节电芯的设置值
  89. (uint8_t)60, //推行限速值,单位0.1km/h
  90. (uint8_t)135 //推行模式电机转速设置值
  91. };
  92. #elif defined (PEGASI_48V)
  93. const MC_ConfigParam1_Struct_t MC_ConfigParam1_Default =
  94. {
  95. (uint8_t)0x55, //指拨模式参数,0x55-不支持
  96. (MC_StarMode_Struct_t)MC_StarMode_NORM, //启动模式
  97. (uint16_t)100, //停机时间 ms
  98. (uint8_t)25, //限速 km/h
  99. (uint8_t)3, //下降速度
  100. (uint8_t)16, //前齿数 T
  101. (uint8_t)16, //后齿数 T
  102. (uint8_t)17, //限流 A
  103. (uint8_t)135, //高温预警值 +40℃
  104. (uint8_t)165, //高温保护值 +40℃
  105. (MC_SupportFlag_Struct_t)MC_SUPPORT_DISABLE, //无码表支持,0x55-不支持,0x-AA支持
  106. (uint8_t)219, //轮胎周长 cm
  107. (uint8_t)4, //系列号,
  108. {100,100}, //ECO
  109. {100,100}, //NORM
  110. {100,100}, //SPORT
  111. {100,100}, //TURBO
  112. {100,100}, //SMART
  113. (uint8_t)1, //速度传感器极数
  114. (uint8_t)2, //踏频启动信号个数
  115. (MC_SpeedSignal_Struct_t)MC_SPEED_WHEEL_TRIG, //速度信号来源,0x55-车轮触发,0x-AA踏频估算,0x-EE通信获取车轮旋转周期
  116. (int8_t)0, //轮胎周长微调值
  117. (uint16_t)3000, //低压保护阈值,单位mV,针对单节电芯的设置值
  118. (uint8_t)60, //推行限速值,单位0.1km/h
  119. (uint8_t)135 //推行模式电机转速设置值
  120. };
  121. #endif
  122. //MC配置参数2,占用32bytes
  123. const MC_ConfigParam2_Struct_t MC_ConfigParam2_Default =
  124. {
  125. (int16_t)0, //俯仰角零偏
  126. (int16_t)0, //横滚角零偏
  127. (MC_SupportFlag_Struct_t)MC_SUPPORT_DISABLE, //0x55-不支持,0x-AA支持
  128. (MC_TailLight_Mode_Struct_t)MC_TAIL_LIGHT_MODE2, //尾灯模式
  129. (uint8_t)12, //前灯电压
  130. (uint8_t)12, //后灯电压
  131. (uint16_t)150, //超速报警
  132. (uint16_t)75, //尾灯控制高电平系数
  133. (uint16_t)150, //尾灯控制周期系数
  134. (int8_t)0, //限速起始偏移
  135. (int8_t)0, //限速结束偏移
  136. (int8_t)0, //限速偏移
  137. (uint8_t)0, //预留
  138. {100,100}, //ECO
  139. {100,100}, //NORM
  140. {100,100}, //SPORT
  141. {100,100}, //TURBO
  142. {100,100}, //SMART
  143. };
  144. //MC默认马达参数,占用16bytes
  145. #if defined (PEGASI_36V)
  146. const MC_MotorParam_Struct_t MC_MotorParam_Default =
  147. {
  148. (uint16_t)250, //W
  149. (uint16_t)1400, //rpm
  150. (uint16_t)200, //mohm
  151. (uint16_t)10, //mH
  152. (uint16_t)10, //mH
  153. (uint16_t)36000, //mV
  154. (uint8_t)36 //V
  155. };
  156. #elif defined (PEGASI_48V)
  157. const MC_MotorParam_Struct_t MC_MotorParam_Default =
  158. {
  159. (uint16_t)250, //W
  160. (uint16_t)1800, //rpm
  161. (uint16_t)200, //mohm
  162. (uint16_t)10, //mH
  163. (uint16_t)10, //mH
  164. (uint16_t)48000, //mV
  165. (uint8_t)48 //V
  166. };
  167. #endif
  168. //MC默认历史信息,占用48bytes
  169. const MC_RunLog1_Struct_t MC_RunLog1_Default =
  170. {
  171. (uint32_t)1, //开机次数
  172. (uint32_t)0, //运行总时间 min
  173. (uint16_t)0, //过流保次数
  174. (uint16_t)0, //低压保护次数
  175. (uint16_t)0, //高压保护次数
  176. (uint16_t)0, //堵转保护次数
  177. (uint16_t)0, //温度保护次数
  178. (uint16_t)0, //速度传感器错误次数
  179. (uint16_t)0, //力矩传感器错误次数
  180. (uint16_t)0, //霍尔传感器错误次数
  181. (uint16_t)0, //马达相线错误次数
  182. (uint16_t)0, //NTC错误次数
  183. (uint16_t)0, //BMS校验错误次数
  184. (uint16_t)0, //HMI校验错误次数
  185. (uint16_t)0, //PBU校验错误次数
  186. (uint8_t)65, //PCB历史最高温
  187. (uint8_t)65, //PCB历史最低温
  188. (uint8_t)0, //空出预留
  189. (uint8_t)0, //空出预留
  190. (uint8_t)0, //空出预留
  191. (uint8_t)0, //空出预留
  192. (uint8_t)65, //绕组历史最高温
  193. (uint8_t)65, //绕组历史最低温
  194. (uint8_t)65, //MCU历史最高温
  195. (uint8_t)65 //MCU历史最低温
  196. };
  197. //MC默认历史信息,占用24bytes
  198. const MC_RunLog2_Struct_t MC_RunLog2_Default =
  199. {
  200. (uint16_t)0, //MCU故障次数
  201. (uint16_t)0, //踏频传感器故障次数
  202. (uint16_t)0, //指拨传感器故障次数
  203. (uint16_t)0, //MOS短路次数
  204. (uint16_t)0, //电压异常次数
  205. (uint16_t)0, //电路故障次数
  206. (uint16_t)0, //TE MCU故障次数
  207. (uint16_t)0, //TE 电路故障次数
  208. };
  209. //平均功耗默认值
  210. const MC_AvgPower_Struct_t MC_AvgPower_Default =
  211. {
  212. (uint16_t)100,
  213. (uint16_t)160,
  214. (uint16_t)190,
  215. (uint16_t)270,
  216. (uint16_t)180
  217. };
  218. //MC骑行历史信息,占用32bytes
  219. const MC_RideLog_Struct_t MC_RideLog_Default =
  220. {
  221. (uint32_t)0,
  222. (uint32_t)0,
  223. (uint32_t)0,
  224. (uint32_t)0
  225. };
  226. //默认密钥,占用8bytes
  227. const uint8_t Secret_Key_Default[8] = "AVONITOM";
  228. const uint16_t Ver_Table[11] =
  229. {
  230. 372, 744, 1116, 1489, 1861, 2233, 2605, 2978, 3350, 3722, 4095
  231. };
  232. /************Volans助力参数************/
  233. //ECO档位助力参数
  234. const nGearParam_Struct_t GearParam_Default_ECO_Volans =
  235. {
  236. (uint16_t)392,
  237. (uint16_t)0,
  238. (uint16_t)100,
  239. (uint16_t)800,
  240. (uint8_t)2,
  241. (uint8_t)1,
  242. (uint16_t)512
  243. };
  244. //NORM档位助力参数
  245. const nGearParam_Struct_t GearParam_Default_NORM_Volans =
  246. {
  247. (uint16_t)786,
  248. (uint16_t)0,
  249. (uint16_t)100,
  250. (uint16_t)1000,
  251. (uint8_t)2,
  252. (uint8_t)1,
  253. (uint16_t)686
  254. };
  255. //SPORT档位助力参数
  256. const nGearParam_Struct_t GearParam_Default_SPORT_Volans =
  257. {
  258. (uint16_t)1309,
  259. (uint16_t)700,
  260. (uint16_t)100,
  261. (uint16_t)1300,
  262. (uint8_t)3,
  263. (uint8_t)1,
  264. (uint16_t)870
  265. };
  266. //TURBO档位助力参数
  267. const nGearParam_Struct_t GearParam_Default_TURBO_Volans =
  268. {
  269. (uint16_t)1964,
  270. (uint16_t)840,
  271. (uint16_t)100,
  272. (uint16_t)2100,
  273. (uint8_t)5,
  274. (uint8_t)1,
  275. (uint16_t)1024
  276. };
  277. //SMART档位助力参数
  278. const nGearParam_Struct_t GearParam_Default_SMART_Volans =
  279. {
  280. (uint16_t)0,
  281. (uint16_t)460,
  282. (uint16_t)100,
  283. (uint16_t)2100,
  284. (uint8_t)4,
  285. (uint8_t)1,
  286. (uint16_t)1024
  287. };
  288. /************Volans Plus助力参数************/
  289. //ECO档位助力参数
  290. const nGearParam_Struct_t GearParam_Default_ECO_Volans_Plus =
  291. {
  292. (uint16_t)452,
  293. (uint16_t)0,
  294. (uint16_t)100,
  295. (uint16_t)840,
  296. (uint8_t)2,
  297. (uint8_t)1,
  298. (uint16_t)512
  299. };
  300. //NORM档位助力参数
  301. const nGearParam_Struct_t GearParam_Default_NORM_Volans_Plus =
  302. {
  303. (uint16_t)954,
  304. (uint16_t)0,
  305. (uint16_t)100,
  306. (uint16_t)1200,
  307. (uint8_t)2,
  308. (uint8_t)1,
  309. (uint16_t)686
  310. };
  311. //SPORT档位助力参数
  312. const nGearParam_Struct_t GearParam_Default_SPORT_Volans_Plus =
  313. {
  314. (uint16_t)1504,
  315. (uint16_t)700,
  316. (uint16_t)100,
  317. (uint16_t)1590,
  318. (uint8_t)3,
  319. (uint8_t)1,
  320. (uint16_t)870
  321. };
  322. //TURBO档位助力参数
  323. const nGearParam_Struct_t GearParam_Default_TURBO_Volans_Plus =
  324. {
  325. (uint16_t)2354,
  326. (uint16_t)840,
  327. (uint16_t)100,
  328. (uint16_t)2100,
  329. (uint8_t)5,
  330. (uint8_t)1,
  331. (uint16_t)1024
  332. };
  333. //SMART档位助力参数
  334. const nGearParam_Struct_t GearParam_Default_SMART_Volans_Plus =
  335. {
  336. (uint16_t)0,
  337. (uint16_t)460,
  338. (uint16_t)100,
  339. (uint16_t)2100,
  340. (uint8_t)4,
  341. (uint8_t)1,
  342. (uint16_t)1024
  343. };
  344. /************Pegasi助力参数************/
  345. //ECO档位助力参数
  346. const nGearParam_Struct_t GearParam_Default_ECO_Pegasi =
  347. {
  348. (uint16_t)714,
  349. (uint16_t)0,
  350. (uint16_t)100,
  351. (uint16_t)937,
  352. (uint8_t)2,
  353. (uint8_t)1,
  354. (uint16_t)512
  355. };
  356. //NORM档位助力参数
  357. const nGearParam_Struct_t GearParam_Default_NORM_Pegasi =
  358. {
  359. (uint16_t)1370,
  360. (uint16_t)0,
  361. (uint16_t)100,
  362. (uint16_t)1250,
  363. (uint8_t)3,
  364. (uint8_t)2,
  365. (uint16_t)686
  366. };
  367. //SPORT档位助力参数
  368. const nGearParam_Struct_t GearParam_Default_SPORT_Pegasi =
  369. {
  370. (uint16_t)2100,
  371. (uint16_t)560,
  372. (uint16_t)100,
  373. (uint16_t)1459,
  374. (uint8_t)4,
  375. (uint8_t)2,
  376. (uint16_t)870
  377. };
  378. //TURBO档位助力参数
  379. const nGearParam_Struct_t GearParam_Default_TURBO_Pegasi =
  380. {
  381. (uint16_t)3200,
  382. (uint16_t)700,
  383. (uint16_t)100,
  384. (uint16_t)2100,
  385. (uint8_t)5,
  386. (uint8_t)3,
  387. (uint16_t)1024
  388. };
  389. //SMART档位助力参数
  390. const nGearParam_Struct_t GearParam_Default_SMART_Pegasi =
  391. {
  392. (uint16_t)0,
  393. (uint16_t)460,
  394. (uint16_t)0,
  395. (uint16_t)2100,
  396. (uint8_t)4,
  397. (uint8_t)2,
  398. (uint16_t)1024
  399. };
  400. /************Pegasi Plus助力参数************/
  401. //ECO档位助力参数
  402. const nGearParam_Struct_t GearParam_Default_ECO_Pegasi_Plus =
  403. {
  404. (uint16_t)714,
  405. (uint16_t)0,
  406. (uint16_t)100,
  407. (uint16_t)937,
  408. (uint8_t)2,
  409. (uint8_t)1,
  410. (uint16_t)512
  411. };
  412. //NORM档位助力参数
  413. const nGearParam_Struct_t GearParam_Default_NORM_Pegasi_Plus =
  414. {
  415. (uint16_t)1428,
  416. (uint16_t)0,
  417. (uint16_t)100,
  418. (uint16_t)1250,
  419. (uint8_t)3,
  420. (uint8_t)2,
  421. (uint16_t)686
  422. };
  423. //SPORT档位助力参数
  424. const nGearParam_Struct_t GearParam_Default_SPORT_Pegasi_Plus =
  425. {
  426. (uint16_t)2142,
  427. (uint16_t)560,
  428. (uint16_t)100,
  429. (uint16_t)1459,
  430. (uint8_t)4,
  431. (uint8_t)2,
  432. (uint16_t)870
  433. };
  434. //TURBO档位助力参数
  435. const nGearParam_Struct_t GearParam_Default_TURBO_Pegasi_Plus =
  436. {
  437. (uint16_t)3200,
  438. (uint16_t)700,
  439. (uint16_t)100,
  440. (uint16_t)2100,
  441. (uint8_t)5,
  442. (uint8_t)3,
  443. (uint16_t)1024
  444. };
  445. //SMART档位助力参数
  446. const nGearParam_Struct_t GearParam_Default_SMART_Pegasi_Plus =
  447. {
  448. (uint16_t)0,
  449. (uint16_t)460,
  450. (uint16_t)0,
  451. (uint16_t)2100,
  452. (uint8_t)4,
  453. (uint8_t)2,
  454. (uint16_t)1024
  455. };
  456. //全局函数定义
  457. //MC存储的参数初始化为默认值
  458. void Var_SetToDefaultParam(void)
  459. {
  460. //校验码
  461. strncpy((char*)MC_CheckInfo.CheckCode, (char*)"000000000000", 12);
  462. //力矩传感器还原为初始值
  463. TorqueSensor_ParamSetDefaultData_Init(&TorqueSensor_1_Param, ADC1_Result[ADC1_RANK_TORQUE_SENSOR_1]);
  464. TorqueSensor_ParamSetDefaultData_Init(&TorqueSensor_2_Param, ADC1_Result[ADC1_RANK_TORQUE_SENSOR_2]);
  465. TorqueSensor_ParamSetDefaultData_Init(&TorqueSensor_3_Param, ADC1_Result[ADC1_RANK_TORQUE_SENSOR_3]);
  466. //校验密钥
  467. memcpy(Secret_Key, Secret_Key_Default, sizeof(Secret_Key_Default));
  468. //启动值设为默认值
  469. TorqueSensorStartData = TORQUE_SENSOR_STARTDATA;
  470. //配置参数1
  471. memcpy((uint8_t*)&MC_ConfigParam1.GasCtrlMode_Param, (uint8_t*)&MC_ConfigParam1_Default.GasCtrlMode_Param, sizeof(MC_ConfigParam1_Default));
  472. MC_GasMode_Param.Mode = MC_ConfigParam1.GasCtrlMode_Param;
  473. //配置参数2
  474. memcpy((uint8_t*)&MC_ConfigParam2.ZeroAngle_Pitch, (uint8_t*)&MC_ConfigParam2_Default.ZeroAngle_Pitch, sizeof(MC_ConfigParam2_Default));
  475. //马达参数
  476. memcpy((uint8_t*)&MC_MotorParam.Rate_Power, (uint8_t*)&MC_MotorParam_Default.Rate_Power, sizeof(MC_MotorParam_Default));
  477. }
  478. //MC存储的记录初始化
  479. void Var_SetToDefaultLog(void)
  480. {
  481. //历史信息1
  482. memcpy((uint8_t*)&MC_RunLog1.PowerOnCnt, (uint8_t*)&MC_RunLog1_Default.PowerOnCnt, sizeof(MC_RunLog1_Default));
  483. //历史信息2
  484. memcpy((uint8_t*)&MC_RunLog2.MCU_FaultCnt, (uint8_t*)&MC_RunLog2_Default.MCU_FaultCnt, sizeof(MC_RunLog2_Default));
  485. //骑行历史信息
  486. memcpy((uint8_t*)&MC_RideLog.ODO_Km, (uint8_t*)&MC_RideLog_Default.ODO_Km, sizeof(MC_RideLog_Default));
  487. //平均功耗值
  488. MC_AvgPower = MC_AvgPower_Default;
  489. }
  490. //变量初始化
  491. void Var_Init(void)
  492. {
  493. //MC故障码初始化为0
  494. MC_ErrorCode.Code = 0;
  495. //TE故障码初始化为0
  496. MC_TE_SensorStatus.TE_ErrorCode.Code = 0;
  497. //力矩传感器故障状态清零
  498. TorsueSensorFaultStatus.FaultStatusCode = 0;
  499. //设备在线检测结果初始化为离线
  500. DeviceOnLine_Status.Status = 0x07;
  501. //BMS校验信息初始化为0
  502. memset((uint8_t*)BMS_CheckInfo.MAC_ID, 0, sizeof(BMS_CheckInfo));
  503. //HMI校验信息初始化为0
  504. memset((uint8_t*)HMI_CheckInfo.MAC_ID, 0, sizeof(HMI_CheckInfo));
  505. //PBU校验信息初始化为0
  506. memset((uint8_t*)PBU_CheckInfo.MAC_ID, 0, sizeof(PBU_CheckInfo));
  507. //BMS设计信息初始化为默认值
  508. memcpy((uint8_t*)&BMS_DesignInfo.Capacity, (uint8_t*)&BMS_DesignInfo_Default.Capacity, sizeof(BMS_DesignInfo_Struct_t));
  509. //PBU配置参数初始化为默认值
  510. memcpy((uint8_t*)&PBU_ConfigParam.GearsNum, (uint8_t*)&PBU_ConfigParam_Default.GearsNum, sizeof(PBU_ConfigParam_Struct_t));
  511. //MC版本信息初始化,Mode和SN从EEPROM读取
  512. strncpy(MC_VerInfo.HW_Version, (char*)"TTKZ010D. ", 16);
  513. #if BaudRate250K
  514. strncpy(MC_VerInfo.FW_Version, (char*)"V7r2r3_20231118C", 16);
  515. #else
  516. strncpy(MC_VerInfo.FW_Version, (char*)"V3r4r3_20231118C", 16);
  517. #endif
  518. #if NormalWork
  519. MC_VerInfo.FW_Version[15] = '.';
  520. #endif
  521. strncpy(Firmware_Special, (char*)"TC011000-MS0000-V0r0. ", 32);
  522. if(MCUManufacturer == NoName) MC_VerInfo.HW_Version[10] = '0';
  523. else if(MCUManufacturer == STM32F103RBT6) MC_VerInfo.HW_Version[10] = '1';
  524. else if(MCUManufacturer == APM32F103RBT6) MC_VerInfo.HW_Version[10] = '2';
  525. else if(MCUManufacturer == HK32F103RBT6) MC_VerInfo.HW_Version[10] = '3';
  526. else if(MCUManufacturer == GD32F103RBT6) MC_VerInfo.HW_Version[10] = '4';
  527. else MC_VerInfo.HW_Version[10] = '0';
  528. //电机型号
  529. strncpy(MC_VerInfo.Mode, (char*)"PG80XX & PSX0XX.", 16);
  530. //电机序列号
  531. strncpy(MC_VerInfo.SN_Num, (char*)"0000000000000000", 16);
  532. //生产信息
  533. strncpy(MC_MacInfo.Manufacturer, (char*)"MOTINOVA", 8); //生产信息
  534. strncpy(MC_MacInfo.MacAddr, (char*)"WUHAN. ", 8);
  535. strncpy(MC_MacInfo.MacDate, (char*)"20210901", 8);
  536. //MCU ID读取
  537. memcpy((uint8_t*)MC_CheckInfo.MAC_ID, (uint8_t*)(0x1FFFF7E8), 12);
  538. //MC存储数据初始化为默认值
  539. Var_SetToDefaultParam();
  540. Var_SetToDefaultLog();
  541. //传动比计算初始值,车速 = 电机转速 / 4.55 * 前牙盘 / 后牙盘* 周长(cm) * 60 / 1000,周长按cm算相当于放大100倍
  542. Bike_RatioCalParam.RatioDefault = (uint32_t)((MC_ConfigParam1.TeethNum_F * (MC_ConfigParam1.WheelSize + MC_ConfigParam1.WheelSizeAdj) * 60) << 10) / (4550 * MC_ConfigParam1.TeethNum_B);
  543. Bike_RatioCalParam.RatioResult = Bike_RatioCalParam.RatioDefault;
  544. }
  545. //根据电机型号系列号调用不同的助力参数
  546. void UpdateGearParam(uint8_t SerialNum)
  547. {
  548. //根据电机系列号初始化
  549. switch(SerialNum)
  550. {
  551. case 1://Volans
  552. {
  553. //助力参数初始化
  554. memcpy((uint8_t*)&MC_AssisParam.Gear_ECO.Gain_K, (uint8_t*)&GearParam_Default_ECO_Volans.Gain_K, sizeof(nGearParam_Struct_t));
  555. memcpy((uint8_t*)&MC_AssisParam.Gear_NORM.Gain_K, (uint8_t*)&GearParam_Default_NORM_Volans.Gain_K, sizeof(nGearParam_Struct_t));
  556. memcpy((uint8_t*)&MC_AssisParam.Gear_SPORT.Gain_K, (uint8_t*)&GearParam_Default_SPORT_Volans.Gain_K, sizeof(nGearParam_Struct_t));
  557. memcpy((uint8_t*)&MC_AssisParam.Gear_TURBO.Gain_K, (uint8_t*)&GearParam_Default_TURBO_Volans.Gain_K, sizeof(nGearParam_Struct_t));
  558. memcpy((uint8_t*)&MC_AssisParam.Gear_SMART.Gain_K, (uint8_t*)&GearParam_Default_SMART_Volans.Gain_K, sizeof(nGearParam_Struct_t));
  559. break;
  560. }
  561. case 2://Volans Plus
  562. {
  563. //助力参数初始化
  564. memcpy((uint8_t*)&MC_AssisParam.Gear_ECO.Gain_K, (uint8_t*)&GearParam_Default_ECO_Volans_Plus.Gain_K, sizeof(nGearParam_Struct_t));
  565. memcpy((uint8_t*)&MC_AssisParam.Gear_NORM.Gain_K, (uint8_t*)&GearParam_Default_NORM_Volans_Plus.Gain_K, sizeof(nGearParam_Struct_t));
  566. memcpy((uint8_t*)&MC_AssisParam.Gear_SPORT.Gain_K, (uint8_t*)&GearParam_Default_SPORT_Volans_Plus.Gain_K, sizeof(nGearParam_Struct_t));
  567. memcpy((uint8_t*)&MC_AssisParam.Gear_TURBO.Gain_K, (uint8_t*)&GearParam_Default_TURBO_Volans_Plus.Gain_K, sizeof(nGearParam_Struct_t));
  568. memcpy((uint8_t*)&MC_AssisParam.Gear_SMART.Gain_K, (uint8_t*)&GearParam_Default_SMART_Volans_Plus.Gain_K, sizeof(nGearParam_Struct_t));
  569. break;
  570. }
  571. case 3://Pegasi
  572. {
  573. //助力参数初始化
  574. memcpy((uint8_t*)&MC_AssisParam.Gear_ECO.Gain_K, (uint8_t*)&GearParam_Default_ECO_Pegasi.Gain_K, sizeof(nGearParam_Struct_t));
  575. memcpy((uint8_t*)&MC_AssisParam.Gear_NORM.Gain_K, (uint8_t*)&GearParam_Default_NORM_Pegasi.Gain_K, sizeof(nGearParam_Struct_t));
  576. memcpy((uint8_t*)&MC_AssisParam.Gear_SPORT.Gain_K, (uint8_t*)&GearParam_Default_SPORT_Pegasi.Gain_K, sizeof(nGearParam_Struct_t));
  577. memcpy((uint8_t*)&MC_AssisParam.Gear_TURBO.Gain_K, (uint8_t*)&GearParam_Default_TURBO_Pegasi.Gain_K, sizeof(nGearParam_Struct_t));
  578. memcpy((uint8_t*)&MC_AssisParam.Gear_SMART.Gain_K, (uint8_t*)&GearParam_Default_SMART_Pegasi.Gain_K, sizeof(nGearParam_Struct_t));
  579. break;
  580. }
  581. case 4://Pegasi Plus
  582. {
  583. //助力参数初始化
  584. memcpy((uint8_t*)&MC_AssisParam.Gear_ECO.Gain_K, (uint8_t*)&GearParam_Default_ECO_Pegasi_Plus.Gain_K, sizeof(nGearParam_Struct_t));
  585. memcpy((uint8_t*)&MC_AssisParam.Gear_NORM.Gain_K, (uint8_t*)&GearParam_Default_NORM_Pegasi_Plus.Gain_K, sizeof(nGearParam_Struct_t));
  586. memcpy((uint8_t*)&MC_AssisParam.Gear_SPORT.Gain_K, (uint8_t*)&GearParam_Default_SPORT_Pegasi_Plus.Gain_K, sizeof(nGearParam_Struct_t));
  587. memcpy((uint8_t*)&MC_AssisParam.Gear_TURBO.Gain_K, (uint8_t*)&GearParam_Default_TURBO_Pegasi_Plus.Gain_K, sizeof(nGearParam_Struct_t));
  588. memcpy((uint8_t*)&MC_AssisParam.Gear_SMART.Gain_K, (uint8_t*)&GearParam_Default_SMART_Pegasi_Plus.Gain_K, sizeof(nGearParam_Struct_t));
  589. break;
  590. }
  591. default:
  592. {
  593. //默认处理
  594. break;
  595. }
  596. }
  597. //根据配置参数调整各挡位助力比
  598. if((MC_ConfigParam1.UserAdjParam1_ECO.Assist_K_GAIN <= 120) && (MC_ConfigParam1.UserAdjParam1_ECO.Assist_K_GAIN >= 80))
  599. MC_AssisParam.Gear_ECO.Gain_K = (MC_AssisParam.Gear_ECO.Gain_K * MC_ConfigParam1.UserAdjParam1_ECO.Assist_K_GAIN) / 100;
  600. if((MC_ConfigParam1.UserAdjParam1_NORM.Assist_K_GAIN <= 120) && (MC_ConfigParam1.UserAdjParam1_NORM.Assist_K_GAIN >= 80))
  601. MC_AssisParam.Gear_NORM.Gain_K = (MC_AssisParam.Gear_NORM.Gain_K * MC_ConfigParam1.UserAdjParam1_NORM.Assist_K_GAIN) / 100;
  602. if((MC_ConfigParam1.UserAdjParam1_SPORT.Assist_K_GAIN <= 120) && (MC_ConfigParam1.UserAdjParam1_SPORT.Assist_K_GAIN >= 80))
  603. MC_AssisParam.Gear_SPORT.Gain_K = (MC_AssisParam.Gear_SPORT.Gain_K * MC_ConfigParam1.UserAdjParam1_SPORT.Assist_K_GAIN) / 100;
  604. if((MC_ConfigParam1.UserAdjParam1_TURBO.Assist_K_GAIN <= 120) && (MC_ConfigParam1.UserAdjParam1_TURBO.Assist_K_GAIN >= 80))
  605. MC_AssisParam.Gear_TURBO.Gain_K = (MC_AssisParam.Gear_TURBO.Gain_K * MC_ConfigParam1.UserAdjParam1_TURBO.Assist_K_GAIN) / 100;
  606. if((MC_ConfigParam1.UserAdjParam1_SMART.Assist_K_GAIN <= 120) && (MC_ConfigParam1.UserAdjParam1_SMART.Assist_K_GAIN >= 80))
  607. MC_AssisParam.Gear_SMART.TorqueApp_TH = (MC_AssisParam.Gear_SMART.TorqueApp_TH * MC_ConfigParam1.UserAdjParam1_SMART.Assist_K_GAIN) / 100;
  608. //根据配置参数调整各挡位加速度
  609. if(MC_ConfigParam1.UserAdjParam1_ECO.StarModel_GAIN <= 90)
  610. MC_AssisParam.Gear_ECO.AccCnt -= 1;
  611. else if(MC_ConfigParam1.UserAdjParam1_ECO.StarModel_GAIN >= 110)
  612. MC_AssisParam.Gear_ECO.AccCnt += 1;
  613. if(MC_ConfigParam1.UserAdjParam1_NORM.StarModel_GAIN <= 90)
  614. MC_AssisParam.Gear_NORM.AccCnt -= 1;
  615. else if(MC_ConfigParam1.UserAdjParam1_NORM.StarModel_GAIN >= 110)
  616. MC_AssisParam.Gear_NORM.AccCnt += 1;
  617. if(MC_ConfigParam1.UserAdjParam1_SPORT.StarModel_GAIN <= 90)
  618. MC_AssisParam.Gear_SPORT.AccCnt -= 1;
  619. else if(MC_ConfigParam1.UserAdjParam1_SPORT.StarModel_GAIN >= 110)
  620. MC_AssisParam.Gear_SPORT.AccCnt += 1;
  621. if(MC_ConfigParam1.UserAdjParam1_TURBO.StarModel_GAIN <= 90)
  622. MC_AssisParam.Gear_TURBO.AccCnt -= 1;
  623. else if(MC_ConfigParam1.UserAdjParam1_TURBO.StarModel_GAIN >= 110)
  624. MC_AssisParam.Gear_TURBO.AccCnt += 1;
  625. if(MC_ConfigParam1.UserAdjParam1_SMART.StarModel_GAIN <= 90) MC_AssisParam.Gear_SMART.AccCnt -= 1;
  626. else if(MC_ConfigParam1.UserAdjParam1_SMART.StarModel_GAIN >= 110)
  627. MC_AssisParam.Gear_SMART.AccCnt += 1;
  628. //根据配置参数调整各挡位最大力矩
  629. if((MC_ConfigParam2.UserAdjParam2_ECO.MaxTorque_K_GAIN <= 120) && (MC_ConfigParam2.UserAdjParam2_ECO.MaxTorque_K_GAIN >= 80))
  630. MC_AssisParam.Gear_ECO.Upper_Iq = (MC_AssisParam.Gear_ECO.Upper_Iq * MC_ConfigParam2.UserAdjParam2_ECO.MaxTorque_K_GAIN) / 100;
  631. if((MC_ConfigParam2.UserAdjParam2_NORM.MaxTorque_K_GAIN <= 120) && (MC_ConfigParam2.UserAdjParam2_NORM.MaxTorque_K_GAIN >= 80))
  632. MC_AssisParam.Gear_NORM.Upper_Iq = (MC_AssisParam.Gear_NORM.Upper_Iq * MC_ConfigParam2.UserAdjParam2_NORM.MaxTorque_K_GAIN) / 100;
  633. if((MC_ConfigParam2.UserAdjParam2_SPORT.MaxTorque_K_GAIN <= 120) && (MC_ConfigParam2.UserAdjParam2_SPORT.MaxTorque_K_GAIN >= 80))
  634. MC_AssisParam.Gear_SPORT.Upper_Iq = (MC_AssisParam.Gear_SPORT.Upper_Iq * MC_ConfigParam2.UserAdjParam2_SPORT.MaxTorque_K_GAIN) / 100;
  635. if((MC_ConfigParam2.UserAdjParam2_TURBO.MaxTorque_K_GAIN <= 120) && (MC_ConfigParam2.UserAdjParam2_TURBO.MaxTorque_K_GAIN >= 80))
  636. MC_AssisParam.Gear_TURBO.Upper_Iq = (MC_AssisParam.Gear_TURBO.Upper_Iq * MC_ConfigParam2.UserAdjParam2_TURBO.MaxTorque_K_GAIN) / 100;
  637. if((MC_ConfigParam2.UserAdjParam2_SMART.MaxTorque_K_GAIN <= 120) && (MC_ConfigParam2.UserAdjParam2_SMART.MaxTorque_K_GAIN >= 80))
  638. MC_AssisParam.Gear_SMART.Upper_Iq = (MC_AssisParam.Gear_SMART.Upper_Iq * MC_ConfigParam2.UserAdjParam2_SMART.MaxTorque_K_GAIN) / 100;
  639. //根据配置参数调整各挡位最大电流
  640. if((MC_ConfigParam2.UserAdjParam2_ECO.MaxCurrent_K_GAIN <= 120) && (MC_ConfigParam2.UserAdjParam2_ECO.MaxCurrent_K_GAIN >= 80))
  641. MC_AssisParam.Gear_ECO.CurrentMax_K = (MC_AssisParam.Gear_ECO.CurrentMax_K * MC_ConfigParam2.UserAdjParam2_ECO.MaxCurrent_K_GAIN) / 100;
  642. if((MC_ConfigParam2.UserAdjParam2_NORM.MaxCurrent_K_GAIN <= 120) && (MC_ConfigParam2.UserAdjParam2_NORM.MaxCurrent_K_GAIN >= 80))
  643. MC_AssisParam.Gear_NORM.CurrentMax_K = (MC_AssisParam.Gear_NORM.CurrentMax_K * MC_ConfigParam2.UserAdjParam2_NORM.MaxCurrent_K_GAIN) / 100;
  644. if((MC_ConfigParam2.UserAdjParam2_SPORT.MaxCurrent_K_GAIN <= 120) && (MC_ConfigParam2.UserAdjParam2_SPORT.MaxCurrent_K_GAIN >= 80))
  645. MC_AssisParam.Gear_SPORT.CurrentMax_K = (MC_AssisParam.Gear_SPORT.CurrentMax_K * MC_ConfigParam2.UserAdjParam2_SPORT.MaxCurrent_K_GAIN) / 100;
  646. if((MC_ConfigParam2.UserAdjParam2_TURBO.MaxCurrent_K_GAIN <= 120) && (MC_ConfigParam2.UserAdjParam2_TURBO.MaxCurrent_K_GAIN >= 80))
  647. MC_AssisParam.Gear_TURBO.CurrentMax_K = (MC_AssisParam.Gear_TURBO.CurrentMax_K * MC_ConfigParam2.UserAdjParam2_TURBO.MaxCurrent_K_GAIN) / 100;
  648. if((MC_ConfigParam2.UserAdjParam2_SMART.MaxCurrent_K_GAIN <= 120) && (MC_ConfigParam2.UserAdjParam2_SMART.MaxCurrent_K_GAIN >= 80))
  649. MC_AssisParam.Gear_SMART.CurrentMax_K = (MC_AssisParam.Gear_SMART.CurrentMax_K * MC_ConfigParam2.UserAdjParam2_SMART.MaxCurrent_K_GAIN) / 100;
  650. }