|
@@ -13,20 +13,23 @@
|
|
|
Beginning of File, do not put anything above here except notes
|
|
|
Compiler Directives:
|
|
|
*************************************************************************/
|
|
|
+#include "torquesensor.h"
|
|
|
#include "syspar.h"
|
|
|
-#include "typedefine.h"
|
|
|
#include "mathtool.h"
|
|
|
-#include "torquesensor.h"
|
|
|
#include "hwsetup.h"
|
|
|
#include "CodePara.h"
|
|
|
#include "canAppl.h"
|
|
|
#include "FuncLayerAPI.h"
|
|
|
+
|
|
|
+#ifdef RUN_ARCH_SIM
|
|
|
+#include "test_user.h"
|
|
|
+#endif
|
|
|
/******************************
|
|
|
*
|
|
|
* static Parameter
|
|
|
*
|
|
|
******************************/
|
|
|
-static LPF_OUT scm_stTorSensorLpf;
|
|
|
+static LPF_OUT torq_pvt_stTorSensorLpf;
|
|
|
static volatile SWORD TorqOffsetReg[TORQ_OFFSET_NUM]= {
|
|
|
640, //-11 C
|
|
|
718, //8 C
|
|
@@ -93,8 +96,8 @@ TORQUESENSOR_OUT torsensor_stTorSensorOut = TORQUESENSOR_OUT_DEFAULT;
|
|
|
void torsensor_voTorSensorCof(void)
|
|
|
{
|
|
|
ULONG ulLpfTm = 0;
|
|
|
- UWORD i = 0;
|
|
|
-
|
|
|
+ UWORD i = 0, uwAverageOffset = 0;
|
|
|
+
|
|
|
// torsensor_stTorSensorCof.uwMaxSensorTorquePu = ((ULONG)TORQUE_MAX_RANGE << 14) / TORQUEBASE; // Q14
|
|
|
torsensor_stTorSensorCof.uwMinSensorTorquePu = ((ULONG)TORQUE_MIN_RANGE << 14) / TORQUEBASE; // Q14
|
|
|
torsensor_stTorSensorCof.uwMaxSensorVolOutputPu = (ULONG)TORQUE_VOLTAGE_MAX_RANGE << 14 / VBASE;
|
|
@@ -104,11 +107,11 @@ void torsensor_voTorSensorCof(void)
|
|
|
|
|
|
if(torsensor_stTorSensorCof.uwTorqueOffsetConfirmFlg == FALSE)
|
|
|
{
|
|
|
- #if (TORSENSOR_USEMOL == TORSENSOR_USEDEFAULT)
|
|
|
+#if (TORSENSOR_USEMOL == TORSENSOR_USEDEFAULT)
|
|
|
torsensor_stTorSensorCof.uwTorqueOffset = TORQUE_VOLTAGE_MIN_RANGE * 4096 / 3300;
|
|
|
- #elif (TORSENSOR_USEMOL == TORSENSOR_USEEE)
|
|
|
- torsensor_stTorSensorCof.uwTorqueOffsetPowerUp = hw_uwADC0[7];
|
|
|
- //torsensor_stTorSensorCof.uwTorqueOffsetPowerUp = PowerUpOffset;
|
|
|
+
|
|
|
+#elif (TORSENSOR_USEMOL == TORSENSOR_USEEE)
|
|
|
+ torsensor_stTorSensorCof.uwTorqueOffsetPowerUp = hw_uwADC0[7];
|
|
|
|
|
|
if(torsensor_stTorSensorCof.uwTorqueOffsetNow1 != 0 && torsensor_stTorSensorCof.uwTorqueOffsetNow2 != 0
|
|
|
&& torsensor_stTorSensorCof.uwTorqueOffsetNow3 != 0 && torsensor_stTorSensorCof.uwTorqueOffsetNow4 != 0)
|
|
@@ -127,57 +130,21 @@ void torsensor_voTorSensorCof(void)
|
|
|
MC_UpcInfo.stSensorInfo.uwSaveFlg = 1;
|
|
|
}
|
|
|
else
|
|
|
- {
|
|
|
- UWORD AverageOffset = 0;
|
|
|
-// AverageOffset = ((SLONG)torsensor_stTorSensorCof.uwTorqueOffsetNow1 + torsensor_stTorSensorCof.uwTorqueOffsetNow2 +
|
|
|
-// torsensor_stTorSensorCof.uwTorqueOffsetNow3 + torsensor_stTorSensorCof.uwTorqueOffsetNow4)>>2;
|
|
|
-// if( ((SWORD)torsensor_stTorSensorCof.uwTorqueOffsetPowerUp - torsensor_stTorSensorCof.uwTorqueOffsetOrign) > 200 )
|
|
|
-// {
|
|
|
-// }
|
|
|
-// else
|
|
|
-// {
|
|
|
-// torsensor_stTorSensorCof.uwTorqueOffsetNow1 = torsensor_stTorSensorCof.uwTorqueOffsetNow2;
|
|
|
-// torsensor_stTorSensorCof.uwTorqueOffsetNow2 = torsensor_stTorSensorCof.uwTorqueOffsetNow3;
|
|
|
-// torsensor_stTorSensorCof.uwTorqueOffsetNow3 = torsensor_stTorSensorCof.uwTorqueOffsetNow4;
|
|
|
-// torsensor_stTorSensorCof.uwTorqueOffsetNow4 = torsensor_stTorSensorCof.uwTorqueOffsetPowerUp;
|
|
|
-//
|
|
|
-// cp_stFlg.ParaSaveEEFlg = TRUE;
|
|
|
-// cp_stFlg.ParaUpdateFlg = TRUE;
|
|
|
-// //cp_stFlg.ParaSensorInfoUpdateFlg = TRUE;
|
|
|
-// //cp_stFlg.ParaAssistUpdateFinishFlg = TRUE;
|
|
|
-// MC_UpcInfo.stSensorInfo.uwSaveFlg = TRUE;
|
|
|
-// }
|
|
|
-//
|
|
|
-// if( torsensor_stTorSensorCof.uwTorqueNowAllHasValueFlg == TRUE )
|
|
|
-// {
|
|
|
-// if((AverageOffset - torsensor_stTorSensorCof.uwTorqueOffsetOrign)>400 || (AverageOffset - torsensor_stTorSensorCof.uwTorqueOffsetOrign)<-400)
|
|
|
-// {
|
|
|
-// torsensor_stTorSensorCof.uwTorqueOffset = torsensor_stTorSensorCof.uwTorqueOffsetOrign;
|
|
|
-// }
|
|
|
-// else
|
|
|
-// {
|
|
|
-// torsensor_stTorSensorCof.uwTorqueOffset = AverageOffset;
|
|
|
-// }
|
|
|
-// }
|
|
|
-// else
|
|
|
-// {
|
|
|
-// torsensor_stTorSensorCof.uwTorqueOffset = torsensor_stTorSensorCof.uwTorqueOffsetOrign;
|
|
|
-// }
|
|
|
-
|
|
|
-
|
|
|
+ {
|
|
|
/* Compare with AvgOffset */
|
|
|
if(torsensor_stTorSensorCof.uwTorqueNowAllHasValueFlg == TRUE)
|
|
|
{
|
|
|
- AverageOffset = (UWORD)(((ULONG)torsensor_stTorSensorCof.uwTorqueOffsetNow1 + torsensor_stTorSensorCof.uwTorqueOffsetNow2 +
|
|
|
+ uwAverageOffset = (UWORD)(((ULONG)torsensor_stTorSensorCof.uwTorqueOffsetNow1 + torsensor_stTorSensorCof.uwTorqueOffsetNow2 +
|
|
|
torsensor_stTorSensorCof.uwTorqueOffsetNow3 + torsensor_stTorSensorCof.uwTorqueOffsetNow4)>>2);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- AverageOffset = torsensor_stTorSensorCof.uwTorqueOffsetOrign;
|
|
|
+ uwAverageOffset = torsensor_stTorSensorCof.uwTorqueOffsetOrign;
|
|
|
}
|
|
|
- if(abs((SWORD)torsensor_stTorSensorCof.uwTorqueOffsetPowerUp - AverageOffset) > 200)
|
|
|
+
|
|
|
+ if(abs((SWORD)torsensor_stTorSensorCof.uwTorqueOffsetPowerUp - (SWORD)uwAverageOffset) > 200)
|
|
|
{
|
|
|
- torsensor_stTorSensorCof.uwTorqueOffset = AverageOffset;
|
|
|
+ torsensor_stTorSensorCof.uwTorqueOffset = uwAverageOffset;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
@@ -194,44 +161,25 @@ void torsensor_voTorSensorCof(void)
|
|
|
|
|
|
torsensor_stTorSensorCof.uwTorqueOffset = torsensor_stTorSensorCof.uwTorqueOffsetPowerUp;
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
- #endif
|
|
|
+#endif
|
|
|
torsensor_stTorSensorCof.uwTorqueOffsetConfirmFlg = TRUE;
|
|
|
}
|
|
|
- torsensor_stTorSensorCof.uwSensorVolPerTorqDefault = TORQUE_VOLTAGE_PER_NM;
|
|
|
-
|
|
|
- torsensor_stTorSensorCof.uwSensorVolPerTorq1 =
|
|
|
- (UWORD)((((ULONG)3300 * (torsensor_stTorSensorCof.uwBikeTorStep1ADC - torsensor_stTorSensorCof.uwTorqueOffset)) >> 12) *10 *10/
|
|
|
- (torsensor_stTorSensorCof.uwBikeTorStep1RealNm - 0));
|
|
|
-
|
|
|
- torsensor_stTorSensorCof.uwSensorVolPerTorq2 =
|
|
|
- (UWORD)((((ULONG)3300 * (torsensor_stTorSensorCof.uwBikeTorStep2ADC - torsensor_stTorSensorCof.uwBikeTorStep1ADC)) >> 12) *10 *10/
|
|
|
- (torsensor_stTorSensorCof.uwBikeTorStep2RealNm - torsensor_stTorSensorCof.uwBikeTorStep1RealNm));
|
|
|
|
|
|
- torsensor_stTorSensorCof.uwSensorVolPerTorq3 =
|
|
|
- (UWORD)((((ULONG)3300 * (torsensor_stTorSensorCof.uwBikeTorStep3ADC - torsensor_stTorSensorCof.uwBikeTorStep2ADC)) >> 12) *10 *10/
|
|
|
- (torsensor_stTorSensorCof.uwBikeTorStep3RealNm - torsensor_stTorSensorCof.uwBikeTorStep2RealNm));
|
|
|
-
|
|
|
- torsensor_stTorSensorCof.uwSensorVolPerTorq4 =
|
|
|
- (UWORD)((((ULONG)3300 * (torsensor_stTorSensorCof.uwBikeTorStep4ADC - torsensor_stTorSensorCof.uwBikeTorStep3ADC)) >> 12) *10*10 /
|
|
|
- (torsensor_stTorSensorCof.uwBikeTorStep4RealNm - torsensor_stTorSensorCof.uwBikeTorStep3RealNm));
|
|
|
+ torsensor_stTorSensorCof.uwSensorVolPerTorqDefault = TORQUE_VOLTAGE_PER_NM;
|
|
|
|
|
|
torsensor_stTorSensorCof.ulTorqueReg2PuDefault = (ULONG)((((UQWORD)33 << 24) / 10) / (1 << ADC_RESOLUTION_BIT) / TORQUE_VOLTAGE_SEN2MCUGAIN * 100 * 1000 /
|
|
|
torsensor_stTorSensorCof.uwSensorVolPerTorqDefault / TORQUEBASE *
|
|
|
10); // 3.3/4096/harwaregain/VolPerNm/TorqueBase;
|
|
|
- torsensor_stTorSensorCof.ulTorqueReg2Pu1 = (ULONG)((((UQWORD)33 << 24) / 10) / (1 << ADC_RESOLUTION_BIT) / TORQUE_VOLTAGE_SEN2MCUGAIN * 100 * 1000 /
|
|
|
- torsensor_stTorSensorCof.uwSensorVolPerTorq1 / TORQUEBASE *
|
|
|
- 10*10); // 3.3/4096/harwaregain/VolPerNm/TorqueBase;
|
|
|
- torsensor_stTorSensorCof.ulTorqueReg2Pu2 = (ULONG)((((UQWORD)33 << 24) / 10) / (1 << ADC_RESOLUTION_BIT) / TORQUE_VOLTAGE_SEN2MCUGAIN * 100 * 1000 /
|
|
|
- torsensor_stTorSensorCof.uwSensorVolPerTorq2 / TORQUEBASE *
|
|
|
- 10*10); // 3.3/4096/harwaregain/VolPerNm/TorqueBase;
|
|
|
- torsensor_stTorSensorCof.ulTorqueReg2Pu3 = (ULONG)((((UQWORD)33 << 24) / 10) / (1 << ADC_RESOLUTION_BIT) / TORQUE_VOLTAGE_SEN2MCUGAIN * 100 * 1000 /
|
|
|
- torsensor_stTorSensorCof.uwSensorVolPerTorq3 / TORQUEBASE *
|
|
|
- 10*10); // 3.3/4096/harwaregain/VolPerNm/TorqueBase;
|
|
|
- torsensor_stTorSensorCof.ulTorqueReg2Pu4 = (ULONG)((((UQWORD)33 << 24) / 10) / (1 << ADC_RESOLUTION_BIT) / TORQUE_VOLTAGE_SEN2MCUGAIN * 100 * 1000 /
|
|
|
- torsensor_stTorSensorCof.uwSensorVolPerTorq4 / TORQUEBASE *
|
|
|
- 10*10); // 3.3/4096/harwaregain/VolPerNm/TorqueBase;
|
|
|
+
|
|
|
+ torsensor_stTorSensorCof.ulTorqueReg2Pu1 = (ULONG)(((UQWORD)(torsensor_stTorSensorCof.uwBikeTorStep1RealNm - 0) << 24) /
|
|
|
+ (torsensor_stTorSensorCof.uwBikeTorStep1ADC - torsensor_stTorSensorCof.uwTorqueOffset) /TORQUEBASE);
|
|
|
+ torsensor_stTorSensorCof.ulTorqueReg2Pu2 = (ULONG)(((UQWORD)(torsensor_stTorSensorCof.uwBikeTorStep2RealNm - torsensor_stTorSensorCof.uwBikeTorStep1RealNm) << 24) /
|
|
|
+ (torsensor_stTorSensorCof.uwBikeTorStep2ADC - torsensor_stTorSensorCof.uwBikeTorStep1ADC) /TORQUEBASE);
|
|
|
+ torsensor_stTorSensorCof.ulTorqueReg2Pu3 = (ULONG)(((UQWORD)(torsensor_stTorSensorCof.uwBikeTorStep3RealNm - torsensor_stTorSensorCof.uwBikeTorStep2RealNm) << 24) /
|
|
|
+ (torsensor_stTorSensorCof.uwBikeTorStep3ADC - torsensor_stTorSensorCof.uwBikeTorStep2ADC) /TORQUEBASE);
|
|
|
+ torsensor_stTorSensorCof.ulTorqueReg2Pu4 = (ULONG)(((UQWORD)(torsensor_stTorSensorCof.uwBikeTorStep4RealNm - torsensor_stTorSensorCof.uwBikeTorStep3RealNm) << 24) /
|
|
|
+ (torsensor_stTorSensorCof.uwBikeTorStep4ADC - torsensor_stTorSensorCof.uwBikeTorStep3ADC) /TORQUEBASE);
|
|
|
|
|
|
torsensor_stTorSensorCof.uwBikeTorStep1NmPu = (UWORD)(((ULONG)torsensor_stTorSensorCof.uwBikeTorStep1RealNm << 14)/TORQUEBASE);
|
|
|
torsensor_stTorSensorCof.uwBikeTorStep2NmPu = (UWORD)(((ULONG)torsensor_stTorSensorCof.uwBikeTorStep2RealNm << 14)/TORQUEBASE);
|
|
@@ -240,8 +188,9 @@ void torsensor_voTorSensorCof(void)
|
|
|
|
|
|
/* Torque Sensor limit coef */
|
|
|
ulLpfTm = 1000000 / torsensor_stTorSensorCof.uwTorSensorLPFFrq;
|
|
|
- mth_voLPFilterCoef(ulLpfTm, torsensor_stTorSensorCof.uwTorVolLPFDisFrq, &scm_stTorSensorLpf.uwKx);
|
|
|
+ mth_voLPFilterCoef(ulLpfTm, torsensor_stTorSensorCof.uwTorVolLPFDisFrq, &torq_pvt_stTorSensorLpf.uwKx);
|
|
|
|
|
|
+ /* Torque Offset Correction Coef */
|
|
|
// for (i = 0; i < (TORQ_OFFSET_NUM - 1); i++)
|
|
|
// {
|
|
|
// TorqOffsetCof[i] = (((SLONG)TorqOffsetReg[i+1] - (SLONG)TorqOffsetReg[i]) << 12) /(TorqOffsetTemp[i+1] - TorqOffsetTemp[i]); //Q12
|
|
@@ -273,55 +222,54 @@ void torsensor_voTorSensorInit(void)
|
|
|
torsensor_stTorSensorOut.blTorqueCaliFlg = FALSE;
|
|
|
torsensor_stTorSensorOut.blTorqueErrorFlg = FALSE;
|
|
|
mth_voLPFilterCoef(1000000 / 1, EVENT_1MS_HZ, &tst_dynOffsetLpf.uwKx); //25Hz
|
|
|
+
|
|
|
tstdynOffset= hw_uwADC0[7];
|
|
|
tst_dynOffsetLpf.slY.sw.hi = (SWORD)hw_uwADC0[7];
|
|
|
- /* Torque Sensor limit coef */
|
|
|
-
|
|
|
}
|
|
|
|
|
|
/*************************************************************************
|
|
|
Local Functions (N/A)
|
|
|
*************************************************************************/
|
|
|
-static BOOL tstDynCalibflg= TRUE;
|
|
|
-static UWORD tstTorqOffset,tstSensitiveset,TorqValue,TorqValuePu, TorqReg;
|
|
|
-static SWORD tstTorqTemp,tstTorqTemp111,tstSencitiveOrig;
|
|
|
-void torsensor_voCadenceCnt(void)
|
|
|
-{
|
|
|
- if (((cadence_stFreGetCof.uwNumbersPulses>>1)-1) != tsttorqCadCnt)
|
|
|
- {
|
|
|
- tsttorqCadCnt++;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- tsttorqCadCnt = 0;
|
|
|
- tsttorqMin = 4096;
|
|
|
- }
|
|
|
-}
|
|
|
+// static BOOL tstDynCalibflg= TRUE;
|
|
|
+// static UWORD tstTorqOffset,tstSensitiveset,TorqValue,TorqValuePu, TorqReg;
|
|
|
+// static SWORD tstTorqTemp,tstTorqTemp111,tstSencitiveOrig;
|
|
|
+// void torsensor_voCadenceCnt(void)
|
|
|
+// {
|
|
|
+// if (((cadence_stFreGetCof.uwNumbersPulses>>1)-1) != tsttorqCadCnt)
|
|
|
+// {
|
|
|
+// tsttorqCadCnt++;
|
|
|
+// }
|
|
|
+// else
|
|
|
+// {
|
|
|
+// tsttorqCadCnt = 0;
|
|
|
+// tsttorqMin = 4096;
|
|
|
+// }
|
|
|
+// }
|
|
|
|
|
|
-void torsensor_voDynamicOffset(void)
|
|
|
-{
|
|
|
- if(cadence_stFreGetOut.uwLPFFrequencyPu != 0)
|
|
|
- {
|
|
|
- tstDynCalibflg = TRUE;
|
|
|
- if(tsttorqMin > hw_uwADC0[7])
|
|
|
- {
|
|
|
- tsttorqMin = hw_uwADC0[7];
|
|
|
- }
|
|
|
- if(tsttorqCadCnt == ((cadence_stFreGetCof.uwNumbersPulses>>1) -1))
|
|
|
- {
|
|
|
- tstdynOffset = tsttorqMin;
|
|
|
- }
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- if( tstDynCalibflg == TRUE && TorqValuePu <= 500)
|
|
|
- {
|
|
|
- tstdynOffset = hw_uwADC0[7];
|
|
|
- tstDynCalibflg = FALSE;
|
|
|
- }
|
|
|
- }
|
|
|
- mth_voLPFilter((SWORD)tstdynOffset, &tst_dynOffsetLpf);
|
|
|
-}
|
|
|
+// void torsensor_voDynamicOffset(void)
|
|
|
+// {
|
|
|
+// if(cadence_stFreGetOut.uwLPFFrequencyPu != 0)
|
|
|
+// {
|
|
|
+// tstDynCalibflg = TRUE;
|
|
|
+// if(tsttorqMin > hw_uwADC0[7])
|
|
|
+// {
|
|
|
+// tsttorqMin = hw_uwADC0[7];
|
|
|
+// }
|
|
|
+// if(tsttorqCadCnt == ((cadence_stFreGetCof.uwNumbersPulses>>1) -1))
|
|
|
+// {
|
|
|
+// tstdynOffset = tsttorqMin;
|
|
|
+// }
|
|
|
+// }
|
|
|
+// else
|
|
|
+// {
|
|
|
+// if( tstDynCalibflg == TRUE && TorqValuePu <= 500)
|
|
|
+// {
|
|
|
+// tstdynOffset = hw_uwADC0[7];
|
|
|
+// tstDynCalibflg = FALSE;
|
|
|
+// }
|
|
|
+// }
|
|
|
+// mth_voLPFilter((SWORD)tstdynOffset, &tst_dynOffsetLpf);
|
|
|
+// }
|
|
|
|
|
|
|
|
|
//static void torsensor_voTorADCwithTemp(void)
|
|
@@ -380,8 +328,8 @@ void torsensor_voDynamicOffset(void)
|
|
|
// TorqValuePu = torsensor_stTorSensorCof.uwBikeTorStep4NmPu;
|
|
|
// }
|
|
|
// torsensor_stTorSensorOut.uwTorquePu=TorqValuePu;
|
|
|
-// mth_voLPFilter(torsensor_stTorSensorOut.uwTorquePu, &scm_stTorSensorLpf);
|
|
|
-// torsensor_stTorSensorOut.uwTorqueLPFPu = scm_stTorSensorLpf.slY.sw.hi;
|
|
|
+// mth_voLPFilter(torsensor_stTorSensorOut.uwTorquePu, &torq_pvt_stTorSensorLpf);
|
|
|
+// torsensor_stTorSensorOut.uwTorqueLPFPu = torq_pvt_stTorSensorLpf.slY.sw.hi;
|
|
|
// TorqValue = (ULONG)TorqValuePu * TORQUEBASE >> 14;
|
|
|
//
|
|
|
// //TorqValue = ((torsensor_stTorSensorOut.uwTorqueReg - tstTorqOffset) << 12 )/tstSencitiveset;
|
|
@@ -397,7 +345,7 @@ void torsensor_voDynamicOffset(void)
|
|
|
****************************************************************/
|
|
|
static UWORD tor_pvt_uwOffsetTarget = 0;
|
|
|
static UWORD tor_pvt_uwOffsetMax = 0,tor_pvt_uwOffsetMin = 4096;
|
|
|
-static ULONG tor_pvt_ulCnt = 0;
|
|
|
+static ULONG tor_pvt_ulCnt = 0, tor_pvt_ulCnt2 = 0;
|
|
|
void torsensor_voOffsetUpdate(void)
|
|
|
{
|
|
|
SWORD swTorDelta;
|
|
@@ -407,7 +355,12 @@ void torsensor_voOffsetUpdate(void)
|
|
|
swTorDelta = (SWORD)tor_pvt_uwOffsetMax - (SWORD)tor_pvt_uwOffsetMin;
|
|
|
if(swTorDelta > 40)
|
|
|
{
|
|
|
- tor_pvt_ulCnt = 0;
|
|
|
+ tor_pvt_ulCnt = 0;
|
|
|
+ tor_pvt_uwOffsetTarget = torsensor_stTorSensorCof.uwTorqueOffset;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ tor_pvt_uwOffsetTarget = (tor_pvt_uwOffsetMax + tor_pvt_uwOffsetMin) >> 1;
|
|
|
}
|
|
|
tor_pvt_uwOffsetMax = 0;
|
|
|
tor_pvt_uwOffsetMin = 4096;
|
|
@@ -424,13 +377,12 @@ void torsensor_voOffsetUpdate(void)
|
|
|
tor_pvt_uwOffsetMax = torsensor_stTorSensorOut.uwTorqueReg;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- if(tor_pvt_ulCnt > TORQUE_90S_1MSCNT)
|
|
|
+
|
|
|
+ ++tor_pvt_ulCnt2;
|
|
|
+ if(tor_pvt_ulCnt2 > TORQUE_90S_1MSCNT)
|
|
|
{
|
|
|
- swTorDelta = (SWORD)tor_pvt_uwOffsetMax - (SWORD)tor_pvt_uwOffsetMin;
|
|
|
- if(swTorDelta < 40)
|
|
|
+ if(tor_pvt_uwOffsetTarget != torsensor_stTorSensorCof.uwTorqueOffset)
|
|
|
{
|
|
|
- tor_pvt_uwOffsetTarget = (tor_pvt_uwOffsetMax + tor_pvt_uwOffsetMin) >> 1;
|
|
|
if(torsensor_stTorSensorCof.uwTorqueOffset < tor_pvt_uwOffsetTarget - 20)
|
|
|
{
|
|
|
torsensor_stTorSensorCof.uwTorqueOffset += 20;
|
|
@@ -441,18 +393,14 @@ void torsensor_voOffsetUpdate(void)
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- torsensor_stTorSensorCof.uwTorqueOffset = tor_pvt_uwOffsetTarget;
|
|
|
+ torsensor_stTorSensorCof.uwTorqueOffset = tor_pvt_uwOffsetTarget;
|
|
|
}
|
|
|
|
|
|
- torsensor_stTorSensorCof.uwSensorVolPerTorq1 =
|
|
|
- (UWORD)((((ULONG)3300 * (torsensor_stTorSensorCof.uwBikeTorStep1ADC - torsensor_stTorSensorCof.uwTorqueOffset)) >> 12) *10 *10/
|
|
|
- (torsensor_stTorSensorCof.uwBikeTorStep1RealNm - 0));
|
|
|
-
|
|
|
- torsensor_stTorSensorCof.ulTorqueReg2Pu1 = (ULONG)((((SQWORD)33 << 24) / 10) / (1 << ADC_RESOLUTION_BIT) / TORQUE_VOLTAGE_SEN2MCUGAIN * 100 * 1000 /
|
|
|
- torsensor_stTorSensorCof.uwSensorVolPerTorq1 / TORQUEBASE *
|
|
|
- 10*10); // 3.3/4096/harwaregain/VolPerNm/TorqueBase;
|
|
|
+ torsensor_stTorSensorCof.ulTorqueReg2Pu1 = (ULONG)(((UQWORD)(torsensor_stTorSensorCof.uwBikeTorStep1RealNm - 0) << 24) /
|
|
|
+ (torsensor_stTorSensorCof.uwBikeTorStep1ADC - torsensor_stTorSensorCof.uwTorqueOffset) /TORQUEBASE);
|
|
|
}
|
|
|
- tor_pvt_ulCnt = 0;
|
|
|
+
|
|
|
+ tor_pvt_ulCnt2 = 0;
|
|
|
}
|
|
|
}
|
|
|
/***************************************************************
|
|
@@ -466,95 +414,72 @@ void torsensor_voOffsetUpdate(void)
|
|
|
****************************************************************/
|
|
|
void torsensor_voTorADC(void) // need to match ADC_StartConversion(ADC1);
|
|
|
{
|
|
|
+ torsensor_stTorSensorOut.uwTorqueReg = hw_uwADC0[7]; // TorSensor_uwDMAReg;
|
|
|
+#if (TORSENSOR_USEMOL == TORSENSOR_USEDEFAULT)
|
|
|
+ torsensor_stTorSensorOut.uwTorquePu =
|
|
|
+ (((SQWORD)abs((SWORD)(torsensor_stTorSensorOut.uwTorqueReg) - torsensor_stTorSensorCof.uwTorqueOffset)) *
|
|
|
+ torsensor_stTorSensorCof.ulTorqueReg2PuDefault) >>
|
|
|
+ 10; // Q14
|
|
|
|
|
|
-
|
|
|
- if (torsensor_stTorSensorOut.blTorqueErrorFlg == TRUE)
|
|
|
+#elif (TORSENSOR_USEMOL == TORSENSOR_USEEE)
|
|
|
+ if (torsensor_stTorSensorOut.uwTorqueReg <= torsensor_stTorSensorCof.uwTorqueOffset)
|
|
|
{
|
|
|
torsensor_stTorSensorOut.uwTorquePu = 0;
|
|
|
- torsensor_stTorSensorOut.uwTorqueReg = hw_uwADC0[7];
|
|
|
- if (torsensor_stTorSensorOut.uwTorqueReg < 4000 && torsensor_stTorSensorOut.uwTorqueReg > 10) // output 0mv - 3000mv
|
|
|
- {
|
|
|
- torsensor_stTorSensorOut.uwTorqueErrorCnt++;
|
|
|
- if (torsensor_stTorSensorOut.uwTorqueErrorCnt > 1000)
|
|
|
- {
|
|
|
- torsensor_stTorSensorOut.blTorqueErrorFlg = FALSE;
|
|
|
- torsensor_voTorSensorInit();
|
|
|
- }
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- torsensor_stTorSensorOut.uwTorqueErrorCnt = 0;
|
|
|
- }
|
|
|
}
|
|
|
- else
|
|
|
+ else if (torsensor_stTorSensorOut.uwTorqueReg <= torsensor_stTorSensorCof.uwBikeTorStep1ADC)
|
|
|
{
|
|
|
- torsensor_stTorSensorOut.uwTorqueReg = hw_uwADC0[7]; // TorSensor_uwDMAReg;
|
|
|
-#if (TORSENSOR_USEMOL == TORSENSOR_USEDEFAULT)
|
|
|
- torsensor_stTorSensorOut.uwTorquePu =
|
|
|
- (((SQWORD)abs((SWORD)(torsensor_stTorSensorOut.uwTorqueReg) - torsensor_stTorSensorCof.uwTorqueOffset)) *
|
|
|
- torsensor_stTorSensorCof.ulTorqueReg2PuDefault) >>
|
|
|
- 10; // Q14
|
|
|
-#elif (TORSENSOR_USEMOL == TORSENSOR_USEEE)
|
|
|
-
|
|
|
- if (torsensor_stTorSensorOut.uwTorqueReg <= torsensor_stTorSensorCof.uwTorqueOffset)
|
|
|
- {
|
|
|
- torsensor_stTorSensorOut.uwTorquePu = 0;
|
|
|
- }
|
|
|
- else if (torsensor_stTorSensorOut.uwTorqueReg <= torsensor_stTorSensorCof.uwBikeTorStep1ADC)
|
|
|
- {
|
|
|
- torsensor_stTorSensorOut.uwTorquePu = (UWORD)(0 +
|
|
|
- ((((UQWORD)abs((SWORD)torsensor_stTorSensorOut.uwTorqueReg - torsensor_stTorSensorCof.uwTorqueOffset)) *
|
|
|
- torsensor_stTorSensorCof.ulTorqueReg2Pu1) >> 10)); // Q14
|
|
|
- }
|
|
|
- else if (torsensor_stTorSensorOut.uwTorqueReg <= torsensor_stTorSensorCof.uwBikeTorStep2ADC)
|
|
|
- {
|
|
|
- torsensor_stTorSensorOut.uwTorquePu = (UWORD)(torsensor_stTorSensorCof.uwBikeTorStep1NmPu +
|
|
|
- ((((UQWORD)abs((SWORD)torsensor_stTorSensorOut.uwTorqueReg - torsensor_stTorSensorCof.uwBikeTorStep1ADC)) *
|
|
|
- torsensor_stTorSensorCof.ulTorqueReg2Pu2) >> 10)); // Q14
|
|
|
+ torsensor_stTorSensorOut.uwTorquePu = (UWORD)(0 +
|
|
|
+ ((((UQWORD)abs((SWORD)torsensor_stTorSensorOut.uwTorqueReg - torsensor_stTorSensorCof.uwTorqueOffset)) *
|
|
|
+ torsensor_stTorSensorCof.ulTorqueReg2Pu1) >> 10)); // Q14
|
|
|
+ }
|
|
|
+ else if (torsensor_stTorSensorOut.uwTorqueReg <= torsensor_stTorSensorCof.uwBikeTorStep2ADC)
|
|
|
+ {
|
|
|
+ torsensor_stTorSensorOut.uwTorquePu = (UWORD)(torsensor_stTorSensorCof.uwBikeTorStep1NmPu +
|
|
|
+ ((((UQWORD)abs((SWORD)torsensor_stTorSensorOut.uwTorqueReg - torsensor_stTorSensorCof.uwBikeTorStep1ADC)) *
|
|
|
+ torsensor_stTorSensorCof.ulTorqueReg2Pu2) >> 10)); // Q14
|
|
|
|
|
|
- }
|
|
|
- else if (torsensor_stTorSensorOut.uwTorqueReg <= torsensor_stTorSensorCof.uwBikeTorStep3ADC)
|
|
|
- {
|
|
|
- torsensor_stTorSensorOut.uwTorquePu = (UWORD)(torsensor_stTorSensorCof.uwBikeTorStep2NmPu +
|
|
|
- ((((UQWORD)abs((SWORD)torsensor_stTorSensorOut.uwTorqueReg - torsensor_stTorSensorCof.uwBikeTorStep2ADC)) *
|
|
|
- torsensor_stTorSensorCof.ulTorqueReg2Pu3) >> 10)); // Q14
|
|
|
+ }
|
|
|
+ else if (torsensor_stTorSensorOut.uwTorqueReg <= torsensor_stTorSensorCof.uwBikeTorStep3ADC)
|
|
|
+ {
|
|
|
+ torsensor_stTorSensorOut.uwTorquePu = (UWORD)(torsensor_stTorSensorCof.uwBikeTorStep2NmPu +
|
|
|
+ ((((UQWORD)abs((SWORD)torsensor_stTorSensorOut.uwTorqueReg - torsensor_stTorSensorCof.uwBikeTorStep2ADC)) *
|
|
|
+ torsensor_stTorSensorCof.ulTorqueReg2Pu3) >> 10)); // Q14
|
|
|
|
|
|
- }
|
|
|
- else if (torsensor_stTorSensorOut.uwTorqueReg <= torsensor_stTorSensorCof.uwBikeTorStep4ADC)
|
|
|
- {
|
|
|
- torsensor_stTorSensorOut.uwTorquePu = (UWORD)(torsensor_stTorSensorCof.uwBikeTorStep3NmPu +
|
|
|
- ((((UQWORD)abs((SWORD)torsensor_stTorSensorOut.uwTorqueReg - torsensor_stTorSensorCof.uwBikeTorStep3ADC)) *
|
|
|
- torsensor_stTorSensorCof.ulTorqueReg2Pu4) >> 10)); // Q14
|
|
|
+ }
|
|
|
+ else if (torsensor_stTorSensorOut.uwTorqueReg <= torsensor_stTorSensorCof.uwBikeTorStep4ADC)
|
|
|
+ {
|
|
|
+ torsensor_stTorSensorOut.uwTorquePu = (UWORD)(torsensor_stTorSensorCof.uwBikeTorStep3NmPu +
|
|
|
+ ((((UQWORD)abs((SWORD)torsensor_stTorSensorOut.uwTorqueReg - torsensor_stTorSensorCof.uwBikeTorStep3ADC)) *
|
|
|
+ torsensor_stTorSensorCof.ulTorqueReg2Pu4) >> 10)); // Q14
|
|
|
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- torsensor_stTorSensorOut.uwTorquePu = torsensor_stTorSensorCof.uwBikeTorStep4NmPu;
|
|
|
- }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ torsensor_stTorSensorOut.uwTorquePu = torsensor_stTorSensorCof.uwBikeTorStep4NmPu;
|
|
|
+ }
|
|
|
|
|
|
#endif
|
|
|
- mth_voLPFilter((SWORD)torsensor_stTorSensorOut.uwTorquePu, &scm_stTorSensorLpf);
|
|
|
- torsensor_stTorSensorOut.uwTorqueLPFPu = (UWORD)scm_stTorSensorLpf.slY.sw.hi;
|
|
|
- torsensor_stTorSensorOut.uwTorquePercent = (UWORD)(((ULONG)torsensor_stTorSensorOut.uwTorqueLPFPu << 14) /
|
|
|
- (torsensor_stTorSensorCof.uwMaxSensorTorquePu - torsensor_stTorSensorCof.uwMinSensorTorquePu)); // Q15
|
|
|
+ mth_voLPFilter((SWORD)torsensor_stTorSensorOut.uwTorquePu, &torq_pvt_stTorSensorLpf);
|
|
|
+ torsensor_stTorSensorOut.uwTorqueLPFPu = (UWORD)torq_pvt_stTorSensorLpf.slY.sw.hi;
|
|
|
+ torsensor_stTorSensorOut.uwTorquePercent = (UWORD)(((ULONG)torsensor_stTorSensorOut.uwTorqueLPFPu << 14) /
|
|
|
+ (torsensor_stTorSensorCof.uwMaxSensorTorquePu - torsensor_stTorSensorCof.uwMinSensorTorquePu)); // Q15
|
|
|
|
|
|
- if (torsensor_stTorSensorOut.uwTorqueReg > 4000 || torsensor_stTorSensorOut.uwTorqueReg < 10) // output 0mv - 3000mv
|
|
|
- {
|
|
|
- torsensor_stTorSensorOut.uwTorqueErrorCnt++;
|
|
|
- if (torsensor_stTorSensorOut.uwTorqueErrorCnt > 5000)
|
|
|
- {
|
|
|
- torsensor_stTorSensorOut.blTorqueErrorFlg = TRUE;
|
|
|
- torsensor_stTorSensorOut.uwTorquePu = 0;
|
|
|
- torsensor_stTorSensorOut.uwTorqueErrorCnt = 0;
|
|
|
- torsensor_stTorSensorOut.uwTorqueLPFPu = 0;
|
|
|
- cp_stHistoryPara.uwTorSensorAlamTimes++;
|
|
|
- }
|
|
|
- }
|
|
|
- else
|
|
|
+ if (torsensor_stTorSensorOut.uwTorqueReg > 4000 || torsensor_stTorSensorOut.uwTorqueReg < 10) // output 0mv - 3000mv
|
|
|
+ {
|
|
|
+ torsensor_stTorSensorOut.uwTorqueErrorCnt++;
|
|
|
+ if (torsensor_stTorSensorOut.uwTorqueErrorCnt > 5000)
|
|
|
{
|
|
|
+ torsensor_stTorSensorOut.blTorqueErrorFlg = TRUE;
|
|
|
+ torsensor_stTorSensorOut.uwTorquePu = 0;
|
|
|
torsensor_stTorSensorOut.uwTorqueErrorCnt = 0;
|
|
|
+ torsensor_stTorSensorOut.uwTorqueLPFPu = 0;
|
|
|
+ cp_stHistoryPara.uwTorSensorAlamTimes++;
|
|
|
}
|
|
|
}
|
|
|
+ else
|
|
|
+ {
|
|
|
+ torsensor_stTorSensorOut.uwTorqueErrorCnt = 0;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/***************************************************************
|