Rev 1984 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1984 | Rev 2013 | ||
---|---|---|---|
Line 108... | Line 108... | ||
108 | signed char WaypointTrimming = 0; |
108 | signed char WaypointTrimming = 0; |
109 | int CompassGierSetpoint = 0; |
109 | int CompassGierSetpoint = 0; |
110 | int LageKorrekturRoll = 0,LageKorrekturNick = 0, HoverGas = 0; |
110 | int LageKorrekturRoll = 0,LageKorrekturNick = 0, HoverGas = 0; |
111 | //float Ki = FAKTOR_I; |
111 | //float Ki = FAKTOR_I; |
112 | int Ki = 10300 / 33; |
112 | int Ki = 10300 / 33; |
- | 113 | int KiHH = 10300 / 33; // MartinR : für Ki bei HH über Schalter |
|
- | 114 | ||
113 | unsigned char Looping_Nick = 0,Looping_Roll = 0; |
115 | unsigned char Looping_Nick = 0,Looping_Roll = 0; |
114 | unsigned char Looping_Links = 0, Looping_Rechts = 0, Looping_Unten = 0, Looping_Oben = 0; |
116 | unsigned char Looping_Links = 0, Looping_Rechts = 0, Looping_Unten = 0, Looping_Oben = 0; |
Line 115... | Line 117... | ||
115 | 117 | ||
116 | unsigned char Parameter_Luftdruck_D = 48; // Wert : 0-250 |
118 | unsigned char Parameter_Luftdruck_D = 48; // Wert : 0-250 |
Line 159... | Line 161... | ||
159 | unsigned char Parameter_GlobalConfig; |
161 | unsigned char Parameter_GlobalConfig; |
160 | unsigned char Parameter_ExtraConfig; |
162 | unsigned char Parameter_ExtraConfig; |
161 | unsigned char Parameter_MaximumAltitude; |
163 | unsigned char Parameter_MaximumAltitude; |
162 | unsigned char Parameter_Servo3,Parameter_Servo4,Parameter_Servo5; |
164 | unsigned char Parameter_Servo3,Parameter_Servo4,Parameter_Servo5; |
163 | unsigned char CareFree = 0; |
165 | unsigned char CareFree = 0; |
164 | const signed char sintab[31] = { 0, 2, 4, 6, 7, 8, 8, 8, 7, 6, 4, 2, 0, -2, -4, -6, -7, -8, -8, -8, -7, -6, -4, -2, 0, 2, 4, 6, 7, 8, 8}; // 15° steps |
166 | //const signed char sintab[31] = { 0, 2, 4, 6, 7, 8, 8, 8, 7, 6, 4, 2, 0, -2, -4, -6, -7, -8, -8, -8, -7, -6, -4, -2, 0, 2, 4, 6, 7, 8, 8}; // 15° steps // MartinR: so war es |
- | 167 | const signed char sintab[62] = { 0, 2, 4, 6, 8, 10, 11, 13, 14, 15, 15, 16, 16, 16, 15, 14, 13, 11, 10, 8, 6, 4, 2, 0, -2, -4, -6, -8, -10, -11, -13, -14, -15, -15, -16, -16, -16, -15, -15, -14, -13, -11, -10, -8, -6, -4, -2, 0, 2, 4, 6, 8, 10, 11, 13, 14, 15, 15, 16, 16, 16}; // 7,5° steps //MartinR |
|
- | 168 | signed char cosinus, sinus; // MartinR : extern für PAN-Funktion |
|
Line 165... | Line 169... | ||
165 | 169 | ||
166 | signed int ExternStickNick = 0,ExternStickRoll = 0,ExternStickGier = 0, ExternHoehenValue = -20; |
170 | signed int ExternStickNick = 0,ExternStickRoll = 0,ExternStickGier = 0, ExternHoehenValue = -20; |
- | 171 | //int MaxStickNick = 0,MaxStickRoll = 0; MartinR: so war es |
|
- | 172 | int MaxStickNick = 0,MaxStickRoll = 0,stick_nick_neutral = 0,stick_roll_neutral = 0; // MartinR: stick_.._neutral hinzugefügt |
|
167 | int MaxStickNick = 0,MaxStickRoll = 0; |
173 | |
168 | unsigned int modell_fliegt = 0; |
174 | unsigned int modell_fliegt = 0; |
169 | volatile unsigned char FC_StatusFlags = 0, FC_StatusFlags2 = 0; |
175 | volatile unsigned char FC_StatusFlags = 0, FC_StatusFlags2 = 0; |
170 | long GIER_GRAD_FAKTOR = 1291; |
176 | long GIER_GRAD_FAKTOR = 1291; |
171 | signed int KopplungsteilNickRoll,KopplungsteilRollNick; |
177 | signed int KopplungsteilNickRoll,KopplungsteilRollNick; |
Line 195... | Line 201... | ||
195 | DebugOut.Analog[11] = ErsatzKompassInGrad; |
201 | DebugOut.Analog[11] = ErsatzKompassInGrad; |
196 | DebugOut.Analog[12] = Motor[0].SetPoint; |
202 | DebugOut.Analog[12] = Motor[0].SetPoint; |
197 | DebugOut.Analog[13] = Motor[1].SetPoint; |
203 | DebugOut.Analog[13] = Motor[1].SetPoint; |
198 | DebugOut.Analog[14] = Motor[2].SetPoint; |
204 | DebugOut.Analog[14] = Motor[2].SetPoint; |
199 | DebugOut.Analog[15] = Motor[3].SetPoint; |
205 | DebugOut.Analog[15] = Motor[3].SetPoint; |
- | 206 | ||
- | 207 | DebugOut.Analog[16] = cosinus; // MartinR: test |
|
- | 208 | DebugOut.Analog[17] = sinus; // MartinR: test |
|
- | 209 | DebugOut.Analog[18] = ServoPanValue; // MartinR: test |
|
- | 210 | DebugOut.Analog[19] = ServoRollValue; // MartinR: test |
|
200 | DebugOut.Analog[20] = ServoNickValue; |
211 | DebugOut.Analog[20] = ServoNickValue; |
201 | DebugOut.Analog[22] = Capacity.ActualCurrent; |
212 | DebugOut.Analog[22] = Capacity.ActualCurrent; |
202 | DebugOut.Analog[23] = Capacity.UsedCapacity; |
213 | DebugOut.Analog[23] = Capacity.UsedCapacity; |
203 | DebugOut.Analog[24] = SollHoehe/5; |
214 | DebugOut.Analog[24] = SollHoehe/5; |
204 | // DebugOut.Analog[22] = FromNaviCtrl_Value.GpsZ; |
215 | // DebugOut.Analog[22] = FromNaviCtrl_Value.GpsZ; |
Line 384... | Line 395... | ||
384 | { |
395 | { |
385 | static signed long tmpl,tmpl2,tmpl3,tmpl4; |
396 | static signed long tmpl,tmpl2,tmpl3,tmpl4; |
386 | static signed int oldNick, oldRoll, d2Roll, d2Nick; |
397 | static signed int oldNick, oldRoll, d2Roll, d2Nick; |
387 | signed long winkel_nick, winkel_roll; |
398 | signed long winkel_nick, winkel_roll; |
388 | MesswertGier = (signed int) AdNeutralGier - AdWertGier; |
399 | MesswertGier = (signed int) AdNeutralGier - AdWertGier; |
389 | MesswertNick = (signed int) AdWertNickFilter / 8; |
400 | //MesswertNick = (signed int) AdWertNickFilter / 8; // MartinR: so war es |
390 | MesswertRoll = (signed int) AdWertRollFilter / 8; |
401 | //MesswertRoll = (signed int) AdWertRollFilter / 8; // MartinR: so war es |
- | 402 | MesswertNick = (signed int) AdWertNickFilter ; // MartinR die Division /8 erfolgt bereits in der analog.c |
|
- | 403 | MesswertRoll = (signed int) AdWertRollFilter ; // MartinR die Division /8 erfolgt bereits in der analog.c |
|
391 | RohMesswertNick = MesswertNick; |
404 | RohMesswertNick = MesswertNick; |
392 | RohMesswertRoll = MesswertRoll; |
405 | RohMesswertRoll = MesswertRoll; |
Line 393... | Line 406... | ||
393 | 406 | ||
394 | // Beschleunigungssensor ++++++++++++++++++++++++++++++++++++++++++++++++ |
407 | // Beschleunigungssensor ++++++++++++++++++++++++++++++++++++++++++++++++ |
Line 428... | Line 441... | ||
428 | tmpl4 *= Parameter_AchsKopplung2; //65 |
441 | tmpl4 *= Parameter_AchsKopplung2; //65 |
429 | tmpl4 /= 4096L; |
442 | tmpl4 /= 4096L; |
430 | KopplungsteilNickRoll = tmpl3; |
443 | KopplungsteilNickRoll = tmpl3; |
431 | KopplungsteilRollNick = tmpl4; |
444 | KopplungsteilRollNick = tmpl4; |
432 | tmpl4 -= tmpl3; |
445 | tmpl4 -= tmpl3; |
- | 446 | if(IntegralFaktor) // MartinR: nur im ACC-Mode |
|
- | 447 | { |
|
433 | ErsatzKompass += tmpl4; |
448 | ErsatzKompass += tmpl4; |
434 | if(!Parameter_CouplingYawCorrection) Mess_Integral_Gier -= tmpl4/2; // Gier nachhelfen |
449 | if(!Parameter_CouplingYawCorrection) Mess_Integral_Gier -= tmpl4/2; // Gier nachhelfen |
435 | 450 | } |
|
436 | tmpl = ((MesswertGier + tmpl4) * winkel_nick) / 2048L; |
451 | tmpl = ((MesswertGier + tmpl4) * winkel_nick) / 2048L; |
437 | tmpl *= Parameter_AchsKopplung1; // 90 |
452 | tmpl *= Parameter_AchsKopplung1; // 90 |
438 | tmpl /= 4096L; |
453 | tmpl /= 4096L; |
439 | tmpl2 = ((MesswertGier + tmpl4) * winkel_roll) / 2048L; |
454 | tmpl2 = ((MesswertGier + tmpl4) * winkel_roll) / 2048L; |
440 | tmpl2 *= Parameter_AchsKopplung1; |
455 | tmpl2 *= Parameter_AchsKopplung1; |
Line 479... | Line 494... | ||
479 | IntegralNick = Mess_IntegralNick; |
494 | IntegralNick = Mess_IntegralNick; |
480 | IntegralRoll = Mess_IntegralRoll; |
495 | IntegralRoll = Mess_IntegralRoll; |
481 | IntegralNick2 = Mess_IntegralNick2; |
496 | IntegralNick2 = Mess_IntegralNick2; |
482 | IntegralRoll2 = Mess_IntegralRoll2; |
497 | IntegralRoll2 = Mess_IntegralRoll2; |
Line -... | Line 498... | ||
- | 498 | ||
483 | 499 | //#define D_LIMIT 128 // MartinR: so war es |
|
- | 500 | #define D_LIMIT 16 |
|
484 | #define D_LIMIT 128 |
501 | // MartinR: Änderung war notwendig, da die Division /8 bereits in der analog.c erfolgt |
485 | 502 | ||
486 | MesswertNick = HiResNick / 8; |
503 | //MesswertNick = HiResNick / 8; // MartinR : so war es |
- | 504 | // MesswertRoll = HiResRoll / 8; // MartinR : so war es |
|
- | 505 | MesswertNick = HiResNick ; // MartinR die Division /8 erfolgt bereits in der analog.c |
|
Line -... | Line 506... | ||
- | 506 | MesswertRoll = HiResRoll ; // MartinR die Division /8 erfolgt bereits in der analog.c |
|
- | 507 | ||
- | 508 | // MartinR : so war es Anfang |
|
487 | MesswertRoll = HiResRoll / 8; |
509 | /* |
488 | 510 | |
|
489 | if(AdWertNick < 15) MesswertNick = -1000; if(AdWertNick < 7) MesswertNick = -2000; |
511 | if(AdWertNick < 15) MesswertNick = -1000; if(AdWertNick < 7) MesswertNick = -2000; |
490 | if(PlatinenVersion == 10) { if(AdWertNick > 1010) MesswertNick = +1000; if(AdWertNick > 1017) MesswertNick = +2000; } |
512 | if(PlatinenVersion == 10) { if(AdWertNick > 1010) MesswertNick = +1000; if(AdWertNick > 1017) MesswertNick = +2000; } |
491 | else { if(AdWertNick > 2000) MesswertNick = +1000; if(AdWertNick > 2015) MesswertNick = +2000; } |
513 | else { if(AdWertNick > 2000) MesswertNick = +1000; if(AdWertNick > 2015) MesswertNick = +2000; } |
492 | if(AdWertRoll < 15) MesswertRoll = -1000; if(AdWertRoll < 7) MesswertRoll = -2000; |
514 | if(AdWertRoll < 15) MesswertRoll = -1000; if(AdWertRoll < 7) MesswertRoll = -2000; |
- | 515 | if(PlatinenVersion == 10) { if(AdWertRoll > 1010) MesswertRoll = +1000; if(AdWertRoll > 1017) MesswertRoll = +2000; } |
|
- | 516 | else { if(AdWertRoll > 2000) MesswertRoll = +1000; if(AdWertRoll > 2015) MesswertRoll = +2000; } |
|
- | 517 | |
|
- | 518 | // MartinR : FC 1.0: Sprung von 500 auf 2000 !! FC-ME: Sprung von 1000 auf 2000 |
|
- | 519 | */ |
|
- | 520 | // MartinR : so war es Ende |
|
- | 521 | ||
- | 522 | // MartinR : Neu Anfang |
|
- | 523 | if(PlatinenVersion == 10) |
|
- | 524 | { |
|
- | 525 | if(AdWertNick > 1010) MesswertNick = +600; |
|
- | 526 | if(AdWertNick > 1017) MesswertNick = +800; |
|
- | 527 | if(AdWertNick < 15) MesswertNick = -600; |
|
- | 528 | if(AdWertNick < 7) MesswertNick = -800; |
|
- | 529 | if(AdWertRoll > 1010) MesswertRoll = +600; |
|
- | 530 | if(AdWertRoll > 1017) MesswertRoll = +800; |
|
- | 531 | if(AdWertRoll < 15) MesswertRoll = -600; |
|
- | 532 | if(AdWertRoll < 7) MesswertRoll = -800; |
|
- | 533 | } |
|
- | 534 | else |
|
- | 535 | { |
|
- | 536 | if(AdWertNick > 2000) MesswertNick = +1200; |
|
- | 537 | if(AdWertNick > 2015) MesswertNick = +1600; |
|
- | 538 | if(AdWertNick < 15) MesswertNick = -1200; |
|
- | 539 | if(AdWertNick < 7) MesswertNick = -1600; |
|
- | 540 | if(AdWertRoll > 2000) MesswertRoll = +1200; |
|
- | 541 | if(AdWertRoll > 2015) MesswertRoll = +1600; |
|
- | 542 | if(AdWertRoll < 15) MesswertRoll = -1200; |
|
- | 543 | if(AdWertRoll < 7) MesswertRoll = -1600; |
|
Line 493... | Line 544... | ||
493 | if(PlatinenVersion == 10) { if(AdWertRoll > 1010) MesswertRoll = +1000; if(AdWertRoll > 1017) MesswertRoll = +2000; } |
544 | } |
- | 545 | // MartinR : Neu Ende |
|
- | 546 | ||
494 | else { if(AdWertRoll > 2000) MesswertRoll = +1000; if(AdWertRoll > 2015) MesswertRoll = +2000; } |
547 | if(Parameter_Gyro_D) |
495 | 548 | // MartinR: hier sind Änderungen erforderlich, da u.a. MesswertNick = HiResNick / 8 von der fc.c in die analog.c verschoben wurde |
|
496 | if(Parameter_Gyro_D) |
549 | // Hintergrund: Code einsparen |
497 | { |
550 | { |
498 | d2Nick = HiResNick - oldNick; |
551 | d2Nick = HiResNick - oldNick; |
Line 499... | Line 552... | ||
499 | oldNick = (oldNick + HiResNick)/2; |
552 | oldNick = (oldNick + HiResNick)/2; |
500 | if(d2Nick > D_LIMIT) d2Nick = D_LIMIT; |
553 | if(d2Nick > D_LIMIT) d2Nick = D_LIMIT; |
501 | else if(d2Nick < -D_LIMIT) d2Nick = -D_LIMIT; |
554 | else if(d2Nick < -D_LIMIT) d2Nick = -D_LIMIT; |
502 | 555 | ||
503 | d2Roll = HiResRoll - oldRoll; |
556 | d2Roll = HiResRoll - oldRoll; |
504 | oldRoll = (oldRoll + HiResRoll)/2; |
557 | oldRoll = (oldRoll + HiResRoll)/2; |
- | 558 | if(d2Roll > D_LIMIT) d2Roll = D_LIMIT; |
|
505 | if(d2Roll > D_LIMIT) d2Roll = D_LIMIT; |
559 | else if(d2Roll < -D_LIMIT) d2Roll = -D_LIMIT; |
- | 560 | ||
506 | else if(d2Roll < -D_LIMIT) d2Roll = -D_LIMIT; |
561 | //MesswertNick += (d2Nick * (signed int) Parameter_Gyro_D) / 16; // MartinR : so war es |
507 | 562 | MesswertNick += (d2Nick * (signed int) Parameter_Gyro_D) / 2; // MartinR : geändert |
|
508 | MesswertNick += (d2Nick * (signed int) Parameter_Gyro_D) / 16; |
563 | //MesswertRoll += (d2Roll * (signed int) Parameter_Gyro_D) / 16; // MartinR : so war es |
Line 509... | Line 564... | ||
509 | MesswertRoll += (d2Roll * (signed int) Parameter_Gyro_D) / 16; |
564 | MesswertRoll += (d2Roll * (signed int) Parameter_Gyro_D) / 2; // MartinR : geändert |
510 | HiResNick += (d2Nick * (signed int) Parameter_Gyro_D); |
565 | HiResNick += (d2Nick * (signed int) Parameter_Gyro_D * 8); // martinR: *8 hinzugefügt |
511 | HiResRoll += (d2Roll * (signed int) Parameter_Gyro_D); |
566 | HiResRoll += (d2Roll * (signed int) Parameter_Gyro_D * 8); // martinR: *8 hinzugefügt |
Line 619... | Line 674... | ||
619 | Parameter_ExtraConfig = EE_Parameter.ExtraConfig; |
674 | Parameter_ExtraConfig = EE_Parameter.ExtraConfig; |
620 | // CHK_POTI(Parameter_AchsGegenKopplung1,EE_Parameter.AchsGegenKopplung1,0,255); |
675 | // CHK_POTI(Parameter_AchsGegenKopplung1,EE_Parameter.AchsGegenKopplung1,0,255); |
621 | CHK_POTI(Parameter_DynamicStability,EE_Parameter.DynamicStability); |
676 | CHK_POTI(Parameter_DynamicStability,EE_Parameter.DynamicStability); |
622 | CHK_POTI(Parameter_ExternalControl,EE_Parameter.ExternalControl); |
677 | CHK_POTI(Parameter_ExternalControl,EE_Parameter.ExternalControl); |
623 | Ki = 10300 / (Parameter_I_Faktor + 1); |
678 | Ki = 10300 / (Parameter_I_Faktor + 1); |
- | 679 | ||
- | 680 | ||
- | 681 | if(Parameter_UserParam1 > 50) KiHH = 10300 / (Parameter_UserParam2 + 1); else KiHH = Ki; // MartinR : für HH über Schalter |
|
- | 682 | Parameter_NaviGpsModeControl = EE_Parameter.NaviGpsModeControl; //MartinR: Standard: EE_Parameter.NaviGpsModeControl wird übertragen |
|
- | 683 | if(!IntegralFaktor) Parameter_NaviGpsModeControl= 0; // MartinR: wenn HH dann GPS auf free- Mode |
|
- | 684 | // 0 = free; 100 = AID; 200 = coming home //neu |
|
- | 685 | ||
- | 686 | ||
624 | MAX_GAS = EE_Parameter.Gas_Max; |
687 | MAX_GAS = EE_Parameter.Gas_Max; |
625 | MIN_GAS = EE_Parameter.Gas_Min; |
688 | MIN_GAS = EE_Parameter.Gas_Min; |
Line 626... | Line 689... | ||
626 | 689 | ||
627 | tmp = EE_Parameter.CareFreeModeControl; |
690 | tmp = EE_Parameter.CareFreeModeControl; |
Line 660... | Line 723... | ||
660 | void MotorRegler(void) |
723 | void MotorRegler(void) |
661 | //############################################################################ |
724 | //############################################################################ |
662 | { |
725 | { |
663 | int pd_ergebnis_nick,pd_ergebnis_roll,tmp_int, tmp_int2; |
726 | int pd_ergebnis_nick,pd_ergebnis_roll,tmp_int, tmp_int2; |
664 | int GierMischanteil,GasMischanteil; |
727 | int GierMischanteil,GasMischanteil; |
- | 728 | ||
- | 729 | static long SummeNickHH=0,SummeRollHH=0; // MartinR: hinzugefügt |
|
- | 730 | ||
665 | static long sollGier = 0,tmp_long,tmp_long2; |
731 | static long sollGier = 0,tmp_long,tmp_long2; |
666 | static long IntegralFehlerNick = 0; |
732 | static long IntegralFehlerNick = 0; |
667 | static long IntegralFehlerRoll = 0; |
733 | static long IntegralFehlerRoll = 0; |
668 | static unsigned int RcLostTimer; |
734 | static unsigned int RcLostTimer; |
669 | static unsigned char delay_neutral = 0; |
735 | static unsigned char delay_neutral = 0; |
Line 768... | Line 834... | ||
768 | SetNeutral(0); |
834 | SetNeutral(0); |
769 | calibration_done = 1; |
835 | calibration_done = 1; |
770 | ServoActive = 1; |
836 | ServoActive = 1; |
771 | DDRD |=0x80; // enable J7 -> Servo signal |
837 | DDRD |=0x80; // enable J7 -> Servo signal |
772 | Piep(GetActiveParamSet(),120); |
838 | Piep(GetActiveParamSet(),120); |
- | 839 | PPM_in[13] = Parameter_UserParam5 -110; // MartinR: Initialisierungswerte für die seriellen Potis für Jeti+ |
|
- | 840 | PPM_in[14] = Parameter_UserParam6 -110; // MartinR: Initialisierungswerte für die seriellen Potis für Jeti+ |
|
773 | } |
841 | } |
774 | } |
842 | } |
775 | } |
843 | } |
776 | else |
844 | else |
777 | if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] < -75) // ACC Neutralwerte speichern |
845 | if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] < -75) // ACC Neutralwerte speichern |
Line 856... | Line 924... | ||
856 | { |
924 | { |
857 | static int stick_nick,stick_roll; |
925 | static int stick_nick,stick_roll; |
858 | unsigned char stick_p; |
926 | unsigned char stick_p; |
859 | ParameterZuordnung(); |
927 | ParameterZuordnung(); |
860 | stick_p = EE_Parameter.Stick_P; |
928 | stick_p = EE_Parameter.Stick_P; |
- | 929 | // MartinR: original: |
|
- | 930 | /* |
|
861 | stick_nick = (stick_nick * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * stick_p) / 4; |
931 | stick_nick = (stick_nick * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * stick_p) / 4; |
862 | stick_nick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D; |
932 | stick_nick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D; |
863 | stick_roll = (stick_roll * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * stick_p) / 4; |
933 | stick_roll = (stick_roll * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * stick_p) / 4; |
864 | stick_roll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D; |
934 | stick_roll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D; |
- | 935 | */ |
|
- | 936 | // MartinR: geändert Anfang |
|
- | 937 | if(Parameter_UserParam1 > 50) // MartinR: zweiter Stick_P Wert nur, wenn HH über Schalter aktiv ist |
|
- | 938 | { |
|
- | 939 | stick_nick = (stick_nick * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * Parameter_UserParam3 - stick_nick_neutral) / 4; |
|
- | 940 | stick_roll = (stick_roll * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * Parameter_UserParam3 - stick_roll_neutral) / 4 ; |
|
- | 941 | //stick_nick = (PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * Parameter_UserParam3 - stick_nick_neutral); |
|
- | 942 | //stick_roll = (PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * Parameter_UserParam3 - stick_roll_neutral); |
|
- | 943 | } |
|
- | 944 | ||
- | 945 | else |
|
- | 946 | { |
|
- | 947 | stick_nick = (stick_nick * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * stick_p) / 4; |
|
- | 948 | stick_roll = (stick_roll * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * stick_p) / 4; |
|
- | 949 | stick_nick_neutral = stick_nick; // beim Umschalten auf HH wird derletzte Stickwert als Neutralposition verwendet, MartinR |
|
- | 950 | stick_roll_neutral = stick_roll; // beim Umschalten auf HH wird derletzte Stickwert als Neutralposition verwendet, MartinR |
|
- | 951 | } |
|
- | 952 | ||
- | 953 | if(IntegralFaktor) |
|
- | 954 | { |
|
- | 955 | //stick_nick_neutral = stick_nick; // beim Umschalten auf HH wird derletzte Stickwert als Neutralposition verwendet, MartinR |
|
- | 956 | //stick_roll_neutral = stick_roll; // beim Umschalten auf HH wird derletzte Stickwert als Neutralposition verwendet, MartinR |
|
- | 957 | stick_nick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D; |
|
- | 958 | stick_roll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D; |
|
- | 959 | ||
- | 960 | //StickNick = stick_nick - (GPS_Nick + GPS_Nick2); // MartinR: GPS nur im ACC-Mode wirksam |
|
- | 961 | //StickRoll = stick_roll - (GPS_Roll + GPS_Roll2); // MartinR: GPS nur im ACC-Mode wirksam |
|
- | 962 | } |
|
- | 963 | /*else // wenn HH , MartinR |
|
- | 964 | { |
|
- | 965 | //stick_nick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D; // MartinR: eventuell vor if verschieben |
|
- | 966 | //stick_roll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D; // MartinR: eventuell vor if verschieben |
|
- | 967 | //StickNick = stick_nick; // MartinR: GPS nur im ACC-Mode wirksam |
|
- | 968 | //StickRoll = stick_roll; // MartinR: GPS nur im ACC-Mode wirksam |
|
- | 969 | } |
|
- | 970 | */ |
|
- | 971 | // MartinR: geändert Ende |
|
Line 865... | Line 972... | ||
865 | 972 | ||
866 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
973 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
867 | // CareFree und freie Wahl der vorderen Richtung |
974 | // CareFree und freie Wahl der vorderen Richtung |
868 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
975 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
- | 976 | //if(CareFree) // MartinR: so war es |
|
869 | if(CareFree) |
977 | if(CareFree && IntegralFaktor) // MartinR: CareFree nur im ACC-Mode |
870 | { |
978 | { |
871 | signed int nick, roll; |
979 | signed int nick, roll; |
872 | nick = stick_nick / 4; |
980 | nick = stick_nick / 4; |
873 | roll = stick_roll / 4; |
981 | roll = stick_roll / 4; |
874 | StickNick = ((FromNC_Rotate_C * nick) + (FromNC_Rotate_S * roll)) / (32 / 4); |
982 | StickNick = ((FromNC_Rotate_C * nick) + (FromNC_Rotate_S * roll)) / (32 / 4); |
875 | StickRoll = ((FromNC_Rotate_C * roll) - (FromNC_Rotate_S * nick)) / (32 / 4); |
983 | StickRoll = ((FromNC_Rotate_C * roll) - (FromNC_Rotate_S * nick)) / (32 / 4); |
876 | } |
984 | } |
877 | else |
985 | else |
878 | { |
986 | { |
- | 987 | //FromNC_Rotate_C = sintab[EE_Parameter.OrientationAngle + 6]; //MartinR: so war es |
|
879 | FromNC_Rotate_C = sintab[EE_Parameter.OrientationAngle + 6]; |
988 | FromNC_Rotate_C = sintab[EE_Parameter.OrientationAngle * 2 + 12]; //MartinR: feinere Auflösung |
- | 989 | //FromNC_Rotate_S = sintab[EE_Parameter.OrientationAngle]; //MartinR: so war es |
|
880 | FromNC_Rotate_S = sintab[EE_Parameter.OrientationAngle]; |
990 | FromNC_Rotate_S = sintab[EE_Parameter.OrientationAngle * 2]; //MartinR: feinere Auflösung |
881 | StickNick = ((FromNC_Rotate_C * stick_nick) + (FromNC_Rotate_S * stick_roll)) / 8; |
991 | StickNick = ((FromNC_Rotate_C * stick_nick) + (FromNC_Rotate_S * stick_roll)) / 8; |
882 | StickRoll = ((FromNC_Rotate_C * stick_roll) - (FromNC_Rotate_S * stick_nick)) / 8; |
992 | StickRoll = ((FromNC_Rotate_C * stick_roll) - (FromNC_Rotate_S * stick_nick)) / 8; |
Line 883... | Line 993... | ||
883 | } |
993 | } |
Line 902... | Line 1012... | ||
902 | IntegralFaktorGier = Parameter_Gyro_Gier_I; |
1012 | IntegralFaktorGier = Parameter_Gyro_Gier_I; |
Line 903... | Line 1013... | ||
903 | 1013 | ||
904 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1014 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
905 | //+ Analoge Steuerung per Seriell |
1015 | //+ Analoge Steuerung per Seriell |
- | 1016 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|
906 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1017 | // MartinR: ToDo: eventuell die Kombination HH und Steuerung per Seriell nicht zulassen?? |
907 | if(ExternControl.Config & 0x01 && Parameter_ExternalControl > 128) |
1018 | if(ExternControl.Config & 0x01 && Parameter_ExternalControl > 128) |
908 | { |
1019 | { |
909 | StickNick += (int) ExternControl.Nick * (int) EE_Parameter.Stick_P; |
1020 | StickNick += (int) ExternControl.Nick * (int) EE_Parameter.Stick_P; |
910 | StickRoll += (int) ExternControl.Roll * (int) EE_Parameter.Stick_P; |
1021 | StickRoll += (int) ExternControl.Roll * (int) EE_Parameter.Stick_P; |
Line 1013... | Line 1124... | ||
1013 | MittelIntegralNick += IntegralNick; // Für die Mittelwertbildung aufsummieren |
1124 | MittelIntegralNick += IntegralNick; // Für die Mittelwertbildung aufsummieren |
1014 | MittelIntegralRoll += IntegralRoll; |
1125 | MittelIntegralRoll += IntegralRoll; |
1015 | MittelIntegralNick2 += IntegralNick2; |
1126 | MittelIntegralNick2 += IntegralNick2; |
1016 | MittelIntegralRoll2 += IntegralRoll2; |
1127 | MittelIntegralRoll2 += IntegralRoll2; |
Line 1017... | Line 1128... | ||
1017 | 1128 | ||
- | 1129 | // if(Looping_Nick || Looping_Roll) // MartinR: so war es |
|
1018 | if(Looping_Nick || Looping_Roll) |
1130 | if(Looping_Nick || Looping_Roll || (!IntegralFaktor & (Parameter_UserParam1 < 50) & !(EE_Parameter.GlobalConfig & CFG_HEADING_HOLD))) // MartinR: erweitert |
1019 | { |
1131 | { |
1020 | IntegralAccNick = 0; |
1132 | IntegralAccNick = 0; |
1021 | IntegralAccRoll = 0; |
1133 | IntegralAccRoll = 0; |
1022 | MittelIntegralNick = 0; |
1134 | MittelIntegralNick = 0; |
Line 1027... | Line 1139... | ||
1027 | Mess_IntegralRoll2 = Mess_IntegralRoll; |
1139 | Mess_IntegralRoll2 = Mess_IntegralRoll; |
1028 | ZaehlMessungen = 0; |
1140 | ZaehlMessungen = 0; |
1029 | LageKorrekturNick = 0; |
1141 | LageKorrekturNick = 0; |
1030 | LageKorrekturRoll = 0; |
1142 | LageKorrekturRoll = 0; |
1031 | } |
1143 | } |
- | 1144 | ||
- | 1145 | if((!IntegralFaktor && (Parameter_UserParam1 < 50) && !(EE_Parameter.GlobalConfig & CFG_HEADING_HOLD)) ) // MartinR: |
|
- | 1146 | // nur im Moment des Umschaltens von HH auf ACC erfolgt ein Reset der Integrale, nicht aber bei normalem HH |
|
- | 1147 | // um einen im HH-Mode eventuell schwindelig geflogenen ACC_Mode zu resetten! |
|
- | 1148 | // bis zur Umschaltung werden die Integrale für den Kameraausgleich verwendet |
|
- | 1149 | { |
|
- | 1150 | ||
- | 1151 | IntegralNick = 0; // MartinR: Reset der Integratoren beim Zurückschalten vom HH- in den ACC-Mode |
|
- | 1152 | IntegralRoll = 0; // MartinR: Reset der Integratoren beim Zurückschalten vom HH- in den ACC-Mode |
|
- | 1153 | Mess_IntegralNick = 0; // MartinR: Reset der Integratoren beim Zurückschalten vom HH- in den ACC-Mode |
|
- | 1154 | Mess_IntegralRoll = 0; // MartinR: Reset der Integratoren beim Zurückschalten vom HH- in den ACC-Mode |
|
- | 1155 | Mess_Integral_Gier = 0; // MartinR: Reset der Integratoren beim Zurückschalten vom HH- in den ACC-Mode |
|
- | 1156 | Integral_Gier = 0; // MartinR: Reset der Integratoren beim Zurückschalten vom HH- in den ACC-Mode |
|
- | 1157 | //Mess_Integral_Gier2 = 0; // MartinR: Reset der Integratoren beim Zurückschalten vom HH- in den ACC-Mode |
|
- | 1158 | } |
|
- | 1159 | ||
- | 1160 | if((EE_Parameter.GlobalConfig & CFG_HEADING_HOLD) || (Parameter_UserParam1 > 50)) IntegralFaktor = 0; // MartinR geändert und verschoben |
|
- | 1161 | else IntegralFaktor = Parameter_Gyro_I; // MartinR: verschoben um Code zu sparen |
|
Line 1032... | Line 1162... | ||
1032 | 1162 | ||
1033 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1163 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1034 | if(!Looping_Nick && !Looping_Roll && (Aktuell_az > 512 || MotorenEin)) |
1164 | if(!Looping_Nick && !Looping_Roll && (Aktuell_az > 512 || MotorenEin)) |
1035 | { |
1165 | { |
Line 1086... | Line 1216... | ||
1086 | if(ZaehlMessungen >= ABGLEICH_ANZAHL) |
1216 | if(ZaehlMessungen >= ABGLEICH_ANZAHL) |
1087 | { |
1217 | { |
1088 | static int cnt = 0; |
1218 | static int cnt = 0; |
1089 | static char last_n_p,last_n_n,last_r_p,last_r_n; |
1219 | static char last_n_p,last_n_n,last_r_p,last_r_n; |
1090 | static long MittelIntegralNick_Alt,MittelIntegralRoll_Alt; |
1220 | static long MittelIntegralNick_Alt,MittelIntegralRoll_Alt; |
1091 | if(!Looping_Nick && !Looping_Roll && !TrichterFlug && EE_Parameter.Driftkomp) |
1221 | //if(!Looping_Nick && !Looping_Roll && !TrichterFlug && EE_Parameter.Driftkomp) // MartinR: so war es |
- | 1222 | if(!Looping_Nick && !Looping_Roll && !TrichterFlug && EE_Parameter.Driftkomp && IntegralFaktor) // MartinR: "&& IntegralFaktor" hinzugefügt |
|
- | 1223 | ||
1092 | { |
1224 | { |
1093 | MittelIntegralNick /= ABGLEICH_ANZAHL; |
1225 | MittelIntegralNick /= ABGLEICH_ANZAHL; |
1094 | MittelIntegralRoll /= ABGLEICH_ANZAHL; |
1226 | MittelIntegralRoll /= ABGLEICH_ANZAHL; |
1095 | IntegralAccNick = (EE_Parameter.GyroAccFaktor * IntegralAccNick) / ABGLEICH_ANZAHL; |
1227 | IntegralAccNick = (EE_Parameter.GyroAccFaktor * IntegralAccNick) / ABGLEICH_ANZAHL; |
1096 | IntegralAccRoll = (EE_Parameter.GyroAccFaktor * IntegralAccRoll) / ABGLEICH_ANZAHL; |
1228 | IntegralAccRoll = (EE_Parameter.GyroAccFaktor * IntegralAccRoll) / ABGLEICH_ANZAHL; |
Line 1246... | Line 1378... | ||
1246 | } |
1378 | } |
1247 | tmp_int = (long) EE_Parameter.StickGier_P * ((long)StickGier * abs(StickGier)) / 512L; // expo y = ax + bx² |
1379 | tmp_int = (long) EE_Parameter.StickGier_P * ((long)StickGier * abs(StickGier)) / 512L; // expo y = ax + bx² |
1248 | tmp_int += (EE_Parameter.StickGier_P * StickGier) / 4; |
1380 | tmp_int += (EE_Parameter.StickGier_P * StickGier) / 4; |
1249 | tmp_int += CompassGierSetpoint; |
1381 | tmp_int += CompassGierSetpoint; |
1250 | sollGier = tmp_int; |
1382 | sollGier = tmp_int; |
1251 | Mess_Integral_Gier -= tmp_int; |
1383 | //Mess_Integral_Gier -= tmp_int; // MartinR: so war es |
- | 1384 | Mess_Integral_Gier -= (tmp_int * 10) / 8; // MartinR: Test um Zurückschwingen bei hohen I-Faktoren zu verringern |
|
1252 | if(Mess_Integral_Gier > 50000) Mess_Integral_Gier = 50000; // begrenzen |
1385 | //if(Mess_Integral_Gier > 50000) Mess_Integral_Gier = 50000; // begrenzen // MartinR: so war es |
1253 | if(Mess_Integral_Gier <-50000) Mess_Integral_Gier =-50000; |
1386 | //if(Mess_Integral_Gier <-50000) Mess_Integral_Gier =-50000; // MartinR: so war es |
- | 1387 | if(Mess_Integral_Gier > 90000) Mess_Integral_Gier = 90000; // begrenzen // MartinR: Begrenzung verändert |
|
- | 1388 | if(Mess_Integral_Gier <-90000) Mess_Integral_Gier =-90000; // MartinR: Begrenzung verändert |
|
Line 1254... | Line 1389... | ||
1254 | 1389 | ||
1255 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1390 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1256 | // Kompass |
1391 | // Kompass |
1257 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1392 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
- | 1393 | //if(KompassValue >= 0 && (EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV)) // MartinR: so war es |
|
1258 | if(KompassValue >= 0 && (Parameter_GlobalConfig & CFG_KOMPASS_AKTIV)) |
1394 | if((KompassValue >= 0 && (EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV)) && !(Parameter_UserParam1 > 50)) // MartinR: bei HH über Schalter wird der Kompass abgeschaltet |
1259 | { |
1395 | { |
1260 | if(CalculateCompassTimer-- == 1) |
1396 | if(CalculateCompassTimer-- == 1) |
1261 | { |
1397 | { |
1262 | int w,v,r,fehler,korrektur; // wird von der SPI-Routine auf 1 gesetzt |
1398 | int w,v,r,fehler,korrektur; // wird von der SPI-Routine auf 1 gesetzt |
Line 1310... | Line 1446... | ||
1310 | 1446 | ||
1311 | #define TRIM_MAX 200 |
1447 | #define TRIM_MAX 200 |
1312 | if(TrimNick > TRIM_MAX) TrimNick = TRIM_MAX; else if(TrimNick <-TRIM_MAX) TrimNick =-TRIM_MAX; |
1448 | if(TrimNick > TRIM_MAX) TrimNick = TRIM_MAX; else if(TrimNick <-TRIM_MAX) TrimNick =-TRIM_MAX; |
Line -... | Line 1449... | ||
- | 1449 | if(TrimRoll > TRIM_MAX) TrimRoll = TRIM_MAX; else if(TrimRoll <-TRIM_MAX) TrimRoll =-TRIM_MAX; |
|
- | 1450 | ||
- | 1451 | //MesswertNick = IntegralNickMalFaktor + (long)((long)MesswertNick * GyroFaktor + (long)TrimNick * 128L) / (256L / STICK_GAIN);// MartinR so war es |
|
- | 1452 | //MesswertRoll = IntegralRollMalFaktor + (long)((long)MesswertRoll * GyroFaktor + (long)TrimRoll * 128L) / (256L / STICK_GAIN);// MartinR so war es |
|
- | 1453 | ||
- | 1454 | if(!IntegralFaktor) // MartinR : HH-Mode hinzugefügt |
|
- | 1455 | { |
|
- | 1456 | MesswertNick = (long) ((long)MesswertNick * GyroFaktor) / (256L / STICK_GAIN) ; // MartinR : hinzugefügt |
|
- | 1457 | MesswertRoll = (long) ((long)MesswertRoll * GyroFaktor) / (256L / STICK_GAIN) ; // MartinR : hinzugefügt |
|
- | 1458 | //MesswertGier = (long)(MesswertGier * 2 * (long)GyroFaktorGier) / (256L / STICK_GAIN); |
|
- | 1459 | //Mess_Integral_Gier = 0; // MartinR: nur Kompass wird bei HH deaktiviert |
|
- | 1460 | //Integral_Gier = 0; // MartinR: nur Kompass wird bei HH deaktiviert |
|
- | 1461 | } |
|
1313 | if(TrimRoll > TRIM_MAX) TrimRoll = TRIM_MAX; else if(TrimRoll <-TRIM_MAX) TrimRoll =-TRIM_MAX; |
1462 | else // MartinR: ACC-Mode so war es |
1314 | 1463 | { |
|
- | 1464 | MesswertNick = IntegralNickMalFaktor + (long)((long)MesswertNick * GyroFaktor + (long)TrimNick * 128L) / (256L / STICK_GAIN); |
|
- | 1465 | MesswertRoll = IntegralRollMalFaktor + (long)((long)MesswertRoll * GyroFaktor + (long)TrimRoll * 128L) / (256L / STICK_GAIN); |
|
1315 | MesswertNick = IntegralNickMalFaktor + (long)((long)MesswertNick * GyroFaktor + (long)TrimNick * 128L) / (256L / STICK_GAIN); |
1466 | } |
Line 1316... | Line 1467... | ||
1316 | MesswertRoll = IntegralRollMalFaktor + (long)((long)MesswertRoll * GyroFaktor + (long)TrimRoll * 128L) / (256L / STICK_GAIN); |
1467 | |
1317 | MesswertGier = (long)(MesswertGier * 2 * (long)GyroFaktorGier) / (256L / STICK_GAIN) + (long)(Integral_Gier * IntegralFaktorGier) / (2 * (44000 / STICK_GAIN)); |
1468 | MesswertGier = (long)(MesswertGier * 2 * (long)GyroFaktorGier) / (256L / STICK_GAIN) + (long)(Integral_Gier * IntegralFaktorGier) / (2 * (44000 / STICK_GAIN)); |
1318 | 1469 | ||
Line 1401... | Line 1552... | ||
1401 | } |
1552 | } |
Line 1402... | Line 1553... | ||
1402 | 1553 | ||
1403 | // if height control is activated by an rc channel |
1554 | // if height control is activated by an rc channel |
1404 | if(Parameter_GlobalConfig & CFG_HOEHEN_SCHALTER) // Regler wird über Schalter gesteuert |
1555 | if(Parameter_GlobalConfig & CFG_HOEHEN_SCHALTER) // Regler wird über Schalter gesteuert |
1405 | { // check if parameter is less than activation threshold |
1556 | { // check if parameter is less than activation threshold |
- | 1557 | // if(Parameter_HoehenSchalter < 50) // for 3 or 2-state switch height control is disabled in lowest position // MartinR :so war es |
|
1406 | if(Parameter_HoehenSchalter < 50) // for 3 or 2-state switch height control is disabled in lowest position |
1558 | if((Parameter_HoehenSchalter < 50) || (Parameter_UserParam1 > 140) ) // MartinR: Schalter aus oder HH ohne Höhenregler über UsererParam1 an |
1407 | { //height control not active |
1559 | { //height control not active |
1408 | if(!delay--) |
1560 | if(!delay--) |
1409 | { |
1561 | { |
1410 | HoehenReglerAktiv = 0; // disable height control |
1562 | HoehenReglerAktiv = 0; // disable height control |
Line 1419... | Line 1571... | ||
1419 | } |
1571 | } |
1420 | } |
1572 | } |
1421 | else // no switchable height control |
1573 | else // no switchable height control |
1422 | { |
1574 | { |
1423 | SollHoehe = ((int16_t) ExternHoehenValue + (int16_t) Parameter_HoehenSchalter) * (int)EE_Parameter.Hoehe_Verstaerkung; |
1575 | SollHoehe = ((int16_t) ExternHoehenValue + (int16_t) Parameter_HoehenSchalter) * (int)EE_Parameter.Hoehe_Verstaerkung; |
- | 1576 | // HoehenReglerAktiv = 1; // MartinR : so war es |
|
- | 1577 | // MartinR : geändert Anfang |
|
- | 1578 | if(Parameter_UserParam1 > 140) // HH über Schalter: HH an + Höhenregler abgeschaltet, Nachführen von Parametern |
|
- | 1579 | { |
|
- | 1580 | HoehenReglerAktiv = 0; |
|
- | 1581 | } |
|
- | 1582 | else // Höhenregler mit Sollhöhe über Poti aktiv |
|
- | 1583 | { |
|
1424 | HoehenReglerAktiv = 1; |
1584 | HoehenReglerAktiv = 1; |
- | 1585 | } |
|
- | 1586 | // MartinR : geändert Ende |
|
1425 | } |
1587 | } |
Line 1426... | Line 1588... | ||
1426 | 1588 | ||
1427 | // calculate cos of nick and roll angle used for projection of the vertical hoover gas |
1589 | // calculate cos of nick and roll angle used for projection of the vertical hoover gas |
1428 | tmp_int = (int)(IntegralNick/GIER_GRAD_FAKTOR); // nick angle in deg |
1590 | tmp_int = (int)(IntegralNick/GIER_GRAD_FAKTOR); // nick angle in deg |
Line 1453... | Line 1615... | ||
1453 | { |
1615 | { |
1454 | // alternative height control |
1616 | // alternative height control |
1455 | // PD-Control with respect to hoover point |
1617 | // PD-Control with respect to hoover point |
1456 | // the thrust loss out of horizontal attitude is compensated |
1618 | // the thrust loss out of horizontal attitude is compensated |
1457 | // the setpoint will be fine adjusted with the gas stick position |
1619 | // the setpoint will be fine adjusted with the gas stick position |
- | 1620 | HeightDeviation = HoehenWert - SollHoehe; //MartinR: Test |
|
1458 | if(FC_StatusFlags & FC_STATUS_FLY) // trim setpoint only when flying |
1621 | if(FC_StatusFlags & FC_STATUS_FLY) // trim setpoint only when flying |
1459 | { // gas stick is above hoover point |
1622 | { // gas stick is above hoover point |
1460 | if(StickGas > (StickGasHover + HEIGHT_CONTROL_STICKTHRESHOLD) && !BaroAtUpperLimit) |
1623 | if(StickGas > (StickGasHover + HEIGHT_CONTROL_STICKTHRESHOLD) && !BaroAtUpperLimit) |
1461 | { |
1624 | { |
1462 | if(FC_StatusFlags & FC_STATUS_VARIO_TRIM_DOWN) |
1625 | if(FC_StatusFlags & FC_STATUS_VARIO_TRIM_DOWN) |
1463 | { |
1626 | { |
1464 | FC_StatusFlags &= ~FC_STATUS_VARIO_TRIM_DOWN; |
1627 | FC_StatusFlags &= ~FC_STATUS_VARIO_TRIM_DOWN; |
1465 | SollHoehe = HoehenWert; // update setpoint to current heigth |
1628 | //SollHoehe = HoehenWert; // update setpoint to current heigth // MartinR: so war es |
- | 1629 | SollHoehe = HoehenWert - HeightDeviation / 2; // MartinR: um den Sollwertsprung zu verringern |
|
1466 | } |
1630 | } |
1467 | FC_StatusFlags |= FC_STATUS_VARIO_TRIM_UP; |
1631 | FC_StatusFlags |= FC_STATUS_VARIO_TRIM_UP; |
1468 | // Limit the maximum Altitude |
1632 | // Limit the maximum Altitude |
1469 | if(Parameter_MaximumAltitude && (SollHoehe/100 > Parameter_MaximumAltitude)) AltitudeSetpointTrimming = 0; |
1633 | if(Parameter_MaximumAltitude && (SollHoehe/100 > Parameter_MaximumAltitude)) AltitudeSetpointTrimming = 0; |
1470 | else |
1634 | else |
Line 1479... | Line 1643... | ||
1479 | else if(StickGas < (StickGasHover - HEIGHT_CONTROL_STICKTHRESHOLD) && !BaroAtLowerLimit ) |
1643 | else if(StickGas < (StickGasHover - HEIGHT_CONTROL_STICKTHRESHOLD) && !BaroAtLowerLimit ) |
1480 | { |
1644 | { |
1481 | if(FC_StatusFlags & FC_STATUS_VARIO_TRIM_UP) |
1645 | if(FC_StatusFlags & FC_STATUS_VARIO_TRIM_UP) |
1482 | { |
1646 | { |
1483 | FC_StatusFlags &= ~FC_STATUS_VARIO_TRIM_UP; |
1647 | FC_StatusFlags &= ~FC_STATUS_VARIO_TRIM_UP; |
1484 | SollHoehe = HoehenWert; // update setpoint to current heigth |
1648 | //SollHoehe = HoehenWert; // update setpoint to current heigth // MartinR: so war es |
- | 1649 | SollHoehe = HoehenWert - HeightDeviation / 2; // MartinR: um den Sollwertsprung zu verringern |
|
1485 | } |
1650 | } |
1486 | FC_StatusFlags |= FC_STATUS_VARIO_TRIM_DOWN; |
1651 | FC_StatusFlags |= FC_STATUS_VARIO_TRIM_DOWN; |
1487 | AltitudeSetpointTrimming = -abs(StickGas - (StickGasHover - HEIGHT_CONTROL_STICKTHRESHOLD)); |
1652 | AltitudeSetpointTrimming = -abs(StickGas - (StickGasHover - HEIGHT_CONTROL_STICKTHRESHOLD)); |
1488 | // HeightTrimming -= abs(StickGas - (StickGasHover - HEIGHT_CONTROL_STICKTHRESHOLD)); |
1653 | // HeightTrimming -= abs(StickGas - (StickGasHover - HEIGHT_CONTROL_STICKTHRESHOLD)); |
1489 | VarioCharacter = '-'; |
1654 | VarioCharacter = '-'; |
Line 1500... | Line 1665... | ||
1500 | WaypointTrimming = 10; |
1665 | WaypointTrimming = 10; |
1501 | VarioCharacter = '^'; |
1666 | VarioCharacter = '^'; |
1502 | if(FC_StatusFlags & FC_STATUS_VARIO_TRIM_DOWN) // changed from sinking to rising |
1667 | if(FC_StatusFlags & FC_STATUS_VARIO_TRIM_DOWN) // changed from sinking to rising |
1503 | { |
1668 | { |
1504 | FC_StatusFlags &= ~FC_STATUS_VARIO_TRIM_DOWN; |
1669 | FC_StatusFlags &= ~FC_STATUS_VARIO_TRIM_DOWN; |
1505 | SollHoehe = HoehenWert; // update setpoint to current heigth |
1670 | //SollHoehe = HoehenWert; // update setpoint to current heigth // MartinR: so war es |
- | 1671 | SollHoehe = HoehenWert - HeightDeviation / 2; // MartinR: um den Sollwertsprung zu verringern |
|
1506 | } |
1672 | } |
1507 | } |
1673 | } |
1508 | else |
1674 | else |
1509 | if(FromNC_AltitudeSpeed && FromNC_AltitudeSetpoint < SollHoehe) // von NC gesteuert -> sinken |
1675 | if(FromNC_AltitudeSpeed && FromNC_AltitudeSetpoint < SollHoehe) // von NC gesteuert -> sinken |
1510 | { |
1676 | { |
Line 1514... | Line 1680... | ||
1514 | WaypointTrimming = -10; |
1680 | WaypointTrimming = -10; |
1515 | VarioCharacter = 'v'; |
1681 | VarioCharacter = 'v'; |
1516 | if(FC_StatusFlags & FC_STATUS_VARIO_TRIM_UP) // changed from rising to sinking |
1682 | if(FC_StatusFlags & FC_STATUS_VARIO_TRIM_UP) // changed from rising to sinking |
1517 | { |
1683 | { |
1518 | FC_StatusFlags &= ~FC_STATUS_VARIO_TRIM_UP; |
1684 | FC_StatusFlags &= ~FC_STATUS_VARIO_TRIM_UP; |
1519 | SollHoehe = HoehenWert; // update setpoint to current heigth |
1685 | //SollHoehe = HoehenWert; // update setpoint to current heigth // MartinR: so war es |
- | 1686 | SollHoehe = HoehenWert - HeightDeviation / 2; // MartinR: um den Sollwertsprung zu verringern |
|
1520 | } |
1687 | } |
1521 | } |
1688 | } |
1522 | else |
1689 | else |
1523 | if(FC_StatusFlags & (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN)) |
1690 | if(FC_StatusFlags & (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN)) |
1524 | { |
1691 | { |
Line 1583... | Line 1750... | ||
1583 | { |
1750 | { |
1584 | // ------------------------- P-Part ---------------------------- |
1751 | // ------------------------- P-Part ---------------------------- |
1585 | tmp_long = (HoehenWert - SollHoehe); // positive when too high |
1752 | tmp_long = (HoehenWert - SollHoehe); // positive when too high |
1586 | LIMIT_MIN_MAX(tmp_long, -32767L, 32767L); // avoid overflov when casting to int16_t |
1753 | LIMIT_MIN_MAX(tmp_long, -32767L, 32767L); // avoid overflov when casting to int16_t |
1587 | HeightDeviation = (int)(tmp_long); // positive when too high |
1754 | HeightDeviation = (int)(tmp_long); // positive when too high |
- | 1755 | //tmp_long = (tmp_long * (long)Parameter_Hoehe_P) / 32L; // p-part // MartinR: so war es |
|
- | 1756 | // MartinR: geändert Anfang |
|
- | 1757 | if ((SollHoehe > (HoehenWert+64)) || (SollHoehe < (HoehenWert-64))) |
|
- | 1758 | { |
|
- | 1759 | tmp_long = (tmp_long * (long)Parameter_Hoehe_P) / 24L; // p-part // MartinR P-Part erhoehen |
|
- | 1760 | } |
|
- | 1761 | else |
|
- | 1762 | { |
|
1588 | tmp_long = (tmp_long * (long)Parameter_Hoehe_P) / 32L; // p-part |
1763 | tmp_long = (tmp_long * (long)Parameter_Hoehe_P) / 32L; // p-part |
- | 1764 | } |
|
- | 1765 | // MartinR: geändert Ende |
|
1589 | LIMIT_MIN_MAX(tmp_long, -127 * STICK_GAIN, 256 * STICK_GAIN); // more than the full range makes no sense |
1766 | //LIMIT_MIN_MAX(tmp_long, -127 * STICK_GAIN, 256 * STICK_GAIN); // more than the full range makes no sense // MartinR: so war es |
- | 1767 | // MartinR: weshalb unsymmetrisch? |
|
- | 1768 | LIMIT_MIN_MAX(tmp_long, -128 * STICK_GAIN, 128 * STICK_GAIN); // more than the full range makes no sense // MartinR: geändert |
|
1590 | GasReduction = tmp_long; |
1769 | GasReduction = tmp_long; |
1591 | // ------------------------- D-Part 1: Vario Meter ---------------------------- |
1770 | // ------------------------- D-Part 1: Vario Meter ---------------------------- |
1592 | tmp_int = VarioMeter / 8; |
1771 | //tmp_int = VarioMeter / 8; // MartinR: so war es |
- | 1772 | // MartinR: geändert Anfang |
|
- | 1773 | tmp_int = VarioMeter / 4; // MartinR: geändert // Variometer: steigen ist positiv |
|
- | 1774 | { |
|
- | 1775 | if ((SollHoehe > (HoehenWert+512)) || (SollHoehe < (HoehenWert-512))) |
|
- | 1776 | //if ((StickGas > (StickGasHover + 3*HEIGHT_CONTROL_STICKTHRESHOLD)) || (StickGas < (StickGasHover - 3*HEIGHT_CONTROL_STICKTHRESHOLD))) |
|
- | 1777 | { |
|
- | 1778 | tmp_int = tmp_int + HeightDeviation / 28; |
|
- | 1779 | //tmp_int = tmp_int + Parameter_Hoehe_ACC_Wirkung* HeightDeviation / 64; // reduce d-part while trimming setpoint // MartinR: geändert |
|
- | 1780 | } |
|
- | 1781 | else |
|
- | 1782 | { |
|
- | 1783 | tmp_int = tmp_int + HeightDeviation / 32; |
|
- | 1784 | //tmp_int = tmp_int + Parameter_Hoehe_ACC_Wirkung* HeightDeviation / 64; |
|
- | 1785 | } |
|
- | 1786 | } |
|
- | 1787 | // MartinR: geändert Ende |
|
- | 1788 | ||
1593 | LIMIT_MIN_MAX(tmp_int, -127, 128); |
1789 | LIMIT_MIN_MAX(tmp_int, -127, 128); |
1594 | tmp_int = (tmp_int * (long)Parameter_Luftdruck_D) / 4L; // scale to d-gain parameter |
1790 | tmp_int = (tmp_int * (long)Parameter_Luftdruck_D) / 4L; // scale to d-gain parameter |
1595 | LIMIT_MIN_MAX(tmp_int,-64 * STICK_GAIN, 64 * STICK_GAIN); |
1791 | LIMIT_MIN_MAX(tmp_int,-64 * STICK_GAIN, 64 * STICK_GAIN); |
- | 1792 | /* // MartinR: so war es Anfang |
|
1596 | if(FC_StatusFlags & (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN)) tmp_int /= 4; // reduce d-part while trimming setpoint |
1793 | if(FC_StatusFlags & (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN)) tmp_int /= 4; // reduce d-part while trimming setpoint |
1597 | else |
1794 | else |
1598 | if(Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT) tmp_int /= 8; // reduce d-part in "Deckel" mode |
1795 | if(EE_Parameter.ExtraConfig & CFG2_HEIGHT_LIMIT) tmp_int /= 8; // reduce d-part in "Deckel" mode |
- | 1796 | */ // MartinR: so war es Ende |
|
- | 1797 | tmp_int /= 4; // MartinR: geändert: keine veränderung des d-part im "Deckel" mode |
|
- | 1798 | //if(FC_StatusFlags & (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN)) tmp_int /= 4; // reduce d-part while trimming setpoint // MartinR: geändert |
|
- | 1799 | ||
1599 | GasReduction += tmp_int; |
1800 | GasReduction += tmp_int; |
1600 | } // EOF no baro range expanding |
1801 | } // EOF no baro range expanding |
1601 | // ------------------------ D-Part 2: ACC-Z Integral ------------------------ |
1802 | // ------------------------ D-Part 2: ACC-Z Integral ------------------------ |
- | 1803 | /* // MartinR: deaktiviert Anfang, da statische Ablage bei Schräglage Probleme macht |
|
1602 | if(Parameter_Hoehe_ACC_Wirkung) |
1804 | if(Parameter_Hoehe_ACC_Wirkung) |
1603 | { |
1805 | { |
1604 | tmp_long = ((Mess_Integral_Hoch / 128L) * (int32_t) Parameter_Hoehe_ACC_Wirkung) / (128L / STICK_GAIN); |
1806 | tmp_long = ((Mess_Integral_Hoch / 128L) * (int32_t) Parameter_Hoehe_ACC_Wirkung) / (128L / STICK_GAIN); |
1605 | LIMIT_MIN_MAX(tmp_long, -32 * STICK_GAIN, 64 * STICK_GAIN); |
1807 | LIMIT_MIN_MAX(tmp_long, -32 * STICK_GAIN, 64 * STICK_GAIN); |
1606 | GasReduction += tmp_long; |
1808 | GasReduction += tmp_long; |
1607 | } |
1809 | } |
- | 1810 | */ // MartinR: deaktiviert Ende |
|
1608 | // ------------------------ D-Part 3: GpsZ ---------------------------------- |
1811 | // ------------------------ D-Part 3: GpsZ ---------------------------------- |
1609 | tmp_int = (Parameter_Hoehe_GPS_Z * (int)FromNaviCtrl_Value.GpsZ)/128L; |
1812 | tmp_int = (Parameter_Hoehe_GPS_Z * (int)FromNaviCtrl_Value.GpsZ)/128L; |
1610 | LIMIT_MIN_MAX(tmp_int, -32 * STICK_GAIN, 64 * STICK_GAIN); |
1813 | //LIMIT_MIN_MAX(tmp_int, -32 * STICK_GAIN, 64 * STICK_GAIN); // MartinR: so war es |
- | 1814 | // MartinR: weshalb unsymmetrisch? |
|
- | 1815 | LIMIT_MIN_MAX(tmp_int, -32 * STICK_GAIN, 32 * STICK_GAIN); // MartinR: geändert |
|
1611 | GasReduction += tmp_int; |
1816 | GasReduction += tmp_int; |
1612 | GasReduction = (long)((long)GasReduction * HoverGas) / 512; // scale to the gas value |
1817 | GasReduction = (long)((long)GasReduction * HoverGas) / 512; // scale to the gas value |
1613 | // ------------------------ ---------------------------------- |
1818 | // ------------------------ ---------------------------------- |
1614 | HCGas -= GasReduction; |
1819 | HCGas -= GasReduction; |
1615 | // limit deviation from hoover point within the target region |
1820 | // limit deviation from hoover point within the target region |
Line 1651... | Line 1856... | ||
1651 | if(Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT) |
1856 | if(Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT) |
1652 | { // old version |
1857 | { // old version |
1653 | LIMIT_MAX(FilterHCGas, GasMischanteil); // nicht mehr als Gas |
1858 | LIMIT_MAX(FilterHCGas, GasMischanteil); // nicht mehr als Gas |
1654 | GasMischanteil = FilterHCGas; |
1859 | GasMischanteil = FilterHCGas; |
1655 | } |
1860 | } |
1656 | else GasMischanteil = FilterHCGas + (GasMischanteil - HoverGas) / 4; // only in Vario-Mode |
1861 | //else GasMischanteil = FilterHCGas + (GasMischanteil - HoverGas) / 4; // only in Vario-Mode // MartinR: so war es |
- | 1862 | else GasMischanteil = FilterHCGas ; // MartinR: geändert, um Überschwinger bei Höhenänderung zu verringern |
|
1657 | } |
1863 | } |
1658 | }// EOF height control active |
1864 | }// EOF height control active |
1659 | else // HC not active |
1865 | else // HC not active |
1660 | { |
1866 | { |
1661 | //update hoover gas stick value when HC is not active |
1867 | //update hoover gas stick value when HC is not active |
Line 1757... | Line 1963... | ||
1757 | if(GierMischanteil < -(MIN_GIERGAS / 2)) GierMischanteil = -(MIN_GIERGAS / 2); |
1963 | if(GierMischanteil < -(MIN_GIERGAS / 2)) GierMischanteil = -(MIN_GIERGAS / 2); |
1758 | } |
1964 | } |
1759 | tmp_int = MAX_GAS*STICK_GAIN; |
1965 | tmp_int = MAX_GAS*STICK_GAIN; |
1760 | if(GierMischanteil > ((tmp_int - GasMischanteil))) GierMischanteil = ((tmp_int - GasMischanteil)); |
1966 | if(GierMischanteil > ((tmp_int - GasMischanteil))) GierMischanteil = ((tmp_int - GasMischanteil)); |
1761 | if(GierMischanteil < -((tmp_int - GasMischanteil))) GierMischanteil = -((tmp_int - GasMischanteil)); |
1967 | if(GierMischanteil < -((tmp_int - GasMischanteil))) GierMischanteil = -((tmp_int - GasMischanteil)); |
- | 1968 | ||
- | 1969 | ||
- | 1970 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|
- | 1971 | // Nick / Roll-Achse // MartinR: um Code zu sparen wurde Nick und Roll zusammengefasst |
|
- | 1972 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|
- | 1973 | DiffNick = MesswertNick - StickNick; // Differenz bestimmen |
|
- | 1974 | DiffRoll = MesswertRoll - StickRoll; // Differenz bestimmen |
|
- | 1975 | ||
- | 1976 | // PI-Regler für Nick und Roll |
|
- | 1977 | if(EE_Parameter.Gyro_Stability <= 8) |
|
- | 1978 | { |
|
- | 1979 | pd_ergebnis_nick = (EE_Parameter.Gyro_Stability * DiffNick) / 8 ; // Zwischenergebnis um Code zu sparen |
|
- | 1980 | pd_ergebnis_roll = (EE_Parameter.Gyro_Stability * DiffRoll) / 8; |
|
- | 1981 | } |
|
- | 1982 | else |
|
- | 1983 | { |
|
- | 1984 | pd_ergebnis_nick = ((EE_Parameter.Gyro_Stability / 2) * DiffNick) / 4; // Überlauf verhindern |
|
- | 1985 | pd_ergebnis_roll = ((EE_Parameter.Gyro_Stability / 2) * DiffRoll) / 4; // Überlauf verhindern |
|
- | 1986 | } |
|
- | 1987 | ||
- | 1988 | if(IntegralFaktor) // MartinR : ACC-Mode |
|
- | 1989 | { |
|
- | 1990 | SummeNick += IntegralNickMalFaktor - StickNick; // I-Anteil bei Winkelregelung |
|
- | 1991 | if(SummeNick > (STICK_GAIN * 8000L)) SummeNick = (STICK_GAIN * 8000L); // MartinR : von 16000 auf 8000, da überlauf |
|
- | 1992 | if(SummeNick < -(8000L * STICK_GAIN)) SummeNick = -(8000L * STICK_GAIN); // MartinR : von 16000 auf 8000, da überlauf |
|
- | 1993 | pd_ergebnis_nick += (SummeNick / Ki); // PI-Regler für Nick |
|
- | 1994 | SummeNickHH = 0 ; |
|
- | 1995 | ||
- | 1996 | SummeRoll += IntegralRollMalFaktor - StickRoll; |
|
- | 1997 | if(SummeRoll > (STICK_GAIN * 8000L)) SummeRoll = (STICK_GAIN * 8000L);// MartinR : von 16000 auf 8000, da überlauf |
|
- | 1998 | if(SummeRoll < -(8000L * STICK_GAIN)) SummeRoll = -(8000L * STICK_GAIN);// MartinR : von 16000 auf 8000, da überlauf |
|
- | 1999 | pd_ergebnis_roll += (SummeRoll / Ki); // PI-Regler für Roll |
|
- | 2000 | SummeRollHH = 0; |
|
- | 2001 | ||
- | 2002 | } |
|
- | 2003 | else // MartinR : HH-Mode |
|
- | 2004 | { |
|
- | 2005 | SummeNickHH += DiffNick; // I-Anteil bei HH |
|
- | 2006 | if(SummeNickHH > (STICK_GAIN * 8000L)) SummeNickHH = (STICK_GAIN * 8000L); // MartinR : von 16000 auf 8000, da überlauf |
|
- | 2007 | if(SummeNickHH < -(8000L * STICK_GAIN)) SummeNickHH = -(8000L * STICK_GAIN); // MartinR : von 16000 auf 8000, da überlauf |
|
- | 2008 | pd_ergebnis_nick += SummeNickHH / KiHH; // MartinR: PI-Regler für Nick bei HH |
|
- | 2009 | SummeNick = 0; |
|
- | 2010 | ||
- | 2011 | SummeRollHH += DiffRoll; // I-Anteil bei HH |
|
- | 2012 | if(SummeRollHH > (STICK_GAIN * 8000L)) SummeRollHH = (STICK_GAIN * 8000L);// MartinR : von 16000 auf 8000, da überlauf |
|
- | 2013 | if(SummeRollHH < -(8000L * STICK_GAIN)) SummeRollHH = -(8000L * STICK_GAIN);// MartinR : von 16000 auf 8000, da überlauf |
|
- | 2014 | pd_ergebnis_roll += SummeRollHH / KiHH; // MartinR: PI-Regler für Roll bei HH |
|
- | 2015 | SummeRoll = 0; |
|
- | 2016 | } |
|
- | 2017 | // MartinR : geändert Ende |
|
- | 2018 | ||
- | 2019 | ||
- | 2020 | tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
|
- | 2021 | if(pd_ergebnis_nick > tmp_int) pd_ergebnis_nick = tmp_int; |
|
- | 2022 | if(pd_ergebnis_nick < -tmp_int) pd_ergebnis_nick = -tmp_int; |
|
Line -... | Line 2023... | ||
- | 2023 | ||
- | 2024 | //tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
|
- | 2025 | if(pd_ergebnis_roll > tmp_int) pd_ergebnis_roll = tmp_int; |
|
- | 2026 | if(pd_ergebnis_roll < -tmp_int) pd_ergebnis_roll = -tmp_int; |
|
- | 2027 | ||
- | 2028 | ||
- | 2029 | // MartinR: alt |
|
1762 | 2030 | /* |
|
1763 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
2031 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1764 | // Nick-Achse |
2032 | // Nick-Achse |
1765 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
2033 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1766 | DiffNick = MesswertNick - StickNick; // Differenz bestimmen |
2034 | DiffNick = MesswertNick - StickNick; // Differenz bestimmen |
Line 1792... | Line 2060... | ||
1792 | 2060 | |
|
1793 | tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
2061 | tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
1794 | if(pd_ergebnis_roll > tmp_int) pd_ergebnis_roll = tmp_int; |
2062 | if(pd_ergebnis_roll > tmp_int) pd_ergebnis_roll = tmp_int; |
Line -... | Line 2063... | ||
- | 2063 | if(pd_ergebnis_roll < -tmp_int) pd_ergebnis_roll = -tmp_int; |
|
- | 2064 | ||
- | 2065 | */ |
|
1795 | if(pd_ergebnis_roll < -tmp_int) pd_ergebnis_roll = -tmp_int; |
2066 | // MartinR: alt Ende |
1796 | 2067 | ||
1797 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
2068 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1798 | // Universal Mixer |
2069 | // Universal Mixer |
1799 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
2070 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |