/branches/thjac/V1_11/main.h |
---|
34,6 → 34,7 |
#define EEPROM_ADR_ACC_ROLL 6 |
#define EEPROM_ADR_ACC_Z 8 |
#define EEPROM_ADR_PITCH_MD_HOVER 10 |
#define EEPROM_ADR_PITCH_NEUTRAL_DIFF 12 |
#define EEPROM_ADR_PARAM_BEGIN 100 |
/branches/thjac/V1_11/makefile |
---|
5,7 → 5,7 |
#------------------------------------------------------------------- |
VERSION_MAJOR = 1 |
VERSION_MINOR = 11 |
VERSION_PATCH = 1 |
VERSION_PATCH = 2 |
VERSION_SERIAL_MAJOR = 10 # Serial Protocol |
VERSION_SERIAL_MINOR = 0 # Serial Protocol |
/branches/thjac/V1_11/menu.c |
---|
7,6 → 7,7 |
#include "main.h" |
#include "altcon.h" |
#include "pitch.h" |
#include "pitch_neutral.h" |
#include "pitch_md.h" |
#include "parameter.h" |
147,12 → 148,18 |
break; |
case 12: |
LCD_printfxy( 0, 0, "PitchSteuerung " ); |
LCD_printfxy( 0, 1, "Modus: %s ", pitchModeStrings[ pitch_current_mode() ] ); |
LCD_printfxy( 0, 1, "Modus: %8s", pitchModeStrings[ pitch_currentMode() ] ); |
LCD_printfxy( 0, 2, "GsInit: %3i", pitch_initialStickValue() ); |
// MD-Modus |
switch( pitch_current_mode() ) { |
switch( pitch_currentMode() ) { |
case PARAM_PITCH_MODE_NEUTRAL: |
LCD_printfxy( 0, 3, "StickDiff: %2i", pitch_neutralDiff() ) |
break; |
case PARAM_PITCH_MODE_MD: |
LCD_printfxy( 0, 2, "Standgas: %3i ", pitch_hover_value() ); |
LCD_printfxy( 0, 3, "Standgas: %3i", pitch_hoverValue() ); |
break; |
} |
/branches/thjac/V1_11/parameter.h |
---|
20,8 → 20,7 |
/****************************************************************************************** |
* Parameter für Neutral-Pitch-Steuerung |
*/ |
#define PARAM_PITCH_NEUTRAL_DIFF EE_Parameter.UserParam1 // Stick-Loslass-Erkennung |
#define PARAM_PITCH_MIN2 EE_Parameter.UserParam2 // Minimalgas |
#define PARAM_PITCH_MIN2 EE_Parameter.UserParam1 // Minimalgas |
/****************************************************************************************** |
* Allgemeine Pitch-Steuerungsparameter |
33,7 → 32,8 |
* Parameter für MD-Pitch-Steuerung |
*/ |
#define PARAM_PITCH_MD_DELAY0 5 // Begrenzung der Pitch-Beschleunigung am Boden |
#define PARAM_PITCH_MD_DELAY1 0 // Begrenzung der Pitch-Beschleunigung im Flug |
#define PARAM_PITCH_MD_DELAY1 2 // Begrenzung der Pitch-Beschleunigung beim Start |
#define PARAM_PITCH_MD_DELAY2 0 // Begrenzung der Pitch-Beschleunigung im Flug |
/****************************************************************************************** |
103,6 → 103,7 |
#define PARAM_PITCH_MODE_NORMAL 0x00 |
#define PARAM_PITCH_MODE_NEUTRAL 0x01 |
#define PARAM_PITCH_MODE_MD 0x02 |
#define PARAM_PITCH_MODE_INVALID 0x03 |
/* Wenn gesetzt, wird nach ca. 2s andauernder Stick-Stellung auf Minimum |
* ein Reset der Pitch-Regelung durchgeführt, so daß der MK ohne Aus- und |
/branches/thjac/V1_11/pitch.c |
---|
11,13 → 11,18 |
#include "pitch_md.h" |
#include "pitch.h" |
#define UNDEFINED 255 |
#define INVALID 255 |
int pitchInitialStickValue = UNDEFINED; |
unsigned char pitchMode; |
char *pitchModeStrings[] = { |
"Normal ", |
"Neutral ", |
"MD " |
"MD ", |
"Inaktiv " |
}; |
34,8 → 39,40 |
*/ |
void pitch_init( void ) { |
// Nur beim Einschalten ermitteln, da beim Setting-Wechsel ungültig |
if( pitchInitialStickValue == UNDEFINED ) { |
// Warten, bis ein gültiger Wert von der Fernsteuerung anliegt |
unsigned int timer = SetDelay( 500 ); |
while( !CheckDelay( timer ) ); |
pitchInitialStickValue = PPM_in[ EE_Parameter.Kanalbelegung[ K_GAS ] ]; |
} |
pitchMode = PARAM_PITCH_MODE; |
/* Die Stick-Position beim Einschalten muß mit dem im Setting eingestellten |
* Pitch-Modus übereinstimmen. Sonst wird die Pitch-Steuerung aus Sicherheits- |
* gründen deaktiviert. Selbiges gilt, wenn die Höhenregelung deaktiviert wurde. |
*/ |
switch( pitchMode ) { |
// Pitch-Modi mit neutralisiertem Gas |
case PARAM_PITCH_MODE_NEUTRAL: |
case PARAM_PITCH_MODE_MD: |
if( !( EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG ) ) |
pitchMode = PARAM_PITCH_MODE_INVALID; |
if( abs( pitchInitialStickValue ) > PARAM_PITCH_STICK_THRESHOLD ) |
pitchMode = PARAM_PITCH_MODE_INVALID; |
break; |
// Pitch-Modi mit 0-Gas |
case PARAM_PITCH_MODE_NORMAL: |
if( pitchInitialStickValue > 35 - 120 ) |
pitchMode = PARAM_PITCH_MODE_INVALID; |
break; |
} |
pitch_neutral_init(); |
pitch_md_init(); |
// FIXME Funktioniert noch nicht |
64,8 → 101,11 |
case PARAM_PITCH_MODE_MD: |
return pitch_md_value(); |
case PARAM_PITCH_MODE_NORMAL: |
return pitch_mk_value(); |
default: |
return pitch_mk_value(); |
return 0; |
} |
} |
75,7 → 115,7 |
*/ |
int pitch_mk_value( void ) { |
register int stickValue = PPM_in[ EE_Parameter.Kanalbelegung[ K_GAS ] ]; |
register int pitchCount = stickValue + 120; // Warum 120? Gas= 0 ist -125 |
register int pitchCount = stickValue + 120; |
DebugOut.Analog[26] = stickValue; |
DebugOut.Analog[28] = pitchCount; |
/branches/thjac/V1_11/pitch.h |
---|
8,15 → 8,15 |
extern int (* pitch_value_ptr)( void ); |
// TODO Soll den Stick-Wert der Mittelstellung liefern |
#define pitch_stickoffset() 0 |
#define pitch_initialStickValue() pitchInitialStickValue |
#define pitch_current_mode() ( pitchMode ) |
#define pitch_current_mode_string() ( pitchModeStrings[ pitchMode ] ); |
#define pitch_currentMode() ( pitchMode ) |
#define pitch_currentModeString() ( pitchModeStrings[ pitchMode ] ) |
extern void pitch_init( void ); |
extern int pitch_value( void ); |
extern int pitchInitialStickValue; |
extern unsigned char pitchMode; |
extern char *pitchModeStrings[]; |
/branches/thjac/V1_11/pitch_md.c |
---|
23,18 → 23,18 |
#define STATE_ACTIVE 0x08 // Höhenregelung ist aktiv |
static int stickValue = 0; // Aktueller Stick-Wert |
static int lastStickValue = 0; // Vorheriger Stick-Wert |
static int actualPitchCount = 0; // Soll-Pitch-Wert |
static int targetPitchCount = 0; // Ist-Pitch-Wert |
static int pitchOffset; // Aktueller Grundgaswert in Neutralstellung |
static char state; // Zustand |
static int stickValue = 0; // Aktueller Stick-Wert |
static int lastStickValue = 0; // Vorheriger Stick-Wert |
static int actualPitchCount = 0; // Soll-Pitch-Wert |
static int targetPitchCount = 0; // Ist-Pitch-Wert |
static int pitchOffset; // Aktueller Grundgaswert in Neutralstellung |
static char state; // Zustand |
static int timer; |
static int delay = 0; |
static int delayCounter = 0; |
static int temp; // Temporäre Werte; wird mehrfach verwendet |
static int temp; // Temporäre Werte; wird mehrfach verwendet |
unsigned char pitchHover = 0; // Standgaswert |
unsigned char pitchHover = 0; // Standgaswert |
void pitch_md_init( void ) { |
45,30 → 45,31 |
/* |
* Berechnet den aktuellen Pitch-Wert für die Regelung |
* |
* Nachdem die Motoren eingeschaltet sind, wird der Pitch-Stick losgelassen und damit in Mittelstellung |
* gebracht. Die Motoren laufen zu dieser Zeit im Leerlaufgas. Vor dem Abheben müssen die Motoren in |
* das Standgas gebracht werden. Dies geschieht durch minimales Gasgeben. Durch weiteres Gasgeben und |
* nehmen kann abgehoben und geflogen werden. |
* Funktionsweise: |
* |
* Erreicht der Stick während des Fluges die Neutralstellung und verbleibt dort für ca. 1 Sekunde ohne |
* bewegt zu werden, aktiviert sich die Höhenregelung und hält den MK auf der aktuellen Höhe. |
* 1. Einmalig muß man das Standgas kalibrieren. Standgas ist ein neuer Parameter. |
* Dies tut man durch Beätigen des Roll-Sticks in eine beliebige Richtung (Vollausschlag) und |
* Starten der Motoren. Nun gibt man soviel Gas (in der oberen Hälfte des Stick-Bereichs) wie |
* der MK gerade noch stabil auf dem Boden steht. Man hält diese Stick-Position solange, bis ein |
* Piepen ertönt. Damit wurde der Gaswert als Standgasparameter übernommen und im EEProm dauerhaft gespeichert. |
* Diese Kalibrierung muß mit vollem Akku und nach jeder Gewichtsänderung des MK einmal durchgeführt werden. |
* |
* Sobald der Stick die Neutralstellung verläßt, wird die automatische Höhenregelung deaktiviert |
* und der vorige Pitch-Wert als Wert der Neutralstellung übernommen. Der Pitch läßt sich nun |
* über den gesamten Stick-Bereich regeln. |
* 2. Für den Flug startet man die Motoren und läßt den Stick los. Die Motoren laufen im Leerlaufgas. |
* |
* Erreicht der Stick ein weiteres Mal die Neutralstellung, wird die automatische Höhenregelung |
* wieder aktiviert, jetzt jedoch immer mit einer zeitlichen Verzögerung. Nur so ist ein |
* ungestörtes manuelles Steuern möglich. |
* 3. Nun schaltet man auf Standgas durch kurzes Antippen des Sticks nach oben. Die Motoren beschleunigen langsam |
* bis zum Erreichen des zuvor kalibriertes Standgaswertes. |
* |
* Der Pitch-Wert ist innerhalb der Regelung durch ein konfigurierbares Minimalgas nach unten begrenzt. |
* Dieses Minimalgas kann auf einen sehr niedrigen Wert eingestellt sein. Um im Flug nicht unterhalb |
* eines Wertes zu gelangen, der die Lageregelung außer Funktion setzt, wird ein zweiter Wert für |
* Minimalgas konfiguriert, der greift, sobald erstmalig die automatische Höhenregelung aktiviert wurde. |
* 4. Nun hebt man wie gewohnt ab. Hierzu hat man den oberen Stick-Bereich zur Verfügung. Da der Grundgaswert |
* bei Mittelstellung jetzt knapp unterhalb des Schwebegaswertes liegt, kann man im Flug einfach die Höhe halten, |
* indem man den Stick in Mittelstellung bewegt. Nach kurzer Zeit (quittiert mit einem Piep) wird die automatische |
* Höhenregelung aktiviert und solange gehalten, bis man den Stick wieder bewegt. |
* |
* 5. Nach der Landung drückt man den Stick ganz nach unten, bis ein Piepen ertönt. Jetzt laufen die Motoren |
* wieder im Leerlaufgas. Man kann nun neu Starten (ab Punkt 3) oder die Motoren ausschalten. |
*/ |
int pitch_md_value( void ) { |
int register rawStickValue = PPM_in[ EE_Parameter.Kanalbelegung[ K_GAS ] ] - pitch_stickoffset(); |
int register rawStickValue = PPM_in[ EE_Parameter.Kanalbelegung[ K_GAS ] ] - pitch_initialStickValue(); |
// Sind die Motoren eingeschaltet? |
if( MotorenEin ) { |
136,12 → 137,7 |
// Konfiguration dauerhaft speichern |
eeprom_write_byte( &EEPromArray[ EEPROM_ADR_PITCH_MD_HOVER ], pitchHover ); |
/* |
WriteParameterSet( |
GetActiveParamSetNumber(), |
(unsigned char *) &EE_Parameter.Kanalbelegung[0], |
STRUCT_PARAM_LAENGE ); |
*/ |
// Signalisieren |
beeptime = 500; |
} |
213,6 → 209,9 |
// Stick ist innerhalb der Neutralstellung |
if( abs( stickValue ) < PARAM_PITCH_STICK_THRESHOLD ) { |
// Ab jetzt gilt eine höhere Pitch-Beschleunigung |
delay = PARAM_PITCH_MD_DELAY2; |
// Aktuelle Höhe festhalten (aktiviert noch nicht den Regler) |
altcon_lock(); |
282,20 → 281,18 |
state = STATE_INITIALIZE; |
} |
if( !delayCounter ) { |
/* Durch die Sollwertvorgabe kann hier eine einstellbare Trägheit auf dem Pitch-Wert |
* abgebildet werden. */ |
int pitchDelta = targetPitchCount - actualPitchCount; |
/* Durch die Sollwertvorgabe kann hier eine einstellbare Trägheit auf dem Pitch-Wert |
* abgebildet werden. */ |
int pitchDelta = targetPitchCount - actualPitchCount; |
if( pitchDelta > 3 ) |
pitchDelta = 3; |
if( pitchDelta < -3 ) |
pitchDelta = -3; |
if( pitchDelta > 3 ) |
pitchDelta = 3; |
if( pitchDelta < -3 ) |
pitchDelta = -3; |
if( !delayCounter ) { |
actualPitchCount += pitchDelta; |
delayCounter = delay + 1; |
delayCounter = delay + 1; |
} |
delayCounter--; |
/branches/thjac/V1_11/pitch_md.h |
---|
6,7 → 6,7 |
#ifndef PITCH_MD_H |
#define PITCH_MD_H |
#define pitch_hover_value() pitchHover |
#define pitch_hoverValue() pitchHover |
extern void pitch_md_init( void ); |
extern int pitch_md_value( void ); |
/branches/thjac/V1_11/pitch_neutral.c |
---|
10,11 → 10,11 |
#include "pitch.h" |
#include "pitch_neutral.h" |
#define STATE_STARTUP_WAIT 0x00 // Init-Timeout beim Einschalten abwarten |
#define STATE_STARTUP_INIT 0x01 // Initialisierung beim Einschalten |
#define STATE_BEGIN 0x02 // Anfangszustand nach Einschalten der Motoren |
#define STATE_INITIALIZING 0x03 // Initialisierungsphase |
#define STATE_MANUAL 0x04 // Manuelle Kontrolle, Höhenregelung in Konfiguration deaktiviert |
#define STATE_INITIALIZE 0x00 // Initialisierung nach Einschalten der Motoren |
#define STATE_SETUP 0x01 // Kalibrierung des Gas-Sticks |
#define STATE_SETUP1 0x02 // |
#define STATE_BEGIN 0x03 // Startphase |
#define STATE_BEGIN1 0x04 // |
#define STATE_INACTIVE 0x05 // Manuelle Kontrolle |
#define STATE_WAIT 0x06 // Warten auf Einschalten der Höhenregelung |
#define STATE_ACTIVATING 0x07 // Aktivierung der Höhenregelung |
24,9 → 24,12 |
static int stickValue = 0; // Aktueller Stick-Wert |
static int lastStickValue = 0; // Vorheriger Stick-Wert |
static int pitchOffset = 0; // Aktueller Grundgaswert in Neutralstellung |
static char state = STATE_STARTUP_WAIT; // Zustand |
static char state; // Zustand |
static int temp; |
char pitchNeutralDiff = 0; |
/* Wird verwendet, um das Umschalten auf automatische Höhenregelung |
* nach Erreichen der Neutralstellung zu verzögern. |
*/ |
33,39 → 36,58 |
static int pitchNeutralTimer = PITCH_NEUTRAL_TIMER; |
void pitch_neutral_init( void ) { |
pitchNeutralDiff = eeprom_read_byte( &EEPromArray[ EEPROM_ADR_PITCH_NEUTRAL_DIFF ] ); |
} |
/* |
* Berechnet den aktuellen Pitch-Wert für die Regelung |
* |
* Nach dem Einschalten der FC wird der aktuelle Gas-Stick-Wert gelesen und als Kalibrierungswert |
* für die Neutralstellung gespeichert. Somit spielt die korrekte Trimmung des Sticks auf Senderseite |
* keine Rolle. |
* Funktionsweise: |
* |
* Nach Einschalten der Motoren geht der Stick in Neutralstellung. Diese Stick-Bewegung wird ignoriert |
* und die Motoren drehen mit dem eingestellten MinGas2. Ausgehend von der Neutralstellung wird nun |
* durch Bewegen des Sticks im oberen Bereich das Gas geregelt. |
* 1. Vor Verwendung der Pitch-Steuerung muß ein Parameter für den Gas-Stick eingestellt werden. Hierzu |
* bewegt man den Roll-Stick ganz nach außen und startet die Motoren. Man befindet sich im Setup-Modus |
* und die Motoren laufen unabhängig vom Gas-Stick im Leerlauf. Im Display auf Seite 12 muß nun der |
* beste Wert für "StickDiff" gefunden werden. Den Wert ändern kann man mit dem Roll-Stick. Man betätigt |
* nun den Gas-Stick nach oben und läßt ihn los, so daß er in die Mittelstellung zurückspringt. Der |
* optimale Wert sorgt dafür, daß das gewollte Loslassen von einer normalen Bewegung unterschieden wird. |
* Jedesmal, wenn die SW das Loslassen als solches erkannt hat, ertönt ein Signal. Dieses darf jedoch |
* nicht ertönen, wenn man den Stick mit normaler Geschwindigkeit in die Mittelstellung zurückbewegt. |
* Wurde ein guter Wert eingestellt, verläßt man den Setup-Modus durch Ausschalten der Motoren. Der |
* ermittelte Wert wird permanent im EEProm gespeichert und muß nicht neu ermittelt werden. |
* |
* Das erstmalige Aktivieren der automatischen Höhenregelung erfolgt durch Loslassen des Sticks im |
* Schwebeflug. Der zuvor aktuelle Stick-Wert wird als Wert in Neutralstellung übernommen und die |
* automatische Höhenregelung sofort aktiviert. |
* 2. Nach dem Einschalten der FC wird die aktuelle Gas-Stick-Position gemerkt und als Kalibrierungswert |
* für die Neutralstellung gespeichert. Somit spielt die korrekte Trimmung des Sticks auf Senderseite |
* keine Rolle. |
* |
* Sobald der Stick die Neutralstellung verläßt, wird die automatische Höhenregelung deaktiviert |
* und der vorige Pitch-Wert als Wert der Neutralstellung übernommen. Der Pitch läßt sich nun |
* über den gesamten Stick-Bereich regeln. |
* 3. Nach Einschalten der Motoren geht der Stick in Neutralstellung. Diese Stick-Bewegung wird ignoriert |
* und die Motoren drehen mit dem eingestellten MinGas2. Ausgehend von der Neutralstellung wird nun |
* durch Bewegen des Sticks im oberen Bereich das Gas geregelt. |
* |
* Erreicht der Stick ein weiteres Mal die Neutralstellung, wird die automatische Höhenregelung |
* wieder aktiviert, jetzt jedoch immer mit einer zeitlichen Verzögerung. Nur so ist ein |
* ungestörtes manuelles Steuern möglich. |
* 4. Das erstmalige Aktivieren der automatischen Höhenregelung erfolgt durch Loslassen des Sticks im |
* Schwebeflug. Der zuvor aktuelle Stick-Wert wird als Wert in Neutralstellung übernommen und die |
* automatische Höhenregelung sofort aktiviert. Wichtig hierfür ist die unter Punkt 1 vorgenommene |
* Parameterfindung. Stimmt dieser Wert nicht, führt das zur Wegnahme des Gases und somit zum Sinken. |
* |
* Der Pitch-Wert ist innerhalb der Regelung durch ein konfigurierbares Minimalgas nach unten begrenzt. |
* Dieses Minimalgas kann auf einen sehr niedrigen Wert eingestellt sein. Um im Flug nicht unterhalb |
* eines Wertes zu gelangen, der die Lageregelung außer Funktion setzt, wird ein zweiter Wert für |
* Minimalgas konfiguriert, der greift, sobald erstmalig die automatische Höhenregelung aktiviert wurde. |
* 5. Sobald der Stick die Neutralstellung verläßt, wird die automatische Höhenregelung deaktiviert |
* und der vorige Pitch-Wert als Wert der Neutralstellung übernommen. Der Pitch läßt sich nun |
* über den gesamten Stick-Bereich regeln. |
* |
* 6. Erreicht der Stick ein weiteres Mal die Neutralstellung, wird die automatische Höhenregelung |
* wieder aktiviert, jetzt jedoch immer mit einer zeitlichen Verzögerung. Nur so ist ein |
* ungestörtes manuelles Steuern möglich. |
* |
* 7. Der Pitch-Wert ist innerhalb der Regelung durch ein konfigurierbares Minimalgas nach unten begrenzt. |
* Dieses Minimalgas kann auf einen sehr niedrigen Wert eingestellt sein. Um im Flug nicht unterhalb |
* eines Wertes zu gelangen, der die Lageregelung außer Funktion setzt, wird ein zweiter Wert für |
* Minimalgas konfiguriert, der greift, sobald erstmalig die automatische Höhenregelung aktiviert wurde. |
*/ |
int pitch_neutral_value( void ) { |
int register pitchCount = 0; |
// Sind die Motoren eingeschaltet? |
// Sind die Motoren eingeschaltet? Ach ja, im Zustand STATE_SETUP sind die Motoren aus... |
if( MotorenEin ) { |
// Vorigen Stick-Wert merken |
74,7 → 96,7 |
/* StickValue exponentiell angleichen, da ausgehend von der Neutralstellung |
* nur jeweils die halbe Auflösung nach oben und unten zur Verfügung steht. Bei einer |
* Multiplikation mit 2 ließe sich das Gas im Schwebebereich nicht fein genug einstellen. */ |
temp = PPM_in[ EE_Parameter.Kanalbelegung[ K_GAS ] ] - pitch_stickoffset(); |
temp = PPM_in[ EE_Parameter.Kanalbelegung[ K_GAS ] ] - pitch_initialStickValue(); |
if( temp > 0 ) { |
temp = temp + ( ( temp * temp ) / 150 ); |
} else { |
81,29 → 103,98 |
temp = temp - ( ( temp * temp ) / 150 ); |
} |
// Original-Stick-Wert holen und glätten |
stickValue = ( temp + 2 * lastStickValue ) / 3; |
stickValue = temp; |
/* Aktuellen Pitch-Wert berechnen. Der Wert ergibt sich aus dem Pitch-Offset |
* zuzüglich dem Stick-Wert. */ |
pitchCount = stickValue + pitchOffset; |
switch( state ) { |
/* Entscheidet über Flugbetrieb oder Setup-Betrieb. Für den Setup-Betrieb |
* muß beim Einschalten der Motoren gleichzeitig der Roll-Stick ganz |
* betätigt werden (Richtung ist egal). |
*/ |
case STATE_INITIALIZE: |
if( abs( PPM_in[ EE_Parameter.Kanalbelegung[ K_ROLL ] ] ) > 70 ) { |
state = STATE_SETUP; |
} else { |
state = STATE_BEGIN; |
} |
break; |
case STATE_SETUP: |
if( stickValue < PARAM_PITCH_STICK_THRESHOLD && |
abs( PPM_in[ EE_Parameter.Kanalbelegung[ K_ROLL ] ] ) < PARAM_PITCH_STICK_THRESHOLD ) { |
state = STATE_SETUP1; |
} |
// Im Setup immer mit Leerlaufgas |
pitchCount = 0; |
break; |
case STATE_SETUP1: |
// Roll-Stick nach links |
if( PPM_in[ EE_Parameter.Kanalbelegung[ K_ROLL ] ] < -20 ) { |
if( pitchNeutralDiff < 20 ) { |
pitchNeutralDiff++; |
// Konfiguration dauerhaft speichern |
eeprom_write_byte( &EEPromArray[ EEPROM_ADR_PITCH_NEUTRAL_DIFF ], pitchNeutralDiff ); |
// Signalisieren |
beeptime = 500; |
state = STATE_SETUP; |
} |
} |
// Roll-Stick nach rechts |
if( PPM_in[ EE_Parameter.Kanalbelegung[ K_ROLL ] ] > 20 ) { |
if( pitchNeutralDiff > 0 ) { |
pitchNeutralDiff--; |
// Konfiguration dauerhaft speichern |
eeprom_write_byte( &EEPromArray[ EEPROM_ADR_PITCH_NEUTRAL_DIFF ], pitchNeutralDiff ); |
// Signalisieren |
beeptime = 500; |
state = STATE_SETUP; |
} |
} |
if( ( lastStickValue > PARAM_PITCH_STICK_THRESHOLD ) && |
( lastStickValue - stickValue >= pitchNeutralDiff ) ) { |
state = STATE_SETUP; |
// Signalisieren |
beeptime = 500; |
} |
// Im Setup immer mit Leerlaufgas |
pitchCount = 0; |
break; |
case STATE_BEGIN: |
// Schnelles Bewegen aus dem oberen Bereich des Sticks in Neutralstellung |
if( ( lastStickValue > PARAM_PITCH_STICK_THRESHOLD ) && |
( lastStickValue - stickValue >= PARAM_PITCH_NEUTRAL_DIFF ) ) { |
( lastStickValue - stickValue >= pitchNeutralDiff ) ) { |
pitchOffset = lastStickValue; |
state = STATE_INITIALIZING; |
state = STATE_BEGIN1; |
pitchNeutralTimer = PITCH_NEUTRAL_TIMER; |
} |
break; |
case STATE_INITIALIZING: |
case STATE_BEGIN1: |
// Während der Initialisierung das Gas konstant halten |
pitchCount = pitchOffset; |
120,26 → 211,10 |
// Ist die Neutralstellung erreicht? |
if( abs( stickValue ) <= PARAM_PITCH_STICK_THRESHOLD ) { |
// Ist die Höhenregelung aktiviert? |
if( EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG ) { |
state = STATE_ACTIVATING; |
} else { |
state = STATE_MANUAL; |
} |
state = STATE_ACTIVATING; |
} |
break; |
/* Wenn die Höhenregelung per Konfiguration deaktiviert ist, verbleibt |
* die Funktion in diesem Zustand. */ |
case STATE_MANUAL: |
// Min2-Gas einstellen für Lageregelung bei Minimalgas |
if( pitchCount < PARAM_PITCH_MIN2 ) { |
pitchCount = PARAM_PITCH_MIN2; |
} |
break; |
/* Die Höhenregelung ist per Konfiguration aktiviert, jedoch befindet |
* sich der Stick außerhalb des als Neutralstellung anerkannten |
* Wertebereiches. Es wird manuell geregelt. */ |
239,7 → 314,7 |
pitchCount = 0; |
pitchOffset = 0; |
stickValue = 0; |
state = STATE_BEGIN; |
state = STATE_INITIALIZE; |
} |
if( pitchOffset < 0 ) |
/branches/thjac/V1_11/pitch_neutral.h |
---|
6,7 → 6,12 |
#ifndef _PITCH_NEUTRAL_H |
#define _PITCH_NEUTRAL_H |
#define pitch_neutralDiff() pitchNeutralDiff |
extern void pitch_neutral_init( void ); |
extern int pitch_neutral_value( void ); |
extern char pitchNeutralDiff; |
#endif // PITCH_NEUTRAL_H |
/branches/thjac/V1_11/version.txt |
---|
235,3 → 235,10 |
- Neue Display-Seite für Pitch-Steuerung |
- Fehler in Höhenregelung korrigiert |
- Integralanteil in Höhenregelung vorerst stillgelegt |
V1_11c T. Jachmann |
- Setup-Modus für Pitch-Steuerung "neutral" |
- Parameter für "Loslasserkennung" der Pitch-Steuerung "neutral" liegt jetzt im EEProm (Setting-unabhängig) |
- Erweiterung der Display-Seite für Pitch-Steuerung |
- Sicherung des Pitch-Modus über die Einschalt-Gas-Stick-Position und die Höhenregelung im Setting |