Allow YASim flight models to override the hard-coded fine and coarse
propeller pitch stops for constant speed propellers. The default values are the same as the previous hard-coded values. The new attributes, "fine-stop" and "coarse-stop", are documented in the base package, Docs/README.yasim.
This commit is contained in:
parent
395ea07252
commit
86c3a3b5c4
4 changed files with 21 additions and 3 deletions
|
@ -762,6 +762,11 @@ void FGFDM::parsePropeller(XMLAttributes* a)
|
|||
PropEngine* thruster = new PropEngine(prop, eng, moment);
|
||||
_airplane.addThruster(thruster, mass, cg);
|
||||
|
||||
// Set the stops (fine = minimum pitch, coarse = maximum pitch)
|
||||
float fine_stop = attrf(a, "fine-stop", 0.25f);
|
||||
float coarse_stop = attrf(a, "coarse-stop", 4.0f);
|
||||
prop->setStops(fine_stop, coarse_stop);
|
||||
|
||||
if(a->hasAttribute("takeoff-power")) {
|
||||
float power0 = attrf(a, "takeoff-power") * HP2W;
|
||||
float omega0 = attrf(a, "takeoff-rpm") * RPM2RAD;
|
||||
|
|
|
@ -119,7 +119,9 @@ void PropEngine::stabilize()
|
|||
|
||||
bool goingUp = false;
|
||||
float step = 10;
|
||||
while(true) {
|
||||
|
||||
// If we cannot manage this in 100 iterations, give up.
|
||||
for (int n = 0; n < 100; n++) {
|
||||
float ptau, thrust;
|
||||
_prop->calc(_rho, speed, _omega * _gearRatio, &thrust, &ptau);
|
||||
_eng->calc(_pressure, _temp, _omega);
|
||||
|
|
|
@ -37,12 +37,18 @@ void Propeller::setTakeoff(float omega0, float power0)
|
|||
float density = Atmosphere::getStdDensity(0);
|
||||
_tc0 = (torque * gamma) / (0.5f * density * V2 * _f0);
|
||||
}
|
||||
|
||||
void Propeller::setStops(float fine_stop, float coarse_stop)
|
||||
{
|
||||
_fine_stop = fine_stop;
|
||||
_coarse_stop = coarse_stop;
|
||||
}
|
||||
|
||||
void Propeller::modPitch(float mod)
|
||||
{
|
||||
_j0 *= mod;
|
||||
if(_j0 < 0.25f*_baseJ0) _j0 = 0.25f*_baseJ0;
|
||||
if(_j0 > 4*_baseJ0) _j0 = 4*_baseJ0;
|
||||
if(_j0 < _fine_stop*_baseJ0) _j0 = _fine_stop*_baseJ0;
|
||||
if(_j0 > _coarse_stop*_baseJ0) _j0 = _coarse_stop*_baseJ0;
|
||||
}
|
||||
|
||||
void Propeller::setManualPitch()
|
||||
|
@ -68,6 +74,7 @@ void Propeller::calc(float density, float v, float omega,
|
|||
// For manual pitch, exponentially modulate the J0 value between
|
||||
// 0.25 and 4. A prop pitch of 0.5 results in no change from the
|
||||
// base value.
|
||||
// TODO: integrate with _fine_stop and _coarse_stop variables
|
||||
if (_manual)
|
||||
_j0 = _baseJ0 * Math::pow(2, 2 - 4*_proppitch);
|
||||
|
||||
|
|
|
@ -16,6 +16,8 @@ public:
|
|||
// course.
|
||||
Propeller(float radius, float v, float omega, float rho, float power);
|
||||
|
||||
void setStops (float fine_stop, float coarse_stop);
|
||||
|
||||
void setTakeoff(float omega0, float power0);
|
||||
|
||||
void modPitch(float mod);
|
||||
|
@ -38,6 +40,8 @@ private:
|
|||
float _lambdaPeak; // constant, ~0.759835;
|
||||
float _beta; // constant, ~1.48058;
|
||||
float _tc0; // thrust "coefficient" at takeoff
|
||||
float _fine_stop; // ratio for minimum pitch (high RPM)
|
||||
float _coarse_stop; // ratio for maximum pitch (low RPM)
|
||||
bool _matchTakeoff; // Does _tc0 mean anything?
|
||||
bool _manual; // manual pitch mode
|
||||
float _proppitch; // prop pitch control setting (0 ~ 1.0)
|
||||
|
|
Loading…
Reference in a new issue