Rev 1378 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1378 | Rev 1476 | ||
---|---|---|---|
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 100... | Line 102... | ||
100 | long HoehenWert = 0; |
102 | long HoehenWert = 0; |
101 | long SollHoehe = 0; |
103 | long SollHoehe = 0; |
102 | int LageKorrekturRoll = 0,LageKorrekturNick = 0; |
104 | int LageKorrekturRoll = 0,LageKorrekturNick = 0; |
103 | //float Ki = FAKTOR_I; |
105 | //float Ki = FAKTOR_I; |
104 | int Ki = 10300 / 33; |
106 | int Ki = 10300 / 33; |
- | 107 | int KiHH = 10300 / 33; // MartinR : für Ki bei HH über Schalter |
|
- | 108 | ||
105 | unsigned char Looping_Nick = 0,Looping_Roll = 0; |
109 | unsigned char Looping_Nick = 0,Looping_Roll = 0; |
106 | unsigned char Looping_Links = 0, Looping_Rechts = 0, Looping_Unten = 0, Looping_Oben = 0; |
110 | unsigned char Looping_Links = 0, Looping_Rechts = 0, Looping_Unten = 0, Looping_Oben = 0; |
Line 107... | Line 111... | ||
107 | 111 | ||
108 | unsigned char Parameter_Luftdruck_D = 48; // Wert : 0-250 |
112 | unsigned char Parameter_Luftdruck_D = 48; // Wert : 0-250 |
Line 148... | Line 152... | ||
148 | unsigned char Parameter_NaviWindCorrection; |
152 | unsigned char Parameter_NaviWindCorrection; |
149 | unsigned char Parameter_NaviSpeedCompensation; |
153 | unsigned char Parameter_NaviSpeedCompensation; |
150 | unsigned char Parameter_ExternalControl; |
154 | unsigned char Parameter_ExternalControl; |
151 | struct mk_param_struct EE_Parameter; |
155 | struct mk_param_struct EE_Parameter; |
152 | signed int ExternStickNick = 0,ExternStickRoll = 0,ExternStickGier = 0, ExternHoehenValue = -20; |
156 | signed int ExternStickNick = 0,ExternStickRoll = 0,ExternStickGier = 0, ExternHoehenValue = -20; |
153 | int MaxStickNick = 0,MaxStickRoll = 0; |
157 | //int MaxStickNick = 0,MaxStickRoll = 0;MartinR: so war es |
- | 158 | int MaxStickNick = 0,MaxStickRoll = 0,stick_nick_neutral = 0,stick_roll_neutral = 0; // MartinR: stick_.._neutral hinzugefügt |
|
- | 159 | ||
154 | unsigned int modell_fliegt = 0; |
160 | unsigned int modell_fliegt = 0; |
155 | volatile unsigned char MikroKopterFlags = 0; |
161 | volatile unsigned char MikroKopterFlags = 0; |
156 | long GIER_GRAD_FAKTOR = 1291; |
162 | long GIER_GRAD_FAKTOR = 1291; |
157 | signed int KopplungsteilNickRoll,KopplungsteilRollNick; |
163 | signed int KopplungsteilNickRoll,KopplungsteilRollNick; |
158 | unsigned char RequiredMotors = 4; |
164 | unsigned char RequiredMotors = 4; |
Line 165... | Line 171... | ||
165 | 171 | ||
166 | int MotorSmoothing(int neu, int alt) |
172 | int MotorSmoothing(int neu, int alt) |
167 | { |
173 | { |
168 | int motor; |
174 | int motor; |
169 | 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 |
|
170 | else motor = neu - (alt - neu)*1; |
178 | |
171 | //if(Poti2 < 20) return(neu); |
179 | //if(Poti2 < 20) return(neu); |
172 | return(motor); |
180 | return(motor); |
Line 173... | Line 181... | ||
173 | } |
181 | } |
Line 318... | Line 326... | ||
318 | 326 | ||
319 | // Gier ++++++++++++++++++++++++++++++++++++++++++++++++ |
327 | // Gier ++++++++++++++++++++++++++++++++++++++++++++++++ |
320 | Mess_Integral_Gier += MesswertGier; |
328 | Mess_Integral_Gier += MesswertGier; |
321 | ErsatzKompass += MesswertGier; |
329 | ErsatzKompass += MesswertGier; |
- | 330 | // Kopplungsanteil +++++++++++++++++++++++++++++++++++++ |
|
- | 331 | ||
- | 332 | if((EE_Parameter.GlobalConfig & CFG_HEADING_HOLD) || (Parameter_UserParam1 > 140)) IntegralFaktor = 0; // MartinR: zusätzlich |
|
322 | // Kopplungsanteil +++++++++++++++++++++++++++++++++++++ |
333 | |
- | 334 | //if(!Looping_Nick && !Looping_Roll && (EE_Parameter.GlobalConfig & CFG_ACHSENKOPPLUNG_AKTIV)) // MartinR : so war es |
|
323 | if(!Looping_Nick && !Looping_Roll && (EE_Parameter.GlobalConfig & CFG_ACHSENKOPPLUNG_AKTIV)) |
335 | if(!Looping_Nick && !Looping_Roll && IntegralFaktor && (EE_Parameter.GlobalConfig & CFG_ACHSENKOPPLUNG_AKTIV)) // MartinR: zusätzlich "&& IntegralFaktor" |
324 | { |
336 | { |
325 | tmpl3 = (MesswertRoll * winkel_nick) / 2048L; |
337 | tmpl3 = (MesswertRoll * winkel_nick) / 2048L; |
326 | tmpl3 *= Parameter_AchsKopplung2; //65 |
338 | tmpl3 *= Parameter_AchsKopplung2; //65 |
327 | tmpl3 /= 4096L; |
339 | tmpl3 /= 4096L; |
Line 387... | Line 399... | ||
387 | #define D_LIMIT 128 |
399 | #define D_LIMIT 128 |
Line 388... | Line 400... | ||
388 | 400 | ||
389 | MesswertNick = HiResNick / 8; |
401 | MesswertNick = HiResNick / 8; |
Line -... | Line 402... | ||
- | 402 | MesswertRoll = HiResRoll / 8; |
|
- | 403 | ||
- | 404 | // MartinR : so war es Anfang |
|
390 | MesswertRoll = HiResRoll / 8; |
405 | /* |
391 | 406 | ||
392 | if(AdWertNick < 15) MesswertNick = -1000; if(AdWertNick < 7) MesswertNick = -2000; |
407 | if(AdWertNick < 15) MesswertNick = -1000; if(AdWertNick < 7) MesswertNick = -2000; |
393 | if(PlatinenVersion == 10) { if(AdWertNick > 1010) MesswertNick = +1000; if(AdWertNick > 1017) MesswertNick = +2000; } |
408 | if(PlatinenVersion == 10) { if(AdWertNick > 1010) MesswertNick = +1000; if(AdWertNick > 1017) MesswertNick = +2000; } |
394 | else { if(AdWertNick > 2000) MesswertNick = +1000; if(AdWertNick > 2015) MesswertNick = +2000; } |
409 | else { if(AdWertNick > 2000) MesswertNick = +1000; if(AdWertNick > 2015) MesswertNick = +2000; } |
395 | if(AdWertRoll < 15) MesswertRoll = -1000; if(AdWertRoll < 7) MesswertRoll = -2000; |
410 | if(AdWertRoll < 15) MesswertRoll = -1000; if(AdWertRoll < 7) MesswertRoll = -2000; |
Line -... | Line 411... | ||
- | 411 | if(PlatinenVersion == 10) { if(AdWertRoll > 1010) MesswertRoll = +1000; if(AdWertRoll > 1017) MesswertRoll = +2000; } |
|
- | 412 | else { if(AdWertRoll > 2000) MesswertRoll = +1000; if(AdWertRoll > 2015) MesswertRoll = +2000; } |
|
- | 413 | ||
- | 414 | // MartinR : FC 1.0: Sprung von 500 auf 2000 !! FC-ME: Sprung von 1000 auf 2000 |
|
- | 415 | */ |
|
- | 416 | // MartinR : so war es Ende |
|
- | 417 | ||
- | 418 | // MartinR : Neu Anfang |
|
- | 419 | if(PlatinenVersion == 10) |
|
- | 420 | { |
|
- | 421 | if(AdWertNick > 1010) MesswertNick = +600; |
|
- | 422 | if(AdWertNick > 1017) MesswertNick = +800; |
|
- | 423 | if(AdWertNick < 15) MesswertNick = -600; |
|
- | 424 | if(AdWertNick < 7) MesswertNick = -800; |
|
- | 425 | if(AdWertRoll > 1010) MesswertRoll = +600; |
|
- | 426 | if(AdWertRoll > 1017) MesswertRoll = +800; |
|
- | 427 | if(AdWertRoll < 15) MesswertRoll = -600; |
|
- | 428 | if(AdWertRoll < 7) MesswertRoll = -800; |
|
- | 429 | } |
|
- | 430 | else |
|
- | 431 | { |
|
- | 432 | if(AdWertNick > 2000) MesswertNick = +1200; |
|
- | 433 | if(AdWertNick > 2015) MesswertNick = +1600; |
|
- | 434 | if(AdWertNick < 15) MesswertNick = -1200; |
|
- | 435 | if(AdWertNick < 7) MesswertNick = -1600; |
|
- | 436 | if(AdWertRoll > 2000) MesswertRoll = +1200; |
|
- | 437 | if(AdWertRoll > 2015) MesswertRoll = +1600; |
|
- | 438 | if(AdWertRoll < 15) MesswertRoll = -1200; |
|
- | 439 | if(AdWertRoll < 7) MesswertRoll = -1600; |
|
396 | if(PlatinenVersion == 10) { if(AdWertRoll > 1010) MesswertRoll = +1000; if(AdWertRoll > 1017) MesswertRoll = +2000; } |
440 | } |
397 | else { if(AdWertRoll > 2000) MesswertRoll = +1000; if(AdWertRoll > 2015) MesswertRoll = +2000; } |
441 | // MartinR : Neu Ende |
398 | 442 | ||
399 | if(Parameter_Gyro_D) |
443 | if(Parameter_Gyro_D) |
400 | { |
444 | { |
Line 532... | Line 576... | ||
532 | CHK_POTI(Parameter_DynamicStability,EE_Parameter.DynamicStability,0,255); |
576 | CHK_POTI(Parameter_DynamicStability,EE_Parameter.DynamicStability,0,255); |
533 | CHK_POTI_MM(Parameter_J16Timing,EE_Parameter.J16Timing,1,255); |
577 | CHK_POTI_MM(Parameter_J16Timing,EE_Parameter.J16Timing,1,255); |
534 | CHK_POTI_MM(Parameter_J17Timing,EE_Parameter.J17Timing,1,255); |
578 | CHK_POTI_MM(Parameter_J17Timing,EE_Parameter.J17Timing,1,255); |
535 | CHK_POTI(Parameter_ExternalControl,EE_Parameter.ExternalControl,0,255); |
579 | CHK_POTI(Parameter_ExternalControl,EE_Parameter.ExternalControl,0,255); |
536 | Ki = 10300 / (Parameter_I_Faktor + 1); |
580 | Ki = 10300 / (Parameter_I_Faktor + 1); |
- | 581 | ||
- | 582 | if(Parameter_UserParam1 > 140) KiHH = 10300 / (Parameter_UserParam2 + 1); else KiHH = Ki; // MartinR : für HH über Schalter |
|
- | 583 | Parameter_NaviGpsModeControl = EE_Parameter.NaviGpsModeControl; //MartinR: Standard: EE_Parameter.NaviGpsModeControl wird übertragen |
|
- | 584 | if(!IntegralFaktor) Parameter_NaviGpsModeControl= 0; // MartinR: wenn HH dann GPS auf free- Mode |
|
- | 585 | // 0 = free; 100 = AID; 200 = coming home //neu |
|
- | 586 | ||
537 | MAX_GAS = EE_Parameter.Gas_Max; |
587 | MAX_GAS = EE_Parameter.Gas_Max; |
538 | MIN_GAS = EE_Parameter.Gas_Min; |
588 | MIN_GAS = EE_Parameter.Gas_Min; |
539 | } |
589 | } |
Line 545... | Line 595... | ||
545 | //############################################################################ |
595 | //############################################################################ |
546 | { |
596 | { |
547 | int pd_ergebnis_nick,pd_ergebnis_roll,tmp_int, tmp_int2; |
597 | int pd_ergebnis_nick,pd_ergebnis_roll,tmp_int, tmp_int2; |
548 | int GierMischanteil,GasMischanteil; |
598 | int GierMischanteil,GasMischanteil; |
549 | static long SummeNick=0,SummeRoll=0; |
599 | static long SummeNick=0,SummeRoll=0; |
- | 600 | ||
- | 601 | static long SummeNickHH=0,SummeRollHH=0; // MartinR: Für ACC-HH Umschaltung |
|
- | 602 | ||
550 | static long sollGier = 0,tmp_long,tmp_long2; |
603 | static long sollGier = 0,tmp_long,tmp_long2; |
551 | static long IntegralFehlerNick = 0; |
604 | static long IntegralFehlerNick = 0; |
552 | static long IntegralFehlerRoll = 0; |
605 | static long IntegralFehlerRoll = 0; |
553 | static unsigned int RcLostTimer; |
606 | static unsigned int RcLostTimer; |
554 | static unsigned char delay_neutral = 0; |
607 | static unsigned char delay_neutral = 0; |
Line 733... | Line 786... | ||
733 | 786 | ||
734 | if(!NewPpmData-- || (MikroKopterFlags & FLAG_NOTLANDUNG)) |
787 | if(!NewPpmData-- || (MikroKopterFlags & FLAG_NOTLANDUNG)) |
735 | { |
788 | { |
736 | static int stick_nick,stick_roll; |
789 | static int stick_nick,stick_roll; |
- | 790 | ParameterZuordnung(); |
|
- | 791 | ||
- | 792 | // MartinR: original: |
|
737 | ParameterZuordnung(); |
793 | /* |
738 | stick_nick = (stick_nick * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_P) / 4; |
794 | stick_nick = (stick_nick * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_P) / 4; |
739 | stick_nick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D; |
795 | stick_nick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D; |
Line 740... | Line 796... | ||
740 | StickNick = stick_nick - (GPS_Nick + GPS_Nick2); |
796 | StickNick = stick_nick - (GPS_Nick + GPS_Nick2); |
741 | 797 | ||
742 | stick_roll = (stick_roll * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_P) / 4; |
798 | stick_roll = (stick_roll * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_P) / 4; |
- | 799 | stick_roll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D; |
|
- | 800 | StickRoll = stick_roll - (GPS_Roll + GPS_Roll2); |
|
- | 801 | */ |
|
- | 802 | ||
- | 803 | // MartinR: geändert Anfang |
|
- | 804 | if(Parameter_UserParam1 > 140) // MartinR: zweiter Stick_P Wert nur, wenn HH über Schalter aktiv ist |
|
- | 805 | { |
|
- | 806 | stick_nick = (stick_nick * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * Parameter_UserParam3 - stick_nick_neutral) / 4; |
|
- | 807 | stick_roll = (stick_roll * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * Parameter_UserParam3 - stick_roll_neutral) / 4 ; |
|
- | 808 | //stick_nick = (PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * Parameter_UserParam3 - stick_nick_neutral); |
|
- | 809 | //stick_roll = (PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * Parameter_UserParam3 - stick_roll_neutral); |
|
- | 810 | } |
|
- | 811 | ||
- | 812 | else |
|
- | 813 | { |
|
- | 814 | stick_nick = (stick_nick * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_P) / 4; |
|
- | 815 | stick_roll = (stick_roll * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_P) / 4; |
|
- | 816 | stick_nick_neutral = stick_nick; // beim Umschalten auf HH wird derletzte Stickwert als Neutralposition verwendet, MartinR |
|
- | 817 | stick_roll_neutral = stick_roll; // beim Umschalten auf HH wird derletzte Stickwert als Neutralposition verwendet, MartinR |
|
- | 818 | } |
|
- | 819 | ||
- | 820 | if(IntegralFaktor) |
|
- | 821 | { |
|
- | 822 | stick_nick_neutral = stick_nick; // beim Umschalten auf HH wird derletzte Stickwert als Neutralposition verwendet, MartinR |
|
- | 823 | stick_roll_neutral = stick_roll; // beim Umschalten auf HH wird derletzte Stickwert als Neutralposition verwendet, MartinR |
|
- | 824 | stick_nick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D; |
|
- | 825 | stick_roll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D; |
|
- | 826 | ||
- | 827 | StickNick = stick_nick - (GPS_Nick + GPS_Nick2); // MartinR: GPS nur im ACC-Mode wirksam |
|
- | 828 | StickRoll = stick_roll - (GPS_Roll + GPS_Roll2); // MartinR: GPS nur im ACC-Mode wirksam |
|
- | 829 | } |
|
- | 830 | else // wenn HH , MartinR |
|
- | 831 | { |
|
- | 832 | //stick_nick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D; // MartinR: eventuell vor if verschieben |
|
- | 833 | //stick_roll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D; // MartinR: eventuell vor if verschieben |
|
- | 834 | StickNick = stick_nick; // MartinR: GPS nur im ACC-Mode wirksam |
|
- | 835 | StickRoll = stick_roll; // MartinR: GPS nur im ACC-Mode wirksam |
|
- | 836 | } |
|
Line 743... | Line 837... | ||
743 | stick_roll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D; |
837 | |
744 | StickRoll = stick_roll - (GPS_Roll + GPS_Roll2); |
838 | // MartinR: geändert Ende |
745 | 839 | ||
Line 755... | Line 849... | ||
755 | IntegralFaktorGier = Parameter_Gyro_Gier_I; |
849 | IntegralFaktorGier = Parameter_Gyro_Gier_I; |
Line 756... | Line 850... | ||
756 | 850 | ||
757 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
851 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
758 | //+ Analoge Steuerung per Seriell |
852 | //+ Analoge Steuerung per Seriell |
- | 853 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|
- | 854 | // MartinR: ToDo: eventuell die Kombination HH und Steuerung per Seriell nicht zulassen?? |
|
759 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
855 | |
760 | if(ExternControl.Config & 0x01 && Parameter_ExternalControl > 128) |
856 | if(ExternControl.Config & 0x01 && Parameter_ExternalControl > 128) |
761 | { |
857 | { |
762 | StickNick += (int) ExternControl.Nick * (int) EE_Parameter.Stick_P; |
858 | StickNick += (int) ExternControl.Nick * (int) EE_Parameter.Stick_P; |
763 | StickRoll += (int) ExternControl.Roll * (int) EE_Parameter.Stick_P; |
859 | StickRoll += (int) ExternControl.Roll * (int) EE_Parameter.Stick_P; |
764 | StickGier += ExternControl.Gier; |
860 | StickGier += ExternControl.Gier; |
765 | ExternHoehenValue = (int) ExternControl.Hight * (int)EE_Parameter.Hoehe_Verstaerkung; |
861 | ExternHoehenValue = (int) ExternControl.Hight * (int)EE_Parameter.Hoehe_Verstaerkung; |
766 | if(ExternControl.Gas < StickGas) StickGas = ExternControl.Gas; |
862 | if(ExternControl.Gas < StickGas) StickGas = ExternControl.Gas; |
767 | } |
863 | } |
Line 768... | Line 864... | ||
768 | if(StickGas < 0) StickGas = 0; |
864 | if(StickGas < 0) StickGas = 0; |
- | 865 | ||
- | 866 | //if(EE_Parameter.GlobalConfig & CFG_HEADING_HOLD) IntegralFaktor = 0; // MartinR: Original |
|
769 | 867 | if((EE_Parameter.GlobalConfig & CFG_HEADING_HOLD) || (Parameter_UserParam1 > 140)) IntegralFaktor = 0; // MartinR |
|
770 | if(EE_Parameter.GlobalConfig & CFG_HEADING_HOLD) IntegralFaktor = 0; |
868 | |
Line 771... | Line 869... | ||
771 | //if(GyroFaktor < 0) GyroFaktor = 0; |
869 | //if(GyroFaktor < 0) GyroFaktor = 0; |
772 | //if(IntegralFaktor < 0) IntegralFaktor = 0; |
870 | //if(IntegralFaktor < 0) IntegralFaktor = 0; |
Line 857... | Line 955... | ||
857 | MittelIntegralNick += IntegralNick; // Für die Mittelwertbildung aufsummieren |
955 | MittelIntegralNick += IntegralNick; // Für die Mittelwertbildung aufsummieren |
858 | MittelIntegralRoll += IntegralRoll; |
956 | MittelIntegralRoll += IntegralRoll; |
859 | MittelIntegralNick2 += IntegralNick2; |
957 | MittelIntegralNick2 += IntegralNick2; |
860 | MittelIntegralRoll2 += IntegralRoll2; |
958 | MittelIntegralRoll2 += IntegralRoll2; |
Line 861... | Line 959... | ||
861 | 959 | ||
- | 960 | //if(Looping_Nick || Looping_Roll) // MartinR: so war es |
|
862 | if(Looping_Nick || Looping_Roll) |
961 | if(Looping_Nick || Looping_Roll || !IntegralFaktor) // MartinR: "|| !IntegralFaktor" hinzugefügt |
863 | { |
962 | { |
864 | IntegralAccNick = 0; |
963 | IntegralAccNick = 0; |
865 | IntegralAccRoll = 0; |
964 | IntegralAccRoll = 0; |
866 | MittelIntegralNick = 0; |
965 | MittelIntegralNick = 0; |
867 | MittelIntegralRoll = 0; |
966 | MittelIntegralRoll = 0; |
868 | MittelIntegralNick2 = 0; |
967 | MittelIntegralNick2 = 0; |
- | 968 | MittelIntegralRoll2 = 0; |
|
- | 969 | ||
- | 970 | IntegralNick = 0; // MartinR: im HH-Modus alle unbenutzten Integratoren = 0 |
|
- | 971 | IntegralRoll = 0; // MartinR: im HH-Modus alle unbenutzten Integratoren = 0 |
|
- | 972 | Mess_IntegralNick = 0; // MartinR: im HH-Modus alle unbenutzten Integratoren = 0 |
|
- | 973 | Mess_IntegralRoll = 0; // MartinR: im HH-Modus alle unbenutzten Integratoren = 0 |
|
- | 974 | Mess_Integral_Gier = 0; // MartinR: im HH-Modus alle unbenutzten Integratoren = 0 |
|
- | 975 | Mess_Integral_Gier2 = 0; // MartinR: im HH-Modus alle unbenutzten Integratoren = 0 |
|
869 | MittelIntegralRoll2 = 0; |
976 | |
870 | Mess_IntegralNick2 = Mess_IntegralNick; |
977 | Mess_IntegralNick2 = Mess_IntegralNick; |
871 | Mess_IntegralRoll2 = Mess_IntegralRoll; |
978 | Mess_IntegralRoll2 = Mess_IntegralRoll; |
872 | ZaehlMessungen = 0; |
979 | ZaehlMessungen = 0; |
873 | LageKorrekturNick = 0; |
980 | LageKorrekturNick = 0; |
874 | LageKorrekturRoll = 0; |
981 | LageKorrekturRoll = 0; |
Line 875... | Line 982... | ||
875 | } |
982 | } |
876 | 983 | ||
877 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
984 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
878 | if(!Looping_Nick && !Looping_Roll && (Aktuell_az > 512 || MotorenEin)) |
985 | if(!Looping_Nick && !Looping_Roll && (Aktuell_az > 512 || MotorenEin) && IntegralFaktor) // MartinR: "&& IntegralFaktor" hinzugefügt |
879 | { |
986 | { |
880 | long tmp_long, tmp_long2; |
987 | long tmp_long, tmp_long2; |
881 | if(FromNaviCtrl_Value.Kalman_K != -1 /*&& !TrichterFlug*/) |
988 | if(FromNaviCtrl_Value.Kalman_K != -1 /*&& !TrichterFlug*/) |
Line 931... | Line 1038... | ||
931 | if(ZaehlMessungen >= ABGLEICH_ANZAHL) |
1038 | if(ZaehlMessungen >= ABGLEICH_ANZAHL) |
932 | { |
1039 | { |
933 | static int cnt = 0; |
1040 | static int cnt = 0; |
934 | static char last_n_p,last_n_n,last_r_p,last_r_n; |
1041 | static char last_n_p,last_n_n,last_r_p,last_r_n; |
935 | static long MittelIntegralNick_Alt,MittelIntegralRoll_Alt; |
1042 | static long MittelIntegralNick_Alt,MittelIntegralRoll_Alt; |
936 | if(!Looping_Nick && !Looping_Roll && !TrichterFlug && EE_Parameter.Driftkomp) |
1043 | if(!Looping_Nick && !Looping_Roll && !TrichterFlug && EE_Parameter.Driftkomp && IntegralFaktor) // MartinR: "&& IntegralFaktor" hinzugefügt |
937 | { |
1044 | { |
938 | MittelIntegralNick /= ABGLEICH_ANZAHL; |
1045 | MittelIntegralNick /= ABGLEICH_ANZAHL; |
939 | MittelIntegralRoll /= ABGLEICH_ANZAHL; |
1046 | MittelIntegralRoll /= ABGLEICH_ANZAHL; |
940 | IntegralAccNick = (EE_Parameter.GyroAccFaktor * IntegralAccNick) / ABGLEICH_ANZAHL; |
1047 | IntegralAccNick = (EE_Parameter.GyroAccFaktor * IntegralAccNick) / ABGLEICH_ANZAHL; |
941 | IntegralAccRoll = (EE_Parameter.GyroAccFaktor * IntegralAccRoll) / ABGLEICH_ANZAHL; |
1048 | IntegralAccRoll = (EE_Parameter.GyroAccFaktor * IntegralAccRoll) / ABGLEICH_ANZAHL; |
Line 1198... | Line 1305... | ||
1198 | 1305 | ||
1199 | #define TRIM_MAX 200 |
1306 | #define TRIM_MAX 200 |
1200 | if(TrimNick > TRIM_MAX) TrimNick = TRIM_MAX; else if(TrimNick <-TRIM_MAX) TrimNick =-TRIM_MAX; |
1307 | if(TrimNick > TRIM_MAX) TrimNick = TRIM_MAX; else if(TrimNick <-TRIM_MAX) TrimNick =-TRIM_MAX; |
Line -... | Line 1308... | ||
- | 1308 | if(TrimRoll > TRIM_MAX) TrimRoll = TRIM_MAX; else if(TrimRoll <-TRIM_MAX) TrimRoll =-TRIM_MAX; |
|
- | 1309 | ||
- | 1310 | //MesswertNick = IntegralNickMalFaktor + (long)((long)MesswertNick * GyroFaktor + (long)TrimNick * 128L) / (256L / STICK_GAIN);// MartinR so war es |
|
- | 1311 | //MesswertRoll = IntegralRollMalFaktor + (long)((long)MesswertRoll * GyroFaktor + (long)TrimRoll * 128L) / (256L / STICK_GAIN);// MartinR so war es |
|
- | 1312 | ||
- | 1313 | ||
- | 1314 | if(!IntegralFaktor) // MartinR : hinzugefügt |
|
- | 1315 | { |
|
- | 1316 | MesswertNick = (long) ((long)MesswertNick * GyroFaktor) / (256L / STICK_GAIN) ; // MartinR : hinzugefügt |
|
- | 1317 | MesswertRoll = (long) ((long)MesswertRoll * GyroFaktor) / (256L / STICK_GAIN) ; // MartinR : hinzugefügt |
|
- | 1318 | } |
|
1201 | if(TrimRoll > TRIM_MAX) TrimRoll = TRIM_MAX; else if(TrimRoll <-TRIM_MAX) TrimRoll =-TRIM_MAX; |
1319 | else // MartinR so war es |
1202 | 1320 | { |
|
- | 1321 | MesswertNick = IntegralNickMalFaktor + (long)((long)MesswertNick * GyroFaktor + (long)TrimNick * 128L) / (256L / STICK_GAIN); |
|
- | 1322 | MesswertRoll = IntegralRollMalFaktor + (long)((long)MesswertRoll * GyroFaktor + (long)TrimRoll * 128L) / (256L / STICK_GAIN); |
|
- | 1323 | } |
|
1203 | MesswertNick = IntegralNickMalFaktor + (long)((long)MesswertNick * GyroFaktor + (long)TrimNick * 128L) / (256L / STICK_GAIN); |
1324 | |
Line 1204... | Line 1325... | ||
1204 | MesswertRoll = IntegralRollMalFaktor + (long)((long)MesswertRoll * GyroFaktor + (long)TrimRoll * 128L) / (256L / STICK_GAIN); |
1325 | |
1205 | MesswertGier = (long)(MesswertGier * 2 * (long)GyroFaktorGier) / (256L / STICK_GAIN) + (long)(Integral_Gier * IntegralFaktorGier) / (2 * (44000 / STICK_GAIN)); |
1326 | MesswertGier = (long)(MesswertGier * 2 * (long)GyroFaktorGier) / (256L / STICK_GAIN) + (long)(Integral_Gier * IntegralFaktorGier) / (2 * (44000 / STICK_GAIN)); |
1206 | 1327 | ||
Line 1290... | Line 1411... | ||
1290 | } |
1411 | } |
Line 1291... | Line 1412... | ||
1291 | 1412 | ||
1292 | // if height control is activated by an rc channel |
1413 | // if height control is activated by an rc channel |
1293 | if(EE_Parameter.GlobalConfig & CFG_HOEHEN_SCHALTER) // Regler wird über Schalter gesteuert |
1414 | if(EE_Parameter.GlobalConfig & CFG_HOEHEN_SCHALTER) // Regler wird über Schalter gesteuert |
1294 | { // check if parameter is less than activation threshold |
1415 | { // check if parameter is less than activation threshold |
- | 1416 | //if(Parameter_MaxHoehe < 50) // for 3 or 2-state switch height control is disabled in lowest position // MartinR: so war es |
|
1295 | if(Parameter_MaxHoehe < 50) // for 3 or 2-state switch height control is disabled in lowest position |
1417 | if(Parameter_MaxHoehe < 50 || (Parameter_UserParam1 > 140) ) // MartinR: Schalter aus oder HH über UsererParam1 an |
1296 | { //height control not active |
1418 | { //height control not active |
1297 | if(!delay--) |
1419 | if(!delay--) |
1298 | { |
1420 | { |
1299 | HoehenReglerAktiv = 0; // disable height control |
1421 | HoehenReglerAktiv = 0; // disable height control |
Line 1302... | Line 1424... | ||
1302 | } |
1424 | } |
1303 | } |
1425 | } |
1304 | else |
1426 | else |
1305 | { //height control is activated |
1427 | { //height control is activated |
1306 | HoehenReglerAktiv = 1; // enable height control |
1428 | HoehenReglerAktiv = 1; // enable height control |
1307 | delay = 200; |
1429 | delay = 200; |
1308 | } |
1430 | } |
1309 | } |
1431 | } |
1310 | else // no switchable height control |
1432 | else // no switchable height control |
1311 | { |
1433 | { |
1312 | SollHoehe = ((int16_t) ExternHoehenValue + (int16_t) Parameter_MaxHoehe) * (int)EE_Parameter.Hoehe_Verstaerkung; |
1434 | SollHoehe = ((int16_t) ExternHoehenValue + (int16_t) Parameter_MaxHoehe) * (int)EE_Parameter.Hoehe_Verstaerkung; |
- | 1435 | // HoehenReglerAktiv = 1; // MartinR : so war es |
|
- | 1436 | // MartinR : geändert Anfang |
|
- | 1437 | if(Parameter_UserParam1 > 140) // HH über Schalter: Höhenregler abgeschaltet, Nachführen von Parametern |
|
- | 1438 | { |
|
- | 1439 | HoehenReglerAktiv = 0; |
|
- | 1440 | } |
|
- | 1441 | else // Höhenregler mit Sollhöhe über Poti aktiv |
|
- | 1442 | { |
|
1313 | HoehenReglerAktiv = 1; |
1443 | HoehenReglerAktiv = 1; |
- | 1444 | } |
|
- | 1445 | // MartinR : geändert Ende |
|
1314 | } |
1446 | } |
Line 1315... | Line 1447... | ||
1315 | 1447 | ||
1316 | // calculate cos of nick and roll angle used for projection of the vertical hoover gas |
1448 | // calculate cos of nick and roll angle used for projection of the vertical hoover gas |
1317 | tmp_int = (int)(IntegralNick/GIER_GRAD_FAKTOR); // nick angle in deg |
1449 | tmp_int = (int)(IntegralNick/GIER_GRAD_FAKTOR); // nick angle in deg |
Line 1552... | Line 1684... | ||
1552 | 1684 | ||
1553 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1685 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1554 | // Nick-Achse |
1686 | // Nick-Achse |
1555 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1687 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
- | 1688 | DiffNick = MesswertNick - StickNick; // Differenz bestimmen |
|
- | 1689 | ||
- | 1690 | // MartinR : so war es Anfang |
|
1556 | DiffNick = MesswertNick - StickNick; // Differenz bestimmen |
1691 | /* |
1557 | if(IntegralFaktor) SummeNick += IntegralNickMalFaktor - StickNick; // I-Anteil bei Winkelregelung |
1692 | if(IntegralFaktor) SummeNick += IntegralNickMalFaktor - StickNick; // I-Anteil bei Winkelregelung |
1558 | else SummeNick += DiffNick; // I-Anteil bei HH |
1693 | else SummeNick += DiffNick; // I-Anteil bei HH |
1559 | if(SummeNick > (STICK_GAIN * 16000L)) SummeNick = (STICK_GAIN * 16000L); |
1694 | if(SummeNick > (STICK_GAIN * 16000L)) SummeNick = (STICK_GAIN * 16000L); |
1560 | if(SummeNick < -(16000L * STICK_GAIN)) SummeNick = -(16000L * STICK_GAIN); |
1695 | if(SummeNick < -(16000L * STICK_GAIN)) SummeNick = -(16000L * STICK_GAIN); |
1561 | pd_ergebnis_nick = DiffNick + SummeNick / Ki; // PI-Regler für Nick |
1696 | pd_ergebnis_nick = DiffNick + SummeNick / Ki; // PI-Regler für Nick |
- | 1697 | // Motor Vorn |
|
- | 1698 | */ |
|
- | 1699 | // MartinR : so war es Ende |
|
- | 1700 | ||
- | 1701 | // MartinR : geändert Anfang |
|
- | 1702 | ||
- | 1703 | if(IntegralFaktor) // MartinR : ACC-Mode |
|
- | 1704 | { |
|
- | 1705 | SummeNick += IntegralNickMalFaktor - StickNick; // I-Anteil bei Winkelregelung |
|
- | 1706 | if(SummeNick > (STICK_GAIN * 8000L)) SummeNick = (STICK_GAIN * 8000L); // MartinR : von 16000 auf 8000, da überlauf |
|
- | 1707 | if(SummeNick < -(8000L * STICK_GAIN)) SummeNick = -(8000L * STICK_GAIN); // MartinR : von 16000 auf 8000, da überlauf |
|
- | 1708 | pd_ergebnis_nick = DiffNick + (SummeNick / Ki); |
|
- | 1709 | SummeNickHH = 0 ; |
|
- | 1710 | } |
|
- | 1711 | else // MartinR : HH-Mode |
|
- | 1712 | { |
|
- | 1713 | SummeNickHH += DiffNick; // I-Anteil bei HH |
|
- | 1714 | if(SummeNickHH > (STICK_GAIN * 8000L)) SummeNickHH = (STICK_GAIN * 8000L); // MartinR : von 16000 auf 8000, da überlauf |
|
- | 1715 | if(SummeNickHH < -(8000L * STICK_GAIN)) SummeNickHH = -(8000L * STICK_GAIN); // MartinR : von 16000 auf 8000, da überlauf |
|
- | 1716 | pd_ergebnis_nick = DiffNick + SummeNickHH / KiHH; // MartinR: PI-Regler für Nick bei HH |
|
- | 1717 | SummeNick = 0; |
|
- | 1718 | } |
|
- | 1719 | ||
- | 1720 | // MartinR : geändert Ende |
|
1562 | // Motor Vorn |
1721 | |
1563 | tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
1722 | tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
1564 | if(pd_ergebnis_nick > tmp_int) pd_ergebnis_nick = tmp_int; |
1723 | if(pd_ergebnis_nick > tmp_int) pd_ergebnis_nick = tmp_int; |
Line 1565... | Line 1724... | ||
1565 | if(pd_ergebnis_nick < -tmp_int) pd_ergebnis_nick = -tmp_int; |
1724 | if(pd_ergebnis_nick < -tmp_int) pd_ergebnis_nick = -tmp_int; |
1566 | 1725 | ||
1567 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1726 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1568 | // Roll-Achse |
1727 | // Roll-Achse |
- | 1728 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|
- | 1729 | DiffRoll = MesswertRoll - StickRoll; // Differenz bestimmen |
|
- | 1730 | ||
1569 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1731 | // MartinR : so war es Anfang |
1570 | DiffRoll = MesswertRoll - StickRoll; // Differenz bestimmen |
1732 | /* |
1571 | if(IntegralFaktor) SummeRoll += IntegralRollMalFaktor - StickRoll;// I-Anteil bei Winkelregelung |
1733 | if(IntegralFaktor) SummeRoll += IntegralRollMalFaktor - StickRoll;// I-Anteil bei Winkelregelung |
1572 | else SummeRoll += DiffRoll; // I-Anteil bei HH |
1734 | else SummeRoll += DiffRoll; // I-Anteil bei HH |
1573 | if(SummeRoll > (STICK_GAIN * 16000L)) SummeRoll = (STICK_GAIN * 16000L); |
1735 | if(SummeRoll > (STICK_GAIN * 16000L)) SummeRoll = (STICK_GAIN * 16000L); |
- | 1736 | if(SummeRoll < -(16000L * STICK_GAIN)) SummeRoll = -(16000L * STICK_GAIN); |
|
- | 1737 | pd_ergebnis_roll = DiffRoll + SummeRoll / Ki; // PI-Regler für Roll |
|
- | 1738 | */ |
|
- | 1739 | // MartinR : so war es Ende |
|
- | 1740 | ||
- | 1741 | // MartinR : geändert Anfang |
|
- | 1742 | ||
- | 1743 | if(IntegralFaktor) // MartinR : ACC-Mode |
|
- | 1744 | { |
|
- | 1745 | SummeRoll += IntegralRollMalFaktor - StickRoll; |
|
- | 1746 | if(SummeRoll > (STICK_GAIN * 8000L)) SummeRoll = (STICK_GAIN * 8000L);// MartinR : von 16000 auf 8000, da überlauf |
|
- | 1747 | if(SummeRoll < -(8000L * STICK_GAIN)) SummeRoll = -(8000L * STICK_GAIN);// MartinR : von 16000 auf 8000, da überlauf |
|
- | 1748 | tmp_int = SummeRoll / Ki; |
|
- | 1749 | pd_ergebnis_roll = DiffRoll + tmp_int; // MartinR: PI-Regler im ACC-Mode |
|
- | 1750 | //SummeRollHH = (IntegralRollMalFaktor + tmp_int - stick_roll_neutral + (TrimRoll * STICK_GAIN / 2)) * KiHH;// MartinR: Startwert von SummeRollHH bei Umschaltung auf HH |
|
- | 1751 | // MartinR: Hintergrund: pd_ergebnis_xx soll sich beim Umschalten nicht ändern! |
|
- | 1752 | SummeRollHH = 0; |
|
- | 1753 | } |
|
- | 1754 | else // MartinR : HH-Mode |
|
- | 1755 | { |
|
- | 1756 | SummeRollHH += DiffRoll; // I-Anteil bei HH |
|
- | 1757 | if(SummeRollHH > (STICK_GAIN * 8000L)) SummeRollHH = (STICK_GAIN * 8000L);// MartinR : von 16000 auf 8000, da überlauf |
|
- | 1758 | if(SummeRollHH < -(8000L * STICK_GAIN)) SummeRollHH = -(8000L * STICK_GAIN);// MartinR : von 16000 auf 8000, da überlauf |
|
- | 1759 | pd_ergebnis_roll = DiffRoll + SummeRollHH / KiHH; // MartinR: PI-Regler für Roll bei HH |
|
- | 1760 | SummeRoll = 0; |
|
- | 1761 | } |
|
- | 1762 | ||
1574 | if(SummeRoll < -(16000L * STICK_GAIN)) SummeRoll = -(16000L * STICK_GAIN); |
1763 | // MartinR : geändert Ende |
1575 | pd_ergebnis_roll = DiffRoll + SummeRoll / Ki; // PI-Regler für Roll |
1764 | |
1576 | tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
1765 | tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
Line 1577... | Line 1766... | ||
1577 | if(pd_ergebnis_roll > tmp_int) pd_ergebnis_roll = tmp_int; |
1766 | if(pd_ergebnis_roll > tmp_int) pd_ergebnis_roll = tmp_int; |