Subversion Repositories FlightCtrl

Rev

Rev 1134 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1134 Rev 1139
Line 7... Line 7...
7
#include "altcon.h"
7
#include "altcon.h"
8
#include "parameter.h"
8
#include "parameter.h"
9
#include "fc.h"
9
#include "fc.h"
Line 10... Line 10...
10
 
10
 
-
 
11
 
-
 
12
static char     enabled         = 0;
-
 
13
static int      accZOffset      = 0;
-
 
14
static int      lastError       = 0;
-
 
15
static int      lastN           = 0;                            // Zuletzt errechneter Fehlerwert
-
 
16
static long     altIntegral     = 0;
11
 
17
static int      temp;                                           // Temporäre Werte; wird mehrfach verwendet
12
char    enabled         = 0;
-
 
13
int     pressureOffset  = 0;
-
 
14
int     accZOffset      = 0;
-
 
15
int     lastError       = 0;
18
 
16
int     lastN           = 0;                            // Zuletzt errechneter Fehlerwert
-
 
17
int     averageN        = 0;
-
 
Line 18... Line 19...
18
long    altIntegral     = 0;
19
int             pressureOffset  = 0;
19
int     temp;                                           // Temporäre Werte; wird mehrfach verwendet
20
int             averageN        = 0;
Line 41... Line 42...
41
/*
42
/*
42
 * Startet den Höhenregler
43
 * Startet den Höhenregler
43
 */
44
 */
44
void altcon_start( void ) {
45
void altcon_start( void ) {
Line 45... Line 46...
45
 
46
 
46
        accZOffset  = Mess_Integral_Hoch / 128;
-
 
47
                               
47
        enabled     = 1;
48
        lastError   = 0;
48
        lastError   = 0;
49
        lastN       = 0;
49
        lastN       = 0;
50
        averageN    = 0;
50
        averageN    = 0;
-
 
51
        altIntegral = 0L;
Line 51... Line 52...
51
        altIntegral = 0L;
52
        accZOffset  = Mess_Integral_Hoch / 128;
52
       
53
       
53
        // Einschalten der Höhenregelung signalisieren
54
        // Einschalten der Höhenregelung signalisieren
Line 79... Line 80...
79
                // Fehlerwert für Regler ermitteln
80
                // Fehlerwert für Regler ermitteln
80
                error = airPressure - pressureOffset;
81
                error = airPressure - pressureOffset;
Line 81... Line 82...
81
       
82
       
82
                // Proportionalanteil
83
                // Proportionalanteil
83
                n = ( PARAM_ALT_P * error ) / 4;        // dividiert durch ( 16 / STICK_GAIN ) = 16 / 4 = 4
84
                n = ( PARAM_ALT_P * error ) / 4;        // dividiert durch ( 16 / STICK_GAIN ) = 16 / 4 = 4
84
 
85
/*
85
                // Integralanteil
86
                // Integralanteil
Line 86... Line 87...
86
                altIntegral += ( PARAM_ALT_I * error ) / 4;
87
                altIntegral += ( PARAM_ALT_I * error ) / 4;
87
               
88
               
88
                // Integral begrenzen
89
                // Integral begrenzen
89
                if( altIntegral > PARAM_ALT_INT_MAX )
90
                if( altIntegral > PARAM_ALT_INT_MAX )
90
                        altIntegral = PARAM_ALT_INT_MAX;
91
                        altIntegral = PARAM_ALT_INT_MAX;
Line 91... Line 92...
91
                else if( altIntegral < -PARAM_ALT_INT_MAX )
92
                else if( altIntegral < -PARAM_ALT_INT_MAX )
92
                        altIntegral = -PARAM_ALT_INT_MAX;
93
                        altIntegral = -PARAM_ALT_INT_MAX;
93
               
94
 
94
                n += altIntegral / 4000;
95
                n += altIntegral / 4000;
Line 95... Line 96...
95
               
96
*/             
96
                // Differenzialanteil
97
                // Differenzialanteil
Line 124... Line 125...
124
                /* Berechnung einer exponentiellen Glättung für den neuen Gaswert bei Verlassen der
125
                /* Berechnung einer exponentiellen Glättung für den neuen Gaswert bei Verlassen der
125
                 * Höhenregelung. Dies soll ein zu heftiges Reagieren mindern. */
126
                 * Höhenregelung. Dies soll ein zu heftiges Reagieren mindern. */
126
                averageN = averageN + PARAM_ALT_EXP_SMOOTHING_FACTOR * ( n - averageN ) / 100;
127
                averageN = averageN + PARAM_ALT_EXP_SMOOTHING_FACTOR * ( n - averageN ) / 100;
127
        }
128
        }
Line 128... Line 129...
128
       
129
       
129
        DebugOut.Analog[30] = altIntegral / 4000;
130
//      DebugOut.Analog[30] = altIntegral / 4000;
Line 130... Line 131...
130
        DebugOut.Analog[27] = n;
131
        DebugOut.Analog[27] = n;
131
 
132