2014 sift / Mbed 2 deprecated TVDctrller2017_brdRev1_PandA

Dependencies:   mbed

Fork of TVDctrller2017_brdRev1_ver6 by 2014 sift

Revision:
25:c21d35c7f0de
Parent:
24:1de0291bc5eb
Child:
26:331e77bb479b
--- a/TVDCTRL.h	Thu Jun 29 01:58:49 2017 +0000
+++ b/TVDCTRL.h	Sat Jul 01 00:26:28 2017 +0000
@@ -1,11 +1,12 @@
 #ifndef TVDCTRL_H
 #define TVDCTRL_H
 #include "mbed.h"
+#include "Global.h"
 
 //10rpm刻みでその回転数での最大出力トルクを返す(3000rpm~)
 //[0]   :3000
 //[+1]  :+10rpm
-const int calcMaxTorque[801] = {
+const int maxTorqueMap[801] = {
     65535,65478,65420,65363,65306,65248,65191,65134,65076,65019,64962,64904,64847,64790,64732,64675,64618,64560,64503,64445,64388,64331,64273,64216,64159,64101,64044,63987,63929,63872,63815,63757,63700,63643,63585,63528,63471,63413,63356,63299,63241,63184,63127,63069,63012,62955,62897,62840,62783,62725,62668,62611,62553,62496,62438,62381,62324,62266,62209,62152,62094,62037,61980,61922,61865,61808,61750,61693,61636,61578,61521,61464,61406,61349,61292,61234,61177,61120,61062,61005,60948,60890,60833,60776,60718,60661,60603,60546,60489,60431,60374,60317,60259,60202,60145,60087,60030,59973,59915,59858
     ,59801,59743,59686,59629,59571,59514,59457,59399,59342,59285,59227,59170,59113,59055,58998,58941,58883,58826,58769,58711,58654,58596,58539,58482,58424,58367,58310,58252,58195,58138,58080,58023,57966,57908,57851,57794,57736,57679,57622,57564,57507,57450,57392,57335,57278,57220,57163,57106,57048,56991,56934,56876,56819,56762,56704,56647,56589,56532,56475,56417,56360,56303,56245,56188,56131,56073,56016,55959,55901,55844,55787,55729,55672,55615,55557,55500,55443,55385,55328,55271,55213,55156,55099,55041,54984,54927,54869,54812,54754,54697,54640,54582,54525,54468,54410,54353,54296,54238,54181,54124
     ,54066,54009,53952,53894,53837,53780,53722,53665,53608,53550,53493,53436,53378,53321,53264,53206,53149,53092,53034,52977,52920,52862,52805,52747,52690,52633,52575,52518,52461,52403,52346,52289,52231,52174,52117,52059,52002,51945,51887,51830,51773,51715,51658,51601,51543,51486,51429,51371,51314,51257,51199,51142,51085,51027,50970,50913,50855,50798,50740,50683,50626,50568,50511,50454,50396,50339,50282,50224,50167,50110,50052,49995,49938,49880,49823,49766,49708,49651,49594,49536,49479,49422,49364,49307,49250,49192,49135,49078,49020,48963,48905,48848,48791,48733,48676,48619,48561,48504,48447,48389
@@ -17,51 +18,28 @@
     ,19661
 };
 
-//エラーカウンタ型
-struct errCounter_t {
-    int apsUnderVolt;       //aps電圧不足
-    int apsExceedVolt;      //aps電圧超過
-    int apsErrorTolerance;  //aps偏差超過
-    int apsStick;           //aps固着
-    int brakeUnderVolt;     //brake電圧不足
-    int brakeExceedVolt;    //brake電圧超過
-    int brakeFuzzyVolt;     //brake曖昧な電圧(ONでもOFFでもない)
-    int brakeOverRide;      //accel-brake同時踏み
-};
-
-#define ratioLPF        0.061f //各センサLPF:CutOff:1Hz
-#define ratioLPF_V      0.061f  //車速LPF:CutOff:1Hz(sampling:10ms)
-#define M_PI            3.1415f //[-]
-#define TVD_GEAR_RATIO  10.0f   //[-]
-#define TIRE_DIAMETER   0.533f  //[m]
-#define WHEEL_BASE      1.760f  //[m]
-#define TREAD           1.3f    //[m]
-#define STABIRITY_FACTOR    0.01f   //[-]
-
 enum {
     APS_PRIMARY=0,
     APS_SECONDARY,
     BRAKE
 };
 
-enum SelectMotor {
-    RIGHT_MOTOR=0,
-    LEFT_MOTOR
-};
-
-const int MAX_MOTOR_TORQUE          = 0xFFFF;   //LSB : 45/65535 = 0.686655[mNm]
-const int MAX_OUTPUT_TORQUE         = (int)(MAX_MOTOR_TORQUE * 0.6);    //出力最大値
+const int MAX_MOTOR_TORQUE_POWER            = 0xFFFF;   //LSB : 45/65535 = 0.686655[mNm]
+const int MAX_MOTOR_TORQUE_REGENERATIVE     = (int)(MAX_MOTOR_TORQUE_POWER / 45.0 * (-15.0));   //LSB : 45/65535 = 0.686655[mNm]
+const int MAX_OUTPUT_TORQUE_POWER           = (int)(MAX_MOTOR_TORQUE_POWER * 1.0);    //出力最大値
+const int MAX_OUTPUT_TORQUE_REGENERATIVE    = (int)(MAX_MOTOR_TORQUE_REGENERATIVE * 1.0);    //出力最大値
 const int MAX_DISTRIBUTION_TORQUE   = (int)(0xFFFF/45.0 * 15.0);        //出力MAX時
 
 const int MIN_INNERWHEEL_MOTOR_TORQUE   = (int)(0xFFFF/45.0 * 2.0);     //内輪側モーターの最低トルク(MITSUBA社MC仕様対策)
 
-const int APS_MIN_POSITION          =(int)(0xFFFF/3.3 * 1.0);           //"正常時"最小入力電圧
-const int APS_MAX_POSITION          =(int)(0xFFFF/3.3 * 2.0);           //"正常時"最大入力電圧
-const int APS_DEADBAND              =(int)((APS_MAX_POSITION - APS_MIN_POSITION) * 0.2);   //APS信号不感帯
-const int APS_VALID_RANGE           =(APS_MAX_POSITION - APS_MIN_POSITION) - APS_DEADBAND;  //APS信号有効範囲
-const int APS_DEVIATION_TOLERANCE   =(int)((APS_MAX_POSITION - APS_MIN_POSITION) * 0.1);   //10%偏差許容値
-const int APS_OVERRIDE25            =(int)(APS_VALID_RANGE * 0.25 + APS_MIN_POSITION);    //ブレーキオーバーライドの閾値
-const int APS_OVERRIDE05            =(int)(APS_VALID_RANGE * 0.05 + APS_MIN_POSITION);    //ブレーキオーバーライドの閾値
+const int APS_MIN_POSITION          =(int)(0xFFFF/3.3 * 1.0);               //"正常時"最小入力電圧
+const int APS_MAX_POSITION          =(int)(0xFFFF/3.3 * 2.0);               //"正常時"最大入力電圧
+const int APS_VALID_RANGE           =APS_MAX_POSITION - APS_MIN_POSITION;   //APS信号有効範囲
+const int APS_REG_RANGE             =(int)(APS_VALID_RANGE * 0.3);          //APS信号回生領域
+const int APS_PWR_RANGE             =APS_VALID_RANGE - APS_REG_RANGE;       //APS信号駆動領域
+const int APS_DEVIATION_TOLERANCE   =(int)(APS_VALID_RANGE * 0.1);          //10%偏差許容値
+const int APS_OVERRIDE25            =(int)(APS_VALID_RANGE * 0.25 + APS_MIN_POSITION);          //ブレーキオーバーライドの閾値
+const int APS_OVERRIDE05            =(int)(APS_VALID_RANGE * 0.05 + APS_MIN_POSITION);          //ブレーキオーバーライドの閾値
 
 const int BRK_ON_VOLTAGE            =(int)(0xFFFF/3.3 * 2.20);    //ブレーキON時電圧
 const int BRK_OFF_VOLTAGE           =(int)(0xFFFF/3.3 * 1.65);     //ブレーキOFF時電圧
@@ -71,14 +49,26 @@
 const int ERRCOUNTER_DECISION              = 100;  //エラーカウンタ閾値
 
 //DACは12bit仕様だが一旦16bitに統一してから12bitに変換する
-//const int DACOUTPUT_MIN             =(int)(0xFFFF/3.3 * 0.49);    //MCの最低入力電圧
-const int DACOUTPUT_MIN             =(int)(0xFFFF/3.3 * 0.4);    //MCの最低入力電圧
-const int DACOUTPUT_MAX             =(int)(0xFFFF/3.3 * 2.45);    //MCの最大入力電圧
+const int DACOUTPUT_MIN             =(int)(0xFFFF/5.0 * 0.3);    //MCの最低入力電圧
+const int DACOUTPUT_MAX             =(int)(0xFFFF/5.0 * 4.7);    //MCの最大入力電圧
 const int DACOUTPUT_VALID_RANGE     =DACOUTPUT_MAX - DACOUTPUT_MIN; //実質有効電圧範囲
 
-const int LINEAR_REGION_TORQUE      =(int)(MAX_MOTOR_TORQUE/45.0 * 2.5);      //トルクに回転数が影響しない領域の境界値(トルク値)
-const int LINEAR_REGION_VOLTAGE     =(int)(0xFFFF/3.3 * 1.0); //トルクに回転数が影響しない領域の境界値(出力電圧値)
-const int MAX_REVOLUTION_TORQUE     =(int)(MAX_MOTOR_TORQUE/45.0 * 13.5);     //最高回転数における最大出力トルク
+const int ZERO_TORQUE_VOLTAGE_NEUTRAL   =(int)(0xFFFF/5.0 * 2.5);   //0トルク時電圧(ニュートラル位置)
+const int ZERO_TORQUE_VOLTAGE_P         =(int)(0xFFFF/5.0 * 2.74);  //0トルク時電圧(力行側)
+const int ZERO_TORQUE_VOLTAGE_REG       =(int)(0xFFFF/5.0 * 2.26);  //0トルク時電圧(回生側)
+
+const int LINEAR_REGION_TORQUE_POWER      =(int)(MAX_MOTOR_TORQUE_POWER/45.0 * 2.5);      //制御信号一定でトルクがrpmに対して非線形となる領域の境界値(トルク値:力行)
+const int LINEAR_REGION_VOLTAGE_POWER     =(int)(0xFFFF/5.0 * 3.25);                //制御信号一定でトルクがrpmに対して非線形となる領域の境界値(出力電圧値:力行)
+const int MAX_REVOLUTION_TORQUE_POWER     =(int)(MAX_MOTOR_TORQUE_POWER/45.0 * 13.5);     //最高回転数における最大出力トルク
+
+const int LINEAR_REGION_TORQUE_REGENERATIVE      =(int)(MAX_MOTOR_TORQUE_REGENERATIVE/15.0 * (-1.7));   //制御信号一定でトルクがrpmに対して非線形となる領域の境界値(トルク値:回生)
+const int LINEAR_REGION_VOLTAGE_REGENERATIVE     =(int)(0xFFFF/5.0 * 1.28);                 //制御信号一定でトルクがrpmに対して非線形となる領域の境界値(出力電圧値:回生)
+const int MAX_REVOLUTION_TORQUE_REGENERATIVE     =(int)(MAX_MOTOR_TORQUE_REGENERATIVE/15.0 * (-5.7));    //最高回転数における最大出力トルク
+//++++++++++++++++++++++++++++++
+//モータトルク演算は右モータ特性を採用
+//++++++++++++++++++++++++++++++
+
+#define MOTOR_PULSE_NUM     8       //モータパルス数[num/rev]
 
 const int MIN_PULSE_TIME            =5000;      //12000rpm時(最高回転数)のパルス時間(最小値)
 const int MAX_PULSE_TIME            =150000;    //最大パルス時間(about:4.02km/h)
@@ -86,7 +76,7 @@
 void initTVD(void);
 void driveTVD(void);
 
-int getPulseTime(SelectMotor rl);
+int getPulseCounter(SelectMotor rl);
 float getVelocity(void);
 int getCurrentSensor(int sensor);
 int getRawSensor(int sensor);