From eeeea44805699f8d4baad924ef7f9dd0b446d987 Mon Sep 17 00:00:00 2001 From: mfranz Date: Mon, 14 Aug 2006 22:38:59 +0000 Subject: [PATCH] Maik JUSTUS: YASim helicopter FDM update --- Docs/README.yasim | 168 +++++++++++++++++++++++++++++++----- Docs/README.yasim.rotor.png | Bin 0 -> 8118 bytes 2 files changed, 145 insertions(+), 23 deletions(-) create mode 100644 Docs/README.yasim.rotor.png diff --git a/Docs/README.yasim b/Docs/README.yasim index 84783117b..d0fca8064 100644 --- a/Docs/README.yasim +++ b/Docs/README.yasim @@ -441,10 +441,13 @@ control: This element, which can appear in two different contexts, rotor: A rotor. Used for simulating helicopters. You can have one, two or even more. + There is a drawing of a rotor in the Doc-directory + (README.yasim.rotor.gif) Please find the measures from this drawing + for several parameters in square brackets []. If you specify a rotor, you do not need to specify a wing or hstab, - the settings for approach and cruise will be ignored then. Instead - stored results from the c182 will be used. - + the settings for approach and cruise will be ignored then. You have + to specify the solver results manually. See below. + name: The name of the rotor. (some data is stored at /rotors/name/) The rpm, cone angle, yaw angle and roll angle are stored @@ -453,21 +456,44 @@ rotor: A rotor. Used for simulating helicopters. You can have one, two All angles are in degree, positive values always mean "up". This is not completely tested, but seem to work at least for rotors rotating counterclockwise. + A value stall gives the fraction of the rotor in stall + (weighted by the fraction the have on lift and drag + without stall). Use this for modifying the rotor-sound. + The torque property has a bug. x,y,z: The position of the rotor center nx,ny,nz: The normal of the rotor (pointing upwards, will be normalized by the computer) fx,fy,fz: A Vector pointing forward, if not perpendicular to the normal it will be corrected by the computer - diameter: The diameter in meter + diameter: The diameter in meter [D] numblades: The number of blades weightperblade: The weight per blade in pounds relbladecenter: The relative center of gravity of the blade. Maybe not 100% correct interpreted; use 0.5 for the start and - change in small steps + change in small steps [b/R] + chord: The chord of the blade its base, along the X axis + (not normal to the leading edge, as it is + sometimes defined). [c] + twist: The difference between the incidence angle at the + blade root and the incidence angle at the wing + tip. Typically, this is a negative number so + that the rotor tips have a lower angle of attack. + taper: The taper fraction, expressed as the tip chord + divided by the root chord. A taper of one is a + bar blade, and zero would be a blade ending + at a point. Defaults to one. [d/c] + rel_len_where_incidence_is_measured: If the blade is twisted, + you need a point where to measure the incidence angle. + Zero means at the base, 1 means at the tip. Typically + it should be something near 0.7 + rel_len_blade_start: Typically the blade is not mounted in the + center of the rotor [a/R] rpm: rounds per minute. - ccw: determines if the rotor rotates clockwise (="false") or - counterclockwise (="true"), (if you look on the top of the - normal, so the bo105 has counterclockwise rotor) + ccw: determines if the rotor rotates clockwise (="0") or + counterclockwise (="1"), (if you look on the top of the + normal, so the bo105 has counterclockwise rotor). + "true" and "false" are not any longer supported to + increase my lifespan. ;-) maxcollective: The maximum of the collective incidence in degree mincollective: The minimum of the collective incidence in degree maxcyclicele: The maximum of the cyclic incidence in degree for @@ -478,19 +504,76 @@ rotor: A rotor. Used for simulating helicopters. You can have one, two the aileron like function mincyclicail: The minimum of the cyclic incidence in degree for the aileron like function + airfoil_incidence_no_lift: non symmetric airfoils produces lift + with no incidence. This is is the incidence, where the + airfoil is producing no lift. Zero for symmetrical airfoils + (default) + incidence_stall_zero_speed: + incidence_stall_half_sonic_speed: the stall incidence is a function + of the speed. I found some measured data, where this is + linear over a wide range of speed. Of course the linear + region ends at higher speeds than zero, but just + extrapolate the linear behavior to zero. + lift_factor_stall: In stall airfoils produce less lift. Without + stall the c_lift of the profile is assumed to be + sin(incidence-airfoil_incidence_no_lift)*liftcoef; + And in stall: + sin(2*(incidence-airfoil_incidence_no_lift))*liftcoef*... + ...lift_factor_stall; + Therefore this factor is not the quotient between lift + with and without stall. Use 0.28 if you have no idea. + drag_factor_stall: The drag of an airfoil in stall is larger than + without stall. + Without stall c_drag is assumed to be + abs(sin(incidence-airfoil_incidence_no_lift))*dragcoef1... + ..+dragcoef0); + With stall this is multiplied by drag_factor + stall_change_over: For incidence(incidence_stall+stall_change_over) there is + stall. In the range between this incidences it is + interpolated linear. + + The airfoil of the rotor can be described in two ways. First you + can define the needed power for different pitch values and the + total lift force at a user-defined pitch value. Don't use pitch + values greater than the stall incidence. You could get strange + results. + pitch_a: A collective incidence angle, used for the next token forceatpitch_a: The force, the rotor is producing when the incident - angle is equal pitch_a. I.e. hover-pitch and a force + angle is equal pitch_a. Without ground effect and with + maximum translational lift. I.e. hover-pitch and a force equivalent to the weight. (in pounds of force) pitch_b: A collective incidence angle, used for the next token poweratpitch_b: the power the rotor needs at pitch_b. (i.e. at the bo105 the main rotor consumes bout 90% of the engine power, - and 9% the tail rotor. In kW. Used for calculation of the - torque. + and 9% the tail rotor. In kW. poweratpitch_0: the power the rotor needs at zero pitch. - In kW. Used for calculation of the torque. - notorque: If set to "true" the calculated torque is always zero. - Very helpful while adjusting rotor parameters. + In kW. Used for calculation of the airfoil coefficients. + In near future you can define them directly. + + The second way is to define the lift and drag coefficients directly. + Without stall the c_lift of the profile is assumed to be + sin(incidence-airfoil_incidence_no_lift)*liftcoef; + And in stall: + sin(2*(incidence-airfoil_incidence_no_lift))*liftcoef*... + ...lift_factor_stall; + Without stall c_drag is assumed to be + abs(sin(incidence-airfoil_incidence_no_lift))*dragcoef1... + ..+dragcoef0); + See above, how the coefficients are defined with stall. + The parameters: + airfoil_lift_coefficient: liftcoef + airfoil_drag_coefficient0: dragcoef0 + airfoil_drag_coefficient1: dragcoef1 + I read in a forum, that, if you calculate the lift of an heli rotor, + you will get a value larger than the measured one. This seems to be + valid for this simulation. If you use values for the lift + coefficient from real airfoils you will get unrealistic high lift as + result (approx. a factor of 2). As starting parameters you can use + airfoil_lift_coefficient="1.9" + airfoil_drag_coefficient0="0.0075" + airfoil_drag_coefficient1="0.2" flapmin: Minimum flapping angle. (Should normally never reached) flapmax: Maximum flapping angle. (Should normally never reached) flap0: Flapping angle at no rotation, i.e. -5 @@ -506,7 +589,7 @@ rotor: A rotor. Used for simulating helicopters. You can have one, two rotors) For rotors without flapping hinge (where the blade are twisted instead, i.e. Bo 105, Lynx) use a mean value, maybe 0.2. This value has a extreme result in the behavior - of the rotor + of the rotor [F/r] delta3: Some rotors have a delta3 effect, which results in a decreasing of the incidence when the rotor is flapping. A value of 0 (as most helicopters have) means no change in @@ -522,17 +605,56 @@ rotor: A rotor. Used for simulating helicopters. You can have one, two If you know the flapping angle for a given cyclic input you can adjust this by changing this value. Or if you now the maximum roll rate or ... - translift: Helicopters have "translational lift", which is due to - turbulence and hard to calculate, so this simulation uses - a phenomenological ansatz. Use .1 for the start value - dragfactor: The drag of the rotating rotor perpendicular to the - rotor plane is larger than the drag of the not rotating - rotor. Hard to calculate, so it is added phenomenological + translift_maxfactor: Helicopters have "translational lift", which + is due to turbulence. In forward flying the rotor gets less + turbulence air and produces more lift. The factor is the + quotient between lift at high airspeeds to the lift at + hover (with same pitch). + translift_ve: the speed, where the translational lift reaches 1/e of + the maximum value. In m/s. + ground_effect_constant: Near to the ground the rotor produces more + torque than in higher altitudes. The ground effect is + calculated as + factor = 1+diameter/altitude*_ground_effect_constant + number_of_segments: The rotor is simulated in four different + directions (probably this will be extended in future). + In every direction the rotor is simulated at + number_of_segments points. If the value is to small, the + rotor will react unrealistic. If it is to high, cpu-power + will be wasted. I now use a value of 10, but probably a + smaller value for the tail-rotor would be sufficient. - Any rotor needs a subelement for the engine - (ROTORENGINEON) and can have subelements for the cyclic + All rotor can have subelements for the cyclic (CYCLICELE, CYCLICAIL) and collective (COLLECTIVE) input. +rotorgear: If you are using one ore more rotors you have to define a + rotorgear. It connects all the rotors and adds a simple engine. + In future it will be possible, to add a YASim-engine. + max_power_engine: the maximum power of the engine, in kW. + engine_prop_factor: the engine is working as a pd-regulator. This + is the width of the regulation-band, or, in other words, + the inverse of the proportional-factor of the regulator. + If you set it to 0.02, than up to 98% of the rotor-rpm + the engine will produce maximum torque. At 100% of + the engine will produce no torque. It is planned to use + YASim-engines instead of this simple engine. + engine_accell_limit: The d-factor of the engine is defined as the + maximum acceleration rate of the engine in %/s, + default is 5%/s. + max_power_rotor_brake: the maximum power of the rotor brake, in kW + at normal rpm (most? real rotor breaks would be overheated + if used at normal rpm, but this is not simulated now) + yasimdragfactor: + yasimliftfactor: the solver is not working with rotor-aircrafts. + Therefore you have to specify the results yourself. + 10 for drag and 140 for lift seem to be good starting + values. + + The rotorgear needs a subelement for the engine + (ROTORGEARENGINEON) and can have a subelement for the + rotor brake (ROTORBRAKE). + The rotor simulation is very "beta" and not finished yet. So don't spend too much time to adjust a flight behavior to the smallest details now. + diff --git a/Docs/README.yasim.rotor.png b/Docs/README.yasim.rotor.png new file mode 100644 index 0000000000000000000000000000000000000000..5fae93010c56c355c41e2786bd16219c5faffce1 GIT binary patch literal 8118 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 literal 0 HcmV?d00001