• Which the release of FS2020 we see an explosition of activity on the forun and of course we are very happy to see this. But having all questions about FS2020 in one forum becomes a bit messy. So therefore we would like to ask you all to use the following guidelines when posting your questions:

    • Tag FS2020 specific questions with the MSFS2020 tag.
    • Questions about making 3D assets can be posted in the 3D asset design forum. Either post them in the subforum of the modelling tool you use or in the general forum if they are general.
    • Questions about aircraft design can be posted in the Aircraft design forum
    • Questions about airport design can be posted in the FS2020 airport design forum. Once airport development tools have been updated for FS2020 you can post tool speciifc questions in the subforums of those tools as well of course.
    • Questions about terrain design can be posted in the FS2020 terrain design forum.
    • Questions about SimConnect can be posted in the SimConnect forum.

    Any other question that is not specific to an aspect of development or tool can be posted in the General chat forum.

    By following these guidelines we make sure that the forums remain easy to read for everybody and also that the right people can find your post to answer it.

FSXA Helicopter: Weird engine surge...

Hi Roy, just to make sure... here's mine:


[WEIGHT_AND_BALANCE]
max_gross_weight = 20500 // (pounds)
empty_weight = 14400 // (pounds)

reference_datum_position = 0.0, 0.0, 0.0 // (feet) distance from FlightSim Reference position: (1/4 chord, centerline, waterline)
empty_weight_CG_position = 0.0, 0.0, 0.0 // (feet) longitudinal, lateral, vertical distance from specified datum

max_number_of_stations = 5

station_load.0 = 190, 7.20, 1.00, 0.0
station_load.1 = 190, 7.20, -1.00, 0.0
station_load.2 = 190, -1.00, -1.00, 0.0
station_load.3 = 190, -5.00, 0.00, 0.0
station_load.4 = 0, -5.00, 0.00, 0.0
station_load.5 = 0, 0.00, 0.00, 0.0

station_name.0 ="Pilot"
station_name.1 ="Co-Pilot"
station_name.2 ="SAROO"
station_name.3 ="Flight Engineer"
station_name.4 ="Passenger"
station_name.5 ="Cargo"

;Moments of Inertia
empty_weight_pitch_MOI = 130000
empty_weight_roll_MOI = 50000
empty_weight_yaw_MOI = 120000
empty_weight_coupled_MOI = 0

[GeneralEngineData]
engine_type = 3 //0=Piston, 1=Jet, 2=None, 3=Helo-Turbine, 4=Rocket, 5=Turboprop
Engine.0 = 2.0, -3.0, 5.0 //(feet) longitudinal, lateral, vertical distance from reference datum
Engine.1 = 2.0, 3.0, 5.0 //(feet) longitudinal, lateral, vertical distance from reference datum
fuel_flow_scalar= 0.7 //Fuel flow scalar
min_throttle_limit = 0.0; //Minimum percent throttle. Generally negative for turbine reverser

[TurbineEngineData]
fuel_flow_gain = 0.011 //Gain on fuel flow
inlet_area = 1.2 //Square Feet, engine nacelle inlet area
rated_N2_rpm = 23000 //RPM, second stage compressor rated value
static_thrust = 0 //Lbs, max rated static thrust at Sea Level

[turboshaft_engine]
power_scalar = 1.0 //Scalar on Turboprop power
maximum_torque = 1300 //Maximum torque available (ft-lbs)
rated_shaft_hp = 2880 //rated HP of shaft
PowerSpecificFuelConsumption = 0.50 //Brake power specific fuel consumption (turboshaft only)

//[propeller]
//thrust_scalar=1.0 //Nur ein versuch

[Helicopter]
low_realism_stability_scale=1.0, 1.0, 1.0 //Pitch , Bank, Yaw Scalars on Stability in Low Realism Settings
reference_length = 61.4
reference_frontal_area = 90.0 //80.0
reference_side_area = 200
side_aero_center = -6.0 //0.0
lift_aero_center = -2.5 //0.0
right_trim_scalar = 3.0
correlator_available = 1 //0
governed_pct_rpm_ref = 1.0
//governor_pid read as: (P)roportional (I)ntegral (D)erivative
//governor_pid = 0.05, 0.001, 0.05, 0.02, 0.10 //0.05, 0.001, 0.05, 0.1, 0.1
rotor_brake_scalar = 20.0 //0.3
torque_scalar = 7.0// 20.0
tail_rotor_translating_scalar = 1.0 //0.5
cyclic_roll_control_scalar =2.0
cyclic_pitch_control_scalar =2.0 // 1.0
pedal_control_scalar =0.4
collective_on_rotor_torque_scalar = 0.8 //0.6

[fuselage_aerodynamics]
drag_force_cf = 0.52 //0.70
side_drag_force_cf = 10.0
pitch_damp_cf = -8.0 //-3.0
pitch_stability_cf = 0.5
roll_damp_cf = -4.0
yaw_damp_cf = -0.6
yaw_stability_cf = 0.27

[MainRotor]
Position = 0, 0, 8.0 //Longitudinal, Lateral, Vertical feet from datum
Radius = 31.0 //feet
max_disc_angle = 7.0
static_pitch_angle = 4.0
static_bank_angle = 0
RatedRpm = 203 // 210
Number_of_blades = 5
Weight_per_blade = 150.0
inflow_vel_reference = 56.0 //51.0
weight_to_moi_factor= 0.36 //0.46

[SecondaryRotor]
Position = -60.0, -1.45, 6.1 //Longitudinal, Lateral, Vertical feet from datum
TailRotor = 1
Radius = 5.2 //feet

[Sling.0]
hoist_extend_rate = 5 //Feet per second
hoist_retract_rate = -5 //Feet per second
position = -7.3, 4.7, 2.3 //Feet from datum
max_stretch = 2.0 //Max stretch distance at ultimate load
damping_ratio = 0.6 //0 for no damping to 1.0 for critically damped.
rated_load = 600 //Characteristics tension of cable in pounds
ultimate_load = 2250 //Breaking force in pounds
tolerance_angle=45 //Angle, in degrees, used to determine lateral breaking force limit
auto_pickup_range = 10 //Max Range, in feet, for auto-pickup
auto_pickup_max_speed = 8.5 //Maximum speed (feet per second) for auto-pickup
hoist_payload_station = 5 //Payload station in which the hoist will load in and out of. 1 is first station.
hoist_door=0 //Door associated with hoist. Must be open for use.

[Sling.1]
position = 0.0, 0.0, -1.0 //Feet from datum
max_stretch = 2.0 //Max stretch distance at ultimate load
damping_ratio = 0.75 //0 for no damping to 1.0 for critically damped.
rated_load = 10000 //Characteristics tension of cable in pounds
ultimate_load = 25000 //Breaking force in pounds
tolerance_angle=70 //Angle, in degrees, used to determine lateral breaking force limit
auto_pickup_range = 8 //Max Range, in feet, for auto-pickup
auto_pickup_max_speed = 8.5 //Maximum speed (feet per second) for auto-pickup

[electrical]
max_battery_voltage = 24.0
generator_alternator_voltage = 112.0
max_generator_alternator_amps = 130.0

;BusType, MaxAmpLoad, MinVoltage BusTypes:0=MainBus,1=AvionicsBus,2=BatteryBus,3=HotBatteryBus,4-7=Generator/AlternatorBus(1-4)
avionics_bus= 0, 5 , 9.5
avionics= 1, 5 , 9.5
additional_system= 0, 2 , 9.5
marker_beacon= 1, 2 , 9.0
fuel_pump= 0, 5 , 9.0

[contact_points]

//0 Class <0=none,1=wheel, 2=scrape, 3=skid>
//1 Longitudinal Position (feet)
//2 Lateral Position (feet)
//3 Vertical Position (feet)
//4 Impact Damage Threshold (Feet Per Minute)
//5 Brake Map (0=None, 1=Left, 2=Right)
//6 Wheel Radius (feet)
//7 Steer Angle (degrees)
//8 Static Compression (feet) (0 if rigid)
//9 Max/Static Compression Ratio
//10 Damping Ratio (0=Undamped, 1=Critically Damped)
//11 Extension Time (seconds)
//12 Retraction Time (seconds)
//13 Sound Type
//14 Airspeed limit for retraction (KIAS)
//15 Airspeed that gear gets damage at (KIAS)


static_pitch = 0.5 //1.27
static_cg_height = 2.88 //9
max_number_of_points = 7
//........0....1.......2.........3..........4....5.....6.....7.....8......9....10....11....12....13....14....15
point.0 = 1, -20.1296, 00.0000, -9.0754, 0.00, 0.00, 1.00, 60.0, 0.90, 0.20, 0.10, 0.00, 0.00, 0.00, 0.00, 0.00
point.1 = 1, 002.6256, -7.3295, -9.7304, 4574, 2.00, 1.00, 0.00, 1.50, 0.70, 1.72, 7.00, 7.00, 0.00, 0.00, 0.00
point.2 = 1, 002.7038, 07.3295, -9.7304, 4574, 1.00, 1.00, 0.00, 1.50, 0.70, 1.72, 7.00, 7.00, 0.00, 0.00, 0.00
point.3 = 4, -20.0, 0.0, -6.3, 2500, 0, 0.0, 0, 0.85, 3.5, 0.15, 0, 0, 0, 0, 0
point.4 = 4, 4.0, -7.8, -6.4, 2500, 0, 0.0, 0, 0.85, 1.5, 0.20, 0, 0, 0, 0, 0
point.5 = 4, 4.0, 7.8, -6.4, 2500, 0, 0.0, 0, 0.85, 1.5, 0.20, 0, 0, 0, 0, 0
point.6 = 4, 12.0, 0.0, -5.8, 2500, 0, 0.0, 0, 0.85, 1.5, 0.25, 0, 0, 0, 0, 0

gear_system_type=1 //Hydraulic

[brakes]
parking_brake = 1 //Parking brake available
toe_brakes_scale = 0.7 //Brake scalar
auto_brakes = 0

[hydraulic_system]
normal_pressure = 2395.0 //PSI
electrical_pumps=1
engine_map = 1,1,0,0 //pumps on Eng1,2


[Views]
eyepoint = 8.800,1.800,1.000
zoom=0.30


[Radios]
// Radio Type = availiable, standby frequency, has glide slope
Audio.1 = 1
Com.1 = 1, 1
Com.2 = 1, 1
Nav.1 = 1, 1, 1
Nav.2 = 1, 1, 0
Adf.1 = 1
Transponder.1 = 1
Marker.1 = 1

[keyboard_response]
//Breakpoint speeds (knots) on the keyboard increments of control surfaces.
//Speed at which the incremenet is reduced to 1/2 and 1/8 respectively.
//NOTE: These map to cyclic (fore/aft), cyclic (left/right), and anti-torque
elevator = 100, 180
aileron = 200, 1000
rudder = 200, 1000

[direction_indicators]
//1 Type: 0=None, 1=Vacuum Gyro, 2=Electric Gyro, 3=Electro-Mag Slaved Compass, 4=Slaved to another
//2 Indicator number of slaving indicator if Type = 4
direction_indicator.0=3,0
direction_indicator.1=3,0

[attitude_indicators]
//Type: 0=None, 1=Vacuum Gyro, 2=Electric Gyro
attitude_indicator.0 = 2
attitude_indicator.1 = 2

[turn_indicators]
//Type: 0=None, 1=Electric Gyro, 2= Vacuum Gyro
turn_indicator.0=1,0
turn_indicator.1=1,0

[pneumatic_system]
max_pressure=18.000000
bleed_air_scalar=1.000000

[Auxiliary Power Unit]
available = 0

[pitot_static]
vertical_speed_time_constant = 1 //Increasing this value will cause a more instantaneous reaction in the VSI
pitot_heat = 1.0 //Scalar on heat effectiveness, 0 = not available

[LIGHTS]
//Types: 1=beacon, 2=strobe, 3=navigation, 4=cockpit, 5=landing, 6=taxi, 7=recognition, 8=wing, 9=logo, 10=cabin
light.0 = 3, 2.70, -8.00, -4.70, fx_navred , //port side position light
light.1 = 3, 3.20, 8.20, -4.60, fx_navgre , //starboard side position light
light.2 = 5, 13.50, -1.90, -5.00, fx_landing , //port side flood light
light.3 = 5, 13.50, 1.90, -5.00, fx_landing , //starboard side flood light
light.4 = 5, 14.40, 1.50, -2.20, fx_landing , //landing light


[EFFECTS]
wake=fx_wake
water=fx_spray
dirt=fx_tchdrt
concrete=fx_sparks
touchdown=fx_tchdwn_m, 1
EngineFire=fx_heliFire


[exits]
number_of_exits = 3
exit.0 = 0.4 // (0=Main 1=Cargo 2=Emergency)
exit.1 = 0.4 // (0=Main 1=Cargo 2=Emergency)
exit.2 = 0.4 // (0=Main 1=Cargo 2=Emergency)

[fuel]
LeftMain = -2.0, 0.0, -1.21, 411.0, 2.6 //Longitudinal (feet), Lateral (feet), Vertical (feet), Usable(gallons), Unusable (gallons)
RightMain = 2.0, 0.0, -1.2, 404.0, 2.6 //Longitudinal (feet), Lateral (feet), Vertical (feet), Usable(gallons), Unusable (gallons)

fuel_type = 2 //Fuel type: 1 = Avgas, 2 = JetA
number_of_tank_selectors = 2
electric_pump=1
fuel_dump_rate = 0.0167 //Percent of max quantity per second, i.e. about 1 minute for full fuel

[Reference Speeds]
cruise_speed = 110.0 //Knots True (KTAS)
max_indicated_speed = 135 //Red line (KIAS)

[autopilot]
autopilot_available=1
flight_director_available=1
default_vertical_speed=800.000000
autothrottle_available=1
pitch_takeoff_ga=-4.000000
max_pitch=10.000000
max_pitch_acceleration=1.000000
max_pitch_velocity_lo_alt=2.000000
max_pitch_velocity_hi_alt=1.500000
max_pitch_velocity_lo_alt_breakpoint=20000.000000
max_pitch_velocity_hi_alt_breakpoint=28000.000000
max_bank_acceleration=1.800000
max_bank_velocity=3.000000
max_throttle_rate=0.100000
nav_proportional_control=9.000000
nav_integrator_control=0.250000
nav_derivative_control=0.000000
nav_integrator_boundary=2.500000
nav_derivative_boundary=0.000000
gs_proportional_control=9.520000
gs_integrator_control=0.260000
gs_derivative_control=0.000000
gs_integrator_boundary=0.700000
gs_derivative_boundary=0.000000
yaw_damper_gain=0.000000
autothrottle_arming_required=0
autothrottle_takeoff_ga=0
autothrottle_max_rpm=90.000000

[yaw_string]
yaw_string_available=1

[deice_system]
structural_deice_type=0 //0 = None, 1 = Heated Leading Edge, 2 = Bleed Air Boots, 3 = Eng Pump Boots
[vacuum_system]
max_pressure=5.000000
vacuum_type=1
electric_backup_pressure=0.000000
engine_map=1,1,1,1
 
Hi,
The major difference in our config files concerns the engine performance

You have:
[turboshaft_engine]
power_scalar = 1.0 //Scalar on Turboprop power
maximum_torque = 1300 //Maximum torque available (ft-lbs)
rated_shaft_hp = 2880 //rated HP of shaft

I have:
[turboshaft_engine]
power_scalar = 1.0 //Scalar on Turboprop power
maximum_torque = 650 //Maximum torque available (ft-lbs)
rated_shaft_hp = 1660 //rated HP of shaft

My understanding is that the SHP of the Gnome is 1660.

SHP is RPM/5250 times torque. The RPM concerned is the input shaft to the rotor gearbox and I believe that is 18966 for 100%.

1660 SHP equates to 459 ft lbs torque.
2880 SHP equates to 797 ft lbs torque.

The [turboshaft_engine] section describes a single engine, not the total power of both engines. It is multiplied by the number of engines to give total power.

If you had twice the torque but the same rotor characteristics there could be problems with controlling torque. I can not say that is absolutely the case, but it seems logical.

Apart from the engine performance there are only minor differences.

low_realism_stability_scale=1.0, 1.0, 1.0 only applies to the Bell 206 model

correlator_available = 1. I believe this applies to piston powered helos where the throttle is opened as you pull up on the collective.
[MainRotor]
Weight_per_blade = 150.0
inflow_vel_reference = 56.0 //51.0
weight_to_moi_factor= 0.36 //0.46

I have:
Weight_per_blade = 180.0
inflow_vel_reference = 56.0
weight_to_moi_factor=0.40

[SecondaryRotor]
Position = -60.0, -1.45, 6.1. Seems a long way back mine is at about -37 feet

As I said, I think you have double the power and that could cause the problem

Regards
Roy
 
Actually we use power reduced engines that come up with 1440hp each. This was done for lifetime extension reasons. The other thing, I am going to give a shot, right away. :)
 
OK, this is weird.

I've tried your settings. I ran up the engines manually and ctrl+e method. I let them time to settle for about 20minutes after each start.

1. I had a constant oscilation of Rotor_RPM between 92% and 105% on both methods, never settling. Torque readings consequently range from100% to 0% and back.

2. As soon as I pull power, I have an almost immediate breakdown of Rotor_RPM and the engines are unable to regain it even on Torque readings of 100% and above.

About the settings I've used before in "manual mode":

Torque readings in cruise at some 60% - 65%,
Torque readings during take off 75% to 85%, 90% on rare occasions (max weight),
Fuel consuption pretty close to the original,
Stable hover,

So, for whatever reason, mine behaved way better with the old settings, with the disadvantage, that I was unable to use the governor...

Did you alter anything in the *.air file? (Mine is completely untouched EH-101)
 
I found one other difference. My torque_scalar is 1.0, yours is 7.0. I made that change from the EH-101 (20) to reduce yaw during engine surge when I first started messing with the config file. I'm pretty sure it is an aerodynamic scalar and it should not affect the engine,

Sometimes when you comment out a config file entry FS uses default values because it needs them. I have no idea whether this applies to the PID governor, but it could well be. What I mean is that commenting out something does not necessarily mean it is inoperative.

One other thing to look at is propeller RPM. If you have a joystick/throttle with a control for prop RPM make sure it is a max or use CTRL + F4. I noticed one time that I was losing rotor RPM to the extent that the beast would not fly and it was because I had nudged the prop RPM knob on my throttle to almost minimum. As soon as I moved it to max everything was normal.

I made no changes to the .air file.

Roy
 
And again, there has been a long gap wich I have to appologize for. Sorry Roy. :)

Actually what I have done was completely deleting the original UKMIL .air and aircraft.cfg file and replacing it with the one of the EH-101. Following that I took my Dash-1 and changed the numbers.

Meanwhile I dug out a setting that works "not too bad" for my Seaking, it reads:

governor_pid = 0.25, 0, 0.9, 0.01, 0.15

There is still some oscillation in RPM, but it's best I found so far. I have the complete aircraft.cfg attached in case you want to have a look. ;)

I am thinking about giving Ron's ideas in altering the .air file a try, but as I never laid hand on one before I am a bit shy on it.
 

Attachments

Hi,

The purpose of the PID controller is to maintain rotor RPM at the datum 100%. To do that it has to adjust engine torque to reduce errors to zero with minimum overshoot. So it has to apply a correction based on the size of the error, how long the error exists and the rate of correction of the error.

The RPM error is equal to 100% minus actual RPM%. Low RPM gives a positive error, so torque should be increased and vice versa.

There are five constants in the FS helicopter PID. The first three are the Proportional, Integral and Derivative constants and the last two determine RPM error bounds for the effect of the Integral and Derivative constants.

The amount of torque increase or decrease required to maintain RPM at 100% is determined by the sum of the effects of the P, I and D controls.

The first setting (Proportional) gives the amount of effect based on the size of the RPM error. If it is large, the RPM will recover quickly, but will overshoot and then correct in the opposite direction and never settle down. If it is small the RPM will recover slowly, but will not overshoot as much.

The second setting (Integral) determines how much effect builds up over time. For example, if the rotor RPM is too low (positive error) the Integral effect will build up. This number will continue to increase until the RPM has overshot the 100% datum and the RPM error is negative. The negative RPM error input into Integral error will reduce it while the RPM is above datum and after some time it will become zero. If the RPM stays above datum, the Integral will go negative. Because Integral effect lags behind Proportional effect, it damps out overshoots. The Integral constant needs to be small.

The third setting, Derivative affects the rate of error correction by predicting the error over time. This also damps oscillations.

The last two Constants cut out the I and D effects when the RPM error is greater than the constants and this prevents "wind-up" In other words, when the RPM error is greater than the last two constants, the only correction comes from Proportional effects.


My PID settings are:
governor_pid = 0.05, 0.001, 0.05, 0.02, 0.10

Yours are:
governor_pid = 0.25, 0, 0.9, 0.01, 0.15

Lets compare them.

Your P constant is 5 times higher than mine, so it will correct errors 5 times as fast, but will give more overshoot.

Your I constant is zero so you have no Integral effect and no damping from Integral effect.

Your D constant is about twice as high as mine so it will give twice as much damping as mine.

My Integral effect is cut out (fourth constant) when the RPM error is .02 or 2%. You have no Integral effect, so the fourth constant does nothing.

My Derivative effect is cut out (fifth constant) when the RPM error is 10% and yours is cut out at 15%. Since your Derivative constant is twice mine and operates over 50% greater range it will give about 3 to 4 times as much damping.

I find that once my errors are within 10% they steady down and when within 2% they quickly become zero. I can watch the torque initially do one 100% correction, then it does about 50% then 20% and when steady it hardly moves at all at idle on the ground or in steady flight. If I apply cyclic or collective inputs that increase or decrease the amount of rotor load, I get errors but the torque increase or decrease takes care of it smoothly and quickly.

I would suggest that you change the Integral constant to a small number like 0.001 and increase the fourth constant to above 1% to give it space to work in.

Good to hear from you again,

Roy
 
Hi Roy,

thanks for your kind advice again. :) I've just tried your sugggestions with the following results:

Engine runup done with Ctrl+E to provide minimum lag between starting of both engines.

Collective full down, on the ground:
1. cycle: Max Tourque @ more than 120% until 60% Rotor-RPM then below 100% Rotor-RPM reached a peak at 105% (nice)
After that Torque to 0%, RPM to 90%

2. cycle: Max T: 80% Max R:104% Min T: 0% Min R: 93%

3. cycle: Max T: 75% Max R:103% Min T: 0% Min R: 95%

4. - 10. cycle: Max T: 70% Max R: 103% Min T: 0% Min R: 97%

So, as long as there is no power applied, there is still the accoustic and visual "dead engine" effect, if only for a couple of seconds (less than 5sec. silence)

Auto 20 ft. hover:

Max T:100% Max R:102% Min T: 35% Min R 97%

Cruise (110kts, 1500ft) AP on

Max T:100% Max R:104% Min T: 20% Min R 98%


Best results so far, I really like it. :)
 
Back
Top