main.c 45 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890
  1. /**
  2. * @mainpage
  3. * Project Name:
  4. * Author:
  5. * Complier:
  6. * CPU_TYPE:
  7. * @section Project description:
  8. * -项目详细描述
  9. * @section function description:
  10. * -#功能描述
  11. * @section Usage description:
  12. * -#用法描述
  13. * @attention
  14. * -#注意事项
  15. */
  16. #ifndef _MAIN_C_
  17. #define _MAIN_C_
  18. #endif
  19. /************************************************************************
  20. Included File
  21. *************************************************************************/
  22. #include "syspar.h"
  23. #include "user.h"
  24. #include "TimeTask_Event.h"
  25. #include "FSM_1st.h"
  26. #include "FSM_2nd.h"
  27. #include "can.h"
  28. #include "cmdgennew.h"
  29. #include "canAppl.h"
  30. #include "flash_master.h"
  31. #include "torquesensor.h"
  32. #include "power.h"
  33. #include "STLmain.h"
  34. #include "api_rt.h"
  35. #include "hwsetup.h"
  36. #include "app.h"
  37. #include "Temp.h"
  38. #include "enviolo_can.h"
  39. #include "giant_can.h"
  40. #include "profiler.h"
  41. /***************************
  42. *********************************************
  43. Exported Functions:
  44. ************************************************************************/
  45. /***************************************************************
  46. Function: main;
  47. Description:main function
  48. Call by:
  49. Input Variables: N/A
  50. Output/Return Variables: N/A
  51. Subroutine Call: N/A;
  52. Reference: N/A
  53. ****************************************************************/
  54. int main(void) /* parasoft-suppress GJB5369-4_2_1_10 "mismatch" */
  55. {
  56. #ifndef RUN_ARCH_SIM
  57. SCB->VTOR = 0x08003000;
  58. DISABLE_IRQ;
  59. /* MCU Core and GPIO configuration */
  60. hw_voHardwareSetup1();
  61. /* Peripheral configuration */
  62. hw_voHardwareSetup2();
  63. /* Api Init*/
  64. iRt_Init();
  65. /* Api App Init*/
  66. AppInit();
  67. /* Spi Position Comp */
  68. spi_voReadWriteSeneorReg();
  69. /* Error Log Read */
  70. flash_voErrorRead();
  71. /* MCU Self Test Init */
  72. stl_voRunTimeChecksInit();
  73. /* Watchdog 1s */
  74. hw_voIWDGInit(FWDGT_PSC_DIV32,1250);//1s
  75. /* Program load rate testing init */
  76. profiler_init();
  77. //Enviolo gear sensor init
  78. GearBox_Init();
  79. //ganir control data init
  80. giant_Init();
  81. /* Timer enable */
  82. hw_voTimEn();
  83. /* Interrupts of peripherals enable*/
  84. hw_voEnInt();
  85. /* Enable all interrupts */
  86. ENABLE_IRQ;
  87. /* Enter infinite loop */
  88. while (1)
  89. {
  90. PROFILER_BG();
  91. AppLoop();
  92. }
  93. return 0;
  94. #endif
  95. }
  96. /***************************************************************
  97. Function: mn_voSoftwareInit;
  98. Description:software intial
  99. Call by:
  100. Input Variables: N/A
  101. Output/Return Variables: N/A
  102. Subroutine Call: N/A;
  103. Reference: N/A
  104. ****************************************************************/
  105. void mn_voParaSet(void)
  106. {
  107. /* Read system parameter*/
  108. i2c_voSysparaReadFromEE(&i2c_stRXCRCOut);
  109. if (i2c_stRXCRCOut.blHistoryParaFltFlg == FALSE)
  110. {
  111. ass_stParaSet.uwAsssistSelectNum = I2C_uwHistoryParaRead[0];
  112. cp_stHistoryPara.uwOpenTimes = I2C_uwHistoryParaRead[1];
  113. cp_stHistoryPara.ulUsedTime = (((ULONG)I2C_uwHistoryParaRead[2]) << 16) + I2C_uwHistoryParaRead[3];
  114. cp_stHistoryPara.uwNTCTempMaxCe = I2C_uwHistoryParaRead[4];
  115. cp_stHistoryPara.uwNTCTempMinCe = I2C_uwHistoryParaRead[5];
  116. cp_stHistoryPara.uwAlamHOcurTimes = I2C_uwHistoryParaRead[6];
  117. cp_stHistoryPara.uwAlamSOcurTimes = I2C_uwHistoryParaRead[7];
  118. cp_stHistoryPara.uwAlamOHeatTimes = I2C_uwHistoryParaRead[8];
  119. cp_stHistoryPara.uwAlamRotorLockTimes = I2C_uwHistoryParaRead[9];
  120. cp_stHistoryPara.uwAlamPhsLossTimes = I2C_uwHistoryParaRead[10];
  121. cp_stHistoryPara.uwAlamOVolTimes = I2C_uwHistoryParaRead[11];
  122. cp_stHistoryPara.uwAlamUVolTimes = I2C_uwHistoryParaRead[12];
  123. cp_stHistoryPara.uwAlamComOTimeTimes = I2C_uwHistoryParaRead[13];
  124. cp_stHistoryPara.uwG1AvgPwrConsumption = I2C_uwHistoryParaRead[14];
  125. cp_stHistoryPara.uwG2AvgPwrConsumption = I2C_uwHistoryParaRead[15];
  126. cp_stHistoryPara.uwG3AvgPwrConsumption = I2C_uwHistoryParaRead[16];
  127. cp_stHistoryPara.uwG4AvgPwrConsumption = I2C_uwHistoryParaRead[17];
  128. cp_stHistoryPara.uwG5AvgPwrConsumption = I2C_uwHistoryParaRead[18];
  129. cp_stHistoryPara.ulODOTrip = (((ULONG)I2C_uwHistoryParaRead[19]) << 16) + I2C_uwHistoryParaRead[20];
  130. cp_stHistoryPara.ulODOTime = (((ULONG)I2C_uwHistoryParaRead[21]) << 16) + I2C_uwHistoryParaRead[22];
  131. cp_stHistoryPara.ulTripSum = (((ULONG)I2C_uwHistoryParaRead[23]) << 16) + I2C_uwHistoryParaRead[24];
  132. cp_stHistoryPara.ulTripSumTime = (((ULONG)I2C_uwHistoryParaRead[25]) << 16) + I2C_uwHistoryParaRead[26];
  133. cp_stHistoryPara.uwTorSensorAlamTimes = I2C_uwHistoryParaRead[27];
  134. cp_stHistoryPara.uwCadSensorAlamTimes = I2C_uwHistoryParaRead[28];
  135. cp_stHistoryPara.uwBikeSpdSensorAlamTimes = I2C_uwHistoryParaRead[29];
  136. cp_stHistoryPara.uwPosSensorAlamTimes = I2C_uwHistoryParaRead[30];
  137. cp_stHistoryPara.ulRealODOTrip = (((ULONG)I2C_uwHistoryParaRead[31]) << 16) + I2C_uwHistoryParaRead[32];
  138. cp_stHistoryPara.ulRealODOTime = (((ULONG)I2C_uwHistoryParaRead[33]) << 16) + I2C_uwHistoryParaRead[34];
  139. }
  140. else
  141. {}
  142. // peripheral Para Set
  143. cadence_stFreGetCof.uwNumbersPulses = CADENCE_NUMBERS_PULSES;
  144. bikespeed_stFreGetCof.uwNumbersPulses = BIKESPEED_NUMBERS_PULSES;
  145. torsensor_stTorSensorCof.uwMaxSensorTorquePu = ((ULONG)TORQUE_MAX_RANGE << 14) / TORQUEBASE; // Q14
  146. /////////////////////////////////
  147. if (cp_stFlg.ParaUseEEFlg == TRUE)
  148. {
  149. if (i2c_stRXCRCOut.ReadFinishFlg == TRUE)
  150. {
  151. if (i2c_stRXCRCOut.blMotorParaFltFlg == FALSE)
  152. {
  153. cp_stMotorPara.swMotrPolePairs = (SWORD)I2C_uwMotorParaRead[0];
  154. cp_stMotorPara.swRsOhm = (SWORD)I2C_uwMotorParaRead[1];
  155. cp_stMotorPara.swLdmH = (SWORD)I2C_uwMotorParaRead[2];
  156. cp_stMotorPara.swLqmH = (SWORD)I2C_uwMotorParaRead[3];
  157. cp_stMotorPara.swFluxWb = (SWORD)I2C_uwMotorParaRead[4];
  158. cp_stMotorPara.swIdMaxA = (SWORD)I2C_uwMotorParaRead[5];
  159. cp_stMotorPara.swIdMinA = (SWORD)I2C_uwMotorParaRead[6];
  160. cp_stMotorPara.swRSpeedRpm = (SWORD)I2C_uwMotorParaRead[7];
  161. cp_stMotorPara.swRPwrWt = (SWORD)I2C_uwMotorParaRead[8];
  162. cp_stMotorPara.swRIarmsA = (SWORD)I2C_uwMotorParaRead[9];
  163. cp_stMotorPara.swRUdcV = (SWORD)I2C_uwMotorParaRead[10];
  164. cp_stMotorPara.swJD = (SWORD)I2C_uwMotorParaRead[11];
  165. cp_stMotorPara.swTorMax = (SWORD)I2C_uwMotorParaRead[12];
  166. }
  167. else
  168. {}
  169. if (i2c_stRXCRCOut.blBikeParaFltFlg == FALSE)
  170. {
  171. ass_stParaCong.uwWheelPerimeter = I2C_uwBikeParaRead[0];
  172. ass_stParaCong.uwMechRationMotor = I2C_uwBikeParaRead[1];
  173. ass_stParaCong.uwThrottleMaxSpdKmH = I2C_uwBikeParaRead[2];
  174. ass_stParaCong.uwCartSpdKmH = I2C_uwBikeParaRead[3];
  175. ass_stParaCong.uwNmFrontChainring = I2C_uwBikeParaRead[4];
  176. ass_stParaCong.uwNmBackChainring = I2C_uwBikeParaRead[5];
  177. ass_stParaCong.uwAssistSelect1 = I2C_uwBikeParaRead[6];
  178. ass_stParaCong.uwAssistSelect2 = I2C_uwBikeParaRead[7];
  179. ass_stParaCong.uwLightVoltage = I2C_uwBikeParaRead[8];
  180. ass_stParaCong.swDeltPerimeter = (SWORD)I2C_uwBikeParaRead[9];
  181. ass_stParaCong.uwStartMode = I2C_uwBikeParaRead[10];
  182. ass_stParaCong.uwAutoPowerOffTime = I2C_uwBikeParaRead[11];
  183. ass_stParaCong.uwThrottleSmooth = I2C_uwBikeParaRead[12];
  184. }
  185. else
  186. {}
  187. if (i2c_stRXCRCOut.blMControlParaFltFlg == FALSE)
  188. {
  189. cp_stFlg.ParaFirstSetFlg = I2C_uwMControlRead[0];
  190. cp_stFlg.SpiOffsetFirstSetFlg = I2C_uwMControlRead[1];
  191. spi_stResolverOut.swSpiThetaOffsetOrignPu = (SWORD)I2C_uwMControlRead[2];
  192. spi_stResolverOut.swSpiThetaOffsetPu = (SWORD)I2C_uwMControlRead[3];
  193. cp_stMotorPara.swIpeakMaxA = (SWORD)I2C_uwMControlRead[4];
  194. cp_stControlPara.swAlmOverCurrentVal = (SWORD)I2C_uwMControlRead[5];
  195. cp_stControlPara.swAlmOverVolVal1 = (SWORD)I2C_uwMControlRead[6];
  196. cp_stControlPara.swAlmUnderVolVal1 = (SWORD)I2C_uwMControlRead[7];
  197. cp_stControlPara.swAlmOverSpdVal = (SWORD)I2C_uwMControlRead[8];
  198. cp_stControlPara.swAlmOverHeatCeVal = (SWORD)I2C_uwMControlRead[9];
  199. cp_stControlPara.swAlmRecOHeatVal = (SWORD)I2C_uwMControlRead[10];
  200. cp_stControlPara.swAlmPwrLimitStartTempVal = (SWORD)I2C_uwMControlRead[11];
  201. // cp_stControlPara.swAlmMotorOverHeatCeVal = (SWORD)I2C_uwMControlRead[12];
  202. // cp_stControlPara.swAlmMotorRecOHeatVal = (SWORD)I2C_uwMControlRead[13];
  203. // cp_stControlPara.swAlmPwrLimitMotorStartTempVal = (SWORD)I2C_uwMControlRead[14];
  204. ass_stParaCong.uwControlFunEN = I2C_uwMControlRead[15];
  205. ass_stParaCong.uwThrottleGearEN = I2C_uwMControlRead[16];
  206. cp_stControlPara.swAlmRecOVVal = (SWORD)(cp_stControlPara.swAlmOverVolVal1 - ALM_VLT_REC_ERRVAL);//updata recover data
  207. cp_stControlPara.swAlmRecUVVal = (SWORD)(cp_stControlPara.swAlmUnderVolVal1 + ALM_VLT_REC_ERRVAL);
  208. cp_stControlPara.swCvbConstantVolBrakeV = (SWORD)(cp_stControlPara.swAlmOverVolVal1 - CVB_CONSTANT_VOL_BRAKE_ERRV);
  209. }
  210. else
  211. {
  212. cp_stFlg.RunPermitFlg = FALSE;
  213. }
  214. if (i2c_stRXCRCOut.blSensorParaFltFlg == FALSE)
  215. {
  216. torsensor_stTorSensorCof.uwTorqueOffsetOrign = I2C_uwSensorRead[0];
  217. torsensor_stTorSensorCof.uwTorqueOffsetNow1 = I2C_uwSensorRead[1];
  218. torsensor_stTorSensorCof.uwTorqueOffsetNow2 = I2C_uwSensorRead[2];
  219. torsensor_stTorSensorCof.uwTorqueOffsetNow3 = I2C_uwSensorRead[3];
  220. torsensor_stTorSensorCof.uwTorqueOffsetNow4 = I2C_uwSensorRead[4];
  221. torsensor_stTorSensorCof.uwMaxSensorTorquePu = I2C_uwSensorRead[5];
  222. torsensor_stTorSensorCof.uwBikeTorStep1RealNm = I2C_uwSensorRead[6];
  223. torsensor_stTorSensorCof.uwBikeTorStep1ADC = I2C_uwSensorRead[7];
  224. torsensor_stTorSensorCof.uwBikeTorStep2RealNm = I2C_uwSensorRead[8];
  225. torsensor_stTorSensorCof.uwBikeTorStep2ADC = I2C_uwSensorRead[9];
  226. torsensor_stTorSensorCof.uwBikeTorStep3RealNm = I2C_uwSensorRead[10];
  227. torsensor_stTorSensorCof.uwBikeTorStep3ADC = I2C_uwSensorRead[11];
  228. torsensor_stTorSensorCof.uwBikeTorStep4RealNm = I2C_uwSensorRead[12];
  229. torsensor_stTorSensorCof.uwBikeTorStep4ADC = I2C_uwSensorRead[13];
  230. cadence_stFreGetCof.uwNumbersPulses = I2C_uwSensorRead[14];
  231. bikespeed_stFreGetCof.uwNumbersPulses = I2C_uwSensorRead[15];
  232. }
  233. else
  234. {
  235. cp_stFlg.RunPermitFlg = FALSE;
  236. }
  237. if (i2c_stRXCRCOut.blAssistParaFltFlg == FALSE)
  238. {
  239. ass_stParaSet.uwStartupCoef = I2C_uwAssistParaRead[0];
  240. ass_stParaSet.uwStartupCruiseCoef = I2C_uwAssistParaRead[1];
  241. ass_stParaSet.uwAssistStartNm = I2C_uwAssistParaRead[2];
  242. ass_stParaSet.uwAssistStopNm = I2C_uwAssistParaRead[3];
  243. ass_stParaSet.uwStartUpGainStep = I2C_uwAssistParaRead[4];
  244. ass_stParaSet.uwStartUpCadNm = I2C_uwAssistParaRead[5];
  245. ass_stParaSet.uwTorLPFCadNm = I2C_uwAssistParaRead[6];
  246. ass_stParaSet.uwSpeedAssistSpdRpm = I2C_uwAssistParaRead[7];
  247. ass_stParaSet.uwSpeedAssistIMaxA = I2C_uwAssistParaRead[8];
  248. ass_stParaSet.uwAssistLimitBikeSpdStart = I2C_uwAssistParaRead[9];
  249. ass_stParaSet.uwAssistLimitBikeSpdStop = I2C_uwAssistParaRead[10];
  250. ass_stParaSet.uwCadenceWeight = I2C_uwAssistParaRead[11];
  251. // ass_stParaSet.uwTorWeight = Q12_1 - ass_stParaSet.uwCadenceWeight;
  252. }
  253. else
  254. {}
  255. if (i2c_stRXCRCOut.blRideParaFltFlg == FALSE)
  256. {
  257. for(int i=0;i<5;i++)
  258. {
  259. ass_stCalCoef.ucAssistRatioGain[i] = (UBYTE)(I2C_uwRideParaRead[i]>>8);
  260. ass_stCalCoef.ucAssistAccelerationGain[i] = (UBYTE)(I2C_uwRideParaRead[i]);
  261. ass_stCalCoef.ucMaxCurrentGain[i] = (UBYTE)(I2C_uwRideParaRead[i+5]>>8);
  262. ass_stCalCoef.ucMaxTorqueGain[i] = (UBYTE)(I2C_uwRideParaRead[i+5]);
  263. }
  264. }
  265. else
  266. {
  267. }
  268. if(ass_stCalCoef.ucAssistRatioGain[0] == 0)
  269. {
  270. for(int i=0;i<5;i++)
  271. {
  272. ass_stCalCoef.ucAssistRatioGain[i] = 100;
  273. ass_stCalCoef.ucAssistAccelerationGain[i] = 100;
  274. ass_stCalCoef.ucMaxCurrentGain[i] = 100;
  275. ass_stCalCoef.ucMaxTorqueGain[i] = 100;
  276. }
  277. }
  278. if (i2c_stRXCRCOut.blBikePara2FltFlg == FALSE)
  279. {
  280. ass_stParaCong.uwNoneOBCEnable = I2C_uwBikePara2Read[0];
  281. ass_stParaCong.uwRearLightCycle = I2C_uwBikePara2Read[1];
  282. ass_stParaCong.uwRearLightDuty = I2C_uwBikePara2Read[2];
  283. ass_stParaCong.swDeltaBikeSpeedLimit = (SWORD) I2C_uwBikePara2Read[3];
  284. }
  285. else
  286. {
  287. }
  288. }
  289. cp_stFlg.ParaUseEEFinishFlg = TRUE;
  290. }
  291. else
  292. {}
  293. if (i2c_stRXCRCOut.blGearBoxParaFltFlg == FALSE)
  294. {
  295. GearBox_OBC_SetParams.GearNum = I2C_uwGearBoxParaRead[0];
  296. GearBox_OBC_SetParams.CadenceMin = I2C_uwGearBoxParaRead[1];
  297. GearBox_OBC_SetParams.CadenceMax = I2C_uwGearBoxParaRead[2];
  298. }
  299. else
  300. {}
  301. }
  302. /***************************************************************
  303. Function: mn_voParaUpdate;
  304. Description:update pra from upper PC
  305. Call by:
  306. Input Variables: N/A
  307. Output/Return Variables: N/A
  308. Subroutine Call: N/A;
  309. Reference: N/A
  310. ****************************************************************/
  311. void mn_voParaUpdate(void)
  312. {
  313. if (cp_stFlg.ParaMInfoUpdateFlg == TRUE)
  314. {
  315. cp_stMotorPara.swMotrPolePairs = (SWORD)MC_UpcInfo.stMotorInfo.uwPolePairs;
  316. cp_stMotorPara.swRsOhm = (SWORD)MC_UpcInfo.stMotorInfo.uwRsmOhm;
  317. cp_stMotorPara.swLdmH = (SWORD)MC_UpcInfo.stMotorInfo.uwLduH;
  318. cp_stMotorPara.swLqmH = (SWORD)MC_UpcInfo.stMotorInfo.uwLquH;
  319. cp_stMotorPara.swFluxWb = (SWORD)MC_UpcInfo.stMotorInfo.uwFluxmWb;
  320. cp_stMotorPara.swIdMaxA = (SWORD)MC_UpcInfo.stMotorInfo.uwIdMaxA;
  321. cp_stMotorPara.swIdMinA = (SWORD)MC_UpcInfo.stMotorInfo.uwIdMinA;
  322. cp_stMotorPara.swRSpeedRpm = (SWORD)MC_UpcInfo.stMotorInfo.uwRSpdRpm;
  323. cp_stMotorPara.swRPwrWt = (SWORD)MC_UpcInfo.stMotorInfo.uwRPwrWt;
  324. cp_stMotorPara.swRIarmsA = (SWORD)MC_UpcInfo.stMotorInfo.uwRCurA;
  325. cp_stMotorPara.swRUdcV = (SWORD)MC_UpcInfo.stMotorInfo.uwRVolV;
  326. cp_stMotorPara.swJD = (SWORD)MC_UpcInfo.stMotorInfo.uwJD;
  327. cp_stMotorPara.swTorMax = (SWORD)MC_UpcInfo.stMotorInfo.uwTorMaxNm;
  328. cp_stFlg.ParaMotorDriveUpdateFinishFlg = TRUE;
  329. cp_stFlg.ParaMInfoUpdateFlg = FALSE;
  330. }
  331. if (cp_stFlg.ParaBikeInfoUpdateFlg == TRUE)
  332. {
  333. ass_stParaCong.uwWheelPerimeter = MC_UpcInfo.stBikeInfo.uwWheelPerimeter;
  334. ass_stParaCong.uwMechRationMotor = MC_UpcInfo.stBikeInfo.uwMechRationMotor;
  335. ass_stParaCong.uwThrottleMaxSpdKmH = MC_UpcInfo.stBikeInfo.uwThrottleMaxSpdKmH;
  336. ass_stParaCong.uwCartSpdKmH = MC_UpcInfo.stBikeInfo.uwCartSpdKmH;
  337. ass_stParaCong.uwNmFrontChainring = MC_UpcInfo.stBikeInfo.uwNmFrontChainring;
  338. ass_stParaCong.uwNmBackChainring = MC_UpcInfo.stBikeInfo.uwNmBackChainring;
  339. ass_stParaCong.uwAssistSelect1 = MC_UpcInfo.stBikeInfo.uwAssistSelect1;
  340. ass_stParaCong.uwAssistSelect2 = MC_UpcInfo.stBikeInfo.uwAssistSelect2;
  341. ass_stParaCong.uwLightVoltage = MC_UpcInfo.stBikeInfo.uwLightVoltage;
  342. ass_stParaCong.swDeltPerimeter = MC_UpcInfo.stBikeInfo.swWheelSizeAdjust;
  343. ass_stParaCong.uwStartMode = MC_UpcInfo.stBikeInfo.uwStartMode;
  344. ass_stParaCong.uwAutoPowerOffTime = MC_UpcInfo.stBikeInfo.uwAutoPowerOffTime;
  345. ass_stParaCong.uwThrottleSmooth = MC_UpcInfo.stBikeInfo.uwThrottleSmooth;
  346. cp_stFlg.ParaAssistUpdateFinishFlg = TRUE;
  347. cp_stFlg.ParaBikeInfoUpdateFlg = FALSE;
  348. }
  349. if (cp_stFlg.ParaMCInfoUpdateFlg == TRUE)
  350. {
  351. cp_stFlg.ParaFirstSetFlg = MC_UpcInfo.stTestParaInfo.uwEEFirstDefaultSetFlg;
  352. cp_stFlg.SpiOffsetFirstSetFlg = MC_UpcInfo.stTestParaInfo.uwSPIOffsetFirstSetFlg;
  353. spi_stResolverOut.swSpiThetaOffsetOrignPu = MC_UpcInfo.stMContorlInfo.uwSPIPosOffsetOrigin;
  354. spi_stResolverOut.swSpiThetaOffsetPu = MC_UpcInfo.stMContorlInfo.uwSPIPosOffsetNow;
  355. cp_stMotorPara.swIpeakMaxA = (SWORD)MC_UpcInfo.stMContorlInfo.uwIPeakMaxA;
  356. cp_stControlPara.swAlmOverCurrentVal = (SWORD)MC_UpcInfo.stMContorlInfo.uwAlamOCurA;
  357. cp_stControlPara.swAlmOverVolVal1 = (SWORD)MC_UpcInfo.stMContorlInfo.uwAlamOVolV;
  358. cp_stControlPara.swAlmUnderVolVal1 = (SWORD)MC_UpcInfo.stMContorlInfo.uwAlamUVolV;
  359. cp_stControlPara.swAlmOverSpdVal = (SWORD)MC_UpcInfo.stMContorlInfo.uwAlamOverSpdRpm;
  360. cp_stControlPara.swAlmOverHeatCeVal = (SWORD)MC_UpcInfo.stMContorlInfo.uwAlamOverHeatCe;
  361. cp_stControlPara.swAlmRecOHeatVal = (SWORD)MC_UpcInfo.stMContorlInfo.uwAlamRecHeatCe;
  362. cp_stControlPara.swAlmPwrLimitStartTempVal = (SWORD)MC_UpcInfo.stMContorlInfo.uwPwrLimitStartCe;
  363. // cp_stControlPara.swAlmMotorOverHeatCeVal = MC_UpcInfo.stMContorlInfo.uwAlamMotorOverHeatCe;
  364. // cp_stControlPara.swAlmMotorRecOHeatVal = MC_UpcInfo.stMContorlInfo.uwAlamMotorRecHeatCe;
  365. // cp_stControlPara.swAlmPwrLimitMotorStartTempVal = MC_UpcInfo.stMContorlInfo.uwPwrLimitMotorStartCe;
  366. ass_stParaCong.uwControlFunEN = MC_UpcInfo.stMContorlInfo.uwControlFunEN;
  367. ass_stParaCong.uwThrottleGearEN = MC_UpcInfo.stMContorlInfo.uwThrottleGearEN;
  368. cp_stControlPara.swAlmRecOVVal = (SWORD)(cp_stControlPara.swAlmOverVolVal1 - ALM_VLT_REC_ERRVAL);
  369. cp_stControlPara.swAlmRecUVVal = (SWORD)(cp_stControlPara.swAlmUnderVolVal1 + ALM_VLT_REC_ERRVAL);
  370. cp_stControlPara.swCvbConstantVolBrakeV = (SWORD)(cp_stControlPara.swAlmOverVolVal1 - CVB_CONSTANT_VOL_BRAKE_ERRV);
  371. cp_stFlg.ParaMotorDriveUpdateFinishFlg = TRUE;
  372. cp_stFlg.ParaMCInfoUpdateFlg = FALSE;
  373. }
  374. if (cp_stFlg.ParaSensorInfoUpdateFlg == TRUE)
  375. {
  376. torsensor_stTorSensorCof.uwTorqueOffsetOrign = MC_UpcInfo.stSensorInfo.uwTorSensorOffsetOrigin;
  377. torsensor_stTorSensorCof.uwMaxSensorTorquePu = MC_UpcInfo.stSensorInfo.uwBikeTorMaxNm;
  378. torsensor_stTorSensorCof.uwBikeTorStep1RealNm = MC_UpcInfo.stSensorInfo.uwBikeTor1StepRealNm;
  379. torsensor_stTorSensorCof.uwBikeTorStep1ADC = MC_UpcInfo.stSensorInfo.uwBikeTor1StepADC;
  380. torsensor_stTorSensorCof.uwBikeTorStep2RealNm = MC_UpcInfo.stSensorInfo.uwBikeTor2StepRealNm;
  381. torsensor_stTorSensorCof.uwBikeTorStep2ADC = MC_UpcInfo.stSensorInfo.uwBikeTor2StepADC;
  382. torsensor_stTorSensorCof.uwBikeTorStep3RealNm = MC_UpcInfo.stSensorInfo.uwBikeTor3StepRealNm;
  383. torsensor_stTorSensorCof.uwBikeTorStep3ADC = MC_UpcInfo.stSensorInfo.uwBikeTor3StepADC;
  384. torsensor_stTorSensorCof.uwBikeTorStep4RealNm = MC_UpcInfo.stSensorInfo.uwBikeTor4StepRealNm;
  385. torsensor_stTorSensorCof.uwBikeTorStep4ADC = MC_UpcInfo.stSensorInfo.uwBikeTor4StepADC;
  386. cadence_stFreGetCof.uwNumbersPulses = MC_UpcInfo.stSensorInfo.uwCadSensorPulseNm;
  387. bikespeed_stFreGetCof.uwNumbersPulses = MC_UpcInfo.stSensorInfo.uwBikeSpdSensorPulseNm;
  388. cp_stFlg.ParaAssistUpdateFinishFlg = TRUE;
  389. cp_stFlg.ParaSensorInfoUpdateFlg = FALSE;
  390. }
  391. if (cp_stFlg.ParaAInfoUpdateFlg == TRUE)
  392. {
  393. ass_stParaSet.uwStartupCoef = MC_UpcInfo.stAssistInfo.swStartupGain;
  394. ass_stParaSet.uwStartupCruiseCoef = MC_UpcInfo.stAssistInfo.swStartcruiseGain;
  395. ass_stParaSet.uwAssistStartNm = MC_UpcInfo.stAssistInfo.uwAssistStartNm;
  396. ass_stParaSet.uwAssistStopNm = MC_UpcInfo.stAssistInfo.uwAssistStopNm;
  397. ass_stParaSet.uwStartUpGainStep = MC_UpcInfo.stAssistInfo.uwStartUpGainStep;
  398. ass_stParaSet.uwStartUpCadNm = MC_UpcInfo.stAssistInfo.uwStartUpCadNm;
  399. ass_stParaSet.uwTorLPFCadNm = MC_UpcInfo.stAssistInfo.uwTorLPFCadNm;
  400. ass_stParaSet.uwSpeedAssistSpdRpm = MC_UpcInfo.stAssistInfo.uwSpeedAssistSpdRpm;
  401. ass_stParaSet.uwSpeedAssistIMaxA = MC_UpcInfo.stAssistInfo.uwSpeedAssistIMaxA;
  402. ass_stParaSet.uwAssistLimitBikeSpdStart = MC_UpcInfo.stAssistInfo.uwAssistLimitBikeSpdStart;
  403. ass_stParaSet.uwAssistLimitBikeSpdStop = MC_UpcInfo.stAssistInfo.uwAssistLimitBikeSpdStop;
  404. ass_stParaSet.uwCadenceWeight = MC_UpcInfo.stAssistInfo.uwCadenceAssistWeight;
  405. //ass_stParaSet.uwTorWeight = Q12_1 - ass_stParaSet.uwCadenceWeight;
  406. cp_stFlg.ParaAssistUpdateFinishFlg = TRUE;
  407. cp_stFlg.ParaAInfoUpdateFlg = FALSE;
  408. }
  409. if(cp_stFlg.TestParaInfoUpdateFlg == TRUE)
  410. {
  411. cp_stControlPara.swAlignCurAp = (SWORD)MC_UpcInfo.stTestParaInfo.uwInitPosCurAmp;
  412. cp_stControlPara.swDragVolAp = (SWORD)MC_UpcInfo.stTestParaInfo.uwVFControlVolAmp;
  413. cp_stControlPara.swDragCurAp = (SWORD)MC_UpcInfo.stTestParaInfo.uwIFControlCurAmp;
  414. cp_stControlPara.swDragSpdHz = (SWORD)MC_UpcInfo.stTestParaInfo.uwVFIFTargetFreHz;
  415. cp_stControlPara.swSpeedAccRate = (SWORD)MC_UpcInfo.stTestParaInfo.uwSpeedLoopAccRate;
  416. cp_stControlPara.swSpeedDccRate = (SWORD)MC_UpcInfo.stTestParaInfo.uwSpeedLoopDecRate;
  417. cp_stControlPara.swAsrPIBandwidth = (SWORD)MC_UpcInfo.stTestParaInfo.uwSpeedLoopBandWidthHz;
  418. cp_stControlPara.swAsrPIM = (SWORD)MC_UpcInfo.stTestParaInfo.uwSpeedLoopCoefM;
  419. cp_stControlPara.swAcrPIBandwidth = (SWORD)MC_UpcInfo.stTestParaInfo.uwCuerrentLoopBandWidthHz;
  420. cp_stControlPara.swAcrRaCoef = (SWORD)MC_UpcInfo.stTestParaInfo.uwCurrentLoopCoefM;
  421. cp_stControlPara.swObsFluxPICrossfreHz = (SWORD)MC_UpcInfo.stTestParaInfo.uwFluxObsBandWidthHz;
  422. cp_stControlPara.swObsFluxPIDampratio = (SWORD)MC_UpcInfo.stTestParaInfo.uwFluxObsCoefM;
  423. cp_stControlPara.swObsSpdPLLBandWidthHz = (SWORD)MC_UpcInfo.stTestParaInfo.uwThetaObsPLLBandWidthHz;
  424. cp_stControlPara.swObsSpdPLLM = (SWORD)MC_UpcInfo.stTestParaInfo.uwThetaObsPLLCoefM;
  425. cp_stMotorPara.swJD = (SWORD)MC_UpcInfo.stTestParaInfo.uwJm;
  426. cp_stControlPara.swPWMMaxDuty = (SWORD)MC_UpcInfo.stTestParaInfo.uwPWMMaxDuty;
  427. cp_stControlPara.swPWM7to5Duty = (SWORD)MC_UpcInfo.stTestParaInfo.uwPWM7to5Duty;
  428. cp_stControlPara.swPwrLimitValWt = (SWORD)MC_UpcInfo.stTestParaInfo.uwPwrLimit;
  429. cp_stControlPara.swPwrLimitErrWt = (SWORD)MC_UpcInfo.stTestParaInfo.uwPwrLimitError;
  430. cp_stControlPara.swPwrLimitKpPu = (SWORD)MC_UpcInfo.stTestParaInfo.uwPwrLimitKp;
  431. cp_stControlPara.swPwrLimitKiPu = (SWORD)MC_UpcInfo.stTestParaInfo.uwPwrLimitKi;
  432. cp_stFlg.ParaMotorDriveUpdateFinishFlg = TRUE;
  433. // cp_stFlg.TestParaInfoUpdateFlg = FALSE;
  434. }
  435. if (cp_stFlg.ParaRideInfoUpdateFlg == TRUE)
  436. {
  437. ass_stCalCoef.ucAssistRatioGain[0] = MC_UpcInfo.stRideParaInfo.ucAssistRatioGain1;
  438. ass_stCalCoef.ucAssistRatioGain[1] = MC_UpcInfo.stRideParaInfo.ucAssistRatioGain2;
  439. ass_stCalCoef.ucAssistRatioGain[2] = MC_UpcInfo.stRideParaInfo.ucAssistRatioGain3;
  440. ass_stCalCoef.ucAssistRatioGain[3] = MC_UpcInfo.stRideParaInfo.ucAssistRatioGain4;
  441. ass_stCalCoef.ucAssistRatioGain[4] = MC_UpcInfo.stRideParaInfo.ucAssistRatioGain5;
  442. ass_stCalCoef.ucAssistAccelerationGain[0] = MC_UpcInfo.stRideParaInfo.ucAssistAccelerationGain1;
  443. ass_stCalCoef.ucAssistAccelerationGain[1] = MC_UpcInfo.stRideParaInfo.ucAssistAccelerationGain2;
  444. ass_stCalCoef.ucAssistAccelerationGain[2] = MC_UpcInfo.stRideParaInfo.ucAssistAccelerationGain3;
  445. ass_stCalCoef.ucAssistAccelerationGain[3] = MC_UpcInfo.stRideParaInfo.ucAssistAccelerationGain4;
  446. ass_stCalCoef.ucAssistAccelerationGain[4] = MC_UpcInfo.stRideParaInfo.ucAssistAccelerationGain5;
  447. ass_stCalCoef.ucMaxCurrentGain[0] = MC_UpcInfo.stRideParaInfo.ucMaxCurrentGain1;
  448. ass_stCalCoef.ucMaxCurrentGain[1] = MC_UpcInfo.stRideParaInfo.ucMaxCurrentGain2;
  449. ass_stCalCoef.ucMaxCurrentGain[2] = MC_UpcInfo.stRideParaInfo.ucMaxCurrentGain3;
  450. ass_stCalCoef.ucMaxCurrentGain[3] = MC_UpcInfo.stRideParaInfo.ucMaxCurrentGain4;
  451. ass_stCalCoef.ucMaxCurrentGain[4] = MC_UpcInfo.stRideParaInfo.ucMaxCurrentGain5;
  452. ass_stCalCoef.ucMaxTorqueGain[0] = MC_UpcInfo.stRideParaInfo.ucMaxTorqueGain1;
  453. ass_stCalCoef.ucMaxTorqueGain[1] = MC_UpcInfo.stRideParaInfo.ucMaxTorqueGain2;
  454. ass_stCalCoef.ucMaxTorqueGain[2] = MC_UpcInfo.stRideParaInfo.ucMaxTorqueGain3;
  455. ass_stCalCoef.ucMaxTorqueGain[3] = MC_UpcInfo.stRideParaInfo.ucMaxTorqueGain4;
  456. ass_stCalCoef.ucMaxTorqueGain[4] = MC_UpcInfo.stRideParaInfo.ucMaxTorqueGain5;
  457. cp_stFlg.ParaAssistUpdateFinishFlg = TRUE;
  458. cp_stFlg.ParaRideInfoUpdateFlg = FALSE;
  459. }
  460. if (cp_stFlg.ParaBikeInfo2UpdateFlg == TRUE)
  461. {
  462. ass_stParaCong.uwNoneOBCEnable = MC_UpcInfo.stBikeInfo2.uwNoneOBCEnable;
  463. ass_stParaCong.uwRearLightCycle = MC_UpcInfo.stBikeInfo2.uwRearLightCycle;
  464. ass_stParaCong.uwRearLightDuty = MC_UpcInfo.stBikeInfo2.uwRearLightDuty;
  465. ass_stParaCong.swDeltaBikeSpeedLimit = MC_UpcInfo.stBikeInfo2.swDeltaBikeSpeedLimit;
  466. cp_stFlg.ParaAssistUpdateFinishFlg = TRUE;
  467. cp_stFlg.ParaBikeInfo2UpdateFlg = FALSE;
  468. }
  469. }
  470. /***************************************************************
  471. Function: mn_voSoftwareInit;
  472. Description:software intial
  473. Call by:
  474. Input Variables: N/A
  475. Output/Return Variables: N/A
  476. Subroutine Call: N/A;
  477. Reference: N/A
  478. ****************************************************************/
  479. void mn_voEEUperParaUpdate(void)
  480. {
  481. if (MC_UpcInfo.stMotorInfo.uwSaveFlg == TRUE)
  482. {
  483. Syspara2.stMotorPara.uwPolePairs.uwReal = (UWORD)cp_stMotorPara.swMotrPolePairs;
  484. Syspara2.stMotorPara.uwRsmOhm.uwReal = (UWORD)cp_stMotorPara.swRsOhm;
  485. Syspara2.stMotorPara.uwLduH.uwReal = (UWORD)cp_stMotorPara.swLdmH;
  486. Syspara2.stMotorPara.uwLquH.uwReal = (UWORD)cp_stMotorPara.swLqmH;
  487. Syspara2.stMotorPara.uwFluxmWb.uwReal = (UWORD)cp_stMotorPara.swFluxWb;
  488. Syspara2.stMotorPara.uwIdMaxA.uwReal = (UWORD)cp_stMotorPara.swIdMaxA;
  489. Syspara2.stMotorPara.uwIdMinA.uwReal = (UWORD)cp_stMotorPara.swIdMinA;
  490. Syspara2.stMotorPara.uwRSpdRpm.uwReal = (UWORD)cp_stMotorPara.swRSpeedRpm;
  491. Syspara2.stMotorPara.uwRPwrWt.uwReal = (UWORD)cp_stMotorPara.swRPwrWt;
  492. Syspara2.stMotorPara.uwRCurA.uwReal = (UWORD)cp_stMotorPara.swRIarmsA;
  493. Syspara2.stMotorPara.uwRVolV.uwReal = (UWORD)cp_stMotorPara.swRUdcV;
  494. Syspara2.stMotorPara.uwJD.uwReal = (UWORD)cp_stMotorPara.swJD;
  495. Syspara2.stMotorPara.uwTorMaxNm.uwReal = (UWORD)cp_stMotorPara.swTorMax;
  496. }
  497. Syspara2.stBikePara.swDeltPerimeter.swReal = ass_stParaCong.swDeltPerimeter;
  498. if (MC_UpcInfo.stBikeInfo.uwSaveFlg == TRUE)
  499. {
  500. Syspara2.stBikePara.uwWheelPerimeter.uwReal = ass_stParaCong.uwWheelPerimeter;
  501. Syspara2.stBikePara.uwMechRationMotor.uwReal = ass_stParaCong.uwMechRationMotor;
  502. Syspara2.stBikePara.uwThrottleMaxSpdKmH.uwReal = ass_stParaCong.uwThrottleMaxSpdKmH;
  503. Syspara2.stBikePara.uwCartSpdKmH.uwReal = ass_stParaCong.uwCartSpdKmH;
  504. Syspara2.stBikePara.uwNmFrontChainring.uwReal = ass_stParaCong.uwNmFrontChainring;
  505. Syspara2.stBikePara.uwNmBackChainring.uwReal = ass_stParaCong.uwNmBackChainring;
  506. Syspara2.stBikePara.uwAssistSelect1.uwReal = ass_stParaCong.uwAssistSelect1;
  507. Syspara2.stBikePara.uwAssistSelect2.uwReal = ass_stParaCong.uwAssistSelect2;
  508. Syspara2.stBikePara.uwLightVoltage.uwReal = ass_stParaCong.uwLightVoltage;
  509. Syspara2.stBikePara.swDeltPerimeter.swReal = ass_stParaCong.swDeltPerimeter;
  510. Syspara2.stBikePara.uwStartMode.uwReal = ass_stParaCong.uwStartMode;
  511. Syspara2.stBikePara.uwAutoPowerOffTime.uwReal = ass_stParaCong.uwAutoPowerOffTime;
  512. Syspara2.stBikePara.uwThrottleSmooth.uwReal = ass_stParaCong.uwThrottleSmooth;
  513. }
  514. if (MC_UpcInfo.stMContorlInfo.uwSaveFlg == TRUE)
  515. {
  516. Syspara2.stMControlPara.ParaFirstSetFlg.uwReal = cp_stFlg.ParaFirstSetFlg;
  517. Syspara2.stMControlPara.SpiOffsetFirstSetFlg.uwReal = cp_stFlg.SpiOffsetFirstSetFlg;
  518. Syspara2.stMControlPara.uwSPIPosOffsetOrigin.uwReal = spi_stResolverOut.swSpiThetaOffsetOrignPu;
  519. Syspara2.stMControlPara.uwSPIPosOffsetNow.uwReal = spi_stResolverOut.swSpiThetaOffsetPu;
  520. Syspara2.stMControlPara.uwIPeakMaxA.uwReal = (UWORD)cp_stMotorPara.swIpeakMaxA;
  521. Syspara2.stMControlPara.uwAlamOCurA.uwReal = (UWORD)cp_stControlPara.swAlmOverCurrentVal;
  522. Syspara2.stMControlPara.uwAlamOVolV.uwReal = (UWORD)cp_stControlPara.swAlmOverVolVal1;
  523. Syspara2.stMControlPara.uwAlamUVolV.uwReal = (UWORD)cp_stControlPara.swAlmUnderVolVal1;
  524. Syspara2.stMControlPara.uwAlamOverSpdRpm.uwReal = (UWORD)cp_stControlPara.swAlmOverSpdVal;
  525. Syspara2.stMControlPara.uwAlamOverHeatCe.uwReal = (UWORD)cp_stControlPara.swAlmOverHeatCeVal;
  526. Syspara2.stMControlPara.uwAlamRecHeatCe.uwReal = (UWORD)cp_stControlPara.swAlmRecOHeatVal;
  527. Syspara2.stMControlPara.uwPwrLimitStartCe.uwReal = (UWORD)cp_stControlPara.swAlmPwrLimitStartTempVal;
  528. // Syspara2.stMControlPara.uwAlamMotorOverHeatCe.uwReal = (UWORD)cp_stControlPara.swAlmMotorOverHeatCeVal;
  529. // Syspara2.stMControlPara.uwAlamMotorRecHeatCe.uwReal = (UWORD)cp_stControlPara.swAlmMotorRecOHeatVal;
  530. // Syspara2.stMControlPara.uwPwrLimitMotorStartCe.uwReal = (UWORD)cp_stControlPara.swAlmPwrLimitMotorStartTempVal;
  531. Syspara2.stMControlPara.uwControlFunEN.uwReal = ass_stParaCong.uwControlFunEN;
  532. Syspara2.stMControlPara.uwThrottleGearEN.uwReal = ass_stParaCong.uwThrottleGearEN;
  533. }
  534. if (MC_UpcInfo.stSensorInfo.uwSaveFlg == TRUE)
  535. {
  536. Syspara2.stSensorPara.uwTorSensorOffsetOrigin.uwReal = torsensor_stTorSensorCof.uwTorqueOffsetOrign;
  537. Syspara2.stSensorPara.uwTorSensorOffsetNow1.uwReal = torsensor_stTorSensorCof.uwTorqueOffsetNow1;
  538. Syspara2.stSensorPara.uwTorSensorOffsetNow2.uwReal = torsensor_stTorSensorCof.uwTorqueOffsetNow2;
  539. Syspara2.stSensorPara.uwTorSensorOffsetNow3.uwReal = torsensor_stTorSensorCof.uwTorqueOffsetNow3;
  540. Syspara2.stSensorPara.uwTorSensorOffsetNow4.uwReal = torsensor_stTorSensorCof.uwTorqueOffsetNow4;
  541. Syspara2.stSensorPara.uwBikeTorMaxNm.uwReal = torsensor_stTorSensorCof.uwMaxSensorTorquePu;
  542. Syspara2.stSensorPara.uwBikeTor1StepRealNm.uwReal = torsensor_stTorSensorCof.uwBikeTorStep1RealNm;
  543. Syspara2.stSensorPara.uwBikeTor1StepADC.uwReal = torsensor_stTorSensorCof.uwBikeTorStep1ADC;
  544. Syspara2.stSensorPara.uwBikeTor2StepRealNm.uwReal = torsensor_stTorSensorCof.uwBikeTorStep2RealNm;
  545. Syspara2.stSensorPara.uwBikeTor2StepADC.uwReal = torsensor_stTorSensorCof.uwBikeTorStep2ADC;
  546. Syspara2.stSensorPara.uwBikeTor3StepRealNm.uwReal = torsensor_stTorSensorCof.uwBikeTorStep3RealNm;
  547. Syspara2.stSensorPara.uwBikeTor3StepADC.uwReal = torsensor_stTorSensorCof.uwBikeTorStep3ADC;
  548. Syspara2.stSensorPara.uwBikeTor4StepRealNm.uwReal = torsensor_stTorSensorCof.uwBikeTorStep4RealNm;
  549. Syspara2.stSensorPara.uwBikeTor4StepADC.uwReal = torsensor_stTorSensorCof.uwBikeTorStep4ADC;
  550. Syspara2.stSensorPara.uwCadSensorPulseNm.uwReal = cadence_stFreGetCof.uwNumbersPulses;
  551. Syspara2.stSensorPara.uwBikeSpdSensorPulseNm.uwReal = bikespeed_stFreGetCof.uwNumbersPulses;
  552. }
  553. if (MC_UpcInfo.stAssistInfo.uwSaveFlg == TRUE)
  554. {
  555. Syspara2.stAssistPara.uwStartupGain.uwReal = ass_stParaSet.uwStartupCoef;
  556. Syspara2.stAssistPara.uwStartcruiseGain.uwReal = ass_stParaSet.uwStartupCruiseCoef;
  557. Syspara2.stAssistPara.uwAssistStartNm.uwReal = ass_stParaSet.uwAssistStartNm;
  558. Syspara2.stAssistPara.uwAssistStopNm.uwReal = ass_stParaSet.uwAssistStopNm;
  559. Syspara2.stAssistPara.uwStartUpGainStep.uwReal = ass_stParaSet.uwStartUpGainStep;
  560. Syspara2.stAssistPara.uwStartUpCadNm.uwReal = ass_stParaSet.uwStartUpCadNm;
  561. Syspara2.stAssistPara.uwTorLPFCadNm.uwReal = ass_stParaSet.uwTorLPFCadNm;
  562. Syspara2.stAssistPara.uwSpeedAssistSpdRpm.uwReal = ass_stParaSet.uwSpeedAssistSpdRpm;
  563. Syspara2.stAssistPara.uwSpeedAssistIMaxA.uwReal = ass_stParaSet.uwSpeedAssistIMaxA;
  564. Syspara2.stAssistPara.uwAssistLimitBikeSpdStart.uwReal = ass_stParaSet.uwAssistLimitBikeSpdStart;
  565. Syspara2.stAssistPara.uwAssistLimitBikeSpdStop.uwReal = ass_stParaSet.uwAssistLimitBikeSpdStop;
  566. Syspara2.stAssistPara.uwCadenceAssistWeight.uwReal = ass_stParaSet.uwCadenceWeight;
  567. }
  568. }
  569. /***************************************************************
  570. Function: mn_voSoftwareInit;
  571. Description:software intial
  572. Call by:
  573. Input Variables: N/A
  574. Output/Return Variables: N/A
  575. Subroutine Call: N/A;
  576. Reference: N/A
  577. ****************************************************************/
  578. void mn_voEEHistoryParaUpdate(void)
  579. {
  580. Syspara2.stHistoryPara.uwAssModSelect.uwReal = ass_stParaSet.uwAsssistSelectNum;
  581. Syspara2.stHistoryPara.uwOpenTimes.uwReal = cp_stHistoryPara.uwOpenTimes;
  582. Syspara2.stHistoryPara.uwUsedTimeH.uwReal = (UWORD)(cp_stHistoryPara.ulUsedTime >> 16);
  583. Syspara2.stHistoryPara.uwUsedTimeL.uwReal = (UWORD)cp_stHistoryPara.ulUsedTime;
  584. Syspara2.stHistoryPara.uwNTCTempMaxCe.uwReal = cp_stHistoryPara.uwNTCTempMaxCe;
  585. Syspara2.stHistoryPara.uwNTCTempMinCe.uwReal = cp_stHistoryPara.uwNTCTempMinCe;
  586. Syspara2.stHistoryPara.uwAlamHOcurTimes.uwReal = cp_stHistoryPara.uwAlamHOcurTimes;
  587. Syspara2.stHistoryPara.uwAlamSOcurTimes.uwReal = cp_stHistoryPara.uwAlamSOcurTimes;
  588. Syspara2.stHistoryPara.uwAlamOHeatTimes.uwReal = cp_stHistoryPara.uwAlamOHeatTimes;
  589. Syspara2.stHistoryPara.uwAlamRotorLockTimes.uwReal = cp_stHistoryPara.uwAlamRotorLockTimes;
  590. Syspara2.stHistoryPara.uwAlamPhsLossTimes.uwReal = cp_stHistoryPara.uwAlamPhsLossTimes;
  591. Syspara2.stHistoryPara.uwAlamOVolTimes.uwReal = cp_stHistoryPara.uwAlamOVolTimes;
  592. Syspara2.stHistoryPara.uwAlamUVolTimes.uwReal = cp_stHistoryPara.uwAlamUVolTimes;
  593. Syspara2.stHistoryPara.uwAlamComOTimeTimes.uwReal = cp_stHistoryPara.uwAlamComOTimeTimes;
  594. Syspara2.stHistoryPara.uwG1AvgPwrConsumption.uwReal = cp_stHistoryPara.uwG1AvgPwrConsumption;
  595. Syspara2.stHistoryPara.uwG2AvgPwrConsumption.uwReal = cp_stHistoryPara.uwG2AvgPwrConsumption;
  596. Syspara2.stHistoryPara.uwG3AvgPwrConsumption.uwReal = cp_stHistoryPara.uwG3AvgPwrConsumption;
  597. Syspara2.stHistoryPara.uwG4AvgPwrConsumption.uwReal = cp_stHistoryPara.uwG4AvgPwrConsumption;
  598. Syspara2.stHistoryPara.uwG5AvgPwrConsumption.uwReal = cp_stHistoryPara.uwG5AvgPwrConsumption;
  599. Syspara2.stHistoryPara.uwODOTripH.uwReal = (UWORD)(cp_stHistoryPara.ulODOTrip >> 16);
  600. Syspara2.stHistoryPara.uwODOTripL.uwReal = (UWORD)cp_stHistoryPara.ulODOTrip;
  601. Syspara2.stHistoryPara.uwODOTimeH.uwReal = (UWORD)(cp_stHistoryPara.ulODOTime >> 16);
  602. Syspara2.stHistoryPara.uwODOTimeL.uwReal = (UWORD)cp_stHistoryPara.ulODOTime;
  603. Syspara2.stHistoryPara.uwTripSumH.uwReal = (UWORD)(cp_stHistoryPara.ulTripSum >> 16);
  604. Syspara2.stHistoryPara.uwTripSumL.uwReal = (UWORD)cp_stHistoryPara.ulTripSum;
  605. Syspara2.stHistoryPara.uwTripSumTimeH.uwReal = (UWORD)(cp_stHistoryPara.ulTripSumTime >> 16);
  606. Syspara2.stHistoryPara.uwTripSumTimeL.uwReal = (UWORD)cp_stHistoryPara.ulTripSumTime;
  607. Syspara2.stHistoryPara.uwTorSensorAlamTimes.uwReal = cp_stHistoryPara.uwTorSensorAlamTimes;
  608. Syspara2.stHistoryPara.uwCadSensorAlamTimes.uwReal = cp_stHistoryPara.uwCadSensorAlamTimes;
  609. Syspara2.stHistoryPara.uwBikeSpdSensorAlamTimes.uwReal = cp_stHistoryPara.uwBikeSpdSensorAlamTimes;
  610. Syspara2.stHistoryPara.uwPosSensorAlamTimes.uwReal = cp_stHistoryPara.uwPosSensorAlamTimes;
  611. Syspara2.stHistoryPara.uwRealODOTripH.uwReal = (UWORD)(cp_stHistoryPara.ulRealODOTrip >> 16);
  612. Syspara2.stHistoryPara.uwRealODOTripL.uwReal = (UWORD)cp_stHistoryPara.ulRealODOTrip;
  613. Syspara2.stHistoryPara.uwRealODOTimeH.uwReal = (UWORD)(cp_stHistoryPara.ulRealODOTime >> 16);
  614. Syspara2.stHistoryPara.uwRealODOTimeL.uwReal = (UWORD)cp_stHistoryPara.ulRealODOTime;
  615. if (MC_UpcInfo.stRideParaInfo.uwSaveFlg == TRUE)
  616. {
  617. Syspara2.stRidePara.ucAssistRatioGain1.ucReal = ass_stCalCoef.ucAssistRatioGain[0];
  618. Syspara2.stRidePara.ucAssistRatioGain2.ucReal = ass_stCalCoef.ucAssistRatioGain[1];
  619. Syspara2.stRidePara.ucAssistRatioGain3.ucReal = ass_stCalCoef.ucAssistRatioGain[2];
  620. Syspara2.stRidePara.ucAssistRatioGain4.ucReal = ass_stCalCoef.ucAssistRatioGain[3];
  621. Syspara2.stRidePara.ucAssistRatioGain5.ucReal = ass_stCalCoef.ucAssistRatioGain[4];
  622. Syspara2.stRidePara.ucAssistAccelerationGain1.ucReal = ass_stCalCoef.ucAssistAccelerationGain[0];
  623. Syspara2.stRidePara.ucAssistAccelerationGain2.ucReal = ass_stCalCoef.ucAssistAccelerationGain[1];
  624. Syspara2.stRidePara.ucAssistAccelerationGain3.ucReal = ass_stCalCoef.ucAssistAccelerationGain[2];
  625. Syspara2.stRidePara.ucAssistAccelerationGain4.ucReal = ass_stCalCoef.ucAssistAccelerationGain[3];
  626. Syspara2.stRidePara.ucAssistAccelerationGain5.ucReal = ass_stCalCoef.ucAssistAccelerationGain[4];
  627. Syspara2.stRidePara.ucMaxCurrentGain1.ucReal = ass_stCalCoef.ucMaxCurrentGain[0];
  628. Syspara2.stRidePara.ucMaxCurrentGain2.ucReal = ass_stCalCoef.ucMaxCurrentGain[1];
  629. Syspara2.stRidePara.ucMaxCurrentGain3.ucReal = ass_stCalCoef.ucMaxCurrentGain[2];
  630. Syspara2.stRidePara.ucMaxCurrentGain4.ucReal = ass_stCalCoef.ucMaxCurrentGain[3];
  631. Syspara2.stRidePara.ucMaxCurrentGain5.ucReal = ass_stCalCoef.ucMaxCurrentGain[4];
  632. Syspara2.stRidePara.ucMaxTorqueGain1.ucReal = ass_stCalCoef.ucMaxTorqueGain[0];
  633. Syspara2.stRidePara.ucMaxTorqueGain2.ucReal = ass_stCalCoef.ucMaxTorqueGain[1];
  634. Syspara2.stRidePara.ucMaxTorqueGain3.ucReal = ass_stCalCoef.ucMaxTorqueGain[2];
  635. Syspara2.stRidePara.ucMaxTorqueGain4.ucReal = ass_stCalCoef.ucMaxTorqueGain[3];
  636. Syspara2.stRidePara.ucMaxTorqueGain5.ucReal = ass_stCalCoef.ucMaxTorqueGain[4];
  637. }
  638. //Syspara2.stBikePara2.swDeltaBikeSpeedLimit.swReal = (SWORD)ass_stParaCong.swDeltaBikeSpeedLimit;
  639. if (MC_UpcInfo.stBikeInfo2.uwSaveFlg == TRUE)
  640. {
  641. Syspara2.stBikePara2.uwNoneOBCEnable.uwReal = (UWORD)ass_stParaCong.uwNoneOBCEnable;
  642. Syspara2.stBikePara2.uwRearLightCycle.uwReal = (UWORD)ass_stParaCong.uwRearLightCycle;
  643. Syspara2.stBikePara2.uwRearLightDuty.uwReal = (UWORD)ass_stParaCong.uwRearLightDuty;
  644. Syspara2.stBikePara2.swDeltaBikeSpeedLimit.swReal = (SWORD)ass_stParaCong.swDeltaBikeSpeedLimit;
  645. }
  646. }
  647. /***************************************************************
  648. Function: mn_voSoftwareInit;
  649. Description:software intial
  650. Call by:
  651. Input Variables: N/A
  652. Output/Return Variables: N/A
  653. Subroutine Call: N/A;
  654. Reference: N/A
  655. ****************************************************************/
  656. void mn_voSoftwareInit(void)
  657. {
  658. /* System coefficient calculate */
  659. cof_voSysInit();
  660. /* Motor parameter init */
  661. // mn_voMtParInit();
  662. /* Control Parameters init */
  663. mn_voMcParInit();
  664. /*cmd handle Initial */
  665. cmd_voCmdInit();
  666. /* FSM init */
  667. FSM_voInit();
  668. RUN_FSM_voInit();
  669. Switch_speed_FSMInit();
  670. /* TempInit */
  671. TempInit();
  672. /* CANInit */
  673. Can_voInitMC_Run();
  674. /* Alarm init */
  675. alm_voInit();
  676. alm_voCoef();
  677. /* ADC init */
  678. adc_voSampleInit();
  679. adc_voSampleCoef(&adc_stCof);
  680. /* UART init */
  681. uart_voMonitorInit();
  682. }
  683. /************************************************************************
  684. Function: void mn_voMtParInit(void)
  685. Description:
  686. Call by:
  687. Input Variables:
  688. Output/Return Variables:
  689. Subroutine Call:
  690. Reference:
  691. ************************************************************************/
  692. void mn_voMtParInit(void)
  693. {
  694. // mn_swIdTurn1Pu = (SWORD)(((SLONG)M_LD_TURN1_ID_AP << 14) / (SWORD)cof_uwIbAp); // Q14, saturation current of Ld
  695. // mn_slLdTurn1Pu = ((SLONG)M_LD_TURN1_LD_MH << 10) / cof_uwLbHm; // Q10, saturation inductance of Ld
  696. // mn_swIdTurn2Pu = (SWORD)(((SLONG)M_LD_TURN2_ID_AP << 14) / (SWORD)cof_uwIbAp); // Q14, saturation current of Ld
  697. // mn_slLdTurn2Pu = ((SLONG)M_LD_TURN2_LD_MH << 10) / cof_uwLbHm; // Q10, saturation inductance of Ld
  698. // if (mn_swIdTurn1Pu == mn_swIdTurn2Pu)
  699. // {
  700. // mn_swKLdSat = 0;
  701. // }
  702. // else
  703. // {
  704. // mn_swKLdSat = (SWORD)(((mn_slLdTurn2Pu - mn_slLdTurn1Pu) << 10) / (mn_swIdTurn2Pu - mn_swIdTurn1Pu)); // Q10
  705. // }
  706. //
  707. // mn_swIqTurn1Pu = (SWORD)(((SLONG)M_LQ_TURN1_IQ_AP << 14) / (SWORD)cof_uwIbAp); // Q14, saturation current of Lq
  708. // mn_slLqTurn1Pu = ((SLONG)M_LQ_TURN1_LQ_MH << 10) / cof_uwLbHm; // Q10, saturation inductance of Lq
  709. // mn_swIqTurn2Pu = (SWORD)(((SLONG)M_LQ_TURN2_IQ_AP << 14) / (SWORD)cof_uwIbAp); // Q14, saturation current of Lq
  710. // mn_slLqTurn2Pu = ((SLONG)M_LQ_TURN2_LQ_MH << 10) / cof_uwLbHm; // Q10, saturation inductance of Lq
  711. // if (mn_swIqTurn1Pu == mn_swIqTurn2Pu)
  712. // {
  713. // mn_swKLqSat = 0;
  714. // }
  715. // else
  716. // {
  717. // mn_swKLqSat = (SWORD)(((mn_slLqTurn2Pu - mn_slLqTurn1Pu) << 10) / (mn_swIqTurn2Pu - mn_swIqTurn1Pu)); // Q10
  718. // }
  719. }
  720. /************************************************************************
  721. Function: void mn_voMcParInit(void)
  722. Description:
  723. Call by:
  724. Input Variables:
  725. Output/Return Variables:
  726. Subroutine Call:
  727. Reference:
  728. ************************************************************************/
  729. void mn_voMcParInit(void)
  730. {
  731. align_voInit();
  732. // Align Parameters
  733. mn_uwAlignCurPu = (UWORD)CUR_AP2PU(cp_stControlPara.swAlignCurAp); // Q14
  734. mn_ulAlignRampTbcCt = TBC_MS2CT(cp_stControlPara.swAlignRampTMms);
  735. mn_ulAlignHoldTbcCt = TBC_MS2CT(cp_stControlPara.swAlignHoldTMms);
  736. if (mn_ulAlignRampTbcCt == 0)
  737. {
  738. mn_ulAlignCurIncPerTbcPu = 1;
  739. }
  740. else
  741. {
  742. mn_ulAlignCurIncPerTbcPu = ((ULONG)mn_uwAlignCurPu << 15) / mn_ulAlignRampTbcCt; // Q29
  743. if (mn_ulAlignCurIncPerTbcPu == 0)
  744. {
  745. mn_ulAlignCurIncPerTbcPu = 1;
  746. }
  747. }
  748. mn_slAlignAngInit = ANG_DEG2PU(cp_stControlPara.swAlignAngInitDeg);
  749. // Open Drag Parameters
  750. mn_uwDragCurPu = (UWORD)CUR_AP2PU(cp_stControlPara.swDragCurAp); // Q14
  751. mn_swDragSpdPu = (SWORD)SPD_HZ2PU(cp_stControlPara.swDragSpdHz); // Q15
  752. mn_ulDragSpdRampTbcCt = TBC_MS2CT(cp_stControlPara.swDragSpdRampTMms);
  753. if (mn_ulDragSpdRampTbcCt == 0)
  754. {
  755. mn_ulDragSpdIncPerTbcPu = 1;
  756. }
  757. else
  758. {
  759. mn_ulDragSpdIncPerTbcPu = ((ULONG)mn_swDragSpdPu << 14) / mn_ulDragSpdRampTbcCt; // Q29
  760. if (mn_ulDragSpdIncPerTbcPu == 0)
  761. {
  762. mn_ulDragSpdIncPerTbcPu = 1;
  763. }
  764. }
  765. // Open to Close Parameters
  766. mn_ulOpen2ClzCurRampTbcCt = TBC_MS2CT(cp_stControlPara.swOpen2ClzRampTMms);
  767. if (mn_ulOpen2ClzCurRampTbcCt == 0)
  768. {
  769. mn_ulOpen2ClzCurIncPerTbcPu = 1;
  770. }
  771. else
  772. {
  773. mn_ulOpen2ClzCurIncPerTbcPu = (ULONG)mn_uwDragCurPu / mn_ulOpen2ClzCurRampTbcCt;
  774. if (mn_ulOpen2ClzCurIncPerTbcPu == 0)
  775. {
  776. mn_ulOpen2ClzCurIncPerTbcPu = 1;
  777. }
  778. }
  779. // Stop Parameters
  780. mn_swStopSpdRefPu = (SWORD)SPD_RPM2PU(cp_stControlPara.swStopSpdRefRpm);
  781. }
  782. /***************************************************************
  783. Function: mn_voIPMSeletion;
  784. Description:software intial
  785. Call by:
  786. Input Variables: N/A
  787. Output/Return Variables: N/A
  788. Subroutine Call: N/A;
  789. Reference: N/A
  790. ****************************************************************/
  791. // void mn_voIPMSelection(void)
  792. // {
  793. // //Dead band time and Turn on/off time
  794. // hw_uwPwmDeadBandTmNs = cp_stControlPara.swIPMDeadTimeNs;
  795. // mn_uwIpmDeadBandTmNs = cp_stControlPara.swIPMDeadTimeNs;
  796. // mn_uwIpmTurnOnTmNs = cp_stControlPara.swIPMTurnOnNs;
  797. // mn_uwIpmTurnOffTmNs = cp_stControlPara.swIPMTurnOffNs;
  798. // //HVIC charge parameters
  799. // mn_ulHvicChrgTmTbcCt = EVENT1MS_MS2CT(cp_stControlPara.swIPMHvicChrgMs);
  800. // //Max duty cyle
  801. // mn_uwPwmMaxDutyCyle = cp_stControlPara.swPWMMaxDuty;
  802. // mn_uwPwm7SvmTo5SvmDuty = cp_stControlPara.swPWM7to5Duty;
  803. // mn_uwPWMMinSample1Pu = cp_stControlPara.swPWMMinSampleDuty1;
  804. // mn_uwPWMMinSample2Pu = cp_stControlPara.swPWMMinSampleDuty2;
  805. // mn_uwFlxMaxDutyCyle = cp_stControlPara.swFwPWMMaxDuty;
  806. // //Current sample parameters
  807. // pwm_sw1stCurSmplCt = cp_stControlPara.swPWM1STSampleCnt;
  808. // pwm_sw2ndCurSmplCt = cp_stControlPara.swPWM2NDSampleCnt;
  809. // pwm_swMinDoubleCurSmplPu = (cp_stControlPara.swPWMMinEffVectorPu << 1);
  810. // pwm_swMinCurSmplCt = cp_stControlPara.swPWMMinEffVectorCnt;
  811. // pwm_swMinCurSmplPu = cp_stControlPara.swPWMMinEffVectorPu;
  812. // }
  813. /*************************************************************************
  814. Copyright (c) 2018 Welling Motor Technology(Shanghai) Co. Ltd.
  815. All rights reserved.
  816. *************************************************************************/
  817. #ifdef _MAIN_C_
  818. #undef _MAIN_C_ /* parasoft-suppress MISRA2004-19_6 "本项目无法更改,后续避免使用" */
  819. #endif
  820. /*************************************************************************
  821. End of this File (EOF)!
  822. Do not put anything after this part!
  823. *************************************************************************/