main.c 59 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089
  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 "CadAssist.h"
  26. #include "bikeinformation.h"
  27. #include "FSM_1st.h"
  28. #include "FSM_2nd.h"
  29. #include "FuncLayerAPI.h"
  30. #include "usart.h"
  31. #include "cmdgennew.h"
  32. #include "canAppl.h"
  33. #include "flash_master.h"
  34. #include "string.h"
  35. //#include "at32f421_wk_config.h"
  36. //#include "SEGGER_RTT.h"
  37. #include "UserGpio_Config.h"
  38. //#include "api_rt.h"
  39. //#include "profiler.h"
  40. #include "ti_msp_dl_config.h"
  41. /************************************************************************
  42. Exported Functions:
  43. ************************************************************************/
  44. void AppInit();
  45. void AppLoop();
  46. void LED_ResDispaly(void);
  47. //void delay_125us(void);
  48. void delay_125us(int count)
  49. {
  50. for(int i=0;i<count;i++)
  51. {
  52. delay_cycles(10000);
  53. }
  54. }
  55. /* This results in approximately 0.25s of delay assuming 80MHz CPU_CLK */
  56. #define DELAY (40000000)
  57. unsigned int ACnt; // Variable: speed control period counter
  58. /***************************************************************
  59. Function: main;
  60. Description:main function
  61. Call by:
  62. Input Variables: N/A
  63. Output/Return Variables: N/A
  64. Subroutine Call: N/A;
  65. Reference: N/A
  66. ****************************************************************/
  67. /*
  68. * Timer clock configuration to be sourced by / 1 (72000000 Hz)
  69. * timerClkFreq = (timerClkSrc / (timerClkDivRatio * (timerClkPrescale + 1)))
  70. * 72000000 Hz = 72000000 Hz / (1 * (0 + 1))
  71. */
  72. static const DL_TimerA_ClockConfig gPWM_0_COPYClockConfig = {
  73. .clockSel = DL_TIMER_CLOCK_BUSCLK,
  74. .divideRatio = DL_TIMER_CLOCK_DIVIDE_1,
  75. .prescale = 0U
  76. };
  77. static const DL_TimerA_PWMConfig gPWM_0_COPYConfig = {
  78. .pwmMode = DL_TIMER_PWM_MODE_CENTER_ALIGN,
  79. .period = 4500,
  80. .isTimerWithFourCC = false,
  81. .startTimer = DL_TIMER_STOP,
  82. };
  83. SYSCONFIG_WEAK void SYSCFG_DL_PWM_0_COPY_init(void) {
  84. DL_TimerA_reset(TIMA1);
  85. DL_TimerA_enablePower(TIMA1);
  86. delay_cycles(POWER_STARTUP_DELAY);
  87. DL_TimerA_setClockConfig(
  88. TIMA1, (DL_TimerA_ClockConfig *) &gPWM_0_COPYClockConfig);
  89. DL_TimerA_initPWMMode(
  90. TIMA1, (DL_TimerA_PWMConfig *) &gPWM_0_COPYConfig);
  91. DL_TimerA_setCaptureCompareOutCtl(TIMA1, DL_TIMER_CC_OCTL_INIT_VAL_LOW,
  92. DL_TIMER_CC_OCTL_INV_OUT_DISABLED, DL_TIMER_CC_OCTL_SRC_FUNCVAL,
  93. DL_TIMERA_CAPTURE_COMPARE_0_INDEX);
  94. DL_TimerA_setCaptCompUpdateMethod(TIMA1, DL_TIMER_CC_UPDATE_METHOD_IMMEDIATE, DL_TIMERA_CAPTURE_COMPARE_0_INDEX);
  95. DL_TimerA_setCaptureCompareValue(TIMA1, 2250, DL_TIMER_CC_0_INDEX);
  96. DL_TimerA_enableClock(TIMA1);
  97. DL_TimerA_enableInterrupt(TIMA1 , DL_TIMER_INTERRUPT_LOAD_EVENT |
  98. DL_TIMER_INTERRUPT_ZERO_EVENT);
  99. NVIC_SetPriority(TIMA1_INT_IRQn, 2);
  100. DL_TimerA_setCCPDirection(TIMA1 , DL_TIMER_CC0_OUTPUT );
  101. /* DL_TIMER_CROSS_TRIG_SRC is a Don't Care field when Cross Trigger Source is set to Software */
  102. DL_TimerA_configCrossTrigger(TIMA1, DL_TIMER_CROSS_TRIG_SRC_FSUB0,
  103. DL_TIMER_CROSS_TRIGGER_INPUT_DISABLED, DL_TIMER_CROSS_TRIGGER_MODE_ENABLED
  104. );
  105. DL_TimerA_setCaptureCompareInput(TIMA1, DL_TIMER_CC_INPUT_INV_NOINVERT, DL_TIMER_CC_IN_SEL_TRIG, DL_TIMER_CC_0_INDEX);
  106. /*
  107. * Determines the external triggering event to trigger the module (self-triggered in main configuration)
  108. * and triggered by specific timer in secondary configuration
  109. */
  110. DL_TimerA_setExternalTriggerEvent(TIMA1,DL_TIMER_EXT_TRIG_SEL_TRIG_1);
  111. DL_TimerA_enableExternalTrigger(TIMA1);
  112. uint32_t temp;
  113. temp = DL_TimerA_getCaptureCompareCtl(TIMA1, DL_TIMER_CC_0_INDEX);
  114. DL_TimerA_setCaptureCompareCtl(TIMA1, DL_TIMER_CC_MODE_COMPARE, temp | (uint32_t) DL_TIMER_CC_LCOND_TRIG_RISE, DL_TIMER_CC_0_INDEX);
  115. }
  116. int main(void)
  117. {
  118. SCB->VTOR =APP_START_Address;//
  119. /* Disable all interrupts */
  120. DISABLE_IRQ;
  121. /* MCU Core and GPIO configuration */
  122. SYSCFG_DL_init();
  123. SYSCFG_DL_PWM_0_COPY_init();
  124. //TIMA0 MOTOR_PWM
  125. DL_Timer_setCaptCompUpdateMethod(MOTOR_PWM_INST,DL_TIMER_CC_UPDATE_METHOD_ZERO_EVT,DL_TIMERA_CAPTURE_COMPARE_0_INDEX);
  126. DL_Timer_setCaptCompUpdateMethod(MOTOR_PWM_INST,DL_TIMER_CC_UPDATE_METHOD_ZERO_EVT,DL_TIMERA_CAPTURE_COMPARE_1_INDEX);
  127. DL_Timer_setCaptCompUpdateMethod(MOTOR_PWM_INST,DL_TIMER_CC_UPDATE_METHOD_ZERO_EVT,DL_TIMERA_CAPTURE_COMPARE_2_INDEX);
  128. NVIC_EnableIRQ(ADC12_0_INST_INT_IRQN);
  129. //DL_Timer_setCaptCompUpdateMethod(PWM_F_INST,DL_TIMER_CC_UPDATE_METHOD_ZERO_EVT,DL_TIMER_CC_1_INDEX);
  130. NVIC_EnableIRQ(HALLTIMER_INST_INT_IRQN); //
  131. DL_TimerA_setCaptureCompareValue(MOTOR_PWM_INST, 0, DL_TIMER_CC_0_INDEX);
  132. DL_TimerA_setCaptureCompareValue(MOTOR_PWM_INST, 0, DL_TIMER_CC_1_INDEX);
  133. DL_TimerA_setCaptureCompareValue(MOTOR_PWM_INST, 0, DL_TIMER_CC_2_INDEX);
  134. DL_Timer_clearInterruptStatus(MOTOR_PWM_INST,DL_TIMER_INTERRUPT_FAULT_EVENT|DL_TIMER_INTERRUPT_ZERO_EVENT);
  135. DL_Timer_clearEventsStatus(MOTOR_PWM_INST,1,DL_TIMER_EVENT_FAULT_EVENT);
  136. //HALL IO
  137. NVIC_EnableIRQ(GPIOA_INT_IRQn); //HALL GPIO
  138. NVIC_EnableIRQ(GPIOB_INT_IRQn); //HALL GPIO
  139. #if(EMCDEAL_EN!=0) //霍尔定时换相计时中断
  140. NVIC_EnableIRQ(HALL_CNT_INST_INT_IRQN);
  141. DL_TimerG_startCounter(HALL_CNT_INST);
  142. #endif
  143. //LED 前灯比较器
  144. // NVIC_EnableIRQ(COMP_FLEDCHECK_INST_INT_IRQN);
  145. // DL_COMP_enable(COMP_FLEDCHECK_INST);
  146. // over Cur CMP
  147. // DL_COMP_enable(COMP_0_INST);
  148. // NVIC_EnableIRQ(COMP_0_INST_INT_IRQN);
  149. //Start MOTOR 计数
  150. DL_TimerA_startCounter(MOTOR_PWM_INST);
  151. // DL_TimerA_startCounter(TIMER_0_INST);
  152. DL_TimerA_generateCrossTrigger(TIMA1);
  153. NVIC_EnableIRQ(TIMA1_INT_IRQn); //MOTOR PWM
  154. // DL_Timer_setCoreHaltBehavior(TIMA0,DL_TIMER_CORE_HALT_IMMEDIATE);
  155. NVIC_EnableIRQ(MOTOR_PWM_INST_INT_IRQN); //MOTOR PWM
  156. //LED pwm 开始计数
  157. // DL_TimerG_startCounter(TIMG12);
  158. // DL_TimerG_startCounter(PWM_R_INST);
  159. DL_TimerG_startCounter(PWM_F_INST);
  160. // DL_TimerG_startCounter(PWM_B_L_INST);
  161. // DL_GPIO_clearPins(OUTPUT_CAN_STB_PORT, OUTPUT_CAN_STB_PIN);
  162. // DL_GPIO_setPins(OUTPUT_CAN_STB_PORT, OUTPUT_CAN_STB_PIN);
  163. // DL_GPIO_togglePins(OUTPUT_CAN_STB_PORT, OUTPUT_CAN_STB_PIN);
  164. //
  165. // /* Set output voltage:
  166. // * DAC value (12-bits) = DesiredOutputVoltage x 4095
  167. // * -----------------------
  168. // * ReferenceVoltage
  169. //---over Cur of Valut
  170. #if((IPM_POWER_SEL == IPM_POWER_250W_6G) ||(IPM_POWER_SEL ==IPM_POWER_350W_6G))
  171. DL_COMP_setDACCode0(COMP_0_INST, 0xb5);//12G-100A-0x99-1.97V 6G-70A--0xb5-2.33V
  172. #else
  173. DL_COMP_setDACCode0(COMP_0_INST, 0x99);//12G-100A-0x99-1.97V 6G-60A--0xb5-2.33V
  174. #endif
  175. // hw_voHardwareSetup1();
  176. /* Api Init*/
  177. // iRt_Init();
  178. /* Api App Init*/
  179. AppInit();
  180. /* Peripheral configuration */
  181. hw_voHardwareSetup2();
  182. /* Timer enable */
  183. hw_voTimEn();
  184. /* Interrupts of peripherals enable*/
  185. hw_voEnInt();
  186. /* self test init */
  187. //stl_voRunTimeChecksInit();
  188. /* watchdog 1s */
  189. // wk_wdt_init();// hw_voIWDGInit(IWDG_Prescaler_32,2500);//1s 看门狗
  190. // que_voInit(&stFlashErrorLog);
  191. /* Error Log Read */
  192. // flash_voErrorRead();
  193. /* Enable all interrupts */
  194. NVIC_ClearPendingIRQ(UART_HMI_INST_INT_IRQN);
  195. NVIC_EnableIRQ(UART_HMI_INST_INT_IRQN);
  196. NVIC_ClearPendingIRQ(MCAN0_INST_INT_IRQN);
  197. NVIC_EnableIRQ(MCAN0_INST_INT_IRQN);
  198. ENABLE_IRQ;
  199. // DL_GPIO_setPins(LED_PORT, LED_LED1_PIN);
  200. // DL_GPIO_setPins(LED_PORT, LED_LED2_PIN);
  201. // delay_cycles(DELAY);
  202. // delay_cycles(DELAY);
  203. // delay_cycles(DELAY);
  204. // delay_cycles(DELAY);
  205. // delay_cycles(DELAY);
  206. // delay_cycles(DELAY);
  207. // delay_cycles(DELAY);
  208. // delay_cycles(DELAY);
  209. // delay_cycles(DELAY);
  210. // delay_cycles(DELAY);
  211. /* Enter infinite loop */
  212. #if(JSCOPE_EN!=0)
  213. Jscope_Init();
  214. #endif
  215. #if(EMCDEAL_EN!=0)
  216. // LED_ResDispaly();
  217. #endif
  218. // flash_voSysParaWrite();
  219. uwFlash_IRQ_Enble=1;
  220. // hw_voPWMOn();
  221. // DL_TimerG_setCaptureCompareValue(PWM_B_INST, 1000, GPIO_PWM_B_C1_IDX);
  222. while (1)
  223. {
  224. // DL_GPIO_togglePins(LED_PORT, LED_LED1_PIN);
  225. // DL_GPIO_togglePins(LED_PORT, LED_LED2_PIN);
  226. AppLoop();
  227. // PROFILER_BG();
  228. ACnt++;
  229. // delay_cycles(DELAY);
  230. // DL_TimerA_setCaptureCompareValue(MOTOR_PWM_INST, 1875, DL_TIMER_CC_0_INDEX);
  231. // DL_TimerA_setCaptureCompareValue(MOTOR_PWM_INST, 1250, DL_TIMER_CC_2_INDEX);
  232. // DL_TimerA_setCaptureCompareValue(MOTOR_PWM_INST, 625, DL_TIMER_CC_3_INDEX);
  233. //
  234. // DL_TimerG_setCaptureCompareValue(LED_PWM_INST, 100, DL_TIMER_CC_0_INDEX);
  235. // DL_TimerG_setCaptureCompareValue(LED_PWM_INST, 100, DL_TIMER_CC_1_INDEX);
  236. }
  237. }
  238. /***************************************************************
  239. Function: mn_voParaSet;
  240. Description:software intial
  241. Call by:
  242. Input Variables: N/A
  243. Output/Return Variables: N/A
  244. Subroutine Call: N/A;
  245. Reference: N/A
  246. ****************************************************************/
  247. void mn_voParaSet(void)
  248. {
  249. flash_voSysParaRead();//i2c_voSysparaReadFromEE(&i2c_stRXCRCOut);
  250. flash_voErrorRead();
  251. flash_HistoryRead();
  252. flash_voProductParaRead();
  253. //flash_voMosResParaRead();
  254. i2c_stRXCRCOut.ReadFinishFlg = TRUE;
  255. if (i2c_stRXCRCOut.blHistoryParaFltFlg == FALSE)
  256. {
  257. ass_ParaSet.uwAsssistSelectNum =stHistoryPara.uwAssModSelect.uwReal; // I2C_uwHistoryParaRead[0];
  258. cp_stHistoryPara.uwOpenTimes = stHistoryPara.uwOpenTimes.uwReal ;//I2C_uwHistoryParaRead[1];
  259. cp_stHistoryPara.ulUsedTime =(((ULONG)stHistoryPara.uwUsedTimeH.uwReal)<<16) + stHistoryPara.uwUsedTimeL.uwReal ;// (((ULONG)I2C_uwHistoryParaRead[2]) << 16) + I2C_uwHistoryParaRead[3];
  260. cp_stHistoryPara.swNTCTempMaxCe = stHistoryPara.swNTCTempMaxCe.swReal ;//I2C_uwHistoryParaRead[4];
  261. cp_stHistoryPara.swNTCTempMinCe = stHistoryPara.swNTCTempMinCe.swReal ;//I2C_uwHistoryParaRead[5];
  262. cp_stHistoryPara.uwAlamHOcurTimes =stHistoryPara.uwAlamHOcurTimes.uwReal ;// I2C_uwHistoryParaRead[6];
  263. cp_stHistoryPara.uwAlamSOcurTimes =stHistoryPara.uwAlamSOcurTimes.uwReal ;// I2C_uwHistoryParaRead[7];
  264. cp_stHistoryPara.uwAlamOHeatTimes = stHistoryPara.uwAlamOHeatTimes.uwReal ;//I2C_uwHistoryParaRead[8];
  265. cp_stHistoryPara.uwAlamRotorLockTimes =stHistoryPara.uwAlamRotorLockTimes.uwReal ;// I2C_uwHistoryParaRead[9];
  266. cp_stHistoryPara.uwAlamPhsLossTimes =stHistoryPara.uwAlamPhsLossTimes.uwReal ;// I2C_uwHistoryParaRead[10];
  267. cp_stHistoryPara.uwAlamOVolTimes =stHistoryPara.uwAlamOVolTimes.uwReal ;// I2C_uwHistoryParaRead[11];
  268. cp_stHistoryPara.uwAlamUVolTimes = stHistoryPara.uwAlamUVolTimes.uwReal ;//I2C_uwHistoryParaRead[12];
  269. cp_stHistoryPara.uwAlamComOTimeTimes =stHistoryPara.uwAlamComOTimeTimes.uwReal ;// I2C_uwHistoryParaRead[13];
  270. cp_stHistoryPara.uwG1AvgPwrConsumption =stHistoryPara.uwG1AvgPwrConsumption.uwReal ;// I2C_uwHistoryParaRead[14];
  271. cp_stHistoryPara.uwG2AvgPwrConsumption =stHistoryPara.uwG2AvgPwrConsumption.uwReal ;// I2C_uwHistoryParaRead[15];
  272. cp_stHistoryPara.uwG3AvgPwrConsumption =stHistoryPara.uwG3AvgPwrConsumption.uwReal ;// I2C_uwHistoryParaRead[16];
  273. cp_stHistoryPara.uwG4AvgPwrConsumption =stHistoryPara.uwG4AvgPwrConsumption.uwReal ;// I2C_uwHistoryParaRead[17];
  274. cp_stHistoryPara.uwG5AvgPwrConsumption =stHistoryPara.uwG5AvgPwrConsumption.uwReal ;// I2C_uwHistoryParaRead[18];
  275. cp_stHistoryPara.ulODOTrip =(((ULONG)stHistoryPara.uwODOTripH.uwReal)<<16) + stHistoryPara.uwODOTripL.uwReal ;// (((ULONG)I2C_uwHistoryParaRead[19]) << 16) + I2C_uwHistoryParaRead[20];
  276. cp_stHistoryPara.ulODOTime =(((ULONG)stHistoryPara.uwODOTimeH.uwReal)<<16) +stHistoryPara.uwODOTimeL.uwReal ;// (((ULONG)I2C_uwHistoryParaRead[21]) << 16) + I2C_uwHistoryParaRead[22];
  277. cp_stHistoryPara.ulTripSum =(((ULONG)stHistoryPara.uwTripSumH.uwReal)<<16) +stHistoryPara.uwTripSumL.uwReal ;// (((ULONG)I2C_uwHistoryParaRead[23]) << 16) + I2C_uwHistoryParaRead[24];
  278. cp_stHistoryPara.ulTripSumTime =(((ULONG)stHistoryPara.uwTripSumTimeH.uwReal)<<16) +stHistoryPara.uwTripSumTimeL.uwReal ;// (((ULONG)I2C_uwHistoryParaRead[25]) << 16) + I2C_uwHistoryParaRead[26];
  279. cp_stHistoryPara.uwTorSensorAlamTimes =stHistoryPara.uwTorSensorAlamTimes.uwReal ;// I2C_uwHistoryParaRead[27];
  280. cp_stHistoryPara.uwCadSensorAlamTimes =stHistoryPara.uwCadSensorAlamTimes.uwReal ;// I2C_uwHistoryParaRead[28];
  281. cp_stHistoryPara.uwBikeSpdSensorAlamTimes = stHistoryPara.uwBikeSpdSensorAlamTimes.uwReal ;//I2C_uwHistoryParaRead[29];
  282. cp_stHistoryPara.uwPosSensorAlamTimes =stHistoryPara.uwPosSensorAlamTimes.uwReal ;// I2C_uwHistoryParaRead[30];
  283. cp_stHistoryPara.ulRealODOTrip =(((ULONG) stHistoryPara.uwRealODOTripH.uwReal)<<16) + stHistoryPara.uwRealODOTripL.uwReal; //(((ULONG)I2C_uwHistoryParaRead[31]) << 16) + I2C_uwHistoryParaRead[32];
  284. cp_stHistoryPara.ulRealODOTime =(((ULONG) stHistoryPara.uwRealODOTimeH.uwReal )<<16) + stHistoryPara.uwRealODOTimeL.uwReal ; // (((ULONG)I2C_uwHistoryParaRead[33]) << 16) + I2C_uwHistoryParaRead[34];
  285. }
  286. else
  287. {}
  288. // peripheral Para Set
  289. cadence_stFreGetCof.uwTorque_NumbersPulses = TORQUE_NUMBERS_PULSES;
  290. cadence_stFreGetCof.uwCad_NumbersPulses = CADENCE_NUMBERS_PULSES;
  291. bikespeed_stFreGetCof.uwNumbersPulses = BIKESPEED_NUMBERS_PULSES;
  292. torsensor_stTorSensorCof.uwMaxSensorTorquePu = ((ULONG)TORQUE_MAX_RANGE << 14) / TORQUEBASE; // Q14
  293. /////////////////////////////////
  294. if (cp_stFlg.ParaUseEEFlg == TRUE)
  295. {
  296. if (i2c_stRXCRCOut.ReadFinishFlg == TRUE)
  297. {
  298. if (i2c_stRXCRCOut.blMotorParaFltFlg == FALSE)
  299. {
  300. cp_stMotorPara.swMotrPolePairs =Syspara2.stMotorPara.uwPolePairs.uwReal;// I2C_uwMotorParaRead[0];
  301. cp_stMotorPara.swRsOhm =Syspara2.stMotorPara.uwRsmOhm.uwReal; // I2C_uwMotorParaRead[1];
  302. cp_stMotorPara.uwLdmH = Syspara2.stMotorPara.uwLduH.uwReal ;//I2C_uwMotorParaRead[2];
  303. cp_stMotorPara.uwLqmH = Syspara2.stMotorPara.uwLquH.uwReal ;//I2C_uwMotorParaRead[3];
  304. cp_stMotorPara.swFluxWb = Syspara2.stMotorPara.uwFluxmWb.uwReal ;//I2C_uwMotorParaRead[4];
  305. cp_stMotorPara.swIdMaxA = Syspara2.stMotorPara.uwIdMaxA.uwReal ;//I2C_uwMotorParaRead[5];
  306. cp_stMotorPara.swIdMinA =Syspara2.stMotorPara.uwIdMinA.uwReal ;// I2C_uwMotorParaRead[6];
  307. cp_stMotorPara.swRSpeedRpm = Syspara2.stMotorPara.uwRSpdRpm.uwReal ;//I2C_uwMotorParaRead[7];
  308. cp_stMotorPara.swRPwrWt = Syspara2.stMotorPara.uwRPwrWt.uwReal ;//I2C_uwMotorParaRead[8];
  309. cp_stMotorPara.swRIarmsA =Syspara2.stMotorPara.uwRCurA.uwReal ;// I2C_uwMotorParaRead[9];
  310. cp_stMotorPara.swRUdcV = Syspara2.stMotorPara.uwRVolV.uwReal ;//I2C_uwMotorParaRead[10];
  311. cp_stMotorPara.swJD = Syspara2.stMotorPara.uwJD.uwReal ;//I2C_uwMotorParaRead[11];
  312. cp_stMotorPara.swTorMax = Syspara2.stMotorPara.uwTorMaxNm.uwReal ;//I2C_uwMotorParaRead[12];
  313. }
  314. else
  315. {}
  316. if (i2c_stRXCRCOut.blBikeParaFltFlg == FALSE)
  317. {
  318. ass_ParaCong.uwWheelPerimeter =Syspara2.stBikePara.uwWheelPerimeter.uwReal ;// I2C_uwBikeParaRead[0];
  319. ass_ParaCong.swDeltPerimeter = Syspara2.stBikePara.swDeltPerimeter.swReal ;//I2C_uwBikeParaRead[1];
  320. ass_ParaCong.uwMechRationMotorEEPROM=Syspara2.stBikePara.uwMechRationMotor.uwReal;
  321. ass_ParaCong.uwMechRationMotor = (UWORD)(((ULONG)ass_ParaCong.uwMechRationMotorEEPROM*1024)/1000);//(UWORD)(((ULONG)I2C_uwBikeParaRead[2]*1024)/1000);
  322. ass_ParaCong.uwThrottleMaxSpdKmH =Syspara2.stBikePara.uwThrottleMaxSpdKmH.uwReal ;// I2C_uwBikeParaRead[3];
  323. ass_ParaCong.uwCartSpdKmH =Syspara2.stBikePara.uwCartSpdKmH.uwReal ;// I2C_uwBikeParaRead[4];
  324. ass_ParaCong.uwNmFrontChainring =Syspara2.stBikePara.uwNmFrontChainring.uwReal ;// I2C_uwBikeParaRead[5];
  325. ass_ParaCong.uwNmBackChainring =Syspara2.stBikePara.uwNmBackChainring.uwReal ;// I2C_uwBikeParaRead[6];
  326. ass_ParaCong.uwAssistSelect1 =Syspara2.stBikePara.uwAssistSelect1.uwReal ;// I2C_uwBikeParaRead[7];
  327. ass_ParaCong.uwAssistSelect2 =Syspara2.stBikePara.uwAssistSelect2.uwReal ;// I2C_uwBikeParaRead[8];
  328. ass_ParaCong.uwLightConfig =Syspara2.stBikePara.uwLightConfig.uwReal ;// I2C_uwBikeParaRead[9];
  329. ass_ParaCong.uwStartMode =Syspara2.stBikePara.uwStartMode.uwReal ;// I2C_uwBikeParaRead[10];
  330. ass_ParaCong.uwAutoPowerOffTime =Syspara2.stBikePara.uwAutoPowerOffTime.uwReal ;// I2C_uwBikeParaRead[11];
  331. }
  332. else
  333. {}
  334. if (i2c_stRXCRCOut.blMControlParaFltFlg == FALSE)
  335. {
  336. cp_stFlg.ParaFirstSetFlg =Syspara2.stMControlPara.ParaFirstSetFlg.uwReal ;// I2C_uwMControlRead[0];
  337. // cp_stFlg.SpiOffsetFirstSetFlg =Syspara2.stMControlPara.SpiOffsetFirstSetFlg ;// I2C_uwMControlRead[1];
  338. // spi_stResolverOut.swSpiThetaOffsetOrignPu =Syspara2.stMControlPara.uwSPIPosOffsetOrigin ;// I2C_uwMControlRead[2];
  339. // spi_stResolverOut.swSpiThetaOffsetPu =Syspara2.stMControlPara.uwSPIPosOffsetNow ;// I2C_uwMControlRead[3];
  340. cp_stMotorPara.swIpeakMaxA = Syspara2.stMControlPara.uwIPeakMaxA.uwReal ;//I2C_uwMControlRead[4];
  341. cp_stControlPara.swAlmOverCurrentVal =Syspara2.stMControlPara.uwAlamOCurA.uwReal ;// I2C_uwMControlRead[5];
  342. cp_stControlPara.swAlmOverVolVal1 =Syspara2.stMControlPara.uwAlamOVolV.uwReal ;// I2C_uwMControlRead[6];
  343. cp_stControlPara.swAlmUnderVolVal1 =Syspara2.stMControlPara.uwAlamUVolV.uwReal ;//I2C_uwMControlRead[7];
  344. cp_stControlPara.swAlmOverSpdVal =Syspara2.stMControlPara.uwAlamOverSpdRpm.uwReal ;// I2C_uwMControlRead[8];
  345. cp_stControlPara.swAlmOverHeatCeVal =Syspara2.stMControlPara.uwAlamOverHeatCe.uwReal ;// I2C_uwMControlRead[9];
  346. cp_stControlPara.swAlmRecOHeatVal =Syspara2.stMControlPara.uwAlamRecHeatCe.uwReal ;// I2C_uwMControlRead[10];
  347. cp_stControlPara.swAlmPwrLimitStartTempVal =Syspara2.stMControlPara.uwPwrLimitStartCe.uwReal ;// I2C_uwMControlRead[11];
  348. cp_stControlPara.swAlmMotorOverHeatCeVal =Syspara2.stMControlPara.uwAlamMotorOverHeatCe.uwReal ;// I2C_uwMControlRead[12];
  349. cp_stControlPara.swAlmMotorRecOHeatVal = Syspara2.stMControlPara.uwAlamMotorRecHeatCe.uwReal ;//I2C_uwMControlRead[13];
  350. cp_stControlPara.swAlmPwrLimitMotorStartTempVal =Syspara2.stMControlPara.uwPwrLimitMotorStartCe.uwReal ;// I2C_uwMControlRead[14];
  351. cp_stControlPara.uwControlFunEN=Syspara2.stMControlPara.uwControlFunEN.uwReal ;//I2C_uwMControlRead[15];
  352. }
  353. else
  354. {
  355. cp_stFlg.RunPermitFlg = FALSE;
  356. }
  357. if (i2c_stRXCRCOut.blSensorParaFltFlg == FALSE)
  358. {
  359. torsensor_stTorSensorCof.uwTorqueOffsetOrign =Syspara2.stSensorPara.uwTorSensorOffsetOrigin.uwReal ;// I2C_uwSensorRead[0];
  360. torsensor_stTorSensorCof.uwTorqueOffsetNow1 =Syspara2.stSensorPara.uwTorSensorOffsetNow1.uwReal ;// I2C_uwSensorRead[1];
  361. torsensor_stTorSensorCof.uwTorqueOffsetNow2 =Syspara2.stSensorPara.uwTorSensorOffsetNow2.uwReal ;// I2C_uwSensorRead[2];
  362. torsensor_stTorSensorCof.uwTorqueOffsetNow3 =Syspara2.stSensorPara.uwTorSensorOffsetNow3.uwReal ;// I2C_uwSensorRead[3];
  363. torsensor_stTorSensorCof.uwTorqueOffsetNow4 =Syspara2.stSensorPara.uwTorSensorOffsetNow4.uwReal ;// I2C_uwSensorRead[4];
  364. torsensor_stTorSensorCof.uwMaxSensorTorquePu =Syspara2.stSensorPara.uwBikeTorMaxNm.uwReal ;// I2C_uwSensorRead[5];
  365. torsensor_stTorSensorCof.uwBikeTorStep1RealNm =Syspara2.stSensorPara.uwBikeTor1StepRealNm.uwReal ;// I2C_uwSensorRead[6];
  366. torsensor_stTorSensorCof.uwBikeTorStep1ADC =Syspara2.stSensorPara.uwBikeTor1StepADC.uwReal ;// I2C_uwSensorRead[7];
  367. torsensor_stTorSensorCof.uwBikeTorStep2RealNm =Syspara2.stSensorPara.uwBikeTor2StepRealNm.uwReal ;// I2C_uwSensorRead[8];
  368. torsensor_stTorSensorCof.uwBikeTorStep2ADC =Syspara2.stSensorPara.uwBikeTor2StepADC.uwReal ;// I2C_uwSensorRead[9];
  369. torsensor_stTorSensorCof.uwBikeTorStep3RealNm = Syspara2.stSensorPara.uwBikeTor3StepRealNm.uwReal ;//I2C_uwSensorRead[10];
  370. torsensor_stTorSensorCof.uwBikeTorStep3ADC =Syspara2.stSensorPara.uwBikeTor3StepADC.uwReal ;// I2C_uwSensorRead[11];
  371. torsensor_stTorSensorCof.uwBikeTorStep4RealNm =Syspara2.stSensorPara.uwBikeTor4StepRealNm.uwReal ;// I2C_uwSensorRead[12];
  372. torsensor_stTorSensorCof.uwBikeTorStep4ADC = Syspara2.stSensorPara.uwBikeTor4StepADC.uwReal ;//I2C_uwSensorRead[13];
  373. cadence_stFreGetCof.uwTorque_NumbersPulses = Syspara2.stSensorPara.uwTorque_SensorPulseNm.uwReal ;//I2C_uwSensorRead[14];
  374. bikespeed_stFreGetCof.uwNumbersPulses =Syspara2.stSensorPara.uwBikeSpdSensorPulseNm.uwReal ;// I2C_uwSensorRead[15];
  375. cadence_stFreGetCof.uwCad_NumbersPulses =Syspara2.stSensorPara.uwCad_SensorPulseNm.uwReal;// I2C_uwSensorRead[16];
  376. }
  377. else
  378. {
  379. cp_stFlg.RunPermitFlg = FALSE;
  380. }
  381. if (i2c_stRXCRCOut.blAssistParaFltFlg == FALSE)
  382. {
  383. ass_ParaSet.uwStartupCoef = Syspara2.stAssistPara.uwStartupGain.uwReal ;//I2C_uwAssistParaRead[0];
  384. ass_ParaSet.uwStartupCruiseCoef =Syspara2.stAssistPara.uwStartcruiseGain.uwReal ;// I2C_uwAssistParaRead[1];
  385. ass_ParaSet.uwAssistStartNm =Syspara2.stAssistPara.uwAssistStartNm.uwReal ;// I2C_uwAssistParaRead[2];
  386. ass_ParaSet.uwAssistStopNm =Syspara2.stAssistPara.uwAssistStopNm.uwReal ;// I2C_uwAssistParaRead[3];
  387. ass_ParaSet.uwStartUpGainStep =Syspara2.stAssistPara.uwStartUpGainStep.uwReal ;// I2C_uwAssistParaRead[4];
  388. ass_ParaSet.uwStartUpCadNm =Syspara2.stAssistPara.uwStartUpCadNm.uwReal ;// I2C_uwAssistParaRead[5];
  389. ass_ParaSet.uwTorLPFCadNm =Syspara2.stAssistPara.uwTorLPFCadNm.uwReal ;// I2C_uwAssistParaRead[6];
  390. ass_ParaSet.uwSpeedAssistSpdRpm =Syspara2.stAssistPara.uwSpeedAssistSpdRpm.uwReal ;// I2C_uwAssistParaRead[7];
  391. ass_ParaSet.uwSpeedAssistIMaxA =Syspara2.stAssistPara.uwSpeedAssistIMaxA.uwReal ;// I2C_uwAssistParaRead[8];
  392. ass_ParaSet.uwAssistLimitBikeSpdStart =Syspara2.stAssistPara.uwAssistLimitBikeSpdStart.uwReal ;// I2C_uwAssistParaRead[9];
  393. ass_ParaSet.uwAssistLimitBikeSpdStop =Syspara2.stAssistPara.uwAssistLimitBikeSpdStop.uwReal ;// I2C_uwAssistParaRead[10];
  394. ass_ParaSet.uwCadenceWeight =Syspara2.stAssistPara.uwCadenceAssistWeight.uwReal ;// I2C_uwAssistParaRead[11];
  395. ass_stCadAssSpdCtl.uwPidKp =Syspara2.stAssistPara.uwCadenceAssKp.uwReal ;// I2C_uwAssistParaRead[12];
  396. ass_stCadAssSpdCtl.swPidLimMax =Syspara2.stAssistPara.swCadenceVolStep.swReal ;// I2C_uwAssistParaRead[13];
  397. ass_stCadAssSpdCtl.swPidVolDec =Syspara2.stAssistPara.swCadenceVolDecStep.swReal ;// I2C_uwAssistParaRead[14];
  398. ass_stCadAssParaPro.swTargetAssCurAcc =Syspara2.stAssistPara.swCadenceCurStep.swReal ;// I2C_uwAssistParaRead[15];
  399. ass_stCadAssCoef.uwMaxCadRpm =Syspara2.stAssistPara.uwMaxCadRpm.uwReal ;// I2C_uwAssistParaRead[16];
  400. ass_stReservePara.uwReserve2 =Syspara2.stAssistPara.uwReserve2.uwReal ;// I2C_uwAssistParaRead[17];
  401. ass_stReservePara.uwReserve3 =Syspara2.stAssistPara.uwReserve3.uwReal ;// I2C_uwAssistParaRead[18];
  402. ass_stReservePara.uwReserve4 =Syspara2.stAssistPara.uwReserve4.uwReal ;// I2C_uwAssistParaRead[19];
  403. }
  404. else
  405. {}
  406. if (i2c_stRXCRCOut.blBikePara2FltFlg == FALSE)
  407. {
  408. ass_ParaCong.uwNoneOBCEnable = Syspara2.stBikePara2.uwNoneOBCEnable.uwReal ;// I2C_uwBikePara2Read[0];
  409. ass_ParaCong.uwRearLightCycle =Syspara2.stBikePara2.uwRearLightCycle.uwReal;// I2C_uwBikePara2Read[1];
  410. ass_ParaCong.uwRearLightDuty = Syspara2.stBikePara2.uwRearLightDuty.uwReal ;//I2C_uwBikePara2Read[2];
  411. ass_ParaCong.swDeltaBikeSpeedLimit =Syspara2.stBikePara2.swDeltaBikeSpeedLimit.swReal;// (SWORD) I2C_uwBikePara2Read[3];
  412. }
  413. else
  414. {}
  415. }
  416. // mn_voControlPareSet();
  417. cp_stFlg.ParaUseEEFinishFlg = TRUE;
  418. }
  419. else
  420. {}
  421. }
  422. void mn_voControlPareSet(void)
  423. {
  424. if (cp_stFlg.ParaUseEEFlg == TRUE)
  425. {
  426. cp_stFlg.RunModelSelect = Syspara2.flash_stPara.stTestParaInfo.RunModelSelect;
  427. cp_stFlg.ThetaGetModelSelect = Syspara2.flash_stPara.stTestParaInfo.ThetaGetModelSelect;
  428. cp_stFlg.CurrentSampleModelSelect = Syspara2.flash_stPara.stTestParaInfo.CurrentSampleModelSelect;
  429. cp_stFlg.RotateDirectionSelect = Syspara2.flash_stPara.stTestParaInfo.RotateDirectionSelect;
  430. cp_stControlPara.swAlignCurAp = Syspara2.flash_stPara.stTestParaInfo.uwInitPosCurAmp;
  431. cp_stControlPara.swDragVolAp = Syspara2.flash_stPara.stTestParaInfo.uwVFControlVolAmp;
  432. cp_stControlPara.swDragCurAp = Syspara2.flash_stPara.stTestParaInfo.uwIFControlCurAmp;
  433. cp_stControlPara.swDragSpdHz = Syspara2.flash_stPara.stTestParaInfo.uwVFIFTargetFreHz;
  434. cp_stControlPara.swSpeedAccRate = Syspara2.flash_stPara.stTestParaInfo.uwSpeedLoopAccRate;
  435. cp_stControlPara.swSpeedDccRate =Syspara2.flash_stPara.stTestParaInfo.uwSpeedLoopDecRate;
  436. cp_stControlPara.swAsrPIBandwidth = Syspara2.flash_stPara.stTestParaInfo.uwSpeedLoopBandWidthHz;
  437. cp_stControlPara.swAsrPIM = Syspara2.flash_stPara.stTestParaInfo.uwSpeedLoopCoefM;
  438. cp_stControlPara.swAcrPIBandwidth = Syspara2.flash_stPara.stTestParaInfo.uwCuerrentLoopBandWidthHz;
  439. cp_stControlPara.swAcrRaCoef = Syspara2.flash_stPara.stTestParaInfo.uwCurrentLoopCoefM;
  440. cp_stControlPara.swObsFluxPIDampratio =Syspara2.flash_stPara.stTestParaInfo.uwFluxObsCoefM ;
  441. cp_stControlPara.swObsFluxPICrossfreHz =Syspara2.flash_stPara.stTestParaInfo.uwFluxObsBandWidthHz ;
  442. cp_stControlPara.swObsSpdPLLM = Syspara2.flash_stPara.stTestParaInfo.uwThetaObsPLLCoefM;
  443. cp_stControlPara.swObsSpdPLLBandWidthHz = Syspara2.flash_stPara.stTestParaInfo.uwThetaObsPLLBandWidthHz;
  444. cp_stControlPara.swPWMMaxDuty = Syspara2.flash_stPara.stTestParaInfo.uwPWMMaxDuty;
  445. cp_stControlPara.swPWM7to5Duty = Syspara2.flash_stPara.stTestParaInfo.uwPWM7to5Duty;
  446. cp_stControlPara.swPwrLimitValWt = Syspara2.flash_stPara.stTestParaInfo.uwPwrLimit;
  447. cp_stControlPara.swPwrLimitErrWt = Syspara2.flash_stPara.stTestParaInfo.uwPwrLimitError;
  448. cp_stControlPara.swPwrLimitKpPu = Syspara2.flash_stPara.stTestParaInfo.uwPwrLimitKp;
  449. cp_stControlPara.swPwrLimitKiPu = Syspara2.flash_stPara.stTestParaInfo.uwPwrLimitKi;
  450. }
  451. }
  452. /***************************************************************
  453. Function: mn_voParaUpdate;
  454. Description:update pra from upper PC
  455. Call by:
  456. Input Variables: N/A
  457. Output/Return Variables: N/A
  458. Subroutine Call: N/A;
  459. Reference: N/A
  460. ****************************************************************/
  461. void mn_voParaUpdate(void)
  462. {
  463. if (cp_stFlg.ParaUpdateFlg == TRUE)
  464. {
  465. if (cp_stFlg.ParaMInfoUpdateFlg == TRUE)
  466. {
  467. cp_stMotorPara.swMotrPolePairs = MC_UpcInfo.stMotorInfo.uwPolePairs;
  468. cp_stMotorPara.swRsOhm = MC_UpcInfo.stMotorInfo.uwRsmOhm;
  469. cp_stMotorPara.uwLdmH = MC_UpcInfo.stMotorInfo.uwLduH;
  470. cp_stMotorPara.uwLqmH = MC_UpcInfo.stMotorInfo.uwLquH;
  471. cp_stMotorPara.swFluxWb = MC_UpcInfo.stMotorInfo.uwFluxmWb;
  472. cp_stMotorPara.swIdMaxA = MC_UpcInfo.stMotorInfo.uwIdMaxA;
  473. cp_stMotorPara.swIdMinA = MC_UpcInfo.stMotorInfo.uwIdMinA;
  474. cp_stMotorPara.swRSpeedRpm = MC_UpcInfo.stMotorInfo.uwRSpdRpm;
  475. cp_stMotorPara.swRPwrWt = MC_UpcInfo.stMotorInfo.uwRPwrWt;
  476. cp_stMotorPara.swRIarmsA = MC_UpcInfo.stMotorInfo.uwRCurA;
  477. cp_stMotorPara.swRUdcV = MC_UpcInfo.stMotorInfo.uwRVolV;
  478. cp_stMotorPara.swJD = MC_UpcInfo.stMotorInfo.uwJD;
  479. cp_stMotorPara.swTorMax = MC_UpcInfo.stMotorInfo.uwTorMaxNm;
  480. cp_stFlg.ParaMotorDriveUpdateFinishFlg = TRUE;
  481. cp_stFlg.ParaMInfoUpdateFlg = FALSE;
  482. }
  483. if (cp_stFlg.ParaBikeInfoUpdateFlg == TRUE)
  484. {
  485. ass_ParaCong.uwWheelPerimeter = MC_UpcInfo.stBikeInfo.uwWheelPerimeter;
  486. ass_ParaCong.uwMechRationMotorEEPROM=MC_UpcInfo.stBikeInfo.uwMechRationMotor;
  487. ass_ParaCong.uwMechRationMotor = (UWORD)(((ULONG)ass_ParaCong.uwMechRationMotorEEPROM*1024)/1000);
  488. ass_ParaCong.uwThrottleMaxSpdKmH = MC_UpcInfo.stBikeInfo.uwThrottleMaxSpdKmH;
  489. ass_ParaCong.uwCartSpdKmH = MC_UpcInfo.stBikeInfo.uwCartSpdKmH;
  490. ass_ParaCong.uwNmFrontChainring = MC_UpcInfo.stBikeInfo.uwNmFrontChainring;
  491. ass_ParaCong.uwNmBackChainring = MC_UpcInfo.stBikeInfo.uwNmBackChainring;
  492. ass_ParaCong.uwAssistSelect1 = MC_UpcInfo.stBikeInfo.uwAssistSelect1;
  493. ass_ParaCong.uwAssistSelect2 = MC_UpcInfo.stBikeInfo.uwAssistSelect2;
  494. ass_ParaCong.uwLightConfig = MC_UpcInfo.stBikeInfo.uwLightConfig;
  495. ass_ParaCong.swDeltPerimeter = MC_UpcInfo.stBikeInfo.swWheelSizeAdjust;
  496. ass_ParaCong.uwStartMode = MC_UpcInfo.stBikeInfo.uwStartMode;
  497. ass_ParaCong.uwAutoPowerOffTime = MC_UpcInfo.stBikeInfo.uwAutoPowerOffTime;
  498. cp_stFlg.ParaAssistUpdateFinishFlg = TRUE;
  499. cp_stFlg.ParaBikeInfoUpdateFlg = FALSE;
  500. }
  501. if (cp_stFlg.ParaMCInfoUpdateFlg == TRUE)
  502. {
  503. cp_stFlg.ParaFirstSetFlg = MC_UpcInfo.stTestParaInfo.uwEEFirstDefaultSetFlg;
  504. // cp_stFlg.SpiOffsetFirstSetFlg = MC_UpcInfo.stTestParaInfo.uwSPIOffsetFirstSetFlg;
  505. // spi_stResolverOut.swSpiThetaOffsetOrignPu = MC_UpcInfo.stMContorlInfo.uwSPIPosOffsetOrigin;
  506. // spi_stResolverOut.swSpiThetaOffsetPu = MC_UpcInfo.stMContorlInfo.uwSPIPosOffsetNow;
  507. cp_stMotorPara.swIpeakMaxA = MC_UpcInfo.stMContorlInfo.uwIPeakMaxA;
  508. cp_stControlPara.swAlmOverCurrentVal = MC_UpcInfo.stMContorlInfo.uwAlamOCurA;
  509. cp_stControlPara.swAlmOverVolVal1 = MC_UpcInfo.stMContorlInfo.uwAlamOVolV;
  510. cp_stControlPara.swAlmUnderVolVal1 = MC_UpcInfo.stMContorlInfo.uwAlamUVolV;
  511. cp_stControlPara.swAlmOverSpdVal = MC_UpcInfo.stMContorlInfo.uwAlamOverSpdRpm;
  512. cp_stControlPara.swAlmOverHeatCeVal = MC_UpcInfo.stMContorlInfo.uwAlamOverHeatCe;
  513. cp_stControlPara.swAlmRecOHeatVal = MC_UpcInfo.stMContorlInfo.uwAlamRecHeatCe;
  514. cp_stControlPara.swAlmPwrLimitStartTempVal = MC_UpcInfo.stMContorlInfo.uwPwrLimitStartCe;
  515. cp_stControlPara.swAlmMotorOverHeatCeVal = MC_UpcInfo.stMContorlInfo.uwAlamMotorOverHeatCe;
  516. cp_stControlPara.swAlmMotorRecOHeatVal = MC_UpcInfo.stMContorlInfo.uwAlamMotorRecHeatCe;
  517. cp_stControlPara.swAlmPwrLimitMotorStartTempVal = MC_UpcInfo.stMContorlInfo.uwPwrLimitMotorStartCe;
  518. cp_stControlPara.uwControlFunEN=MC_UpcInfo.stMContorlInfo.uwControlFunEN;
  519. cp_stFlg.ParaMotorDriveUpdateFinishFlg = TRUE;
  520. cp_stFlg.ParaMCInfoUpdateFlg = FALSE;
  521. }
  522. if (cp_stFlg.ParaSensorInfoUpdateFlg == TRUE)
  523. {
  524. torsensor_stTorSensorCof.uwTorqueOffsetOrign = MC_UpcInfo.stSensorInfo.uwTorSensorOffsetOrigin;
  525. torsensor_stTorSensorCof.uwMaxSensorTorquePu = MC_UpcInfo.stSensorInfo.uwBikeTorMaxNm;
  526. torsensor_stTorSensorCof.uwBikeTorStep1RealNm = MC_UpcInfo.stSensorInfo.uwBikeTor1StepRealNm;
  527. torsensor_stTorSensorCof.uwBikeTorStep1ADC = MC_UpcInfo.stSensorInfo.uwBikeTor1StepADC;
  528. torsensor_stTorSensorCof.uwBikeTorStep2RealNm = MC_UpcInfo.stSensorInfo.uwBikeTor2StepRealNm;
  529. torsensor_stTorSensorCof.uwBikeTorStep2ADC = MC_UpcInfo.stSensorInfo.uwBikeTor2StepADC;
  530. torsensor_stTorSensorCof.uwBikeTorStep3RealNm = MC_UpcInfo.stSensorInfo.uwBikeTor3StepRealNm;
  531. torsensor_stTorSensorCof.uwBikeTorStep3ADC = MC_UpcInfo.stSensorInfo.uwBikeTor3StepADC;
  532. torsensor_stTorSensorCof.uwBikeTorStep4RealNm = MC_UpcInfo.stSensorInfo.uwBikeTor4StepRealNm;
  533. torsensor_stTorSensorCof.uwBikeTorStep4ADC = MC_UpcInfo.stSensorInfo.uwBikeTor4StepADC;
  534. cadence_stFreGetCof.uwTorque_NumbersPulses = MC_UpcInfo.stSensorInfo.uwTorque_SensorPulseNm;
  535. bikespeed_stFreGetCof.uwNumbersPulses = MC_UpcInfo.stSensorInfo.uwBikeSpdSensorPulseNm;
  536. cadence_stFreGetCof.uwCad_NumbersPulses=MC_UpcInfo.stSensorInfo.uwCad_SensorPulseNm;
  537. cp_stFlg.ParaAssistUpdateFinishFlg = TRUE;
  538. cp_stFlg.ParaSensorInfoUpdateFlg = FALSE;
  539. }
  540. if (cp_stFlg.ParaAInfoUpdateFlg == TRUE)
  541. {
  542. ass_ParaSet.uwStartupCoef = MC_UpcInfo.stAssistInfo.swStartupGain;
  543. ass_ParaSet.uwStartupCruiseCoef = MC_UpcInfo.stAssistInfo.swStartcruiseGain;
  544. ass_ParaSet.uwAssistStartNm = MC_UpcInfo.stAssistInfo.uwAssistStartNm;
  545. ass_ParaSet.uwAssistStopNm = MC_UpcInfo.stAssistInfo.uwAssistStopNm;
  546. ass_ParaSet.uwStartUpGainStep = MC_UpcInfo.stAssistInfo.uwStartUpGainStep;
  547. ass_ParaSet.uwStartUpCadNm = MC_UpcInfo.stAssistInfo.uwStartUpCadNm;
  548. ass_ParaSet.uwTorLPFCadNm = MC_UpcInfo.stAssistInfo.uwTorLPFCadNm;
  549. ass_ParaSet.uwSpeedAssistSpdRpm = MC_UpcInfo.stAssistInfo.uwSpeedAssistSpdRpm;
  550. ass_ParaSet.uwSpeedAssistIMaxA = MC_UpcInfo.stAssistInfo.uwSpeedAssistIMaxA;
  551. ass_ParaSet.uwAssistLimitBikeSpdStart = MC_UpcInfo.stAssistInfo.uwAssistLimitBikeSpdStart;
  552. ass_ParaSet.uwAssistLimitBikeSpdStop = MC_UpcInfo.stAssistInfo.uwAssistLimitBikeSpdStop;
  553. ass_ParaSet.uwCadenceWeight = MC_UpcInfo.stAssistInfo.uwCadenceAssistWeight;
  554. ass_stCadAssSpdCtl.uwPidKp = MC_UpcInfo.stAssistInfo.uwCadAssPidKp;
  555. ass_stCadAssSpdCtl.swPidLimMax = MC_UpcInfo.stAssistInfo.swCadAssPidLimMax;
  556. ass_stCadAssSpdCtl.swPidVolDec = MC_UpcInfo.stAssistInfo.swCadAssPidVolDec;
  557. ass_stCadAssParaPro.swTargetAssCurAcc = MC_UpcInfo.stAssistInfo.swCadAssTargetAssCurAcc;
  558. ass_stCadAssCoef.uwMaxCadRpm = MC_UpcInfo.stAssistInfo.uwMaxCadRpm;
  559. ass_stReservePara.uwReserve2 = MC_UpcInfo.stAssistInfo.reserve2;
  560. ass_stReservePara.uwReserve3 = MC_UpcInfo.stAssistInfo.reserve3;
  561. ass_stReservePara.uwReserve4 = MC_UpcInfo.stAssistInfo.reserve4;
  562. cp_stFlg.ParaAssistUpdateFinishFlg = TRUE;
  563. cp_stFlg.ParaAInfoUpdateFlg = FALSE;
  564. }
  565. if(cp_stFlg.TestParaInfoUpdateFlg == TRUE)
  566. {
  567. cp_stFlg.RunModelSelect = MC_UpcInfo.stTestParaInfo.RunModelSelect;
  568. cp_stFlg.ThetaGetModelSelect = MC_UpcInfo.stTestParaInfo.ThetaGetModelSelect;
  569. cp_stFlg.CurrentSampleModelSelect = MC_UpcInfo.stTestParaInfo.CurrentSampleModelSelect;
  570. cp_stFlg.RotateDirectionSelect = MC_UpcInfo.stTestParaInfo.RotateDirectionSelect;
  571. cp_stControlPara.swAlignCurAp = MC_UpcInfo.stTestParaInfo.uwInitPosCurAmp;
  572. cp_stControlPara.swDragVolAp = MC_UpcInfo.stTestParaInfo.uwVFControlVolAmp;
  573. cp_stControlPara.swDragCurAp = MC_UpcInfo.stTestParaInfo.uwIFControlCurAmp;
  574. cp_stControlPara.swDragSpdHz = MC_UpcInfo.stTestParaInfo.uwVFIFTargetFreHz;
  575. cp_stControlPara.swSpeedAccRate = MC_UpcInfo.stTestParaInfo.uwSpeedLoopAccRate;
  576. cp_stControlPara.swSpeedDccRate = MC_UpcInfo.stTestParaInfo.uwSpeedLoopDecRate;
  577. cp_stControlPara.swAsrPIBandwidth = MC_UpcInfo.stTestParaInfo.uwSpeedLoopBandWidthHz;
  578. cp_stControlPara.swAsrPIM = MC_UpcInfo.stTestParaInfo.uwSpeedLoopCoefM;
  579. cp_stControlPara.swAcrPIBandwidth = MC_UpcInfo.stTestParaInfo.uwCuerrentLoopBandWidthHz;
  580. cp_stControlPara.swAcrRaCoef = MC_UpcInfo.stTestParaInfo.uwCurrentLoopCoefM;
  581. cp_stControlPara.swObsFluxPICrossfreHz = MC_UpcInfo.stTestParaInfo.uwFluxObsBandWidthHz;
  582. cp_stControlPara.swObsFluxPIDampratio = MC_UpcInfo.stTestParaInfo.uwFluxObsCoefM;
  583. cp_stControlPara.swObsSpdPLLBandWidthHz = MC_UpcInfo.stTestParaInfo.uwThetaObsPLLBandWidthHz;
  584. cp_stControlPara.swObsSpdPLLM = MC_UpcInfo.stTestParaInfo.uwThetaObsPLLCoefM;
  585. cp_stMotorPara.swJD = MC_UpcInfo.stTestParaInfo.uwJm;
  586. cp_stControlPara.swPWMMaxDuty = MC_UpcInfo.stTestParaInfo.uwPWMMaxDuty;
  587. cp_stControlPara.swPWM7to5Duty = MC_UpcInfo.stTestParaInfo.uwPWM7to5Duty;
  588. cp_stControlPara.swPwrLimitValWt = MC_UpcInfo.stTestParaInfo.uwPwrLimit;
  589. cp_stControlPara.swPwrLimitErrWt = MC_UpcInfo.stTestParaInfo.uwPwrLimitError;
  590. cp_stControlPara.swPwrLimitKpPu = MC_UpcInfo.stTestParaInfo.uwPwrLimitKp;
  591. cp_stControlPara.swPwrLimitKiPu = MC_UpcInfo.stTestParaInfo.uwPwrLimitKi;
  592. cp_stFlg.ParaMotorDriveUpdateFinishFlg = TRUE;
  593. cp_stFlg.TestParaInfoUpdateFlg = FALSE;
  594. }
  595. if (cp_stFlg.ParaRideInfoUpdateFlg == TRUE)
  596. {
  597. ass_stCalCoef.ucAssistRatioGain[0] = MC_UpcInfo.stRideParaInfo.ucAssistRatioGain1;
  598. ass_stCalCoef.ucAssistRatioGain[1] = MC_UpcInfo.stRideParaInfo.ucAssistRatioGain2;
  599. ass_stCalCoef.ucAssistRatioGain[2] = MC_UpcInfo.stRideParaInfo.ucAssistRatioGain3;
  600. ass_stCalCoef.ucAssistRatioGain[3] = MC_UpcInfo.stRideParaInfo.ucAssistRatioGain4;
  601. ass_stCalCoef.ucAssistRatioGain[4] = MC_UpcInfo.stRideParaInfo.ucAssistRatioGain5;
  602. ass_stCalCoef.ucAssistAccelerationGain[0] = MC_UpcInfo.stRideParaInfo.ucAssistAccelerationGain1;
  603. ass_stCalCoef.ucAssistAccelerationGain[1] = MC_UpcInfo.stRideParaInfo.ucAssistAccelerationGain2;
  604. ass_stCalCoef.ucAssistAccelerationGain[2] = MC_UpcInfo.stRideParaInfo.ucAssistAccelerationGain3;
  605. ass_stCalCoef.ucAssistAccelerationGain[3] = MC_UpcInfo.stRideParaInfo.ucAssistAccelerationGain4;
  606. ass_stCalCoef.ucAssistAccelerationGain[4] = MC_UpcInfo.stRideParaInfo.ucAssistAccelerationGain5;
  607. ass_stCalCoef.ucMaxCurrentGain[0] = MC_UpcInfo.stRideParaInfo.ucMaxCurrentGain1;
  608. ass_stCalCoef.ucMaxCurrentGain[1] = MC_UpcInfo.stRideParaInfo.ucMaxCurrentGain2;
  609. ass_stCalCoef.ucMaxCurrentGain[2] = MC_UpcInfo.stRideParaInfo.ucMaxCurrentGain3;
  610. ass_stCalCoef.ucMaxCurrentGain[3] = MC_UpcInfo.stRideParaInfo.ucMaxCurrentGain4;
  611. ass_stCalCoef.ucMaxCurrentGain[4] = MC_UpcInfo.stRideParaInfo.ucMaxCurrentGain5;
  612. ass_stCalCoef.ucMaxTorqueGain[0] = MC_UpcInfo.stRideParaInfo.ucMaxTorqueGain1;
  613. ass_stCalCoef.ucMaxTorqueGain[1] = MC_UpcInfo.stRideParaInfo.ucMaxTorqueGain2;
  614. ass_stCalCoef.ucMaxTorqueGain[2] = MC_UpcInfo.stRideParaInfo.ucMaxTorqueGain3;
  615. ass_stCalCoef.ucMaxTorqueGain[3] = MC_UpcInfo.stRideParaInfo.ucMaxTorqueGain4;
  616. ass_stCalCoef.ucMaxTorqueGain[4] = MC_UpcInfo.stRideParaInfo.ucMaxTorqueGain5;
  617. cp_stFlg.ParaAssistUpdateFinishFlg = TRUE;
  618. cp_stFlg.ParaRideInfoUpdateFlg = FALSE;
  619. }
  620. if (cp_stFlg.ParaBikeInfo2UpdateFlg == TRUE)
  621. {
  622. ass_ParaCong.uwNoneOBCEnable = MC_UpcInfo.stBikeInfo2.uwNoneOBCEnable;
  623. ass_ParaCong.uwRearLightCycle = MC_UpcInfo.stBikeInfo2.uwRearLightCycle;
  624. ass_ParaCong.uwRearLightDuty = MC_UpcInfo.stBikeInfo2.uwRearLightDuty;
  625. ass_ParaCong.swDeltaBikeSpeedLimit = MC_UpcInfo.stBikeInfo2.swDeltaBikeSpeedLimit;
  626. cp_stFlg.ParaAssistUpdateFinishFlg = TRUE;
  627. cp_stFlg.ParaBikeInfo2UpdateFlg = FALSE;
  628. }
  629. cp_stFlg.ParaUpdateFlg = FALSE;
  630. }
  631. }
  632. /***************************************************************
  633. Function: mn_voEEUperParaUpdate;
  634. Description:software intial
  635. Call by:
  636. Input Variables: N/A
  637. Output/Return Variables: N/A
  638. Subroutine Call: N/A;
  639. Reference: N/A
  640. ****************************************************************/
  641. void mn_voEEUperParaUpdate(void)
  642. {
  643. if (MC_UpcInfo.stMotorInfo.uwSaveFlg == TRUE)
  644. {
  645. Syspara2.stMotorPara.uwPolePairs.uwReal = cp_stMotorPara.swMotrPolePairs;
  646. Syspara2.stMotorPara.uwRsmOhm.uwReal = cp_stMotorPara.swRsOhm;
  647. Syspara2.stMotorPara.uwLduH.uwReal = cp_stMotorPara.uwLdmH;
  648. Syspara2.stMotorPara.uwLquH.uwReal = cp_stMotorPara.uwLqmH;
  649. Syspara2.stMotorPara.uwFluxmWb.uwReal = cp_stMotorPara.swFluxWb;
  650. Syspara2.stMotorPara.uwIdMaxA.uwReal = cp_stMotorPara.swIdMaxA;
  651. Syspara2.stMotorPara.uwIdMinA.uwReal = cp_stMotorPara.swIdMinA;
  652. Syspara2.stMotorPara.uwRSpdRpm.uwReal = cp_stMotorPara.swRSpeedRpm;
  653. Syspara2.stMotorPara.uwRPwrWt.uwReal = cp_stMotorPara.swRPwrWt;
  654. Syspara2.stMotorPara.uwRCurA.uwReal = cp_stMotorPara.swRIarmsA;
  655. Syspara2.stMotorPara.uwRVolV.uwReal = cp_stMotorPara.swRUdcV;
  656. Syspara2.stMotorPara.uwJD.uwReal = cp_stMotorPara.swJD;
  657. Syspara2.stMotorPara.uwTorMaxNm.uwReal = cp_stMotorPara.swTorMax;
  658. }
  659. Syspara2.stBikePara.swDeltPerimeter.swReal = ass_ParaCong.swDeltPerimeter;
  660. if (MC_UpcInfo.stBikeInfo.uwSaveFlg == TRUE)
  661. {
  662. Syspara2.stBikePara.uwWheelPerimeter.uwReal = ass_ParaCong.uwWheelPerimeter;
  663. Syspara2.stBikePara.swDeltPerimeter.swReal = ass_ParaCong.swDeltPerimeter;
  664. Syspara2.stBikePara.uwMechRationMotor.uwReal= ass_ParaCong.uwMechRationMotorEEPROM;
  665. //Syspara2.stBikePara.uwMechRationMotor.uwReal = (UWORD)(((ULONG)ass_ParaCong.uwMechRationMotor*1000)/1024);
  666. Syspara2.stBikePara.uwThrottleMaxSpdKmH.uwReal = ass_ParaCong.uwThrottleMaxSpdKmH;
  667. Syspara2.stBikePara.uwCartSpdKmH.uwReal = ass_ParaCong.uwCartSpdKmH;
  668. Syspara2.stBikePara.uwNmFrontChainring.uwReal = ass_ParaCong.uwNmFrontChainring;
  669. Syspara2.stBikePara.uwNmBackChainring.uwReal = ass_ParaCong.uwNmBackChainring;
  670. Syspara2.stBikePara.uwAssistSelect1.uwReal = ass_ParaCong.uwAssistSelect1;
  671. Syspara2.stBikePara.uwAssistSelect2.uwReal = ass_ParaCong.uwAssistSelect2;
  672. Syspara2.stBikePara.uwLightConfig.uwReal = ass_ParaCong.uwLightConfig;
  673. Syspara2.stBikePara.uwStartMode.uwReal = ass_ParaCong.uwStartMode;
  674. Syspara2.stBikePara.uwAutoPowerOffTime.uwReal = ass_ParaCong.uwAutoPowerOffTime;
  675. }
  676. if (MC_UpcInfo.stMContorlInfo.uwSaveFlg == TRUE)
  677. {
  678. Syspara2.stMControlPara.ParaFirstSetFlg.uwReal = cp_stFlg.ParaFirstSetFlg;
  679. // Syspara2.stMControlPara.SpiOffsetFirstSetFlg.uwReal = cp_stFlg.SpiOffsetFirstSetFlg;
  680. // Syspara2.stMControlPara.uwSPIPosOffsetOrigin.uwReal = spi_stResolverOut.swSpiThetaOffsetOrignPu;
  681. // Syspara2.stMControlPara.uwSPIPosOffsetNow.uwReal = spi_stResolverOut.swSpiThetaOffsetPu;
  682. Syspara2.stMControlPara.uwIPeakMaxA.uwReal = cp_stMotorPara.swIpeakMaxA;
  683. Syspara2.stMControlPara.uwAlamOCurA.uwReal = cp_stControlPara.swAlmOverCurrentVal;
  684. Syspara2.stMControlPara.uwAlamOVolV.uwReal = cp_stControlPara.swAlmOverVolVal1;
  685. Syspara2.stMControlPara.uwAlamUVolV.uwReal = cp_stControlPara.swAlmUnderVolVal1;
  686. Syspara2.stMControlPara.uwAlamOverSpdRpm.uwReal = cp_stControlPara.swAlmOverSpdVal;
  687. Syspara2.stMControlPara.uwAlamOverHeatCe.uwReal = cp_stControlPara.swAlmOverHeatCeVal;
  688. Syspara2.stMControlPara.uwAlamRecHeatCe.uwReal = cp_stControlPara.swAlmRecOHeatVal;
  689. Syspara2.stMControlPara.uwPwrLimitStartCe.uwReal = cp_stControlPara.swAlmPwrLimitStartTempVal;
  690. Syspara2.stMControlPara.uwAlamMotorOverHeatCe.uwReal = cp_stControlPara.swAlmMotorOverHeatCeVal;
  691. Syspara2.stMControlPara.uwAlamMotorRecHeatCe.uwReal = cp_stControlPara.swAlmMotorRecOHeatVal;
  692. Syspara2.stMControlPara.uwPwrLimitMotorStartCe.uwReal = cp_stControlPara.swAlmPwrLimitMotorStartTempVal;
  693. Syspara2.stMControlPara.uwControlFunEN.uwReal=cp_stControlPara.uwControlFunEN;
  694. }
  695. if (MC_UpcInfo.stSensorInfo.uwSaveFlg == TRUE)
  696. {
  697. Syspara2.stSensorPara.uwTorSensorOffsetOrigin.uwReal = torsensor_stTorSensorCof.uwTorqueOffsetOrign;
  698. Syspara2.stSensorPara.uwTorSensorOffsetNow1.uwReal = torsensor_stTorSensorCof.uwTorqueOffsetNow1;
  699. Syspara2.stSensorPara.uwTorSensorOffsetNow2.uwReal = torsensor_stTorSensorCof.uwTorqueOffsetNow2;
  700. Syspara2.stSensorPara.uwTorSensorOffsetNow3.uwReal = torsensor_stTorSensorCof.uwTorqueOffsetNow3;
  701. Syspara2.stSensorPara.uwTorSensorOffsetNow4.uwReal = torsensor_stTorSensorCof.uwTorqueOffsetNow4;
  702. Syspara2.stSensorPara.uwBikeTorMaxNm.uwReal = torsensor_stTorSensorCof.uwMaxSensorTorquePu;
  703. Syspara2.stSensorPara.uwBikeTor1StepRealNm.uwReal = torsensor_stTorSensorCof.uwBikeTorStep1RealNm;
  704. Syspara2.stSensorPara.uwBikeTor1StepADC.uwReal = torsensor_stTorSensorCof.uwBikeTorStep1ADC;
  705. Syspara2.stSensorPara.uwBikeTor2StepRealNm.uwReal = torsensor_stTorSensorCof.uwBikeTorStep2RealNm;
  706. Syspara2.stSensorPara.uwBikeTor2StepADC.uwReal = torsensor_stTorSensorCof.uwBikeTorStep2ADC;
  707. Syspara2.stSensorPara.uwBikeTor3StepRealNm.uwReal = torsensor_stTorSensorCof.uwBikeTorStep3RealNm;
  708. Syspara2.stSensorPara.uwBikeTor3StepADC.uwReal = torsensor_stTorSensorCof.uwBikeTorStep3ADC;
  709. Syspara2.stSensorPara.uwBikeTor4StepRealNm.uwReal = torsensor_stTorSensorCof.uwBikeTorStep4RealNm;
  710. Syspara2.stSensorPara.uwBikeTor4StepADC.uwReal = torsensor_stTorSensorCof.uwBikeTorStep4ADC;
  711. Syspara2.stSensorPara.uwTorque_SensorPulseNm.uwReal = cadence_stFreGetCof.uwTorque_NumbersPulses;
  712. Syspara2.stSensorPara.uwBikeSpdSensorPulseNm.uwReal = bikespeed_stFreGetCof.uwNumbersPulses;
  713. Syspara2.stSensorPara.uwCad_SensorPulseNm.uwReal= cadence_stFreGetCof.uwCad_NumbersPulses;
  714. }
  715. if (MC_UpcInfo.stTestParaInfo.uwSaveFlg == TRUE )
  716. {
  717. memcpy(&Syspara2.flash_stPara.stTestParaInfo.uwTestParaSaveFlg, &MC_UpcInfo.stTestParaInfo.uwTestParaSaveFlg, sizeof(Syspara2.flash_stPara.stTestParaInfo));
  718. }
  719. if (MC_UpcInfo.stAssistInfo.uwSaveFlg == TRUE)
  720. {
  721. Syspara2.stAssistPara.uwStartupGain.uwReal = ass_ParaSet.uwStartupCoef;
  722. Syspara2.stAssistPara.uwStartcruiseGain.uwReal = ass_ParaSet.uwStartupCruiseCoef;
  723. Syspara2.stAssistPara.uwAssistStartNm.uwReal = ass_ParaSet.uwAssistStartNm;
  724. Syspara2.stAssistPara.uwAssistStopNm.uwReal = ass_ParaSet.uwAssistStopNm;
  725. Syspara2.stAssistPara.uwStartUpGainStep.uwReal = ass_ParaSet.uwStartUpGainStep;
  726. Syspara2.stAssistPara.uwStartUpCadNm.uwReal = ass_ParaSet.uwStartUpCadNm;
  727. Syspara2.stAssistPara.uwTorLPFCadNm.uwReal = ass_ParaSet.uwTorLPFCadNm;
  728. Syspara2.stAssistPara.uwSpeedAssistSpdRpm.uwReal = ass_ParaSet.uwSpeedAssistSpdRpm;
  729. Syspara2.stAssistPara.uwSpeedAssistIMaxA.uwReal = ass_ParaSet.uwSpeedAssistIMaxA;
  730. Syspara2.stAssistPara.uwAssistLimitBikeSpdStart.uwReal = ass_ParaSet.uwAssistLimitBikeSpdStart;
  731. Syspara2.stAssistPara.uwAssistLimitBikeSpdStop.uwReal = ass_ParaSet.uwAssistLimitBikeSpdStop;
  732. Syspara2.stAssistPara.uwCadenceAssistWeight.uwReal = ass_ParaSet.uwCadenceWeight;
  733. Syspara2.stAssistPara.uwCadenceAssKp.uwReal = ass_stCadAssSpdCtl.uwPidKp;
  734. Syspara2.stAssistPara.swCadenceVolStep.swReal = ass_stCadAssSpdCtl.swPidLimMax;
  735. Syspara2.stAssistPara.swCadenceVolDecStep.swReal = ass_stCadAssSpdCtl.swPidVolDec;
  736. Syspara2.stAssistPara.swCadenceCurStep.swReal = ass_stCadAssParaPro.swTargetAssCurAcc;
  737. Syspara2.stAssistPara.uwMaxCadRpm.uwReal = ass_stCadAssCoef.uwMaxCadRpm;
  738. Syspara2.stAssistPara.uwReserve2.uwReal = ass_stReservePara.uwReserve2;
  739. Syspara2.stAssistPara.uwReserve3.uwReal = ass_stReservePara.uwReserve3;
  740. Syspara2.stAssistPara.uwReserve4.uwReal = ass_stReservePara.uwReserve4;
  741. }
  742. }
  743. /***************************************************************
  744. Function: mn_voEEHistoryParaUpdate;
  745. Description:software intial
  746. Call by:
  747. Input Variables: N/A
  748. Output/Return Variables: N/A
  749. Subroutine Call: N/A;
  750. Reference: N/A
  751. ****************************************************************/
  752. void mn_voEEHistoryParaUpdate(void)
  753. {
  754. stHistoryPara.uwAssModSelect.uwReal = ass_ParaSet.uwAsssistSelectNum;
  755. stHistoryPara.uwOpenTimes.uwReal = cp_stHistoryPara.uwOpenTimes;
  756. stHistoryPara.uwUsedTimeH.uwReal = (UWORD)(cp_stHistoryPara.ulUsedTime >> 16);
  757. stHistoryPara.uwUsedTimeL.uwReal = (UWORD)cp_stHistoryPara.ulUsedTime;
  758. stHistoryPara.swNTCTempMaxCe.swReal = cp_stHistoryPara.swNTCTempMaxCe;
  759. stHistoryPara.swNTCTempMinCe.swReal = cp_stHistoryPara.swNTCTempMinCe;
  760. stHistoryPara.uwAlamHOcurTimes.uwReal = cp_stHistoryPara.uwAlamHOcurTimes;
  761. stHistoryPara.uwAlamSOcurTimes.uwReal = cp_stHistoryPara.uwAlamSOcurTimes;
  762. stHistoryPara.uwAlamOHeatTimes.uwReal = cp_stHistoryPara.uwAlamOHeatTimes;
  763. stHistoryPara.uwAlamRotorLockTimes.uwReal = cp_stHistoryPara.uwAlamRotorLockTimes;
  764. stHistoryPara.uwAlamPhsLossTimes.uwReal = cp_stHistoryPara.uwAlamPhsLossTimes;
  765. stHistoryPara.uwAlamOVolTimes.uwReal = cp_stHistoryPara.uwAlamOVolTimes;
  766. stHistoryPara.uwAlamUVolTimes.uwReal = cp_stHistoryPara.uwAlamUVolTimes;
  767. stHistoryPara.uwAlamComOTimeTimes.uwReal = cp_stHistoryPara.uwAlamComOTimeTimes;
  768. stHistoryPara.uwG1AvgPwrConsumption.uwReal = cp_stHistoryPara.uwG1AvgPwrConsumption;
  769. stHistoryPara.uwG2AvgPwrConsumption.uwReal = cp_stHistoryPara.uwG2AvgPwrConsumption;
  770. stHistoryPara.uwG3AvgPwrConsumption.uwReal = cp_stHistoryPara.uwG3AvgPwrConsumption;
  771. stHistoryPara.uwG4AvgPwrConsumption.uwReal = cp_stHistoryPara.uwG4AvgPwrConsumption;
  772. stHistoryPara.uwG5AvgPwrConsumption.uwReal = cp_stHistoryPara.uwG5AvgPwrConsumption;
  773. stHistoryPara.uwODOTripH.uwReal = (UWORD)(cp_stHistoryPara.ulODOTrip >> 16);
  774. stHistoryPara.uwODOTripL.uwReal = (UWORD)cp_stHistoryPara.ulODOTrip;
  775. stHistoryPara.uwODOTimeH.uwReal = (UWORD)(cp_stHistoryPara.ulODOTime >> 16);
  776. stHistoryPara.uwODOTimeL.uwReal = (UWORD)cp_stHistoryPara.ulODOTime;
  777. stHistoryPara.uwTripSumH.uwReal = (UWORD)(cp_stHistoryPara.ulTripSum >> 16);
  778. stHistoryPara.uwTripSumL.uwReal = (UWORD)cp_stHistoryPara.ulTripSum;
  779. stHistoryPara.uwTripSumTimeH.uwReal = (UWORD)(cp_stHistoryPara.ulTripSumTime >> 16);
  780. stHistoryPara.uwTripSumTimeL.uwReal = (UWORD)cp_stHistoryPara.ulTripSumTime;
  781. stHistoryPara.uwTorSensorAlamTimes.uwReal = cp_stHistoryPara.uwTorSensorAlamTimes;
  782. stHistoryPara.uwCadSensorAlamTimes.uwReal = cp_stHistoryPara.uwCadSensorAlamTimes;
  783. stHistoryPara.uwBikeSpdSensorAlamTimes.uwReal = cp_stHistoryPara.uwBikeSpdSensorAlamTimes;
  784. stHistoryPara.uwPosSensorAlamTimes.uwReal = cp_stHistoryPara.uwPosSensorAlamTimes;
  785. stHistoryPara.uwRealODOTripH.uwReal = (UWORD)(cp_stHistoryPara.ulRealODOTrip >> 16);
  786. stHistoryPara.uwRealODOTripL.uwReal = (UWORD)cp_stHistoryPara.ulRealODOTrip;
  787. stHistoryPara.uwRealODOTimeH.uwReal = (UWORD)(cp_stHistoryPara.ulRealODOTime >> 16);
  788. stHistoryPara.uwRealODOTimeL.uwReal = (UWORD)cp_stHistoryPara.ulRealODOTime;
  789. if (MC_UpcInfo.stRideParaInfo.uwSaveFlg == TRUE)
  790. {
  791. Syspara2.stRidePara.ucAssistRatioGain1.ucReal = ass_stCalCoef.ucAssistRatioGain[0];
  792. Syspara2.stRidePara.ucAssistRatioGain2.ucReal = ass_stCalCoef.ucAssistRatioGain[1];
  793. Syspara2.stRidePara.ucAssistRatioGain3.ucReal = ass_stCalCoef.ucAssistRatioGain[2];
  794. Syspara2.stRidePara.ucAssistRatioGain4.ucReal = ass_stCalCoef.ucAssistRatioGain[3];
  795. Syspara2.stRidePara.ucAssistRatioGain5.ucReal = ass_stCalCoef.ucAssistRatioGain[4];
  796. Syspara2.stRidePara.ucAssistAccelerationGain1.ucReal = ass_stCalCoef.ucAssistAccelerationGain[0];
  797. Syspara2.stRidePara.ucAssistAccelerationGain2.ucReal = ass_stCalCoef.ucAssistAccelerationGain[1];
  798. Syspara2.stRidePara.ucAssistAccelerationGain3.ucReal = ass_stCalCoef.ucAssistAccelerationGain[2];
  799. Syspara2.stRidePara.ucAssistAccelerationGain4.ucReal = ass_stCalCoef.ucAssistAccelerationGain[3];
  800. Syspara2.stRidePara.ucAssistAccelerationGain5.ucReal = ass_stCalCoef.ucAssistAccelerationGain[4];
  801. Syspara2.stRidePara.ucMaxCurrentGain1.ucReal = ass_stCalCoef.ucMaxCurrentGain[0];
  802. Syspara2.stRidePara.ucMaxCurrentGain2.ucReal = ass_stCalCoef.ucMaxCurrentGain[1];
  803. Syspara2.stRidePara.ucMaxCurrentGain3.ucReal = ass_stCalCoef.ucMaxCurrentGain[2];
  804. Syspara2.stRidePara.ucMaxCurrentGain4.ucReal = ass_stCalCoef.ucMaxCurrentGain[3];
  805. Syspara2.stRidePara.ucMaxCurrentGain5.ucReal = ass_stCalCoef.ucMaxCurrentGain[4];
  806. Syspara2.stRidePara.ucMaxTorqueGain1.ucReal = ass_stCalCoef.ucMaxTorqueGain[0];
  807. Syspara2.stRidePara.ucMaxTorqueGain2.ucReal = ass_stCalCoef.ucMaxTorqueGain[1];
  808. Syspara2.stRidePara.ucMaxTorqueGain3.ucReal = ass_stCalCoef.ucMaxTorqueGain[2];
  809. Syspara2.stRidePara.ucMaxTorqueGain4.ucReal = ass_stCalCoef.ucMaxTorqueGain[3];
  810. Syspara2.stRidePara.ucMaxTorqueGain5.ucReal = ass_stCalCoef.ucMaxTorqueGain[4];
  811. }
  812. if (MC_UpcInfo.stBikeInfo2.uwSaveFlg == TRUE)
  813. {
  814. Syspara2.stBikePara2.uwNoneOBCEnable.uwReal = (UWORD)ass_ParaCong.uwNoneOBCEnable;
  815. Syspara2.stBikePara2.uwRearLightCycle.uwReal = (UWORD)ass_ParaCong.uwRearLightCycle;
  816. Syspara2.stBikePara2.uwRearLightDuty.uwReal = (UWORD)ass_ParaCong.uwRearLightDuty;
  817. Syspara2.stBikePara2.swDeltaBikeSpeedLimit.swReal = (SWORD)ass_ParaCong.swDeltaBikeSpeedLimit;
  818. }
  819. }
  820. /***************************************************************
  821. Function: mn_voSoftwareInit;
  822. Description:software intial
  823. Call by:
  824. Input Variables: N/A
  825. Output/Return Variables: N/A
  826. Subroutine Call: N/A;
  827. Reference: N/A
  828. ****************************************************************/
  829. void mn_voSoftwareInit(void)
  830. {
  831. /* System coefficient calculate */
  832. cof_voSysInit();
  833. /* Event parameter init */
  834. event_voInit();
  835. /* Motor parameter init */
  836. // mn_voMtParInit();
  837. /* PowerInit */
  838. power_voPowerInit();
  839. /* Control Parameters init */
  840. mn_voMcParInit();
  841. /*cmd handle Initial */
  842. cmd_voCmdInit();
  843. /* FSM init */
  844. FSM_voInit();
  845. RUN_FSM_voInit();
  846. Switch_speed_FSMInit();
  847. /* TempInit */
  848. TempInit();
  849. /* BikeSpeedInit */
  850. bikespeed_voBikeSpeedInit();
  851. /* CadenceInit */
  852. cadence_voCadenceInit();
  853. Can_voInitMC_Run();
  854. mn_voControlPareSet();
  855. /* Alarm init */
  856. alm_voCoef();
  857. /* ADC init */
  858. adc_voSampleInit();
  859. adc_voSampleCoef(&adc_stCof);
  860. /* UART init */
  861. //uart_voMonitorInit();
  862. //profiler_init();
  863. }
  864. /************************************************************************
  865. Function: void mn_voMtParInit(void)
  866. Description:
  867. Call by:
  868. Input Variables:
  869. Output/Return Variables:
  870. Subroutine Call:
  871. Reference:
  872. ************************************************************************/
  873. void mn_voMtParInit(void)
  874. {
  875. mn_swIdTurn1Pu = ((SLONG)M_LD_TURN1_ID_AP << 14) / cof_uwIbAp; // Q14, saturation current of Ld
  876. mn_slLdTurn1Pu = ((SLONG)M_LD_TURN1_LD_MH << 10) / cof_uwLbHm; // Q10, saturation inductance of Ld
  877. mn_swIdTurn2Pu = ((SLONG)M_LD_TURN2_ID_AP << 14) / cof_uwIbAp; // Q14, saturation current of Ld
  878. mn_slLdTurn2Pu = ((SLONG)M_LD_TURN2_LD_MH << 10) / cof_uwLbHm; // Q10, saturation inductance of Ld
  879. if (mn_swIdTurn1Pu == mn_swIdTurn2Pu)
  880. {
  881. mn_swKLdSat = 0;
  882. }
  883. else
  884. {
  885. mn_swKLdSat = ((mn_slLdTurn2Pu - mn_slLdTurn1Pu) << 10) / (mn_swIdTurn2Pu - mn_swIdTurn1Pu); // Q10
  886. }
  887. mn_swIqTurn1Pu = ((SLONG)M_LQ_TURN1_IQ_AP << 14) / cof_uwIbAp; // Q14, saturation current of Lq
  888. mn_slLqTurn1Pu = ((SLONG)M_LQ_TURN1_LQ_MH << 10) / cof_uwLbHm; // Q10, saturation inductance of Lq
  889. mn_swIqTurn2Pu = ((SLONG)M_LQ_TURN2_IQ_AP << 14) / cof_uwIbAp; // Q14, saturation current of Lq
  890. mn_slLqTurn2Pu = ((SLONG)M_LQ_TURN2_LQ_MH << 10) / cof_uwLbHm; // Q10, saturation inductance of Lq
  891. if (mn_swIqTurn1Pu == mn_swIqTurn2Pu)
  892. {
  893. mn_swKLqSat = 0;
  894. }
  895. else
  896. {
  897. mn_swKLqSat = ((mn_slLqTurn2Pu - mn_slLqTurn1Pu) << 10) / (mn_swIqTurn2Pu - mn_swIqTurn1Pu); // Q10
  898. }
  899. }
  900. /************************************************************************
  901. Function: void mn_voMcParInit(void)
  902. Description:
  903. Call by:
  904. Input Variables:
  905. Output/Return Variables:
  906. Subroutine Call:
  907. Reference:
  908. ************************************************************************/
  909. void mn_voMcParInit(void)
  910. {
  911. align_voInit();
  912. // Align Parameters
  913. mn_uwAlignCurPu = CUR_AP2PU(cp_stControlPara.swAlignCurAp); // Q14
  914. mn_ulAlignRampTbcCt = TBC_MS2CT(cp_stControlPara.swAlignRampTMms);
  915. mn_ulAlignHoldTbcCt = TBC_MS2CT(cp_stControlPara.swAlignHoldTMms);
  916. if (mn_ulAlignRampTbcCt == 0)
  917. {
  918. mn_ulAlignCurIncPerTbcPu = 1;
  919. }
  920. else
  921. {
  922. mn_ulAlignCurIncPerTbcPu = ((ULONG)mn_uwAlignCurPu << 15) / mn_ulAlignRampTbcCt; // Q29
  923. if (mn_ulAlignCurIncPerTbcPu == 0)
  924. {
  925. mn_ulAlignCurIncPerTbcPu = 1;
  926. }
  927. }
  928. mn_slAlignAngInit = ANG_DEG2PU(cp_stControlPara.swAlignAngInitDeg);
  929. // Open Drag Parameters
  930. mn_uwDragCurPu = CUR_AP2PU(cp_stControlPara.swDragCurAp); // Q14
  931. mn_uwDragSpdPu = SPD_HZ2PU(cp_stControlPara.swDragSpdHz); // Q15
  932. mn_ulDragSpdRampTbcCt = TBC_MS2CT(cp_stControlPara.swDragSpdRampTMms);
  933. if (mn_ulDragSpdRampTbcCt == 0)
  934. {
  935. mn_ulDragSpdIncPerTbcPu = 1;
  936. }
  937. else
  938. {
  939. mn_ulDragSpdIncPerTbcPu = ((ULONG)mn_uwDragSpdPu << 14) / mn_ulDragSpdRampTbcCt; // Q29
  940. if (mn_ulDragSpdIncPerTbcPu == 0)
  941. {
  942. mn_ulDragSpdIncPerTbcPu = 1;
  943. }
  944. }
  945. // Open to Close Parameters
  946. mn_ulOpen2ClzCurRampTbcCt = TBC_MS2CT(cp_stControlPara.swOpen2ClzRampTMms);
  947. if (mn_ulOpen2ClzCurRampTbcCt == 0)
  948. {
  949. mn_ulOpen2ClzCurIncPerTbcPu = 1;
  950. }
  951. else
  952. {
  953. mn_ulOpen2ClzCurIncPerTbcPu = (ULONG)mn_uwDragCurPu / mn_ulOpen2ClzCurRampTbcCt;
  954. if (mn_ulOpen2ClzCurIncPerTbcPu == 0)
  955. {
  956. mn_ulOpen2ClzCurIncPerTbcPu = 1;
  957. }
  958. }
  959. // Stop Parameters
  960. mn_uwStopSpdRefPu = SPD_RPM2PU(cp_stControlPara.swStopSpdRefRpm);
  961. }
  962. void LED_ResDispaly(void)
  963. {
  964. uint32_t icnt;
  965. for(icnt=0;icnt<3;icnt++)
  966. {
  967. IO_FORWARDLED_ON();
  968. delay_125us(2000);
  969. IO_FORWARDLED_OFF();//关前灯
  970. delay_125us(2000);
  971. }
  972. }
  973. /*************************************************************************
  974. Copyright (c) 2018 Welling Motor Technology(Shanghai) Co. Ltd.
  975. All rights reserved.
  976. *************************************************************************/
  977. #ifdef _MAIN_C_
  978. #undef _MAIN_C_
  979. #endif
  980. /*************************************************************************
  981. End of this File (EOF)!
  982. Do not put anything after this part!
  983. *************************************************************************/