diff --git a/src/modules/simu/simuv2.1/differential.cpp b/src/modules/simu/simuv2.1/differential.cpp index 9a6cc88e..2720dcf2 100644 --- a/src/modules/simu/simuv2.1/differential.cpp +++ b/src/modules/simu/simuv2.1/differential.cpp @@ -48,9 +48,12 @@ SimDifferentialConfig(void *hdle, const char *section, tDifferential *differenti } else { differential->type = DIFF_NONE; } + + if (differential->efficiency > 1.0f) {differential->efficiency = 1.0f;} + if (differential->efficiency < 0.0f) {differential->efficiency = 0.0f;} differential->feedBack.I = differential->I * differential->ratio * differential->ratio + - (differential->inAxis[0]->I + differential->inAxis[1]->I) / differential->efficiency; + (differential->inAxis[0]->I + differential->inAxis[1]->I); } @@ -67,7 +70,7 @@ updateSpool(tCar *car, tDifferential *differential, int first) tdble I; tdble inTq, brkTq; - DrTq = differential->in.Tq; + DrTq = differential->in.Tq * differential->efficiency; I = differential->outAxis[0]->I + differential->outAxis[1]->I; inTq = differential->inAxis[0]->Tq + differential->inAxis[1]->Tq; @@ -116,7 +119,7 @@ SimDifferentialUpdate(tCar *car, tDifferential *differential, int first) return; } - DrTq = differential->in.Tq; + DrTq = differential->in.Tq * differential->efficiency; spinVel0 = differential->inAxis[0]->spinVel; spinVel1 = differential->inAxis[1]->spinVel; diff --git a/src/modules/simu/simuv2.1/transmission.cpp b/src/modules/simu/simuv2.1/transmission.cpp index 307ffae7..d5e7ffb6 100644 --- a/src/modules/simu/simuv2.1/transmission.cpp +++ b/src/modules/simu/simuv2.1/transmission.cpp @@ -122,32 +122,32 @@ SimTransmissionConfig(tCar *car) switch(trans->type) { case TRANS_RWD: differential = &(trans->differential[TRANS_REAR_DIFF]); - differential->outAxis[0]->I = trans->curI / 2.0f + differential->inAxis[0]->I / trans->gearEff[trans->gearbox.gear+1]; - differential->outAxis[1]->I = trans->curI / 2.0f + differential->inAxis[1]->I / trans->gearEff[trans->gearbox.gear+1]; + differential->outAxis[0]->I = trans->curI / 2.0f + differential->inAxis[0]->I; + differential->outAxis[1]->I = trans->curI / 2.0f + differential->inAxis[1]->I; differential->outAxis[0]->Tq = 0; differential->outAxis[1]->Tq = 0; break; case TRANS_FWD: differential = &(trans->differential[TRANS_FRONT_DIFF]); - differential->outAxis[0]->I = trans->curI / 2.0f + differential->inAxis[0]->I / trans->gearEff[trans->gearbox.gear+1]; - differential->outAxis[1]->I = trans->curI / 2.0f + differential->inAxis[1]->I / trans->gearEff[trans->gearbox.gear+1]; + differential->outAxis[0]->I = trans->curI / 2.0f + differential->inAxis[0]->I; + differential->outAxis[1]->I = trans->curI / 2.0f + differential->inAxis[1]->I; differential->outAxis[0]->Tq = 0; differential->outAxis[1]->Tq = 0; break; case TRANS_4WD: differential = &(trans->differential[TRANS_FRONT_DIFF]); - differential->outAxis[0]->I = trans->curI / 4.0f + differential->inAxis[0]->I / trans->gearEff[trans->gearbox.gear+1]; - differential->outAxis[1]->I = trans->curI / 4.0f + differential->inAxis[1]->I / trans->gearEff[trans->gearbox.gear+1]; + differential->outAxis[0]->I = trans->curI / 4.0f + differential->inAxis[0]->I; + differential->outAxis[1]->I = trans->curI / 4.0f + differential->inAxis[1]->I; differential->outAxis[0]->Tq = 0; differential->outAxis[1]->Tq = 0; differential = &(trans->differential[TRANS_REAR_DIFF]); - differential->outAxis[0]->I = trans->curI / 4.0f + differential->inAxis[0]->I / trans->gearEff[trans->gearbox.gear+1]; - differential->outAxis[1]->I = trans->curI / 4.0f + differential->inAxis[1]->I / trans->gearEff[trans->gearbox.gear+1]; + differential->outAxis[0]->I = trans->curI / 4.0f + differential->inAxis[0]->I; + differential->outAxis[1]->I = trans->curI / 4.0f + differential->inAxis[1]->I; differential->outAxis[0]->Tq = 0; differential->outAxis[1]->Tq = 0; differential = &(trans->differential[TRANS_CENTRAL_DIFF]); - differential->outAxis[0]->I = trans->curI / 2.0f + differential->inAxis[0]->I / trans->gearEff[trans->gearbox.gear+1]; - differential->outAxis[1]->I = trans->curI / 2.0f + differential->inAxis[1]->I / trans->gearEff[trans->gearbox.gear+1]; + differential->outAxis[0]->I = trans->curI / 2.0f + differential->inAxis[0]->I; + differential->outAxis[1]->I = trans->curI / 2.0f + differential->inAxis[1]->I; differential->outAxis[0]->Tq = 0; differential->outAxis[1]->Tq = 0; break; @@ -222,16 +222,16 @@ SimGearboxUpdate(tCar *car) } - differential->in.I = trans->curI + differential->feedBack.I / trans->gearEff[gearbox->gear+1]; - differential->outAxis[0]->I = trans->curI / 2.0f + differential->inAxis[0]->I / trans->gearEff[gearbox->gear+1]; - differential->outAxis[1]->I = trans->curI / 2.0f + differential->inAxis[1]->I / trans->gearEff[gearbox->gear+1]; + differential->in.I = trans->curI + differential->feedBack.I; + differential->outAxis[0]->I = trans->curI / 2.0f + differential->inAxis[0]->I; + differential->outAxis[1]->I = trans->curI / 2.0f + differential->inAxis[1]->I; if (trans->type == TRANS_4WD) { differential = &(trans->differential[TRANS_FRONT_DIFF]); - differential->outAxis[0]->I = trans->curI / 4.0f + differential->inAxis[0]->I / trans->gearEff[gearbox->gear+1]; - differential->outAxis[1]->I = trans->curI / 4.0f + differential->inAxis[1]->I / trans->gearEff[gearbox->gear+1]; + differential->outAxis[0]->I = trans->curI / 4.0f + differential->inAxis[0]->I; + differential->outAxis[1]->I = trans->curI / 4.0f + differential->inAxis[1]->I; differential = &(trans->differential[TRANS_REAR_DIFF]); - differential->outAxis[0]->I = trans->curI / 4.0f + differential->inAxis[0]->I / trans->gearEff[gearbox->gear+1]; - differential->outAxis[1]->I = trans->curI / 4.0f + differential->inAxis[1]->I / trans->gearEff[gearbox->gear+1]; + differential->outAxis[0]->I = trans->curI / 4.0f + differential->inAxis[0]->I; + differential->outAxis[1]->I = trans->curI / 4.0f + differential->inAxis[1]->I; } } @@ -241,13 +241,14 @@ SimTransmissionUpdate(tCar *car) { tTransmission *trans = &(car->transmission); tClutch *clutch = &(trans->clutch); + tGearbox *gearbox = &(trans->gearbox); tDifferential *differential, *differential0, *differential1; tdble transfer = MIN(clutch->transferValue * 3.0f, 1.0f); switch(trans->type) { case TRANS_RWD: differential = &(trans->differential[TRANS_REAR_DIFF]); - differential->in.Tq = (car->engine.Tq_response + car->engine.Tq) * trans->curOverallRatio * transfer; + differential->in.Tq = (car->engine.Tq_response + car->engine.Tq) * trans->curOverallRatio * transfer * trans->gearEff[gearbox->gear+1]; SimDifferentialUpdate(car, differential, 1); SimUpdateFreeWheels(car, 0); /* printf("s0 %f - s1 %f (%f) inTq %f -- Tq0 %f - Tq1 %f (%f)\n", */ @@ -257,7 +258,7 @@ SimTransmissionUpdate(tCar *car) break; case TRANS_FWD: differential = &(trans->differential[TRANS_FRONT_DIFF]); - differential->in.Tq = (car->engine.Tq_response + car->engine.Tq) * trans->curOverallRatio * transfer; + differential->in.Tq = (car->engine.Tq_response + car->engine.Tq) * trans->curOverallRatio * transfer * trans->gearEff[gearbox->gear+1]; SimDifferentialUpdate(car, differential, 1); SimUpdateFreeWheels(car, 1); /* printf("s0 %f - s1 %f (%f) inTq %f -- Tq0 %f - Tq1 %f (%f)\n", */ @@ -270,7 +271,7 @@ SimTransmissionUpdate(tCar *car) differential0 = &(trans->differential[TRANS_FRONT_DIFF]); differential1 = &(trans->differential[TRANS_REAR_DIFF]); - differential->in.Tq = (car->engine.Tq_response + car->engine.Tq) * trans->curOverallRatio * transfer; + differential->in.Tq = (car->engine.Tq_response + car->engine.Tq) * trans->curOverallRatio * transfer * trans->gearEff[gearbox->gear+1]; differential->inAxis[0]->spinVel = (differential0->inAxis[0]->spinVel + differential0->inAxis[1]->spinVel) / 2.0f; differential->inAxis[1]->spinVel = (differential1->inAxis[0]->spinVel + differential1->inAxis[1]->spinVel) / 2.0f; differential->inAxis[0]->Tq = (differential0->inAxis[0]->Tq + differential0->inAxis[1]->Tq) / differential->ratio;