main.c 35 KB

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