Rev 420 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 420 | Rev 446 | ||
---|---|---|---|
Line 50... | Line 50... | ||
50 | // + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
50 | // + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
51 | // + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
51 | // + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
52 | // + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
52 | // + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
53 | // + POSSIBILITY OF SUCH DAMAGE. |
53 | // + POSSIBILITY OF SUCH DAMAGE. |
54 | // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
54 | // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
- | 55 | // Aenderungen von Peter Muehlenbrock ("Salvo") Stand 6.10.2007 |
|
- | 56 | /* |
|
- | 57 | Driftkompensation fuer Gyros verbessert |
|
- | 58 | Linearsensor mit fixem Neutralwert |
|
- | 59 | Ersatzkompass abgeleitet aus Magnetkompass und Giergyro fuer nahezu neigungsunabhaengige Kompassfunktion |
|
- | 60 | */ |
|
Line 55... | Line 61... | ||
55 | 61 | ||
56 | #include "main.h" |
62 | #include "main.h" |
Line 57... | Line 63... | ||
57 | #include "eeprom.c" |
63 | #include "eeprom.c" |
Line 78... | Line 84... | ||
78 | unsigned char MAX_GAS,MIN_GAS; |
84 | unsigned char MAX_GAS,MIN_GAS; |
79 | unsigned char Notlandung = 0; |
85 | unsigned char Notlandung = 0; |
80 | unsigned char HoehenReglerAktiv = 0; |
86 | unsigned char HoehenReglerAktiv = 0; |
81 | long Umschlag180Nick = 250000L, Umschlag180Roll = 250000L; |
87 | long Umschlag180Nick = 250000L, Umschlag180Roll = 250000L; |
Line -... | Line 88... | ||
- | 88 | ||
- | 89 | //Salvo 12.10.2007 |
|
- | 90 | uint8_t magkompass_ok=0; |
|
- | 91 | uint8_t gps_cmd = GPS_CMD_STOP; |
|
- | 92 | static int ubat_cnt =0; |
|
- | 93 | static int gas_actual,gas_mittel; //Parameter fuer Gasreduzierung bei unterspannung |
|
- | 94 | int w,v; |
|
- | 95 | //Salvo End |
|
- | 96 | ||
- | 97 | //Salvo 2.9.2007 Ersatzkompass |
|
- | 98 | volatile long GyroKomp_Int; |
|
- | 99 | volatile int GyroKomp_Value; // Der ermittelte Kompasswert aus Gyro und Magnetkompass |
|
- | 100 | // Salvo End |
|
82 | 101 | ||
83 | float GyroFaktor; |
102 | float GyroFaktor; |
Line 84... | Line 103... | ||
84 | float IntegralFaktor; |
103 | float IntegralFaktor; |
85 | 104 | ||
Line 101... | Line 120... | ||
101 | unsigned char Parameter_Luftdruck_D = 48; // Wert : 0-250 |
120 | unsigned char Parameter_Luftdruck_D = 48; // Wert : 0-250 |
102 | unsigned char Parameter_MaxHoehe = 251; // Wert : 0-250 |
121 | unsigned char Parameter_MaxHoehe = 251; // Wert : 0-250 |
103 | unsigned char Parameter_Hoehe_P = 16; // Wert : 0-32 |
122 | unsigned char Parameter_Hoehe_P = 16; // Wert : 0-32 |
104 | unsigned char Parameter_Hoehe_ACC_Wirkung = 58; // Wert : 0-250 |
123 | unsigned char Parameter_Hoehe_ACC_Wirkung = 58; // Wert : 0-250 |
105 | unsigned char Parameter_KompassWirkung = 64; // Wert : 0-250 |
124 | unsigned char Parameter_KompassWirkung = 64; // Wert : 0-250 |
106 | unsigned char Parameter_Gyro_P = 150; // Wert : 10-250 |
125 | unsigned char Parameter_Gyro_P = 50; // Wert : 10-250 |
107 | unsigned char Parameter_Gyro_I = 150; // Wert : 0-250 |
126 | unsigned char Parameter_Gyro_I = 150; // Wert : 0-250 |
108 | unsigned char Parameter_Gier_P = 2; // Wert : 1-20 |
127 | unsigned char Parameter_Gier_P = 2; // Wert : 1-20 |
109 | unsigned char Parameter_I_Faktor = 10; // Wert : 1-20 |
128 | unsigned char Parameter_I_Faktor = 10; // Wert : 1-20 |
110 | unsigned char Parameter_UserParam1 = 0; |
129 | unsigned char Parameter_UserParam1 = 0; |
111 | unsigned char Parameter_UserParam2 = 0; |
130 | unsigned char Parameter_UserParam2 = 0; |
Line 138... | Line 157... | ||
138 | AdNeutralNick = 0; |
157 | AdNeutralNick = 0; |
139 | AdNeutralRoll = 0; |
158 | AdNeutralRoll = 0; |
140 | AdNeutralGier = 0; |
159 | AdNeutralGier = 0; |
141 | Parameter_AchsKopplung1 = 0; |
160 | Parameter_AchsKopplung1 = 0; |
142 | Parameter_AchsGegenKopplung1 = 0; |
161 | Parameter_AchsGegenKopplung1 = 0; |
- | 162 | ||
143 | CalibrierMittelwert(); |
163 | CalibrierMittelwert(); |
144 | Delay_ms_Mess(100); |
164 | Delay_ms_Mess(100); |
145 | CalibrierMittelwert(); |
165 | CalibrierMittelwert(); |
146 | if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert? |
166 | if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert? |
147 | { |
167 | { |
Line 151... | Line 171... | ||
151 | AdNeutralNick= AdWertNick; |
171 | AdNeutralNick= AdWertNick; |
152 | AdNeutralRoll= AdWertRoll; |
172 | AdNeutralRoll= AdWertRoll; |
153 | AdNeutralGier= AdWertGier; |
173 | AdNeutralGier= AdWertGier; |
154 | StartNeutralRoll = AdNeutralRoll; |
174 | StartNeutralRoll = AdNeutralRoll; |
155 | StartNeutralNick = AdNeutralNick; |
175 | StartNeutralNick = AdNeutralNick; |
- | 176 | ||
- | 177 | // Salvo 1.9.2007 ACC mit festen neutralwerten ***** |
|
- | 178 | if (ACC_NEUTRAL_FIXED > 0) |
|
- | 179 | { |
|
- | 180 | NeutralAccX = ACC_NICK_NEUTRAL; |
|
- | 181 | NeutralAccY = ACC_ROLL_NEUTRAL; |
|
- | 182 | } |
|
- | 183 | else |
|
- | 184 | { // Automatisch bei Offsetabgleich ermitteln |
|
156 | NeutralAccY = abs(Mittelwert_AccRoll) / ACC_AMPLIFY; |
185 | NeutralAccX = abs(Mittelwert_AccNick) / ACC_AMPLIFY; |
157 | NeutralAccX = abs(Mittelwert_AccNick) / ACC_AMPLIFY; |
186 | NeutralAccY = abs(Mittelwert_AccRoll) / ACC_AMPLIFY; |
- | 187 | } |
|
- | 188 | // Salvo End |
|
158 | NeutralAccZ = Aktuell_az; |
189 | NeutralAccZ = Aktuell_az; |
Line 159... | Line 190... | ||
159 | 190 | ||
160 | Mess_IntegralNick = 0; |
191 | Mess_IntegralNick = 0; |
161 | Mess_IntegralNick2 = 0; |
192 | Mess_IntegralNick2 = 0; |
Line 171... | Line 202... | ||
171 | KompassStartwert = KompassValue; |
202 | KompassStartwert = KompassValue; |
172 | GPS_Neutral(); |
203 | GPS_Neutral(); |
173 | beeptime = 50; |
204 | beeptime = 50; |
174 | Umschlag180Nick = (long) EE_Parameter.WinkelUmschlagNick * 2500L; |
205 | Umschlag180Nick = (long) EE_Parameter.WinkelUmschlagNick * 2500L; |
175 | Umschlag180Roll = (long) EE_Parameter.WinkelUmschlagRoll * 2500L; |
206 | Umschlag180Roll = (long) EE_Parameter.WinkelUmschlagRoll * 2500L; |
- | 207 | ||
- | 208 | //Salvo 13.10.2007 Ersatzkompass und Gas |
|
- | 209 | GyroKomp_Int = KompassValue * GYROKOMP_INC_GRAD_DEFAULT; //Neu ab 3.1.2007 |
|
- | 210 | gas_mittel = 30; |
|
- | 211 | gas_actual = gas_mittel; |
|
- | 212 | // Salvo End |
|
176 | } |
213 | } |
Line 177... | Line 214... | ||
177 | 214 | ||
178 | //############################################################################ |
215 | //############################################################################ |
179 | // Bearbeitet die Messwerte |
216 | // Bearbeitet die Messwerte |
Line 191... | Line 228... | ||
191 | Mittelwert_AccHoch = ((long)Mittelwert_AccHoch * 1 + ((long)AdWertAccHoch)) / 2L; |
228 | Mittelwert_AccHoch = ((long)Mittelwert_AccHoch * 1 + ((long)AdWertAccHoch)) / 2L; |
192 | IntegralAccNick += ACC_AMPLIFY * AdWertAccNick; |
229 | IntegralAccNick += ACC_AMPLIFY * AdWertAccNick; |
193 | IntegralAccRoll += ACC_AMPLIFY * AdWertAccRoll; |
230 | IntegralAccRoll += ACC_AMPLIFY * AdWertAccRoll; |
194 | IntegralAccZ += Aktuell_az - 704;//NeutralAccZ; |
231 | IntegralAccZ += Aktuell_az - 704;//NeutralAccZ; |
195 | // Gier ++++++++++++++++++++++++++++++++++++++++++++++++ |
232 | // Gier ++++++++++++++++++++++++++++++++++++++++++++++++ |
- | 233 | //Salvo 12.11.2007 |
|
- | 234 | GyroKomp_Int += MesswertGier; |
|
- | 235 | //Salvo End |
|
196 | Mess_Integral_Gier += MesswertGier; |
236 | Mess_Integral_Gier += MesswertGier; |
197 | Mess_Integral_Gier2 += MesswertGier; |
237 | Mess_Integral_Gier2 += MesswertGier; |
198 | // Kopplungsanteil +++++++++++++++++++++++++++++++++++++ |
238 | // Kopplungsanteil +++++++++++++++++++++++++++++++++++++ |
199 | if(!Looping_Nick && !Looping_Roll && (EE_Parameter.GlobalConfig & CFG_ACHSENKOPPLUNG_AKTIV)) |
239 | if(!Looping_Nick && !Looping_Roll && (EE_Parameter.GlobalConfig & CFG_ACHSENKOPPLUNG_AKTIV)) |
200 | { |
240 | { |
Line 398... | Line 438... | ||
398 | static char TimerWerteausgabe = 0; |
438 | static char TimerWerteausgabe = 0; |
399 | static char NeueKompassRichtungMerken = 0; |
439 | static char NeueKompassRichtungMerken = 0; |
400 | static long ausgleichNick, ausgleichRoll; |
440 | static long ausgleichNick, ausgleichRoll; |
Line 401... | Line 441... | ||
401 | 441 | ||
- | 442 | Mittelwert(); |
|
- | 443 | //****** GPS Daten holen *************** |
|
- | 444 | short int n; |
|
- | 445 | if (gps_alive_cnt > 0) gps_alive_cnt--; //Dekrementieren. Wenn 0 kommen keine ausreichenden GPS Meldungen (Timeout) |
|
- | 446 | n = Get_Rel_Position(); |
|
402 | Mittelwert(); |
447 | if (n == 0) |
- | 448 | { |
|
- | 449 | ROT_ON; //led blitzen lassen |
|
- | 450 | } |
|
403 | 451 | //******PROVISORISCH*************** |
|
- | 452 | GRN_ON; |
|
404 | GRN_ON; |
453 | |
405 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
454 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
406 | // Gaswert ermitteln |
455 | // Gaswert ermitteln |
407 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
456 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
- | 457 | GasMischanteil = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] + 120; |
|
- | 458 | //Salvo 13.10.2007 langsame Gasreduktion bei Unterspannung. Als Ausgangswert wird der bei UBAT=k gemessen Mittelwert genommen |
|
- | 459 | // und dieser dann langsam zwangsweise reduziert |
|
- | 460 | if (UBat <= EE_Parameter.UnterspannungsWarnung - 2) //Unterhalb der Piepser Schwelle aktivieren |
|
- | 461 | { |
|
- | 462 | if (ubat_cnt > 700) |
|
- | 463 | { |
|
- | 464 | ubat_cnt = 0; |
|
- | 465 | if (gas_actual > ((gas_mittel*12)/15)) gas_actual--; |
|
- | 466 | } |
|
- | 467 | else ubat_cnt++; |
|
- | 468 | if (GasMischanteil > gas_actual) GasMischanteil = gas_actual; |
|
- | 469 | } |
|
- | 470 | else //Falls UBAT wieder ok ist |
|
- | 471 | { |
|
- | 472 | if (ubat_cnt > 1000) |
|
- | 473 | { |
|
- | 474 | gas_mittel = ((gas_mittel*9) + GasMischanteil)/10; //Filtern |
|
- | 475 | gas_actual = GasMischanteil; |
|
- | 476 | } |
|
- | 477 | else |
|
- | 478 | { |
|
- | 479 | ubat_cnt++; |
|
- | 480 | if ((ubat_cnt % 10) == 0) |
|
- | 481 | { |
|
- | 482 | if (gas_actual < GasMischanteil) gas_actual++; |
|
- | 483 | else gas_actual = GasMischanteil; |
|
- | 484 | } |
|
- | 485 | } |
|
- | 486 | GasMischanteil = gas_actual; |
|
- | 487 | } |
|
408 | GasMischanteil = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] + 120; |
488 | // Salvo End |
409 | if(GasMischanteil < 0) GasMischanteil = 0; |
489 | if(GasMischanteil < 0) GasMischanteil = 0; |
410 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
490 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
411 | // Emfang schlecht |
491 | // Empfang schlecht |
412 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
492 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
413 | if(SenderOkay < 100) |
493 | if(SenderOkay < 100) |
414 | { |
494 | { |
415 | if(!PcZugriff) |
495 | if(!PcZugriff) |
Line 465... | Line 545... | ||
465 | { |
545 | { |
466 | unsigned char setting = 2; |
546 | unsigned char setting = 2; |
467 | if(++delay_neutral > 200) // nicht sofort |
547 | if(++delay_neutral > 200) // nicht sofort |
468 | { |
548 | { |
469 | GRN_OFF; |
549 | GRN_OFF; |
- | 550 | SetNeutral(); |
|
470 | MotorenEin = 0; |
551 | MotorenEin = 0; |
471 | delay_neutral = 0; |
552 | delay_neutral = 0; |
472 | modell_fliegt = 0; |
553 | modell_fliegt = 0; |
473 | if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70 || abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) > 70) |
554 | if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70 || abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) > 70) |
474 | { |
555 | { |
Line 478... | Line 559... | ||
478 | if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 3; |
559 | if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 3; |
479 | if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 4; |
560 | if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 4; |
480 | if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70) setting = 5; |
561 | if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70) setting = 5; |
481 | eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], setting); // aktiven Datensatz merken |
562 | eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], setting); // aktiven Datensatz merken |
482 | } |
563 | } |
483 | if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert? |
- | |
484 | { |
- | |
485 | if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset(); |
- | |
486 | } |
- | |
- | 564 | ||
- | 565 | ||
- | 566 | ||
- | 567 | ||
487 | ReadParameterSet(GetActiveParamSetNumber(), (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE); |
568 | ReadParameterSet(GetActiveParamSetNumber(), (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE); |
488 | SetNeutral(); |
- | |
- | 569 | ||
489 | Piep(GetActiveParamSetNumber()); |
570 | Piep(GetActiveParamSetNumber()); |
- | 571 | if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert? |
|
- | 572 | { |
|
- | 573 | if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset(); |
|
490 | } |
574 | } |
- | 575 | GPS_Save_Home(); //Daten sind jetzt hoffentlich verfuegbar |
|
- | 576 | if (gps_home_position.status > 0 ) |
|
- | 577 | { |
|
- | 578 | Delay_ms(1000); //akustisch verkuenden dass GPS Home Daten da sind |
|
- | 579 | beeptime = 2000; |
|
- | 580 | Delay_ms(500); |
|
- | 581 | } |
|
- | 582 | } |
|
491 | } |
583 | } |
492 | else delay_neutral = 0; |
584 | else delay_neutral = 0; |
493 | } |
585 | } |
494 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
586 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
495 | // Gas ist unten |
587 | // Gas ist unten |
Line 639... | Line 731... | ||
639 | Looping_Roll = 0; |
731 | Looping_Roll = 0; |
640 | Looping_Nick = 0; |
732 | Looping_Nick = 0; |
641 | } |
733 | } |
Line -... | Line 734... | ||
- | 734 | ||
642 | 735 | ||
643 | 736 | ||
644 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
737 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
645 | // Integrale auf ACC-Signal abgleichen |
738 | // Integrale auf ACC-Signal abgleichen |
Line 729... | Line 822... | ||
729 | Mess_IntegralRoll2 -= IntegralFehlerRoll; |
822 | Mess_IntegralRoll2 -= IntegralFehlerRoll; |
Line 730... | Line 823... | ||
730 | 823 | ||
731 | // IntegralFehlerNick = (IntegralFehlerNick * 1 + tmp_long) / 2; |
824 | // IntegralFehlerNick = (IntegralFehlerNick * 1 + tmp_long) / 2; |
Line -... | Line 825... | ||
- | 825 | // IntegralFehlerRoll = (IntegralFehlerRoll * 1 + tmp_long2) / 2; |
|
- | 826 | ||
- | 827 | //Salvo Ersatzkompass Ueberlauf korrigieren |
|
- | 828 | if (GyroKomp_Int >= ((long)360 * GYROKOMP_INC_GRAD_DEFAULT)) GyroKomp_Int = GyroKomp_Int - (GYROKOMP_INC_GRAD_DEFAULT *(long)360); //neu ab 3.11.2007 |
|
- | 829 | if (GyroKomp_Int < 0) GyroKomp_Int = GyroKomp_Int + (GYROKOMP_INC_GRAD_DEFAULT *(long)360); //neu ab 3.11.2007 |
|
Line -... | Line 830... | ||
- | 830 | ROT_OFF; |
|
732 | // IntegralFehlerRoll = (IntegralFehlerRoll * 1 + tmp_long2) / 2; |
831 | // Salvo End |
733 | 832 | ||
734 | 833 | /* |
|
735 | DebugOut.Analog[30] = I_LageRoll * 10; |
834 | DebugOut.Analog[30] = I_LageRoll * 10; |
736 | DebugOut.Analog[17] = IntegralAccNick / 26; |
835 | DebugOut.Analog[17] = IntegralAccNick / 26; |
737 | DebugOut.Analog[18] = IntegralAccRoll / 26; |
836 | DebugOut.Analog[18] = IntegralAccRoll / 26; |
738 | DebugOut.Analog[19] = IntegralFehlerNick;// / 26; |
837 | DebugOut.Analog[19] = IntegralFehlerNick;// / 26; |
739 | DebugOut.Analog[20] = IntegralFehlerRoll;// / 26; |
838 | DebugOut.Analog[20] = IntegralFehlerRoll;// / 26; |
740 | DebugOut.Analog[21] = MittelIntegralNick / 26; |
839 | DebugOut.Analog[21] = MittelIntegralNick / 26; |
- | 840 | DebugOut.Analog[22] = MittelIntegralRoll / 26; |
|
Line 741... | Line 841... | ||
741 | DebugOut.Analog[22] = MittelIntegralRoll / 26; |
841 | DebugOut.Analog[28] = ausgleichNick; |
742 | DebugOut.Analog[28] = ausgleichNick; |
842 | DebugOut.Analog[29] = ausgleichRoll; |
Line 743... | Line 843... | ||
743 | DebugOut.Analog[29] = ausgleichRoll; |
843 | */ |
Line 774... | Line 874... | ||
774 | if(IntegralFehlerNick > FEHLER_LIMIT) AdNeutralNick += cnt; |
874 | if(IntegralFehlerNick > FEHLER_LIMIT) AdNeutralNick += cnt; |
775 | if(IntegralFehlerNick < -FEHLER_LIMIT) AdNeutralNick -= cnt; |
875 | if(IntegralFehlerNick < -FEHLER_LIMIT) AdNeutralNick -= cnt; |
Line 776... | Line 876... | ||
776 | 876 | ||
777 | // Roll +++++++++++++++++++++++++++++++++++++++++++++++++ |
877 | // Roll +++++++++++++++++++++++++++++++++++++++++++++++++ |
778 | cnt = 1;// + labs(IntegralFehlerRoll) / 4096; |
878 | cnt = 1;// + labs(IntegralFehlerRoll) / 4096; |
779 | ausgleichRoll = 0; |
879 | ausgleichRoll = 0; |
780 | if(IntegralFehlerRoll > FEHLER_LIMIT2) |
880 | if(IntegralFehlerRoll > FEHLER_LIMIT2) |
781 | { |
881 | { |
782 | if(last_r_p) |
882 | if(last_r_p) |
783 | { |
883 | { |
Line 828... | Line 928... | ||
828 | sollGier = tmp_int; |
928 | sollGier = tmp_int; |
829 | Mess_Integral_Gier -= tmp_int; |
929 | Mess_Integral_Gier -= tmp_int; |
830 | if(Mess_Integral_Gier > 50000) Mess_Integral_Gier = 50000; // begrenzen |
930 | if(Mess_Integral_Gier > 50000) Mess_Integral_Gier = 50000; // begrenzen |
831 | if(Mess_Integral_Gier <-50000) Mess_Integral_Gier =-50000; |
931 | if(Mess_Integral_Gier <-50000) Mess_Integral_Gier =-50000; |
Line -... | Line 932... | ||
- | 932 | ||
- | 933 | // Salvo Ersatzkompass 26.9.2007 ********************** |
|
- | 934 | if ((Kompass_Neuer_Wert > 0)) |
|
- | 935 | { |
|
- | 936 | Kompass_Neuer_Wert = 0; |
|
- | 937 | w = (abs(Mittelwert_AccNick)); |
|
- | 938 | v = (abs(Mittelwert_AccRoll)); |
|
- | 939 | if ((w < ACC_WAAGRECHT_LIMIT) && (v < ACC_WAAGRECHT_LIMIT)) //Ersatzkompass nur mit Magnetkompass aktualisieren wenn alles ok |
|
- | 940 | { |
|
- | 941 | if ((abs(KompassValue - Kompass_Value_Old)) <= 5) // Aufeinanderfolgende Werte duerfen nur minimal abweichen |
|
- | 942 | { |
|
- | 943 | magkompass_ok = 1; // Flag dass Magnetkompass stabil arbeitet |
|
- | 944 | GyroKomp_Int = (GyroKomp_Int )/GYROKOMP_INC_GRAD_DEFAULT; |
|
- | 945 | w = KompassValue - GyroKomp_Int; |
|
- | 946 | if ((w > 0) && (w < 180)) |
|
- | 947 | { |
|
- | 948 | ++GyroKomp_Int; |
|
- | 949 | } |
|
- | 950 | else if ((w > 0) && (w >= 180)) |
|
- | 951 | { |
|
- | 952 | --GyroKomp_Int; |
|
- | 953 | } |
|
- | 954 | else if ((w < 0) && (w >= -180)) |
|
- | 955 | { |
|
- | 956 | --GyroKomp_Int; |
|
- | 957 | } |
|
- | 958 | else if ((w < 0) && (w < -180)) |
|
- | 959 | { |
|
- | 960 | ++GyroKomp_Int; |
|
- | 961 | } |
|
- | 962 | if (GyroKomp_Int < 0) GyroKomp_Int = GyroKomp_Int + 360; |
|
- | 963 | GyroKomp_Int = (GyroKomp_Int%360) * GYROKOMP_INC_GRAD_DEFAULT; // An Magnetkompasswert annaehern |
|
- | 964 | } |
|
- | 965 | } |
|
- | 966 | else magkompass_ok = 0; |
|
- | 967 | } |
|
- | 968 | // Salvo End ************************* |
|
- | 969 | ||
- | 970 | // Salvo 6.10.2007 |
|
- | 971 | // GPS Home aktivieren wenn Knueppel in Ruhelage und Hoehenschalter aktiviert ist |
|
- | 972 | //GPS Hold Aktiveren wenn Knueppel in Ruhelage sind |
|
- | 973 | if ((EE_Parameter.GlobalConfig & CFG_GPS_AKTIV) && (abs(StickRoll) < GPS_STICK_HOLDOFF) && (abs(StickNick) < GPS_STICK_HOLDOFF) && (gps_alive_cnt > 0)) |
|
- | 974 | { |
|
- | 975 | if (Parameter_MaxHoehe > 200) |
|
- | 976 | { |
|
- | 977 | if ( gps_cmd == GPS_CMD_REQ_HOLD) gps_cmd = GPS_CMD_STOP; // erst mal stoppen, denn altes Kommando wurde noch nicht beendet |
|
- | 978 | else gps_cmd = GPS_CMD_REQ_HOME; |
|
- | 979 | n = GPS_CRTL(gps_cmd); |
|
- | 980 | } |
|
- | 981 | else |
|
- | 982 | { |
|
- | 983 | if ( gps_cmd == GPS_CMD_REQ_HOME) gps_cmd = GPS_CMD_STOP; // erst mal stoppen, denn altes Kommando wurde noch nicht beendet |
|
- | 984 | else gps_cmd = GPS_CMD_REQ_HOLD; |
|
- | 985 | n= GPS_CRTL(gps_cmd); |
|
- | 986 | } |
|
- | 987 | } |
|
832 | 988 | else (n= GPS_CRTL(GPS_CMD_STOP)); //GPS Lageregelung beenden |
|
833 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
989 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
834 | // Kompass |
990 | // Kompass |
835 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
991 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
836 | if(KompassValue && (EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV)) |
992 | if(KompassValue && (EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV) && (Kompass_present > 0)) |
837 | { |
- | |
838 | int w,v; |
- | |
839 | static int SignalSchlecht = 0; |
- | |
840 | w = abs(IntegralNick /512); // mit zunehmender Neigung den Einfluss drosseln |
- | |
841 | v = abs(IntegralRoll /512); |
993 | { |
- | 994 | if(v > w) w = v; // grösste Neigung ermitteln |
|
- | 995 | ||
842 | if(v > w) w = v; // grösste Neigung ermitteln |
996 | // Salvo 13.9.2007 Nur wenn Magnetkompass ordentliche Werte liefert |
843 | if(w < 25 && NeueKompassRichtungMerken && !SignalSchlecht) |
997 | if ((magkompass_ok > 0) && NeueKompassRichtungMerken) |
844 | { |
998 | { |
845 | KompassStartwert = KompassValue; |
999 | KompassStartwert = KompassValue; |
846 | NeueKompassRichtungMerken = 0; |
1000 | NeueKompassRichtungMerken = 0; |
- | 1001 | } |
|
- | 1002 | // Salvo 13.9.2007 |
|
- | 1003 | w=0; |
|
847 | } |
1004 | // Salvo End |
848 | w = (w * Parameter_KompassWirkung) / 64; // auf die Wirkung normieren |
1005 | w = (w * Parameter_KompassWirkung) / 64; // auf die Wirkung normieren |
849 | w = Parameter_KompassWirkung - w; // Wirkung ggf drosseln |
1006 | w = Parameter_KompassWirkung - w; // Wirkung ggf drosseln |
850 | if(w > 0) |
1007 | if(w > 0) |
- | 1008 | { |
|
851 | { |
1009 | // Salvo Kompasssteuerung ********************** |
852 | if(!SignalSchlecht) Mess_Integral_Gier += (KompassRichtung * w) / 32; // nach Kompass ausrichten |
1010 | if (magkompass_ok > 0) Mess_Integral_Gier += (KompassRichtung * w) / 32; // nach Kompass ausrichten |
853 | if(SignalSchlecht) SignalSchlecht--; |
1011 | // Salvo End |
854 | } |
- | |
- | 1012 | } |
|
855 | else SignalSchlecht = 500; // so lange das Signal taub stellen --> ca. 1 sek |
1013 | |
856 | } |
1014 | } |
Line 857... | Line 1015... | ||
857 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1015 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
858 | 1016 | ||
Line 868... | Line 1026... | ||
868 | DebugOut.Analog[3] = Mittelwert_AccRoll; |
1026 | DebugOut.Analog[3] = Mittelwert_AccRoll; |
869 | DebugOut.Analog[4] = MesswertGier; |
1027 | DebugOut.Analog[4] = MesswertGier; |
870 | DebugOut.Analog[5] = HoehenWert; |
1028 | DebugOut.Analog[5] = HoehenWert; |
871 | DebugOut.Analog[6] =(Mess_Integral_Hoch / 512); |
1029 | DebugOut.Analog[6] =(Mess_Integral_Hoch / 512); |
872 | DebugOut.Analog[8] = KompassValue; |
1030 | DebugOut.Analog[8] = KompassValue; |
- | 1031 | DebugOut.Analog[9] = GyroKomp_Int/GYROKOMP_INC_GRAD_DEFAULT; |
|
- | 1032 | ||
- | 1033 | // Diverse parameter Debugging |
|
- | 1034 | DebugOut.Analog[16] = dataset_cnt; |
|
873 | DebugOut.Analog[9] = UBat; |
1035 | DebugOut.Analog[17] = UBat; |
874 | DebugOut.Analog[10] = SenderOkay; |
1036 | DebugOut.Analog[18] = MesswertNick; |
875 | DebugOut.Analog[16] = Mittelwert_AccHoch; |
1037 | DebugOut.Analog[19] = MesswertRoll; |
- | 1038 | DebugOut.Analog[20] = MesswertGier; |
|
- | 1039 | DebugOut.Analog[21] = StickNick; |
|
- | 1040 | DebugOut.Analog[22] = StickRoll; |
|
- | 1041 | DebugOut.Analog[23] = StickGier; |
|
- | 1042 | ||
- | 1043 | ||
- | 1044 | // GPS Debugging |
|
- | 1045 | DebugOut.Analog[26] = gps_rel_act_position.utm_east; |
|
- | 1046 | DebugOut.Analog[27] = gps_rel_act_position.utm_north; |
|
- | 1047 | DebugOut.Analog[28] = gps_rel_act_position.utm_alt; |
|
- | 1048 | DebugOut.Analog[29] = gps_sub_state+(20*gps_cmd); |
|
Line 876... | Line 1049... | ||
876 | 1049 | ||
877 | /* DebugOut.Analog[16] = motor_rx[0]; |
1050 | /* DebugOut.Analog[16] = motor_rx[0]; |
878 | DebugOut.Analog[17] = motor_rx[1]; |
1051 | DebugOut.Analog[17] = motor_rx[1]; |
879 | DebugOut.Analog[18] = motor_rx[2]; |
1052 | DebugOut.Analog[18] = motor_rx[2]; |