Rev 1596 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1596 | Rev 1604 | ||
---|---|---|---|
Line 65... | Line 65... | ||
65 | int TrimNick, TrimRoll; |
65 | int TrimNick, TrimRoll; |
66 | int AdNeutralGierBias; |
66 | int AdNeutralGierBias; |
67 | int AdNeutralNick = 0,AdNeutralRoll = 0,AdNeutralGier = 0,StartNeutralRoll = 0,StartNeutralNick = 0; |
67 | int AdNeutralNick = 0,AdNeutralRoll = 0,AdNeutralGier = 0,StartNeutralRoll = 0,StartNeutralNick = 0; |
68 | int Mittelwert_AccNick, Mittelwert_AccRoll,Mittelwert_AccHoch, NeutralAccX=0, NeutralAccY=0; |
68 | int Mittelwert_AccNick, Mittelwert_AccRoll,Mittelwert_AccHoch, NeutralAccX=0, NeutralAccY=0; |
69 | int NaviAccNick, NaviAccRoll,NaviCntAcc = 0; |
69 | int NaviAccNick, NaviAccRoll,NaviCntAcc = 0; |
70 | volatile float NeutralAccZ = 0; |
70 | //volatile float NeutralAccZ = 0; // MartinR : so war es |
- | 71 | volatile int NeutralAccZ = 0; // MartinR geändert´ |
|
- | 72 | ||
71 | unsigned char CosinusNickWinkel = 0, CosinusRollWinkel = 0; |
73 | unsigned char CosinusNickWinkel = 0, CosinusRollWinkel = 0; |
72 | long IntegralNick = 0,IntegralNick2 = 0; |
74 | long IntegralNick = 0,IntegralNick2 = 0; |
73 | long IntegralRoll = 0,IntegralRoll2 = 0; |
75 | long IntegralRoll = 0,IntegralRoll2 = 0; |
74 | long IntegralAccNick = 0,IntegralAccRoll = 0,IntegralAccZ = 0; |
76 | long IntegralAccNick = 0,IntegralAccRoll = 0,IntegralAccZ = 0; |
75 | long Integral_Gier = 0; |
77 | long Integral_Gier = 0; |
Line 101... | Line 103... | ||
101 | long HoehenWert = 0; |
103 | long HoehenWert = 0; |
102 | long SollHoehe = 0; |
104 | long SollHoehe = 0; |
103 | int LageKorrekturRoll = 0,LageKorrekturNick = 0; |
105 | int LageKorrekturRoll = 0,LageKorrekturNick = 0; |
104 | //float Ki = FAKTOR_I; |
106 | //float Ki = FAKTOR_I; |
105 | int Ki = 10300 / 33; |
107 | int Ki = 10300 / 33; |
- | 108 | int KiHH = 10300 / 33; // MartinR : für Ki bei HH über Schalter |
|
- | 109 | ||
106 | unsigned char Looping_Nick = 0,Looping_Roll = 0; |
110 | unsigned char Looping_Nick = 0,Looping_Roll = 0; |
107 | unsigned char Looping_Links = 0, Looping_Rechts = 0, Looping_Unten = 0, Looping_Oben = 0; |
111 | unsigned char Looping_Links = 0, Looping_Rechts = 0, Looping_Unten = 0, Looping_Oben = 0; |
Line 108... | Line 112... | ||
108 | 112 | ||
109 | unsigned char Parameter_Luftdruck_D = 48; // Wert : 0-250 |
113 | unsigned char Parameter_Luftdruck_D = 48; // Wert : 0-250 |
Line 150... | Line 154... | ||
150 | unsigned char Parameter_NaviSpeedCompensation; |
154 | unsigned char Parameter_NaviSpeedCompensation; |
151 | unsigned char Parameter_ExternalControl; |
155 | unsigned char Parameter_ExternalControl; |
152 | unsigned char Parameter_Servo3,Parameter_Servo4,Parameter_Servo5; |
156 | unsigned char Parameter_Servo3,Parameter_Servo4,Parameter_Servo5; |
153 | struct mk_param_struct EE_Parameter; |
157 | struct mk_param_struct EE_Parameter; |
154 | signed int ExternStickNick = 0,ExternStickRoll = 0,ExternStickGier = 0, ExternHoehenValue = -20; |
158 | signed int ExternStickNick = 0,ExternStickRoll = 0,ExternStickGier = 0, ExternHoehenValue = -20; |
155 | int MaxStickNick = 0,MaxStickRoll = 0; |
159 | //int MaxStickNick = 0,MaxStickRoll = 0;MartinR: so war es |
- | 160 | int MaxStickNick = 0,MaxStickRoll = 0,stick_nick_neutral = 0,stick_roll_neutral = 0; // MartinR: stick_.._neutral hinzugefügt |
|
- | 161 | ||
156 | unsigned int modell_fliegt = 0; |
162 | unsigned int modell_fliegt = 0; |
157 | volatile unsigned char FCFlags = 0; |
163 | volatile unsigned char FCFlags = 0; |
158 | long GIER_GRAD_FAKTOR = 1291; |
164 | long GIER_GRAD_FAKTOR = 1291; |
159 | signed int KopplungsteilNickRoll,KopplungsteilRollNick; |
165 | signed int KopplungsteilNickRoll,KopplungsteilRollNick; |
160 | signed int tmp_motorwert[MAX_MOTORS]; |
166 | signed int tmp_motorwert[MAX_MOTORS]; |
161 | char VarioCharacter = ' '; |
167 | char VarioCharacter = ' '; |
162 | - | ||
163 | #define LIMIT_MIN(value, min) {if(value <= min) value = min;} |
168 | #define LIMIT_MIN(value, min) {if(value <= min) value = min;} |
164 | #define LIMIT_MAX(value, max) {if(value >= max) value = max;} |
169 | #define LIMIT_MAX(value, max) {if(value >= max) value = max;} |
165 | #define LIMIT_MIN_MAX(value, min, max) {if(value <= min) value = min; else if(value >= max) value = max;} |
170 | #define LIMIT_MIN_MAX(value, min, max) {if(value <= min) value = min; else if(value >= max) value = max;} |
Line 166... | Line 171... | ||
166 | 171 | ||
167 | int MotorSmoothing(int neu, int alt) |
172 | int MotorSmoothing(int neu, int alt) |
168 | { |
173 | { |
169 | int motor; |
174 | int motor; |
170 | if(neu > alt) motor = (1*(int)alt + neu) / 2; |
175 | if(neu > alt) motor = (1*(int)alt + neu) / 2; |
- | 176 | //else motor = neu - (alt - neu)*1; // MartinR: so war es |
|
- | 177 | else motor = neu; // MartinR: Entsprechend Vorschlag von MartinW geändert |
|
171 | else motor = neu - (alt - neu)*1; |
178 | |
172 | //if(Poti2 < 20) return(neu); |
179 | //if(Poti2 < 20) return(neu); |
173 | return(motor); |
180 | return(motor); |
Line 174... | Line 181... | ||
174 | } |
181 | } |
Line 319... | Line 326... | ||
319 | else winkel_nick = Mess_IntegralNick; |
326 | else winkel_nick = Mess_IntegralNick; |
Line 320... | Line 327... | ||
320 | 327 | ||
321 | // Gier ++++++++++++++++++++++++++++++++++++++++++++++++ |
328 | // Gier ++++++++++++++++++++++++++++++++++++++++++++++++ |
322 | Mess_Integral_Gier += MesswertGier; |
329 | Mess_Integral_Gier += MesswertGier; |
323 | ErsatzKompass += MesswertGier; |
330 | ErsatzKompass += MesswertGier; |
- | 331 | // Kopplungsanteil +++++++++++++++++++++++++++++++++++++ |
|
- | 332 | if((EE_Parameter.GlobalConfig & CFG_HEADING_HOLD) || (Parameter_UserParam1 > 140)) IntegralFaktor = 0; // MartinR: zusätzlich |
|
324 | // Kopplungsanteil +++++++++++++++++++++++++++++++++++++ |
333 | |
- | 334 | //if(!Looping_Nick && !Looping_Roll && (EE_Parameter.GlobalConfig & CFG_ACHSENKOPPLUNG_AKTIV)) // MartinR : so war es |
|
- | 335 | if(!Looping_Nick && !Looping_Roll && IntegralFaktor && (EE_Parameter.GlobalConfig & CFG_ACHSENKOPPLUNG_AKTIV)) // MartinR: zusätzlich "&& IntegralFaktor" |
|
325 | if(!Looping_Nick && !Looping_Roll && (EE_Parameter.GlobalConfig & CFG_ACHSENKOPPLUNG_AKTIV)) |
336 | |
326 | { |
337 | { |
327 | tmpl3 = (MesswertRoll * winkel_nick) / 2048L; |
338 | tmpl3 = (MesswertRoll * winkel_nick) / 2048L; |
328 | tmpl3 *= Parameter_AchsKopplung2; //65 |
339 | tmpl3 *= Parameter_AchsKopplung2; //65 |
329 | tmpl3 /= 4096L; |
340 | tmpl3 /= 4096L; |
Line 389... | Line 400... | ||
389 | #define D_LIMIT 128 |
400 | #define D_LIMIT 128 |
Line 390... | Line 401... | ||
390 | 401 | ||
391 | MesswertNick = HiResNick / 8; |
402 | MesswertNick = HiResNick / 8; |
Line -... | Line 403... | ||
- | 403 | MesswertRoll = HiResRoll / 8; |
|
- | 404 | ||
- | 405 | // MartinR : so war es Anfang |
|
392 | MesswertRoll = HiResRoll / 8; |
406 | /* |
393 | 407 | |
|
394 | if(AdWertNick < 15) MesswertNick = -1000; if(AdWertNick < 7) MesswertNick = -2000; |
408 | if(AdWertNick < 15) MesswertNick = -1000; if(AdWertNick < 7) MesswertNick = -2000; |
395 | if(PlatinenVersion == 10) { if(AdWertNick > 1010) MesswertNick = +1000; if(AdWertNick > 1017) MesswertNick = +2000; } |
409 | if(PlatinenVersion == 10) { if(AdWertNick > 1010) MesswertNick = +1000; if(AdWertNick > 1017) MesswertNick = +2000; } |
396 | else { if(AdWertNick > 2000) MesswertNick = +1000; if(AdWertNick > 2015) MesswertNick = +2000; } |
410 | else { if(AdWertNick > 2000) MesswertNick = +1000; if(AdWertNick > 2015) MesswertNick = +2000; } |
397 | if(AdWertRoll < 15) MesswertRoll = -1000; if(AdWertRoll < 7) MesswertRoll = -2000; |
411 | if(AdWertRoll < 15) MesswertRoll = -1000; if(AdWertRoll < 7) MesswertRoll = -2000; |
- | 412 | if(PlatinenVersion == 10) { if(AdWertRoll > 1010) MesswertRoll = +1000; if(AdWertRoll > 1017) MesswertRoll = +2000; } |
|
- | 413 | else { if(AdWertRoll > 2000) MesswertRoll = +1000; if(AdWertRoll > 2015) MesswertRoll = +2000; } |
|
- | 414 | |
|
- | 415 | // MartinR : FC 1.0: Sprung von 500 auf 2000 !! FC-ME: Sprung von 1000 auf 2000 |
|
- | 416 | */ |
|
- | 417 | // MartinR : so war es Ende |
|
- | 418 | ||
- | 419 | // MartinR : Neu Anfang |
|
- | 420 | if(PlatinenVersion == 10) |
|
- | 421 | { |
|
- | 422 | if(AdWertNick > 1010) MesswertNick = +600; |
|
- | 423 | if(AdWertNick > 1017) MesswertNick = +800; |
|
- | 424 | if(AdWertNick < 15) MesswertNick = -600; |
|
- | 425 | if(AdWertNick < 7) MesswertNick = -800; |
|
- | 426 | if(AdWertRoll > 1010) MesswertRoll = +600; |
|
- | 427 | if(AdWertRoll > 1017) MesswertRoll = +800; |
|
- | 428 | if(AdWertRoll < 15) MesswertRoll = -600; |
|
- | 429 | if(AdWertRoll < 7) MesswertRoll = -800; |
|
- | 430 | } |
|
- | 431 | else |
|
- | 432 | { |
|
- | 433 | if(AdWertNick > 2000) MesswertNick = +1200; |
|
- | 434 | if(AdWertNick > 2015) MesswertNick = +1600; |
|
- | 435 | if(AdWertNick < 15) MesswertNick = -1200; |
|
- | 436 | if(AdWertNick < 7) MesswertNick = -1600; |
|
- | 437 | if(AdWertRoll > 2000) MesswertRoll = +1200; |
|
- | 438 | if(AdWertRoll > 2015) MesswertRoll = +1600; |
|
- | 439 | if(AdWertRoll < 15) MesswertRoll = -1200; |
|
- | 440 | if(AdWertRoll < 7) MesswertRoll = -1600; |
|
Line 398... | Line 441... | ||
398 | if(PlatinenVersion == 10) { if(AdWertRoll > 1010) MesswertRoll = +1000; if(AdWertRoll > 1017) MesswertRoll = +2000; } |
441 | } |
399 | else { if(AdWertRoll > 2000) MesswertRoll = +1000; if(AdWertRoll > 2015) MesswertRoll = +2000; } |
442 | // MartinR : Neu Ende |
400 | 443 | ||
401 | if(Parameter_Gyro_D) |
444 | if(Parameter_Gyro_D) |
Line 541... | Line 584... | ||
541 | CHK_POTI(Parameter_CouplingYawCorrection,EE_Parameter.CouplingYawCorrection); |
584 | CHK_POTI(Parameter_CouplingYawCorrection,EE_Parameter.CouplingYawCorrection); |
542 | // CHK_POTI(Parameter_AchsGegenKopplung1,EE_Parameter.AchsGegenKopplung1,0,255); |
585 | // CHK_POTI(Parameter_AchsGegenKopplung1,EE_Parameter.AchsGegenKopplung1,0,255); |
543 | CHK_POTI(Parameter_DynamicStability,EE_Parameter.DynamicStability); |
586 | CHK_POTI(Parameter_DynamicStability,EE_Parameter.DynamicStability); |
544 | CHK_POTI(Parameter_ExternalControl,EE_Parameter.ExternalControl); |
587 | CHK_POTI(Parameter_ExternalControl,EE_Parameter.ExternalControl); |
545 | Ki = 10300 / (Parameter_I_Faktor + 1); |
588 | Ki = 10300 / (Parameter_I_Faktor + 1); |
- | 589 | ||
- | 590 | if(Parameter_UserParam1 > 140) KiHH = 10300 / (Parameter_UserParam2 + 1); else KiHH = Ki; // MartinR : für HH über Schalter |
|
- | 591 | Parameter_NaviGpsModeControl = EE_Parameter.NaviGpsModeControl; //MartinR: Standard: EE_Parameter.NaviGpsModeControl wird übertragen |
|
- | 592 | if(!IntegralFaktor) Parameter_NaviGpsModeControl= 0; // MartinR: wenn HH dann GPS auf free- Mode |
|
- | 593 | // 0 = free; 100 = AID; 200 = coming home //neu |
|
- | 594 | ||
546 | MAX_GAS = EE_Parameter.Gas_Max; |
595 | MAX_GAS = EE_Parameter.Gas_Max; |
547 | MIN_GAS = EE_Parameter.Gas_Min; |
596 | MIN_GAS = EE_Parameter.Gas_Min; |
548 | } |
597 | } |
Line 549... | Line 598... | ||
549 | 598 | ||
Line 553... | Line 602... | ||
553 | //############################################################################ |
602 | //############################################################################ |
554 | { |
603 | { |
555 | int pd_ergebnis_nick,pd_ergebnis_roll,tmp_int, tmp_int2; |
604 | int pd_ergebnis_nick,pd_ergebnis_roll,tmp_int, tmp_int2; |
556 | int GierMischanteil,GasMischanteil; |
605 | int GierMischanteil,GasMischanteil; |
557 | static long SummeNick=0,SummeRoll=0; |
606 | static long SummeNick=0,SummeRoll=0; |
- | 607 | ||
- | 608 | static long SummeNickHH=0,SummeRollHH=0; // MartinR: Für ACC-HH Umschaltung |
|
- | 609 | ||
558 | static long sollGier = 0,tmp_long,tmp_long2; |
610 | static long sollGier = 0,tmp_long,tmp_long2; |
559 | static long IntegralFehlerNick = 0; |
611 | static long IntegralFehlerNick = 0; |
560 | static long IntegralFehlerRoll = 0; |
612 | static long IntegralFehlerRoll = 0; |
561 | static unsigned int RcLostTimer; |
613 | static unsigned int RcLostTimer; |
562 | static unsigned char delay_neutral = 0; |
614 | static unsigned char delay_neutral = 0; |
Line 747... | Line 799... | ||
747 | 799 | ||
748 | if(!NewPpmData-- || (FCFlags & FCFLAG_NOTLANDUNG)) |
800 | if(!NewPpmData-- || (FCFlags & FCFLAG_NOTLANDUNG)) |
749 | { |
801 | { |
750 | static int stick_nick,stick_roll; |
802 | static int stick_nick,stick_roll; |
- | 803 | ParameterZuordnung(); |
|
- | 804 | ||
- | 805 | // MartinR: original: |
|
751 | ParameterZuordnung(); |
806 | /* |
752 | stick_nick = (stick_nick * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_P) / 4; |
807 | stick_nick = (stick_nick * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_P) / 4; |
753 | stick_nick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D; |
808 | stick_nick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D; |
Line 754... | Line 809... | ||
754 | StickNick = stick_nick - (GPS_Nick + GPS_Nick2); |
809 | StickNick = stick_nick - (GPS_Nick + GPS_Nick2); |
755 | 810 | ||
756 | stick_roll = (stick_roll * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_P) / 4; |
811 | stick_roll = (stick_roll * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_P) / 4; |
- | 812 | stick_roll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D; |
|
- | 813 | StickRoll = stick_roll - (GPS_Roll + GPS_Roll2); |
|
- | 814 | */ |
|
- | 815 | // MartinR: geändert Anfang |
|
- | 816 | if(Parameter_UserParam1 > 140) // MartinR: zweiter Stick_P Wert nur, wenn HH über Schalter aktiv ist |
|
- | 817 | { |
|
- | 818 | stick_nick = (stick_nick * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * Parameter_UserParam3 - stick_nick_neutral) / 4; |
|
- | 819 | stick_roll = (stick_roll * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * Parameter_UserParam3 - stick_roll_neutral) / 4 ; |
|
- | 820 | //stick_nick = (PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * Parameter_UserParam3 - stick_nick_neutral); |
|
- | 821 | //stick_roll = (PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * Parameter_UserParam3 - stick_roll_neutral); |
|
- | 822 | } |
|
- | 823 | ||
- | 824 | else |
|
- | 825 | { |
|
- | 826 | stick_nick = (stick_nick * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_P) / 4; |
|
- | 827 | stick_roll = (stick_roll * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_P) / 4; |
|
- | 828 | stick_nick_neutral = stick_nick; // beim Umschalten auf HH wird derletzte Stickwert als Neutralposition verwendet, MartinR |
|
- | 829 | stick_roll_neutral = stick_roll; // beim Umschalten auf HH wird derletzte Stickwert als Neutralposition verwendet, MartinR |
|
- | 830 | } |
|
- | 831 | ||
- | 832 | if(IntegralFaktor) |
|
- | 833 | { |
|
- | 834 | stick_nick_neutral = stick_nick; // beim Umschalten auf HH wird derletzte Stickwert als Neutralposition verwendet, MartinR |
|
- | 835 | stick_roll_neutral = stick_roll; // beim Umschalten auf HH wird derletzte Stickwert als Neutralposition verwendet, MartinR |
|
- | 836 | stick_nick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D; |
|
- | 837 | stick_roll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D; |
|
- | 838 | ||
- | 839 | StickNick = stick_nick - (GPS_Nick + GPS_Nick2); // MartinR: GPS nur im ACC-Mode wirksam |
|
- | 840 | StickRoll = stick_roll - (GPS_Roll + GPS_Roll2); // MartinR: GPS nur im ACC-Mode wirksam |
|
- | 841 | } |
|
- | 842 | else // wenn HH , MartinR |
|
- | 843 | { |
|
- | 844 | //stick_nick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D; // MartinR: eventuell vor if verschieben |
|
- | 845 | //stick_roll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D; // MartinR: eventuell vor if verschieben |
|
- | 846 | StickNick = stick_nick; // MartinR: GPS nur im ACC-Mode wirksam |
|
- | 847 | StickRoll = stick_roll; // MartinR: GPS nur im ACC-Mode wirksam |
|
- | 848 | } |
|
Line 757... | Line 849... | ||
757 | stick_roll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D; |
849 | |
758 | StickRoll = stick_roll - (GPS_Roll + GPS_Roll2); |
850 | // MartinR: geändert Ende |
759 | 851 | ||
Line 769... | Line 861... | ||
769 | IntegralFaktorGier = Parameter_Gyro_Gier_I; |
861 | IntegralFaktorGier = Parameter_Gyro_Gier_I; |
Line 770... | Line 862... | ||
770 | 862 | ||
771 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
863 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
772 | //+ Analoge Steuerung per Seriell |
864 | //+ Analoge Steuerung per Seriell |
- | 865 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|
- | 866 | // MartinR: ToDo: eventuell die Kombination HH und Steuerung per Seriell nicht zulassen?? |
|
773 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
867 | |
774 | if(ExternControl.Config & 0x01 && Parameter_ExternalControl > 128) |
868 | if(ExternControl.Config & 0x01 && Parameter_ExternalControl > 128) |
775 | { |
869 | { |
776 | StickNick += (int) ExternControl.Nick * (int) EE_Parameter.Stick_P; |
870 | StickNick += (int) ExternControl.Nick * (int) EE_Parameter.Stick_P; |
777 | StickRoll += (int) ExternControl.Roll * (int) EE_Parameter.Stick_P; |
871 | StickRoll += (int) ExternControl.Roll * (int) EE_Parameter.Stick_P; |
778 | StickGier += ExternControl.Gier; |
872 | StickGier += ExternControl.Gier; |
779 | ExternHoehenValue = (int) ExternControl.Hight * (int)EE_Parameter.Hoehe_Verstaerkung; |
873 | ExternHoehenValue = (int) ExternControl.Hight * (int)EE_Parameter.Hoehe_Verstaerkung; |
780 | if(ExternControl.Gas < StickGas) StickGas = ExternControl.Gas; |
874 | if(ExternControl.Gas < StickGas) StickGas = ExternControl.Gas; |
781 | } |
875 | } |
Line 782... | Line 876... | ||
782 | if(StickGas < 0) StickGas = 0; |
876 | if(StickGas < 0) StickGas = 0; |
- | 877 | ||
- | 878 | //if(EE_Parameter.GlobalConfig & CFG_HEADING_HOLD) IntegralFaktor = 0; // MartinR: so war es |
|
783 | 879 | if((EE_Parameter.GlobalConfig & CFG_HEADING_HOLD) || (Parameter_UserParam1 > 140)) IntegralFaktor = 0; // MartinR geändert |
|
784 | if(EE_Parameter.GlobalConfig & CFG_HEADING_HOLD) IntegralFaktor = 0; |
880 | |
Line 785... | Line 881... | ||
785 | //if(GyroFaktor < 0) GyroFaktor = 0; |
881 | //if(GyroFaktor < 0) GyroFaktor = 0; |
786 | //if(IntegralFaktor < 0) IntegralFaktor = 0; |
882 | //if(IntegralFaktor < 0) IntegralFaktor = 0; |
Line 871... | Line 967... | ||
871 | MittelIntegralNick += IntegralNick; // Für die Mittelwertbildung aufsummieren |
967 | MittelIntegralNick += IntegralNick; // Für die Mittelwertbildung aufsummieren |
872 | MittelIntegralRoll += IntegralRoll; |
968 | MittelIntegralRoll += IntegralRoll; |
873 | MittelIntegralNick2 += IntegralNick2; |
969 | MittelIntegralNick2 += IntegralNick2; |
874 | MittelIntegralRoll2 += IntegralRoll2; |
970 | MittelIntegralRoll2 += IntegralRoll2; |
Line 875... | Line 971... | ||
875 | 971 | ||
- | 972 | //if(Looping_Nick || Looping_Roll) // MartinR: so war es |
|
- | 973 | if(Looping_Nick || Looping_Roll || !IntegralFaktor) // MartinR: "|| !IntegralFaktor" hinzugefügt |
|
876 | if(Looping_Nick || Looping_Roll) |
974 | |
877 | { |
975 | { |
878 | IntegralAccNick = 0; |
976 | IntegralAccNick = 0; |
879 | IntegralAccRoll = 0; |
977 | IntegralAccRoll = 0; |
880 | MittelIntegralNick = 0; |
978 | MittelIntegralNick = 0; |
881 | MittelIntegralRoll = 0; |
979 | MittelIntegralRoll = 0; |
882 | MittelIntegralNick2 = 0; |
980 | MittelIntegralNick2 = 0; |
- | 981 | MittelIntegralRoll2 = 0; |
|
- | 982 | ||
- | 983 | IntegralNick = 0; // MartinR: im HH-Modus alle unbenutzten Integratoren = 0 |
|
- | 984 | IntegralRoll = 0; // MartinR: im HH-Modus alle unbenutzten Integratoren = 0 |
|
- | 985 | Mess_IntegralNick = 0; // MartinR: im HH-Modus alle unbenutzten Integratoren = 0 |
|
- | 986 | Mess_IntegralRoll = 0; // MartinR: im HH-Modus alle unbenutzten Integratoren = 0 |
|
- | 987 | Mess_Integral_Gier = 0; // MartinR: im HH-Modus alle unbenutzten Integratoren = 0 |
|
- | 988 | Mess_Integral_Gier2 = 0; // MartinR: im HH-Modus alle unbenutzten Integratoren = 0 |
|
883 | MittelIntegralRoll2 = 0; |
989 | |
884 | Mess_IntegralNick2 = Mess_IntegralNick; |
990 | Mess_IntegralNick2 = Mess_IntegralNick; |
885 | Mess_IntegralRoll2 = Mess_IntegralRoll; |
991 | Mess_IntegralRoll2 = Mess_IntegralRoll; |
886 | ZaehlMessungen = 0; |
992 | ZaehlMessungen = 0; |
887 | LageKorrekturNick = 0; |
993 | LageKorrekturNick = 0; |
888 | LageKorrekturRoll = 0; |
994 | LageKorrekturRoll = 0; |
Line 889... | Line 995... | ||
889 | } |
995 | } |
890 | 996 | ||
- | 997 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|
- | 998 | //if(!Looping_Nick && !Looping_Roll && (Aktuell_az > 512 || MotorenEin)) // MartinR: so war es |
|
891 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
999 | if(!Looping_Nick && !Looping_Roll && (Aktuell_az > 512 || MotorenEin) && IntegralFaktor) // MartinR: "&& IntegralFaktor" hinzugefügt |
892 | if(!Looping_Nick && !Looping_Roll && (Aktuell_az > 512 || MotorenEin)) |
1000 | |
893 | { |
1001 | { |
894 | long tmp_long, tmp_long2; |
1002 | long tmp_long, tmp_long2; |
895 | if(FromNaviCtrl_Value.Kalman_K != -1 /*&& !TrichterFlug*/) |
1003 | if(FromNaviCtrl_Value.Kalman_K != -1 /*&& !TrichterFlug*/) |
Line 945... | Line 1053... | ||
945 | if(ZaehlMessungen >= ABGLEICH_ANZAHL) |
1053 | if(ZaehlMessungen >= ABGLEICH_ANZAHL) |
946 | { |
1054 | { |
947 | static int cnt = 0; |
1055 | static int cnt = 0; |
948 | static char last_n_p,last_n_n,last_r_p,last_r_n; |
1056 | static char last_n_p,last_n_n,last_r_p,last_r_n; |
949 | static long MittelIntegralNick_Alt,MittelIntegralRoll_Alt; |
1057 | static long MittelIntegralNick_Alt,MittelIntegralRoll_Alt; |
950 | if(!Looping_Nick && !Looping_Roll && !TrichterFlug && EE_Parameter.Driftkomp) |
1058 | //if(!Looping_Nick && !Looping_Roll && !TrichterFlug && EE_Parameter.Driftkomp) // MartinR: so war es |
- | 1059 | if(!Looping_Nick && !Looping_Roll && !TrichterFlug && EE_Parameter.Driftkomp && IntegralFaktor) // MartinR: "&& IntegralFaktor" hinzugefügt |
|
- | 1060 | ||
951 | { |
1061 | { |
952 | MittelIntegralNick /= ABGLEICH_ANZAHL; |
1062 | MittelIntegralNick /= ABGLEICH_ANZAHL; |
953 | MittelIntegralRoll /= ABGLEICH_ANZAHL; |
1063 | MittelIntegralRoll /= ABGLEICH_ANZAHL; |
954 | IntegralAccNick = (EE_Parameter.GyroAccFaktor * IntegralAccNick) / ABGLEICH_ANZAHL; |
1064 | IntegralAccNick = (EE_Parameter.GyroAccFaktor * IntegralAccNick) / ABGLEICH_ANZAHL; |
955 | IntegralAccRoll = (EE_Parameter.GyroAccFaktor * IntegralAccRoll) / ABGLEICH_ANZAHL; |
1065 | IntegralAccRoll = (EE_Parameter.GyroAccFaktor * IntegralAccRoll) / ABGLEICH_ANZAHL; |
Line 1214... | Line 1324... | ||
1214 | 1324 | ||
1215 | #define TRIM_MAX 200 |
1325 | #define TRIM_MAX 200 |
1216 | if(TrimNick > TRIM_MAX) TrimNick = TRIM_MAX; else if(TrimNick <-TRIM_MAX) TrimNick =-TRIM_MAX; |
1326 | if(TrimNick > TRIM_MAX) TrimNick = TRIM_MAX; else if(TrimNick <-TRIM_MAX) TrimNick =-TRIM_MAX; |
Line -... | Line 1327... | ||
- | 1327 | if(TrimRoll > TRIM_MAX) TrimRoll = TRIM_MAX; else if(TrimRoll <-TRIM_MAX) TrimRoll =-TRIM_MAX; |
|
- | 1328 | ||
- | 1329 | //MesswertNick = IntegralNickMalFaktor + (long)((long)MesswertNick * GyroFaktor + (long)TrimNick * 128L) / (256L / STICK_GAIN);// MartinR so war es |
|
- | 1330 | //MesswertRoll = IntegralRollMalFaktor + (long)((long)MesswertRoll * GyroFaktor + (long)TrimRoll * 128L) / (256L / STICK_GAIN);// MartinR so war es |
|
- | 1331 | ||
- | 1332 | if(!IntegralFaktor) // MartinR : hinzugefügt |
|
- | 1333 | { |
|
- | 1334 | MesswertNick = (long) ((long)MesswertNick * GyroFaktor) / (256L / STICK_GAIN) ; // MartinR : hinzugefügt |
|
- | 1335 | MesswertRoll = (long) ((long)MesswertRoll * GyroFaktor) / (256L / STICK_GAIN) ; // MartinR : hinzugefügt |
|
- | 1336 | } |
|
1217 | if(TrimRoll > TRIM_MAX) TrimRoll = TRIM_MAX; else if(TrimRoll <-TRIM_MAX) TrimRoll =-TRIM_MAX; |
1337 | else // MartinR so war es |
1218 | 1338 | { |
|
- | 1339 | MesswertNick = IntegralNickMalFaktor + (long)((long)MesswertNick * GyroFaktor + (long)TrimNick * 128L) / (256L / STICK_GAIN); |
|
- | 1340 | MesswertRoll = IntegralRollMalFaktor + (long)((long)MesswertRoll * GyroFaktor + (long)TrimRoll * 128L) / (256L / STICK_GAIN); |
|
1219 | MesswertNick = IntegralNickMalFaktor + (long)((long)MesswertNick * GyroFaktor + (long)TrimNick * 128L) / (256L / STICK_GAIN); |
1341 | } |
Line 1220... | Line 1342... | ||
1220 | MesswertRoll = IntegralRollMalFaktor + (long)((long)MesswertRoll * GyroFaktor + (long)TrimRoll * 128L) / (256L / STICK_GAIN); |
1342 | |
1221 | MesswertGier = (long)(MesswertGier * 2 * (long)GyroFaktorGier) / (256L / STICK_GAIN) + (long)(Integral_Gier * IntegralFaktorGier) / (2 * (44000 / STICK_GAIN)); |
1343 | MesswertGier = (long)(MesswertGier * 2 * (long)GyroFaktorGier) / (256L / STICK_GAIN) + (long)(Integral_Gier * IntegralFaktorGier) / (2 * (44000 / STICK_GAIN)); |
1222 | 1344 | ||
Line 1304... | Line 1426... | ||
1304 | } |
1426 | } |
Line 1305... | Line 1427... | ||
1305 | 1427 | ||
1306 | // if height control is activated by an rc channel |
1428 | // if height control is activated by an rc channel |
1307 | if(EE_Parameter.GlobalConfig & CFG_HOEHEN_SCHALTER) // Regler wird über Schalter gesteuert |
1429 | if(EE_Parameter.GlobalConfig & CFG_HOEHEN_SCHALTER) // Regler wird über Schalter gesteuert |
1308 | { // check if parameter is less than activation threshold |
1430 | { // check if parameter is less than activation threshold |
- | 1431 | //if(Parameter_MaxHoehe < 50) // for 3 or 2-state switch height control is disabled in lowest position // MartinR: so war es |
|
- | 1432 | if(Parameter_MaxHoehe < 50 || (Parameter_UserParam1 > 140) ) // MartinR: Schalter aus oder HH über UsererParam1 an |
|
1309 | if(Parameter_MaxHoehe < 50) // for 3 or 2-state switch height control is disabled in lowest position |
1433 | |
1310 | { //height control not active |
1434 | { //height control not active |
1311 | if(!delay--) |
1435 | if(!delay--) |
1312 | { |
1436 | { |
1313 | HoehenReglerAktiv = 0; // disable height control |
1437 | HoehenReglerAktiv = 0; // disable height control |
Line 1322... | Line 1446... | ||
1322 | } |
1446 | } |
1323 | } |
1447 | } |
1324 | else // no switchable height control |
1448 | else // no switchable height control |
1325 | { |
1449 | { |
1326 | SollHoehe = ((int16_t) ExternHoehenValue + (int16_t) Parameter_MaxHoehe) * (int)EE_Parameter.Hoehe_Verstaerkung; |
1450 | SollHoehe = ((int16_t) ExternHoehenValue + (int16_t) Parameter_MaxHoehe) * (int)EE_Parameter.Hoehe_Verstaerkung; |
- | 1451 | // HoehenReglerAktiv = 1; // MartinR : so war es |
|
- | 1452 | // MartinR : geändert Anfang |
|
- | 1453 | if(Parameter_UserParam1 > 140) // HH über Schalter: Höhenregler abgeschaltet, Nachführen von Parametern |
|
- | 1454 | { |
|
- | 1455 | HoehenReglerAktiv = 0; |
|
- | 1456 | } |
|
- | 1457 | else // Höhenregler mit Sollhöhe über Poti aktiv |
|
- | 1458 | { |
|
1327 | HoehenReglerAktiv = 1; |
1459 | HoehenReglerAktiv = 1; |
- | 1460 | } |
|
- | 1461 | // MartinR : geändert Ende |
|
1328 | } |
1462 | } |
Line 1329... | Line 1463... | ||
1329 | 1463 | ||
1330 | // calculate cos of nick and roll angle used for projection of the vertical hoover gas |
1464 | // calculate cos of nick and roll angle used for projection of the vertical hoover gas |
1331 | tmp_int = (int)(IntegralNick/GIER_GRAD_FAKTOR); // nick angle in deg |
1465 | tmp_int = (int)(IntegralNick/GIER_GRAD_FAKTOR); // nick angle in deg |
Line 1578... | Line 1712... | ||
1578 | if(GierMischanteil < -((tmp_int - GasMischanteil))) GierMischanteil = -((tmp_int - GasMischanteil)); |
1712 | if(GierMischanteil < -((tmp_int - GasMischanteil))) GierMischanteil = -((tmp_int - GasMischanteil)); |
Line 1579... | Line 1713... | ||
1579 | 1713 | ||
1580 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1714 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1581 | // Nick-Achse |
1715 | // Nick-Achse |
1582 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1716 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
- | 1717 | DiffNick = MesswertNick - StickNick; // Differenz bestimmen |
|
- | 1718 | // MartinR : so war es Anfang |
|
1583 | DiffNick = MesswertNick - StickNick; // Differenz bestimmen |
1719 | /* |
1584 | if(IntegralFaktor) SummeNick += IntegralNickMalFaktor - StickNick; // I-Anteil bei Winkelregelung |
1720 | if(IntegralFaktor) SummeNick += IntegralNickMalFaktor - StickNick; // I-Anteil bei Winkelregelung |
1585 | else SummeNick += DiffNick; // I-Anteil bei HH |
1721 | else SummeNick += DiffNick; // I-Anteil bei HH |
1586 | if(SummeNick > (STICK_GAIN * 16000L)) SummeNick = (STICK_GAIN * 16000L); |
1722 | if(SummeNick > (STICK_GAIN * 16000L)) SummeNick = (STICK_GAIN * 16000L); |
1587 | if(SummeNick < -(16000L * STICK_GAIN)) SummeNick = -(16000L * STICK_GAIN); |
1723 | if(SummeNick < -(16000L * STICK_GAIN)) SummeNick = -(16000L * STICK_GAIN); |
1588 | pd_ergebnis_nick = DiffNick + SummeNick / Ki; // PI-Regler für Nick |
1724 | pd_ergebnis_nick = DiffNick + SummeNick / Ki; // PI-Regler für Nick |
- | 1725 | // Motor Vorn |
|
- | 1726 | */ |
|
- | 1727 | // MartinR : so war es Ende |
|
- | 1728 | ||
- | 1729 | // MartinR : geändert Anfang |
|
- | 1730 | if(IntegralFaktor) // MartinR : ACC-Mode |
|
- | 1731 | { |
|
- | 1732 | SummeNick += IntegralNickMalFaktor - StickNick; // I-Anteil bei Winkelregelung |
|
- | 1733 | if(SummeNick > (STICK_GAIN * 8000L)) SummeNick = (STICK_GAIN * 8000L); // MartinR : von 16000 auf 8000, da überlauf |
|
- | 1734 | if(SummeNick < -(8000L * STICK_GAIN)) SummeNick = -(8000L * STICK_GAIN); // MartinR : von 16000 auf 8000, da überlauf |
|
- | 1735 | pd_ergebnis_nick = DiffNick + (SummeNick / Ki); |
|
- | 1736 | SummeNickHH = 0 ; |
|
- | 1737 | } |
|
- | 1738 | else // MartinR : HH-Mode |
|
- | 1739 | { |
|
- | 1740 | SummeNickHH += DiffNick; // I-Anteil bei HH |
|
- | 1741 | if(SummeNickHH > (STICK_GAIN * 8000L)) SummeNickHH = (STICK_GAIN * 8000L); // MartinR : von 16000 auf 8000, da überlauf |
|
- | 1742 | if(SummeNickHH < -(8000L * STICK_GAIN)) SummeNickHH = -(8000L * STICK_GAIN); // MartinR : von 16000 auf 8000, da überlauf |
|
- | 1743 | pd_ergebnis_nick = DiffNick + SummeNickHH / KiHH; // MartinR: PI-Regler für Nick bei HH |
|
- | 1744 | SummeNick = 0; |
|
- | 1745 | } |
|
- | 1746 | // MartinR : geändert Ende |
|
1589 | // Motor Vorn |
1747 | |
1590 | tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
1748 | tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
1591 | if(pd_ergebnis_nick > tmp_int) pd_ergebnis_nick = tmp_int; |
1749 | if(pd_ergebnis_nick > tmp_int) pd_ergebnis_nick = tmp_int; |
Line 1592... | Line 1750... | ||
1592 | if(pd_ergebnis_nick < -tmp_int) pd_ergebnis_nick = -tmp_int; |
1750 | if(pd_ergebnis_nick < -tmp_int) pd_ergebnis_nick = -tmp_int; |
1593 | 1751 | ||
1594 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1752 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1595 | // Roll-Achse |
1753 | // Roll-Achse |
- | 1754 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|
- | 1755 | DiffRoll = MesswertRoll - StickRoll; // Differenz bestimmen |
|
1596 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1756 | // MartinR : so war es Anfang |
1597 | DiffRoll = MesswertRoll - StickRoll; // Differenz bestimmen |
1757 | /* |
1598 | if(IntegralFaktor) SummeRoll += IntegralRollMalFaktor - StickRoll;// I-Anteil bei Winkelregelung |
1758 | if(IntegralFaktor) SummeRoll += IntegralRollMalFaktor - StickRoll;// I-Anteil bei Winkelregelung |
1599 | else SummeRoll += DiffRoll; // I-Anteil bei HH |
1759 | else SummeRoll += DiffRoll; // I-Anteil bei HH |
1600 | if(SummeRoll > (STICK_GAIN * 16000L)) SummeRoll = (STICK_GAIN * 16000L); |
1760 | if(SummeRoll > (STICK_GAIN * 16000L)) SummeRoll = (STICK_GAIN * 16000L); |
- | 1761 | if(SummeRoll < -(16000L * STICK_GAIN)) SummeRoll = -(16000L * STICK_GAIN); |
|
- | 1762 | pd_ergebnis_roll = DiffRoll + SummeRoll / Ki; // PI-Regler für Roll |
|
- | 1763 | */ |
|
- | 1764 | // MartinR : so war es Ende |
|
- | 1765 | ||
- | 1766 | // MartinR : geändert Anfang |
|
- | 1767 | if(IntegralFaktor) // MartinR : ACC-Mode |
|
- | 1768 | { |
|
- | 1769 | SummeRoll += IntegralRollMalFaktor - StickRoll; |
|
- | 1770 | if(SummeRoll > (STICK_GAIN * 8000L)) SummeRoll = (STICK_GAIN * 8000L);// MartinR : von 16000 auf 8000, da überlauf |
|
- | 1771 | if(SummeRoll < -(8000L * STICK_GAIN)) SummeRoll = -(8000L * STICK_GAIN);// MartinR : von 16000 auf 8000, da überlauf |
|
- | 1772 | tmp_int = SummeRoll / Ki; |
|
- | 1773 | pd_ergebnis_roll = DiffRoll + tmp_int; // MartinR: PI-Regler im ACC-Mode |
|
- | 1774 | //SummeRollHH = (IntegralRollMalFaktor + tmp_int - stick_roll_neutral + (TrimRoll * STICK_GAIN / 2)) * KiHH;// MartinR: Startwert von SummeRollHH bei Umschaltung auf HH |
|
- | 1775 | // MartinR: Hintergrund: pd_ergebnis_xx soll sich beim Umschalten nicht ändern! |
|
- | 1776 | SummeRollHH = 0; |
|
- | 1777 | } |
|
- | 1778 | else // MartinR : HH-Mode |
|
- | 1779 | { |
|
- | 1780 | SummeRollHH += DiffRoll; // I-Anteil bei HH |
|
- | 1781 | if(SummeRollHH > (STICK_GAIN * 8000L)) SummeRollHH = (STICK_GAIN * 8000L);// MartinR : von 16000 auf 8000, da überlauf |
|
- | 1782 | if(SummeRollHH < -(8000L * STICK_GAIN)) SummeRollHH = -(8000L * STICK_GAIN);// MartinR : von 16000 auf 8000, da überlauf |
|
- | 1783 | pd_ergebnis_roll = DiffRoll + SummeRollHH / KiHH; // MartinR: PI-Regler für Roll bei HH |
|
- | 1784 | SummeRoll = 0; |
|
- | 1785 | } |
|
1601 | if(SummeRoll < -(16000L * STICK_GAIN)) SummeRoll = -(16000L * STICK_GAIN); |
1786 | // MartinR : geändert Ende |
1602 | pd_ergebnis_roll = DiffRoll + SummeRoll / Ki; // PI-Regler für Roll |
1787 | |
1603 | tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
1788 | tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
Line 1604... | Line 1789... | ||
1604 | if(pd_ergebnis_roll > tmp_int) pd_ergebnis_roll = tmp_int; |
1789 | if(pd_ergebnis_roll > tmp_int) pd_ergebnis_roll = tmp_int; |