1 /**********************************************************************
3 FILENAME: uiuc_aerodeflections.cpp
5 ----------------------------------------------------------------------
7 DESCRIPTION: determine the aero control surface deflections
12 ----------------------------------------------------------------------
16 ----------------------------------------------------------------------
18 REFERENCES: based on deflection portions of c172_aero.c and
21 ----------------------------------------------------------------------
23 HISTORY: 01/30/2000 initial release
24 04/05/2000 (JS) added zero_Long_trim command
25 07/05/2001 (RD) removed elevator_tab addidtion to
27 11/12/2001 (RD) added new flap routine. Needed for
28 Twin Otter non-linear model
30 ----------------------------------------------------------------------
32 AUTHOR(S): Jeff Scott <jscott@mail.com>
33 Robert Deters <rdeters@uiuc.edu>
34 Michael Selig <m-selig@uiuc.edu>
36 ----------------------------------------------------------------------
40 ----------------------------------------------------------------------
44 ----------------------------------------------------------------------
48 ----------------------------------------------------------------------
52 ----------------------------------------------------------------------
56 ----------------------------------------------------------------------
58 COPYRIGHT: (C) 2000 by Michael Selig
60 This program is free software; you can redistribute it and/or
61 modify it under the terms of the GNU General Public License
62 as published by the Free Software Foundation.
64 This program is distributed in the hope that it will be useful,
65 but WITHOUT ANY WARRANTY; without even the implied warranty of
66 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
67 GNU General Public License for more details.
69 You should have received a copy of the GNU General Public License
70 along with this program; if not, write to the Free Software
71 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
72 USA or view http://www.gnu.org/copyleft/gpl.html.
74 **********************************************************************/
78 #include "uiuc_aerodeflections.h"
80 void uiuc_aerodeflections( double dt )
82 double prevFlapHandle = 0.0f;
83 double flap_transit_rate;
84 bool flaps_in_transit = false;
95 aileron = - Lat_control * damin * DEG_TO_RAD;
97 aileron = - Lat_control * damax * DEG_TO_RAD;
101 elevator = Long_trim * demax * DEG_TO_RAD;
102 demax_remain = demax + Long_trim * demax;
103 demin_remain = -1*Long_trim * demax + demin;
104 if (Long_control <= 0)
105 elevator += Long_control * demax_remain * DEG_TO_RAD;
107 elevator += Long_control * demin_remain * DEG_TO_RAD;
111 elevator = Long_trim * demin * DEG_TO_RAD;
112 demin_remain = demin - Long_trim * demin;
113 demax_remain = Long_trim * demin + demax;
114 if (Long_control >=0)
115 elevator += Long_control * demin_remain * DEG_TO_RAD;
117 elevator += Long_control * demax_remain * DEG_TO_RAD;
120 //if ((Long_control+Long_trim) <= 0)
121 // elevator = (Long_control + Long_trim) * demax * DEG_TO_RAD;
123 // elevator = (Long_control + Long_trim) * demin * DEG_TO_RAD;
125 if (Rudder_pedal <= 0)
126 rudder = - Rudder_pedal * drmin * DEG_TO_RAD;
128 rudder = - Rudder_pedal * drmax * DEG_TO_RAD;
132 // designed for the twin otter non-linear model
133 flap_percent = Flap_handle / 30.0; // percent of flaps desired
134 if (flap_percent>=0.31 && flap_percent<=0.35)
135 flap_percent = 1.0 / 3.0;
136 if (flap_percent>=0.65 && flap_percent<=0.69)
137 flap_percent = 2.0 / 3.0;
138 flap_goal = flap_percent * flap_max; // angle of flaps desired
139 flap_moving_rate = flap_rate * dt; // amount flaps move per time step
141 // determine flap position with respect to the flap goal
142 if (flap_pos < flap_goal)
144 flap_pos += flap_moving_rate;
145 if (flap_pos > flap_goal)
146 flap_pos = flap_goal;
148 else if (flap_pos > flap_goal)
150 flap_pos -= flap_moving_rate;
151 if (flap_pos < flap_goal)
152 flap_pos = flap_goal;
157 // check for lowest flap setting
158 if (Flap_handle < dfArray[1])
160 Flap_handle = dfArray[1];
161 prevFlapHandle = Flap_handle;
164 // check for highest flap setting
165 else if (Flap_handle > dfArray[ndf])
167 Flap_handle = dfArray[ndf];
168 prevFlapHandle = Flap_handle;
171 // otherwise in between
174 if(Flap_handle != prevFlapHandle)
176 flaps_in_transit = true;
181 while (dfArray[iflap] < Flap_handle)
185 if (flap < Flap_handle)
187 if (TimeArray[iflap] > 0)
188 flap_transit_rate = (dfArray[iflap] - dfArray[iflap-1]) / TimeArray[iflap+1];
190 flap_transit_rate = (dfArray[iflap] - dfArray[iflap-1]) / 5;
194 if (TimeArray[iflap+1] > 0)
195 flap_transit_rate = (dfArray[iflap] - dfArray[iflap+1]) / TimeArray[iflap+1];
197 flap_transit_rate = (dfArray[iflap] - dfArray[iflap+1]) / 5;
199 if(fabs (flap - Flap_handle) > dt * flap_transit_rate)
200 flap += flap_transit_rate * dt;
203 flaps_in_transit = false;
208 prevFlapHandle = Flap_handle;
213 // end uiuc_aerodeflections.cpp