Rev 1139 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1139 | Rev 1141 | ||
---|---|---|---|
Line 21... | Line 21... | ||
21 | #define STATE_WAIT 0x06 // Warten auf Einschalten der Höhenregelung |
21 | #define STATE_WAIT 0x06 // Warten auf Einschalten der Höhenregelung |
22 | #define STATE_ACTIVATING 0x07 // Aktivierung der Höhenregelung |
22 | #define STATE_ACTIVATING 0x07 // Aktivierung der Höhenregelung |
23 | #define STATE_ACTIVE 0x08 // Höhenregelung ist aktiv |
23 | #define STATE_ACTIVE 0x08 // Höhenregelung ist aktiv |
Line 24... | Line 24... | ||
24 | 24 | ||
25 | 25 | ||
26 | static int stickValue = 0; // Aktueller Stick-Wert |
26 | static int stickValue = 0; // Aktueller Stick-Wert |
27 | static int lastStickValue = 0; // Vorheriger Stick-Wert |
27 | static int lastStickValue = 0; // Vorheriger Stick-Wert |
28 | static int actualPitchCount = 0; // Soll-Pitch-Wert |
28 | static int actualPitchCount = 0; // Soll-Pitch-Wert |
29 | static int targetPitchCount = 0; // Ist-Pitch-Wert |
29 | static int targetPitchCount = 0; // Ist-Pitch-Wert |
30 | static int pitchOffset; // Aktueller Grundgaswert in Neutralstellung |
30 | static int pitchOffset; // Aktueller Grundgaswert in Neutralstellung |
31 | static char state; // Zustand |
31 | static char state; // Zustand |
32 | static int timer; |
32 | static int timer; |
33 | static int delay = 0; |
33 | static int delay = 0; |
Line 34... | Line 34... | ||
34 | static int delayCounter = 0; |
34 | static int delayCounter = 0; |
Line 35... | Line 35... | ||
35 | static int temp; // Temporäre Werte; wird mehrfach verwendet |
35 | static int temp; // Temporäre Werte; wird mehrfach verwendet |
36 | 36 | ||
37 | unsigned char pitchHover = 0; // Standgaswert |
37 | unsigned char pitchHover = 0; // Standgaswert |
Line 38... | Line 38... | ||
38 | 38 | ||
39 | 39 | ||
40 | void pitch_md_init( void ) { |
40 | void pitch_md_init( void ) { |
41 | pitchHover = eeprom_read_byte( &EEPromArray[ EEPROM_ADR_PITCH_MD_HOVER ] ); |
- | |
42 | } |
- | |
43 | - | ||
44 | 41 | pitchHover = eeprom_read_byte( &EEPromArray[ EEPROM_ADR_PITCH_MD_HOVER ] ); |
|
45 | /* |
42 | } |
- | 43 | ||
- | 44 | ||
46 | * Berechnet den aktuellen Pitch-Wert für die Regelung |
45 | /* |
47 | * |
46 | * Berechnet den aktuellen Pitch-Wert für die Regelung |
- | 47 | * |
|
- | 48 | * Funktionsweise: |
|
48 | * Nachdem die Motoren eingeschaltet sind, wird der Pitch-Stick losgelassen und damit in Mittelstellung |
49 | * |
49 | * gebracht. Die Motoren laufen zu dieser Zeit im Leerlaufgas. Vor dem Abheben müssen die Motoren in |
50 | * 1. Einmalig muß man das Standgas kalibrieren. Standgas ist ein neuer Parameter. |
50 | * das Standgas gebracht werden. Dies geschieht durch minimales Gasgeben. Durch weiteres Gasgeben und |
- | |
51 | * nehmen kann abgehoben und geflogen werden. |
- | |
52 | * |
51 | * Dies tut man durch Beätigen des Roll-Sticks in eine beliebige Richtung (Vollausschlag) und |
53 | * Erreicht der Stick während des Fluges die Neutralstellung und verbleibt dort für ca. 1 Sekunde ohne |
52 | * Starten der Motoren. Nun gibt man soviel Gas (in der oberen Hälfte des Stick-Bereichs) wie |
54 | * bewegt zu werden, aktiviert sich die Höhenregelung und hält den MK auf der aktuellen Höhe. |
53 | * der MK gerade noch stabil auf dem Boden steht. Man hält diese Stick-Position solange, bis ein |
55 | * |
- | |
56 | * Sobald der Stick die Neutralstellung verläßt, wird die automatische Höhenregelung deaktiviert |
54 | * Piepen ertönt. Damit wurde der Gaswert als Standgasparameter übernommen und im EEProm dauerhaft gespeichert. |
57 | * und der vorige Pitch-Wert als Wert der Neutralstellung übernommen. Der Pitch läßt sich nun |
55 | * Diese Kalibrierung muß mit vollem Akku und nach jeder Gewichtsänderung des MK einmal durchgeführt werden. |
58 | * über den gesamten Stick-Bereich regeln. |
56 | * |
- | 57 | * 2. Für den Flug startet man die Motoren und läßt den Stick los. Die Motoren laufen im Leerlaufgas. |
|
59 | * |
58 | * |
- | 59 | * 3. Nun schaltet man auf Standgas durch kurzes Antippen des Sticks nach oben. Die Motoren beschleunigen langsam |
|
60 | * Erreicht der Stick ein weiteres Mal die Neutralstellung, wird die automatische Höhenregelung |
60 | * bis zum Erreichen des zuvor kalibriertes Standgaswertes. |
- | 61 | * |
|
61 | * wieder aktiviert, jetzt jedoch immer mit einer zeitlichen Verzögerung. Nur so ist ein |
62 | * 4. Nun hebt man wie gewohnt ab. Hierzu hat man den oberen Stick-Bereich zur Verfügung. Da der Grundgaswert |
62 | * ungestörtes manuelles Steuern möglich. |
63 | * bei Mittelstellung jetzt knapp unterhalb des Schwebegaswertes liegt, kann man im Flug einfach die Höhe halten, |
Line 63... | Line 64... | ||
63 | * |
64 | * indem man den Stick in Mittelstellung bewegt. Nach kurzer Zeit (quittiert mit einem Piep) wird die automatische |
Line 64... | Line 65... | ||
64 | * Der Pitch-Wert ist innerhalb der Regelung durch ein konfigurierbares Minimalgas nach unten begrenzt. |
65 | * Höhenregelung aktiviert und solange gehalten, bis man den Stick wieder bewegt. |
65 | * Dieses Minimalgas kann auf einen sehr niedrigen Wert eingestellt sein. Um im Flug nicht unterhalb |
66 | * |
Line 66... | Line 67... | ||
66 | * eines Wertes zu gelangen, der die Lageregelung außer Funktion setzt, wird ein zweiter Wert für |
67 | * 5. Nach der Landung drückt man den Stick ganz nach unten, bis ein Piepen ertönt. Jetzt laufen die Motoren |
Line 134... | Line 135... | ||
134 | // Aktuellen Pitch-Wert in Konfiguration übernehmen |
135 | // Aktuellen Pitch-Wert in Konfiguration übernehmen |
135 | pitchHover = actualPitchCount; |
136 | pitchHover = actualPitchCount; |
Line 136... | Line 137... | ||
136 | 137 | ||
137 | // Konfiguration dauerhaft speichern |
138 | // Konfiguration dauerhaft speichern |
138 | eeprom_write_byte( &EEPromArray[ EEPROM_ADR_PITCH_MD_HOVER ], pitchHover ); |
- | |
139 | /* |
- | |
140 | WriteParameterSet( |
- | |
141 | GetActiveParamSetNumber(), |
- | |
142 | (unsigned char *) &EE_Parameter.Kanalbelegung[0], |
- | |
143 | STRUCT_PARAM_LAENGE ); |
139 | eeprom_write_byte( &EEPromArray[ EEPROM_ADR_PITCH_MD_HOVER ], pitchHover ); |
144 | */ |
140 | |
145 | // Signalisieren |
141 | // Signalisieren |
146 | beeptime = 500; |
142 | beeptime = 500; |
147 | } |
143 | } |
148 | } |
144 | } |
Line 211... | Line 207... | ||
211 | } |
207 | } |
Line 212... | Line 208... | ||
212 | 208 | ||
213 | // Stick ist innerhalb der Neutralstellung |
209 | // Stick ist innerhalb der Neutralstellung |
Line -... | Line 210... | ||
- | 210 | if( abs( stickValue ) < PARAM_PITCH_STICK_THRESHOLD ) { |
|
- | 211 | ||
- | 212 | // Ab jetzt gilt eine höhere Pitch-Beschleunigung |
|
214 | if( abs( stickValue ) < PARAM_PITCH_STICK_THRESHOLD ) { |
213 | delay = PARAM_PITCH_MD_DELAY2; |
215 | 214 | ||
Line 216... | Line 215... | ||
216 | // Aktuelle Höhe festhalten (aktiviert noch nicht den Regler) |
215 | // Aktuelle Höhe festhalten (aktiviert noch nicht den Regler) |
217 | altcon_lock(); |
216 | altcon_lock(); |
Line 280... | Line 279... | ||
280 | pitchOffset = 0; |
279 | pitchOffset = 0; |
281 | stickValue = 0; |
280 | stickValue = 0; |
282 | state = STATE_INITIALIZE; |
281 | state = STATE_INITIALIZE; |
283 | } |
282 | } |
Line 284... | Line -... | ||
284 | - | ||
285 | if( !delayCounter ) { |
- | |
286 | 283 | ||
287 | /* Durch die Sollwertvorgabe kann hier eine einstellbare Trägheit auf dem Pitch-Wert |
284 | /* Durch die Sollwertvorgabe kann hier eine einstellbare Trägheit auf dem Pitch-Wert |
288 | * abgebildet werden. */ |
285 | * abgebildet werden. */ |
289 | int pitchDelta = targetPitchCount - actualPitchCount; |
286 | int pitchDelta = targetPitchCount - actualPitchCount; |
290 | 287 | ||
291 | if( pitchDelta > 3 ) |
288 | if( pitchDelta > 3 ) |
292 | pitchDelta = 3; |
289 | pitchDelta = 3; |
293 | if( pitchDelta < -3 ) |
290 | if( pitchDelta < -3 ) |
Line -... | Line 291... | ||
- | 291 | pitchDelta = -3; |
|
294 | pitchDelta = -3; |
292 | |
295 | - | ||
296 | actualPitchCount += pitchDelta; |
293 | if( !delayCounter ) { |
297 | 294 | actualPitchCount += pitchDelta; |
|
Line 298... | Line 295... | ||
298 | delayCounter = delay + 1; |
295 | delayCounter = delay + 1; |
Line 299... | Line 296... | ||
299 | } |
296 | } |