AssistCurve.h 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511
  1. /**
  2. * @file AssistCurve.c
  3. * @author Zhang, Kai(zhangkai71@midea.com)
  4. * @brief
  5. * @version 0.1
  6. * @date 2021-11-15
  7. *
  8. * @copyright Copyright (c) 2021
  9. *
  10. */
  11. #ifndef ASSISTCURVE_H
  12. #define ASSISTCURVE_H
  13. #include "typedefine.h"
  14. #include "macroequ.h"
  15. #include "asr.h"
  16. #include "mathtool.h"
  17. #include "user.h"
  18. #include "syspar.h"
  19. //#include "api.h"
  20. #include "board_config.h"
  21. /****************************************
  22. *
  23. * Definitions & Macros
  24. *
  25. ****************************************/
  26. ///////////////////////////////////////////////////////////////////
  27. #define VolLimCurrLoopErr _IQ14((2.0*M_IS_PEAK_MAX_AP/7500.0)/60.0) /* 电压与电限幅流环指令偏差 */
  28. #define VolLimCtrKp (2250L*M_FLUX_WB/4462L) /* Q14电压限幅控制器比例系数 */
  29. #define VolLimCtrKi (1920L*M_FLUX_WB/4462L) /* Q20电压限幅控制器积分系数 */
  30. #define VolLimCtrKiStep (VolLimCtrKi/120) /* Q20电压限幅控制器积分系数 */
  31. #define PreStartCurr _IQ14(5.0/60.0) /* 预启动电流 */
  32. #define RefCurrErrLim _IQ14(60.0/60.0) /* 电流误差限幅 */
  33. //#define GpioCadVolt_InputSta() GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_10)
  34. #define TIMEUNIT 1 // run time unit 1ms
  35. #define TIME_MS2CNT(X) ((ULONG)(X) / TIMEUNIT) // X unit:ms
  36. #define Q12_1 4096 // Q12(1)=4096
  37. #define Q14_1 16384 // Q14(1)=16384
  38. #define TORQUE2PU 1165 // Q20 1<<20/TORQUEBASE = (1<<20)/900
  39. #define BIKE_SPEED_IQLIMIT_THRESHOLD1 (ASS_SPD_LIMIT>>4) // Km/h
  40. #define BIKE_SPEED_IQLIMIT_THRESHOLD2 (BIKE_SPEED_IQLIMIT_THRESHOLD1 + 2) // Km/h
  41. //档位限速 BIKE_SPDLIMIT_EN
  42. #if(BIKE_TORQUESPDLIMIT_EN!=0)
  43. #define BIKE_SPEED_IQLIMIT_Gear1_S (BIKE_SPEED_IQLIMIT_THRESHOLD1*12/25) // Km/h
  44. #define BIKE_SPEED_IQLIMIT_Gear1_E (BIKE_SPEED_IQLIMIT_Gear1_S + 2) // Km/h
  45. #define BIKE_SPEED_IQLIMIT_Gear2_S (BIKE_SPEED_IQLIMIT_THRESHOLD1*15/25) // Km/h
  46. #define BIKE_SPEED_IQLIMIT_Gear2_E (BIKE_SPEED_IQLIMIT_Gear2_S + 2) // Km/h
  47. #define BIKE_SPEED_IQLIMIT_Gear3_S (BIKE_SPEED_IQLIMIT_THRESHOLD1*18/25) // Km/h
  48. #define BIKE_SPEED_IQLIMIT_Gear3_E (BIKE_SPEED_IQLIMIT_Gear3_S + 2) // Km/h
  49. #define BIKE_SPEED_IQLIMIT_Gear4_S (BIKE_SPEED_IQLIMIT_THRESHOLD1*21/25) // Km/h
  50. #define BIKE_SPEED_IQLIMIT_Gear4_E (BIKE_SPEED_IQLIMIT_Gear4_S + 2) // Km/h
  51. #define BIKE_SPEED_IQLIMIT_Gear5_S (BIKE_SPEED_IQLIMIT_THRESHOLD1 ) // Km/h
  52. #define BIKE_SPEED_IQLIMIT_Gear5_E (BIKE_SPEED_IQLIMIT_Gear5_S + 2) // Km/h
  53. #endif
  54. //////////////////////////////// just for Assist Module It may has bug when u used in other Module//////////////
  55. #define BIKE_NONEOBCEBNABLE 0x00 //0xAAAA-支持,其他不支持
  56. #define BIKE_REARLIGHTCYCLE 10 //低亮尾灯周期
  57. #define BIKE_REARLIGHTDUTY 5 //低亮尾灯占空比
  58. #define BIKE_DELTASPEEDLIMITION 0 //只能是负数
  59. #define GEAR_NUM 6 // number of gear
  60. #define BIKE_START_MODE 2 // 1 Soft 2 Normal 3 Strong
  61. #define ASSISTMOD_SELECT_DEFAULT 0x0000
  62. #define ASSISTMOD_SELECT_MODE1 0x0155
  63. #define ASSISTMOD_SELECT_MODE2 0x02AA
  64. #define TORQUE_START_THRESHOLD 80 // 0.1Nm
  65. #define TORQUE_STOP_THRESHOLD 30 // 0.1Nm
  66. #define BIKE_SPD_MOTOR_CURRENT_MAX 500 // 0.01A
  67. #define BIKE_SPD_MOTOR_CONSTANT_COMMAND 0 // RPM
  68. #define ASS_LIM_DEFAULT \
  69. { \
  70. {0, 716, 870, 1024, 1024, 1024}, 0, 0, 0 \
  71. } // Q10 percentage 0 70% 85% 100% 100% 100%
  72. #define ASS_LINER_TORQUE_DEFAULT \
  73. { \
  74. 1638, 1843, 2457, 3276, 1843 \
  75. } // Q12
  76. #if 1
  77. #define TORQUR_ASSIST_BASE 4200 // 250W Maximum Current
  78. #define TORQUR_CP(x) ((ULONG)(x)*M_IS_PEAK_MAX_AP /TORQUR_ASSIST_BASE)
  79. #define TORQUE_ASSIST_DEFAULT \
  80. { \
  81. TORQUR_CP(10), TORQUR_CP(40), TORQUR_CP(150), 100,\
  82. TORQUR_CP(20), TORQUR_CP(60), TORQUR_CP(250), 100,\
  83. TORQUR_CP(30), TORQUR_CP(80), TORQUR_CP(350), 100, \
  84. TORQUR_CP(40), TORQUR_CP(100), TORQUR_CP(450), 100,\
  85. TORQUR_CP(10), TORQUR_CP(60), TORQUR_CP(400), 100,\
  86. 0, 0, 0, 0,\
  87. 0, 0, 0, 0,\
  88. 0, 0, 0, 0,\
  89. 0, 0, 0, 0,\
  90. 0, 0, 0, 0,\
  91. 0, 0, 0, 0,\
  92. 0, 0, 0, 0,\
  93. 0, 0, 0, 0,\
  94. 0, 0, 0, 0,\
  95. 0, 0, 0, 0,\
  96. }// Y1, Y2, Y3, Z 单位:0.1 Nm
  97. #define ASS_CURVE_X1 30 // 单位:0.1Nm
  98. #define ASS_CURVE_X2 100 // 单位:0.1Nm
  99. #define ASS_CURVE_X3 300 // 单位:0.1Nm
  100. #endif
  101. // #define TORQUE_ASSIST_DEFAULT \
  102. // { \
  103. // 0, 0, 1228, 45,\
  104. // 0, 0, 1433, 45,\
  105. // 0, 0, 1638, 45, \
  106. // 0, 3686, 409, 136,\
  107. // 0, 4976, 409, 136,\
  108. // 0, 6635, 409, 136,\
  109. // 3317, 5529, 819, 137,\
  110. // 1990, 7372, 819, 137, \
  111. // 2654, 8847, 819, 137,\
  112. // 9953, 7372, 1228, 137,\
  113. // 13271, 8847, 1228, 137,\
  114. // 16588, 9584, 1228, 137, \
  115. // 9953, 7372, 1228, -227,\
  116. // 13271, 8847, 1228, -227,\
  117. // 16588, 9584, 1228, -227, \
  118. // }
  119. #define CADENCE_ASSIST_DEFAULT \
  120. { \
  121. 0, 0, 45000, 0, \
  122. 0, 0, 45000, 0, \
  123. 0, 0, 45000, 0, \
  124. 0, 0, 45000, 0, \
  125. 0, 0, 45000, 0 \
  126. } //35000改为45000
  127. /***************************************
  128. *
  129. * Type Definations
  130. *
  131. ***************************************/
  132. /**
  133. * @brief Assist Curve
  134. * Y = a*X^3 + b*X^2 + c*x +d
  135. */
  136. typedef struct
  137. {
  138. SLONG slY1; // 助力曲线点位坐标(X1,Y1)输入X1输出Y1 配置值 单位:0.1Nm
  139. SLONG slY2; // 助力曲线点位坐标(X2,Y2)输入X1输出Y2 配置值 单位:0.1Nm
  140. SLONG slY3; // 助力曲线点位坐标(X3,Y3)输入X1输出Y3 配置值 单位:0.1Nm
  141. SLONG slZ; // 线性段与二次曲线切换点, 配置值 单位:0.1Nm
  142. } ASS_CURVE_PREMETER;
  143. /**
  144. * @brief Assist Curve coefficient
  145. * Y = k1*x+b x< Z
  146. * Y =k1*x+k2*(x-Z)^2+b x>= Z
  147. */
  148. typedef struct
  149. {
  150. SWORD swk1; // Q10 k1 =(y2-y1)/(x2-x1)
  151. SWORD swb; // Q0 b = y2-k2*x1
  152. SWORD swk2; // Q20 k2 = (y3-k1*x3-b)/(x3-Z)^2
  153. SWORD swZ; // Q14
  154. } ASS_CURVE_COEF;
  155. /**
  156. * @brief Assist Curve compenssation coefficient
  157. *
  158. */
  159. typedef struct
  160. {
  161. SWORD swKLow; // Q12
  162. SWORD swKHigh; // Q12
  163. } ASS_CURVE_COMP_COEF;
  164. /**
  165. * @brief Polynomial coefficient
  166. * Y = a*X^3 + b*X^2 + c*x +d
  167. *
  168. */
  169. typedef struct
  170. {
  171. SLONG a; // Q12
  172. SLONG b; // Q12
  173. SLONG c; // Q12
  174. SLONG d; // Q12
  175. } POLY_COEF;
  176. /**
  177. * @brief Polynomial coefficient
  178. * Y = z*(x-h)^2 + k
  179. *
  180. */
  181. typedef struct
  182. {
  183. SLONG z; // Q12
  184. SLONG h; // Q12
  185. SLONG k; // Q12
  186. } ORIG_COEF;
  187. /**
  188. * @brief Type of Assist FSM
  189. *
  190. */
  191. typedef enum
  192. {
  193. StopAssit = 0,
  194. PreStart = 1,
  195. TorqueAssit = 2,
  196. PreStop = 3
  197. } ASS_FSM_STATUS;
  198. /**
  199. * @brief AssistCurve Para Configure of Bike
  200. *
  201. */
  202. typedef struct
  203. {
  204. // Bike info
  205. UWORD uwWheelPerimeter; // Q0 0.1cm
  206. UWORD uwMechRationMotor;
  207. UWORD uwThrottleMaxSpdKmH;
  208. UWORD uwCartSpdKmH;
  209. UWORD uwNmFrontChainring;
  210. UWORD uwNmBackChainring;
  211. UWORD uwAssistSelect1;
  212. UWORD uwAssistSelect2;
  213. UWORD uwLightConfig;
  214. SWORD swDeltPerimeter;
  215. UWORD uwStartMode;
  216. UWORD uwAutoPowerOffTime;
  217. UWORD uwThrottleSmooth;
  218. UWORD uwNoneOBCEnable;
  219. UWORD uwRearLightCycle;
  220. UWORD uwRearLightDuty;
  221. SWORD swDeltaBikeSpeedLimit;
  222. UWORD uwCadPulsePerCirc;
  223. UWORD uwBikeAssTorMaxPu;
  224. // Drive info
  225. UWORD uwMotorPoles;
  226. UWORD uwCofCurMaxPu; // Q14,allowed max Current
  227. UWORD uwCofTorMaxPu; // Q14,allowed max Torque
  228. UWORD uwMechRationMotorEEPROM;
  229. } ASS_PARA_CONFIGURE;
  230. /**
  231. * @brief AssistCurve Para Set From extern
  232. *
  233. */
  234. typedef struct
  235. {
  236. UWORD uwStartupCoef; // Q12 (do not use)
  237. UWORD uwStartupCruiseCoef; // (do not use)
  238. UWORD uwAssistStartNm;
  239. UWORD uwAssistStopNm;
  240. UWORD uwStartUpGainStep;
  241. UWORD uwStartUpCadNm;
  242. UWORD uwTorLPFCadNm;
  243. UWORD uwSpeedAssistSpdRpm;
  244. UWORD uwSpeedAssistIMaxA;
  245. UWORD uwAssistLimitBikeSpdStart;
  246. UWORD uwAssistLimitBikeSpdStop;
  247. UWORD uwCadenceWeight; // Q12 0-4094 Cadence sensor assist weight of the whole assist current��the torque weight = 4096 - uwTorWeight
  248. UWORD uwTorWeight; // Q12 0-4094
  249. UWORD uwTorAssAjstGain; // Q12 0-4094
  250. UWORD uwCadenceAssAjstGain; // Q12 0-4094
  251. UWORD uwAsssistSelectNum;
  252. UWORD uwSpdRegion[3]; // Q15 MOTOR SPEED
  253. UWORD uwSpdRegionGain[3]; // Q12 0-4094
  254. SWORD swUqLimitKi; //Q20 Uq Limit Calcute Coefficient
  255. } ASS_PARA_SET;
  256. /**
  257. * @brief AssistCurve persentage input
  258. *
  259. */
  260. typedef struct
  261. {
  262. BOOL StartAssistEnble; //允许助力启动标志
  263. BOOL blStopAssistEnble; //允许助力启动标志
  264. UWORD uwGearSt; // Assist Gear
  265. SWORD swDirection; // Motor direction
  266. UWORD uwtorque;
  267. UWORD uwtorquelpf;
  268. UWORD uwtorquePer; // Q15, Torque sensor output persentage Tmax = 80Nm
  269. UWORD uwcadancePer; // Q15, Cadance output persentage Fmax = 5Hz
  270. UWORD uwcadance; // Q20, Cadance frequency
  271. UWORD uwcadancelast; // Q20, last step Cadance frequency
  272. UWORD uwcadanceFWCnt; // Cadance pulse count number
  273. UWORD uwbikespeed; // Q20, bikespeed hz
  274. UWORD uwbikespeedCal; // Q20, bikespeed hz
  275. UWORD uwSpdFbkAbsPu; // Q15, bikespeed hz
  276. SWORD swSpdFbkPu; // Q15, motor speed base 1400hz
  277. UWORD uwBaseSpdrpm;
  278. SWORD swFlxIqLimit; // Q14
  279. SWORD swPwrIqLimit; // Q14
  280. UWORD SOCValue;
  281. SWORD swCurFdbPu; //Q14
  282. SWORD swCurRefPu;
  283. UWORD uwStartRunPulse;//启动脉冲个数计数
  284. UWORD uwcadHighStopCnt;//踏频为0时,开始计数值
  285. UWORD uwcadLowStopCnt;//踏频为0时,开始计数值
  286. } ASS_PER_IN;
  287. #define TORQUE_CAL_IN_DEFAULT \
  288. { \
  289. FALSE,FALSE,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \
  290. }
  291. typedef struct
  292. {
  293. POLY_COEF uwTorqueAssGain[GEAR_NUM];
  294. POLY_COEF uwCadencAsseGain[GEAR_NUM];
  295. UBYTE ucAssistRatioGain[5];
  296. UBYTE ucAssistAccelerationGain[5];
  297. UBYTE ucMaxCurrentGain[5];
  298. UBYTE ucMaxTorqueGain[5];
  299. ASS_CURVE_PREMETER slAssCurPre[GEAR_NUM-1];
  300. ASS_CURVE_COEF swAssCurCoef[GEAR_NUM-1];
  301. ASS_CURVE_COMP_COEF swAssCompCoef;
  302. UWORD uwAssCurvGain;
  303. UWORD uwAssThreshold;
  304. UWORD uwAssStopThreshold;
  305. SWORD swSmoothGain; // Q12
  306. SWORD swSmoothStopGain; /* 停机电流系数 */
  307. UWORD uwStartUpGainAddStep; // Q12
  308. UWORD uwStartUpTimeCadenceCnt;
  309. SWORD swTorqFilterGain; // Q14 Torque filter change from lpf to move average filter
  310. SWORD swBikeSpeedGain;
  311. UWORD uwCurrentMaxPu;
  312. SWORD swCurrentmax_torAssPu;
  313. SWORD swCurrentmax_cadAssPu;
  314. UWORD uwAssistCurveGain; //基于250W助力曲线,根据电机最大电流调整助力曲线
  315. } ASS_PER_COEF;
  316. typedef struct
  317. {
  318. BOOL blAssistflag; /* 力矩助力输出标志 */
  319. UWORD swTorAssistSum1; /* Q14 BASE 90N 总助力力矩 */
  320. SWORD swTorAss2CurrentTemp; /* Q14 BASE 60A 力矩助力指令电流绝对值 */
  321. SWORD swCadAss2CurrentTemp; /* Q14 BASE 60A 踏频助力指令电流绝对值 */
  322. SWORD swTorRefTarget; /* Q14 BASE 60A 总助力指令电流绝对值 */
  323. SWORD swTorRefEnd; /* Q14 BASE 60A 总助力指令电流带方向 */
  324. SWORD swTorAssistCurrentTemp; /* Q14 BASE 60A 总助力指令电流-状态机处理 */
  325. SWORD swTorAssistCurrent; /* Q14 BASE 60A 总助力指令电流-误差限幅处理 */
  326. SWORD swBikeSpd2MotSpd; /* Q15 BASE 1400HZ 当前车速对应电机转速 */
  327. UWORD uwPreStartCnt; /* 预启动计数,单位1ms */
  328. UWORD uwPreStartCntMax; /* 预启动计数最大值,由起动时刻车速决定 */
  329. SWORD swUqLimStep; /* Q22 电压限幅积分步进量(1ms周期) */
  330. SLONG slUqLimSum; /* Q22 电压限幅积分量 */
  331. SWORD swUqLimInit; /* Q14 电压限幅初值 */
  332. SWORD swVoltLimitPu; /* Q14 电压限幅输出 */
  333. } ASS_PER_OUT;
  334. /**
  335. * @brief AssistCurve current limit input
  336. *
  337. */
  338. typedef struct
  339. {
  340. UWORD uwIqlimit; // Q14, Iq limit
  341. } ASS_CURLIM_OUT;
  342. /**
  343. * @brief AssistCurve current limit input
  344. *
  345. */
  346. typedef struct
  347. {
  348. UWORD uwLimitGain[GEAR_NUM];
  349. UWORD uwBikeSpdThresHold1; // Q15 the start bike speed to limit iqref
  350. UWORD uwBikeSpdThresHold2; // Q15 the end bike speed to limit iqref
  351. ULONG ulBikeSpdDeltInv; // Q14
  352. } ASS_CURLIM_COEF;
  353. typedef struct
  354. {
  355. UWORD uwLimitdSpeed_S[GEAR_NUM];
  356. UWORD uwLimitdSpeed_E[GEAR_NUM];
  357. ULONG ulBikeSpdGearDeltInv[GEAR_NUM]; // Q14
  358. UWORD uwAssistLimitSpdStart[GEAR_NUM];
  359. UWORD uwAssistLimitSpdStop[GEAR_NUM];
  360. } ASS_SpedLinit_COEF;
  361. typedef struct
  362. {
  363. SWORD value;
  364. UWORD length; // 6: 2^6 value to average
  365. SLONG sum;
  366. SLONG AverValue;
  367. SWORD *buffer;
  368. UWORD index;
  369. BOOL blSecFlag;
  370. } MAF_IN;
  371. typedef struct
  372. {
  373. UWORD uwMotprPolePairs;
  374. UWORD uwMotorFluxWb;
  375. UWORD uwInvMotorBikeRatio;
  376. SLONG swCalCoefINV;
  377. } TOR2CURRENT_CAL_COEF;
  378. typedef struct
  379. {
  380. UWORD uwIqLimitInitAbs;
  381. UWORD uwIqLimitStartSoc; // IqLimit
  382. UWORD uwIqLimitEndSoc;
  383. SWORD swIqLImitK;
  384. UWORD uwIqLimitStartIdc;
  385. UWORD uwIqLimitEndIdc;
  386. SWORD swIqLImitIdcK;
  387. } ASS_LIMIT_ACCORDING_VOL_COF;
  388. typedef struct
  389. {
  390. UWORD uwIqLimitAbs; // IqLimit
  391. UWORD uwIdcLimIqAbs;
  392. } ASS_LIMIT_ACCORDING_VOL_OUT;
  393. typedef struct
  394. {
  395. UWORD uwReserve1; //助力模块备用EE参数1
  396. UWORD uwReserve2; //助力模块备用EE参数2
  397. UWORD uwReserve3; //助力模块备用EE参数3
  398. UWORD uwReserve4; //助力模块备用EE参数4
  399. } ASS_RESERVE_PARA;
  400. /****************************************
  401. *
  402. * Exported variable
  403. *
  404. ****************************************/
  405. extern LPF_OUT ass_pvt_stCurLpf;
  406. extern ASS_LIMIT_ACCORDING_VOL_OUT ass_CurLimitCalBMSOut;
  407. extern ASS_LIMIT_ACCORDING_VOL_COF ass_CurLimCalBMSCoef;
  408. extern ASS_FSM_STATUS Ass_FSM;
  409. extern ASS_PER_COEF ass_stCalCoef;
  410. extern ASS_PER_OUT ass_CalOut;
  411. extern SWORD Assist_torqueper;
  412. extern ASS_PARA_CONFIGURE ass_ParaCong;
  413. extern ASS_PARA_SET ass_ParaSet;
  414. extern ASS_PER_IN ass_CalIn;
  415. extern ASS_PER_COEF ass_CalCoef;
  416. extern ASS_CURLIM_OUT ass_CurLimOut;
  417. extern ASS_CURLIM_COEF ass_CurLimCoef;
  418. extern SWORD MAF_buffer[64];
  419. extern MAF_IN maf_torque;
  420. extern ASS_RESERVE_PARA ass_stReservePara;
  421. /************************************************************************
  422. Ram Allocation
  423. *************************************************************************/
  424. /***************************************
  425. *
  426. * Function Definations
  427. *
  428. ***************************************/
  429. /**
  430. * @brief Assistant force curve
  431. *
  432. * @param in
  433. * @return UWORD
  434. */
  435. void AssitEEInit(void);
  436. void AssitCoefInit(void);
  437. void Assist(void);
  438. void MoveAverageFilter(MAF_IN *in);
  439. void MoveAverageFilterClear(MAF_IN *in);
  440. void AssistCurveCoef(ASS_CURVE_COMP_COEF *comp);
  441. SLONG AssistCurveCal(ASS_CURVE_COEF *coef, SWORD *value);
  442. void ass_voTorqAssistInput(void);
  443. void AssistCurrentLimitAccordingBMS(UWORD uwSOCvalue);
  444. void AssCurLimAccordIdc(UWORD uwIdcPu);
  445. void Gear_LimitSpd(UWORD Gear);
  446. /**
  447. * @brief 选择相应档位曲线
  448. *
  449. */
  450. void AssistCurveRatio(void);
  451. #endif