JSBSim change from Dave Luff:
Attached is a fix to add a short period of cranking time required before the engine fires. I've also added a little hack to limit the torque applied by the starter motor when the rpm is less than 10 in order to avoid the rpm overshooting idle in the first time step when the prop is producing very little resistance due to the low rpm.
This commit is contained in:
parent
e1843e15d4
commit
827e11ff81
1 changed files with 26 additions and 27 deletions
|
@ -213,26 +213,21 @@ void FGPiston::doEngineStartup(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
//Check mode of engine operation
|
//Check mode of engine operation
|
||||||
// ACK - unfortunately this hack doesn't work in JSBSim since the RPM is reset
|
|
||||||
// each iteration by the propeller :-(
|
|
||||||
if (Cranking) {
|
if (Cranking) {
|
||||||
crank_counter++;
|
crank_counter++;
|
||||||
if (RPM <= 480) {
|
if (RPM <= 480) {
|
||||||
RPM += 100;
|
// Do nothing !! - cranking power output is now handled in the doPower section
|
||||||
if (RPM > 480)
|
|
||||||
RPM = 480;
|
|
||||||
} else {
|
} else {
|
||||||
// consider making a horrible noise if the starter is engaged with
|
// consider making a horrible noise if the starter is engaged with
|
||||||
// the engine running
|
// the engine running
|
||||||
}
|
}
|
||||||
// TODO - find a better guess at cranking speed
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// if ((!Running) && (spark) && (fuel) && (crank_counter > 120)) {
|
// if ((!Running) && (spark) && (fuel) && (crank_counter > 120)) {
|
||||||
|
|
||||||
if ((!Running) && (spark) && (fuel)) {
|
if ((!Running) && (spark) && (fuel)) {
|
||||||
// start the engine if revs high enough
|
// start the engine if revs high enough
|
||||||
if (RPM > 450) {
|
if ((RPM > 450) && (crank_counter > 175)) {
|
||||||
// For now just instantaneously start but later we should maybe crank for
|
// For now just instantaneously start but later we should maybe crank for
|
||||||
// a bit
|
// a bit
|
||||||
Running = true;
|
Running = true;
|
||||||
|
@ -351,28 +346,32 @@ void FGPiston::doFuelFlow(void)
|
||||||
void FGPiston::doEnginePower(void)
|
void FGPiston::doEnginePower(void)
|
||||||
{
|
{
|
||||||
ManifoldPressure_inHg *= p_amb / p_amb_sea_level;
|
ManifoldPressure_inHg *= p_amb / p_amb_sea_level;
|
||||||
double ManXRPM = ManifoldPressure_inHg * RPM;
|
if(Running) {
|
||||||
|
double ManXRPM = ManifoldPressure_inHg * RPM;
|
||||||
// FIXME: this needs to be generalized
|
// FIXME: this needs to be generalized
|
||||||
Percentage_Power = (6e-9 * ManXRPM * ManXRPM) + (8e-4 * ManXRPM) - 1.0;
|
Percentage_Power = (6e-9 * ManXRPM * ManXRPM) + (8e-4 * ManXRPM) - 1.0;
|
||||||
double T_amb_degF = (T_amb * 1.8) - 459.67;
|
double T_amb_degF = (T_amb * 1.8) - 459.67;
|
||||||
double T_amb_sea_lev_degF = (288 * 1.8) - 459.67;
|
double T_amb_sea_lev_degF = (288 * 1.8) - 459.67;
|
||||||
Percentage_Power =
|
Percentage_Power =
|
||||||
Percentage_Power + ((T_amb_sea_lev_degF - T_amb_degF) * 7 /120);
|
Percentage_Power + ((T_amb_sea_lev_degF - T_amb_degF) * 7 /120);
|
||||||
double Percentage_of_best_power_mixture_power =
|
double Percentage_of_best_power_mixture_power =
|
||||||
Power_Mixture_Correlation->GetValue(14.7 / equivalence_ratio);
|
Power_Mixture_Correlation->GetValue(14.7 / equivalence_ratio);
|
||||||
Percentage_Power =
|
Percentage_Power =
|
||||||
Percentage_Power * Percentage_of_best_power_mixture_power / 100.0;
|
Percentage_Power * Percentage_of_best_power_mixture_power / 100.0;
|
||||||
if (Percentage_Power < 0.0)
|
if (Percentage_Power < 0.0)
|
||||||
Percentage_Power = 0.0;
|
Percentage_Power = 0.0;
|
||||||
else if (Percentage_Power > 100.0)
|
else if (Percentage_Power > 100.0)
|
||||||
Percentage_Power = 100.0;
|
Percentage_Power = 100.0;
|
||||||
HP = Percentage_Power * MaxHP / 100.0;
|
HP = Percentage_Power * MaxHP / 100.0;
|
||||||
|
} else {
|
||||||
//Hack
|
// Power output when the engine is not running
|
||||||
if (!Running) {
|
|
||||||
if (Cranking) {
|
if (Cranking) {
|
||||||
if (RPM < 480) {
|
if (RPM < 10) {
|
||||||
HP = 3.0 + ((480 - RPM) / 10.0);
|
HP = 3.0; // This is a hack to prevent overshooting the idle rpm in the first time step
|
||||||
|
// It may possibly need to be changed if the prop model is changed.
|
||||||
|
} else if (RPM < 480) {
|
||||||
|
HP = 3.0 + ((480 - RPM) / 10.0);
|
||||||
|
// This is a guess - would be nice to find a proper starter moter torque curve
|
||||||
} else {
|
} else {
|
||||||
HP = 3.0;
|
HP = 3.0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue