main.c 38 KB

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