|
@@ -27,9 +27,12 @@ extern "C" {
|
|
|
#define CURSWITCH 1// 开关电流斜坡
|
|
|
|
|
|
#define MOTORSPEEDLIMIT_ENABLE 0 // 0-disable,1-enable
|
|
|
-
|
|
|
+
|
|
|
+#define CURVE_NUM 10 // number of gear
|
|
|
#define GEAR_NUM 6 // number of gear
|
|
|
#define CADENCE_PULSES_PER_CIRC 64
|
|
|
+
|
|
|
+#define TORQUE2PU 1165 // Q20 1<<20/TORQUEBASE = (1<<20)/900
|
|
|
|
|
|
#define BIKE_WHEEL_PERIMETER 219 // CM
|
|
|
#define BIKE_MECH_RATION 35
|
|
@@ -133,6 +136,30 @@ extern "C" {
|
|
|
0, 0, 10000, 0, 0, 0, 10000, 0, 0, 0, 10000, 0, 0, 0, 10000, 0, 0, 0, 10000, 0 \
|
|
|
}
|
|
|
|
|
|
+#define TORQUR_ASSIST_BASE M_IS_PEAK_MAX_AP //5500 // Maximum Current
|
|
|
+#define TORQUR_CP(x) ((ULONG)(x)*M_IS_PEAK_MAX_AP /TORQUR_ASSIST_BASE)
|
|
|
+#define TORQUE_ASSIST_DEFAULT2 \
|
|
|
+ { \
|
|
|
+ TORQUR_CP(10), TORQUR_CP(50), TORQUR_CP(200), 100,\
|
|
|
+ TORQUR_CP(30), TORQUR_CP(80), TORQUR_CP(350), 100,\
|
|
|
+ TORQUR_CP(50), TORQUR_CP(120), TORQUR_CP(600), 100, \
|
|
|
+ TORQUR_CP(70), TORQUR_CP(260), TORQUR_CP(1200), 100,\
|
|
|
+ TORQUR_CP(10), TORQUR_CP(90), TORQUR_CP(800), 100,\
|
|
|
+ 0, 0, 0, 0,\
|
|
|
+ 0, 0, 0, 0,\
|
|
|
+ 0, 0, 0, 0,\
|
|
|
+ 0, 0, 0, 0,\
|
|
|
+ 0, 0, 0, 0,\
|
|
|
+ 0, 0, 0, 0,\
|
|
|
+ 0, 0, 0, 0,\
|
|
|
+ 0, 0, 0, 0,\
|
|
|
+ 0, 0, 0, 0,\
|
|
|
+ 0, 0, 0, 0,\
|
|
|
+ }// Y1, Y2, Y3, Z 单位:0.1 Nm
|
|
|
+#define ASS_CURVE_X1 30 // 单位:0.1Nm
|
|
|
+#define ASS_CURVE_X2 100 // 单位:0.1Nm
|
|
|
+#define ASS_CURVE_X3 300 // 单位:0.1Nm
|
|
|
+
|
|
|
#define ASSISTMOD_SELECT_DEFAULT 0x0000
|
|
|
|
|
|
//////////////////////////////// just for Assist Module It may has bug when u used in other Module//////////////
|
|
@@ -147,6 +174,40 @@ extern "C" {
|
|
|
* Type Definations
|
|
|
*
|
|
|
***************************************/
|
|
|
+ /**
|
|
|
+ * @brief Assist Curve
|
|
|
+ * Y = a*X^3 + b*X^2 + c*x +d
|
|
|
+ */
|
|
|
+typedef struct
|
|
|
+{
|
|
|
+ SLONG slY1; // 助力曲线点位坐标(X1,Y1)输入X1输出Y1 配置值 单位:0.1Nm
|
|
|
+ SLONG slY2; // 助力曲线点位坐标(X2,Y2)输入X1输出Y2 配置值 单位:0.1Nm
|
|
|
+ SLONG slY3; // 助力曲线点位坐标(X3,Y3)输入X1输出Y3 配置值 单位:0.1Nm
|
|
|
+ SLONG slZ; // 线性段与二次曲线切换点, 配置值 单位:0.1Nm
|
|
|
+} ASS_CURVE_PREMETER;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @brief Assist Curve coefficient
|
|
|
+ * Y = k1*x+b x< Z
|
|
|
+ * Y =k1*x+k2*(x-Z)^2+b x>= Z
|
|
|
+ */
|
|
|
+typedef struct
|
|
|
+{
|
|
|
+ SWORD swk1; // Q10 k1 =(y2-y1)/(x2-x1)
|
|
|
+ SWORD swb; // Q0 b = y2-k2*x1
|
|
|
+ SWORD swk2; // Q20 k2 = (y3-k1*x3-b)/(x3-Z)^2
|
|
|
+ SWORD swZ; // Q14
|
|
|
+} ASS_CURVE_COEF;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @brief Assist Curve compenssation coefficient
|
|
|
+ *
|
|
|
+ */
|
|
|
+typedef struct
|
|
|
+{
|
|
|
+ SWORD swKLow; // Q12
|
|
|
+ SWORD swKHigh; // Q12
|
|
|
+} ASS_CURVE_COMP_COEF;
|
|
|
/**
|
|
|
* @brief Polynomial coefficient
|
|
|
* Y = a*X^3 + b*X^2 + c*x +d
|
|
@@ -285,6 +346,14 @@ typedef struct
|
|
|
{
|
|
|
POLY_COEF uwTorqueAssGain[GEAR_NUM];
|
|
|
POLY_COEF uwCadencAsseGain[GEAR_NUM];
|
|
|
+
|
|
|
+ ASS_CURVE_PREMETER slAssCurPre[CURVE_NUM];
|
|
|
+ ASS_CURVE_COEF swAssCurCoef[CURVE_NUM];
|
|
|
+ ASS_CURVE_COMP_COEF swAssCompCoef;
|
|
|
+
|
|
|
+ UWORD uwAssCurvGain;
|
|
|
+ UWORD uwAssistCurveGain; //根据电机最大电流调整助力曲线
|
|
|
+
|
|
|
UBYTE ucAssistRatioGain[5];
|
|
|
UBYTE ucAssistAccelerationGain[5];
|
|
|
UBYTE ucMaxCurrentGain[5];
|
|
@@ -478,7 +547,8 @@ void ass_voAssitCoef(void);
|
|
|
void ass_voAssist(void);
|
|
|
void ass_voMoveAverageFilter(MAF_IN *in);
|
|
|
void ass_voMoveAverageFilterClear(MAF_IN *in);
|
|
|
-//void ass_voAssitTorqPI(ASS_TORQ_PI_IN *in, ASS_TORQ_PI_OUT *out);
|
|
|
+void ass_voAssistCurveCoef(ASS_CURVE_COMP_COEF *comp);
|
|
|
+SLONG ass_voAssistCurveCal(ASS_CURVE_COEF *coef, SWORD *value);
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
}
|