Rev 1731 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1731 | Rev 1738 | ||
---|---|---|---|
Line 71... | Line 71... | ||
71 | long IntegralRoll = 0,IntegralRoll2 = 0; |
71 | long IntegralRoll = 0,IntegralRoll2 = 0; |
72 | long IntegralAccNick = 0,IntegralAccRoll = 0,IntegralAccZ = 0; |
72 | long IntegralAccNick = 0,IntegralAccRoll = 0,IntegralAccZ = 0; |
73 | long Integral_Gier = 0; |
73 | long Integral_Gier = 0; |
74 | long Mess_IntegralNick = 0,Mess_IntegralNick2 = 0; |
74 | long Mess_IntegralNick = 0,Mess_IntegralNick2 = 0; |
75 | long Mess_IntegralRoll = 0,Mess_IntegralRoll2 = 0; |
75 | long Mess_IntegralRoll = 0,Mess_IntegralRoll2 = 0; |
76 | long Mess_Integral_Gier = 0,Mess_Integral_Gier2 = 0; |
76 | //long Mess_Integral_Gier = 0,Mess_Integral_Gier2 = 0; //MartinR so war es |
- | 77 | long Mess_Integral_Gier = 0; //MartinR: Mess_Integral_Gier2 unbenutzt |
|
77 | long MittelIntegralNick,MittelIntegralRoll,MittelIntegralNick2,MittelIntegralRoll2; |
78 | long MittelIntegralNick,MittelIntegralRoll,MittelIntegralNick2,MittelIntegralRoll2; |
78 | long SummeNick=0,SummeRoll=0; |
79 | long SummeNick=0,SummeRoll=0; |
79 | volatile long Mess_Integral_Hoch = 0; |
80 | volatile long Mess_Integral_Hoch = 0; |
80 | int KompassValue = 0; |
81 | int KompassValue = 0; |
81 | int KompassStartwert = 0; |
82 | int KompassStartwert = 0; |
Line 98... | Line 99... | ||
98 | char MotorenEin = 0,StartTrigger = 0; |
99 | char MotorenEin = 0,StartTrigger = 0; |
99 | long HoehenWert = 0; |
100 | long HoehenWert = 0; |
100 | long SollHoehe = 0; |
101 | long SollHoehe = 0; |
101 | int LageKorrekturRoll = 0,LageKorrekturNick = 0, HoverGas = 0; |
102 | int LageKorrekturRoll = 0,LageKorrekturNick = 0, HoverGas = 0; |
102 | //float Ki = FAKTOR_I; |
103 | //float Ki = FAKTOR_I; |
103 | int Ki = 10300 / 33; |
104 | int Ki = 10300 / 33; |
- | 105 | int KiHH = 10300 / 33; // MartinR : für Ki bei HH über Schalter |
|
- | 106 | ||
104 | unsigned char Looping_Nick = 0,Looping_Roll = 0; |
107 | unsigned char Looping_Nick = 0,Looping_Roll = 0; |
105 | unsigned char Looping_Links = 0, Looping_Rechts = 0, Looping_Unten = 0, Looping_Oben = 0; |
108 | unsigned char Looping_Links = 0, Looping_Rechts = 0, Looping_Unten = 0, Looping_Oben = 0; |
Line 106... | Line 109... | ||
106 | 109 | ||
107 | unsigned char Parameter_Luftdruck_D = 48; // Wert : 0-250 |
110 | unsigned char Parameter_Luftdruck_D = 48; // Wert : 0-250 |
Line 149... | Line 152... | ||
149 | unsigned char Parameter_ExternalControl; |
152 | unsigned char Parameter_ExternalControl; |
150 | unsigned char Parameter_Servo3,Parameter_Servo4,Parameter_Servo5; |
153 | unsigned char Parameter_Servo3,Parameter_Servo4,Parameter_Servo5; |
151 | unsigned char CareFree = 0; |
154 | unsigned char CareFree = 0; |
Line 152... | Line 155... | ||
152 | 155 | ||
153 | signed int ExternStickNick = 0,ExternStickRoll = 0,ExternStickGier = 0, ExternHoehenValue = -20; |
156 | signed int ExternStickNick = 0,ExternStickRoll = 0,ExternStickGier = 0, ExternHoehenValue = -20; |
- | 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 |
|
154 | int MaxStickNick = 0,MaxStickRoll = 0; |
159 | |
155 | unsigned int modell_fliegt = 0; |
160 | unsigned int modell_fliegt = 0; |
156 | volatile unsigned char FCFlags = 0; |
161 | volatile unsigned char FCFlags = 0; |
157 | long GIER_GRAD_FAKTOR = 1291; |
162 | long GIER_GRAD_FAKTOR = 1291; |
158 | signed int KopplungsteilNickRoll,KopplungsteilRollNick; |
163 | signed int KopplungsteilNickRoll,KopplungsteilRollNick; |
Line 182... | Line 187... | ||
182 | DebugOut.Analog[11] = ErsatzKompass / GIER_GRAD_FAKTOR; |
187 | DebugOut.Analog[11] = ErsatzKompass / GIER_GRAD_FAKTOR; |
183 | DebugOut.Analog[12] = Motor[0].SetPoint; |
188 | DebugOut.Analog[12] = Motor[0].SetPoint; |
184 | DebugOut.Analog[13] = Motor[1].SetPoint; |
189 | DebugOut.Analog[13] = Motor[1].SetPoint; |
185 | DebugOut.Analog[14] = Motor[2].SetPoint; |
190 | DebugOut.Analog[14] = Motor[2].SetPoint; |
186 | DebugOut.Analog[15] = Motor[3].SetPoint; |
191 | DebugOut.Analog[15] = Motor[3].SetPoint; |
- | 192 | //DebugOut.Analog[16] = DiffNick; // MartinR: test |
|
- | 193 | //DebugOut.Analog[17] = DiffRoll; // MartinR: test |
|
- | 194 | //DebugOut.Analog[18] = MesswertNick; // MartinR: test |
|
- | 195 | //DebugOut.Analog[19] = MesswertRoll; // MartinR: test |
|
187 | DebugOut.Analog[20] = ServoNickValue; |
196 | DebugOut.Analog[20] = ServoNickValue; |
188 | DebugOut.Analog[22] = Capacity.ActualCurrent; |
197 | DebugOut.Analog[22] = Capacity.ActualCurrent; |
189 | DebugOut.Analog[23] = Capacity.UsedCapacity; |
198 | //DebugOut.Analog[23] = Capacity.UsedCapacity; |
190 | // DebugOut.Analog[22] = FromNaviCtrl_Value.GpsZ; |
199 | // DebugOut.Analog[22] = FromNaviCtrl_Value.GpsZ; |
191 | // DebugOut.Analog[29] = FromNaviCtrl_Value.SerialDataOkay; |
200 | // DebugOut.Analog[29] = FromNaviCtrl_Value.SerialDataOkay; |
192 | DebugOut.Analog[29] = Capacity.MinOfMaxPWM; |
201 | DebugOut.Analog[29] = Capacity.MinOfMaxPWM; |
193 | DebugOut.Analog[30] = GPS_Nick; |
202 | DebugOut.Analog[30] = GPS_Nick; |
194 | DebugOut.Analog[31] = GPS_Roll; |
203 | DebugOut.Analog[31] = GPS_Roll; |
Line 363... | Line 372... | ||
363 | static signed long tmpl,tmpl2,tmpl3,tmpl4; |
372 | static signed long tmpl,tmpl2,tmpl3,tmpl4; |
364 | static signed int oldNick, oldRoll, d2Roll, d2Nick; |
373 | static signed int oldNick, oldRoll, d2Roll, d2Nick; |
365 | signed long winkel_nick, winkel_roll; |
374 | signed long winkel_nick, winkel_roll; |
366 | unsigned char i; |
375 | unsigned char i; |
367 | MesswertGier = (signed int) AdNeutralGier - AdWertGier; |
376 | MesswertGier = (signed int) AdNeutralGier - AdWertGier; |
368 | MesswertNick = (signed int) AdWertNickFilter / 8; |
377 | //MesswertNick = (signed int) AdWertNickFilter / 8; // MartinR: so war es |
369 | MesswertRoll = (signed int) AdWertRollFilter / 8; |
378 | //MesswertRoll = (signed int) AdWertRollFilter / 8; // MartinR: so war es |
- | 379 | MesswertNick = (signed int) AdWertNickFilter ; // MartinR die Division /8 erfolgt bereits in der analog.c |
|
- | 380 | MesswertRoll = (signed int) AdWertRollFilter ; // MartinR die Division /8 erfolgt bereits in der analog.c |
|
370 | RohMesswertNick = MesswertNick; |
381 | RohMesswertNick = MesswertNick; |
371 | RohMesswertRoll = MesswertRoll; |
382 | RohMesswertRoll = MesswertRoll; |
Line 372... | Line 383... | ||
372 | 383 | ||
373 | // Beschleunigungssensor ++++++++++++++++++++++++++++++++++++++++++++++++ |
384 | // Beschleunigungssensor ++++++++++++++++++++++++++++++++++++++++++++++++ |
Line 396... | Line 407... | ||
396 | 407 | ||
397 | // Gier ++++++++++++++++++++++++++++++++++++++++++++++++ |
408 | // Gier ++++++++++++++++++++++++++++++++++++++++++++++++ |
398 | Mess_Integral_Gier += MesswertGier; |
409 | Mess_Integral_Gier += MesswertGier; |
399 | ErsatzKompass += MesswertGier; |
410 | ErsatzKompass += MesswertGier; |
- | 411 | // Kopplungsanteil +++++++++++++++++++++++++++++++++++++ |
|
- | 412 | ||
- | 413 | ||
- | 414 | // if((EE_Parameter.GlobalConfig & CFG_HEADING_HOLD) || (Parameter_UserParam1 > 50)) IntegralFaktor = 0; // MartinR: zusätzlich |
|
400 | // Kopplungsanteil +++++++++++++++++++++++++++++++++++++ |
415 | |
- | 416 | if(!Looping_Nick && !Looping_Roll && (EE_Parameter.GlobalConfig & CFG_ACHSENKOPPLUNG_AKTIV)) // MartinR : so war es |
|
- | 417 | //if(!Looping_Nick && !Looping_Roll && IntegralFaktor && (EE_Parameter.GlobalConfig & CFG_ACHSENKOPPLUNG_AKTIV)) // MartinR: zusätzlich "&& IntegralFaktor" |
|
- | 418 | // MartinR: Test Kamera-Ausgleich im HH |
|
401 | if(!Looping_Nick && !Looping_Roll && (EE_Parameter.GlobalConfig & CFG_ACHSENKOPPLUNG_AKTIV)) |
419 | |
402 | { |
420 | { |
403 | tmpl3 = (MesswertRoll * winkel_nick) / 2048L; |
421 | tmpl3 = (MesswertRoll * winkel_nick) / 2048L; |
404 | tmpl3 *= Parameter_AchsKopplung2; //65 |
422 | tmpl3 *= Parameter_AchsKopplung2; //65 |
405 | tmpl3 /= 4096L; |
423 | tmpl3 /= 4096L; |
Line 458... | Line 476... | ||
458 | IntegralNick = Mess_IntegralNick; |
476 | IntegralNick = Mess_IntegralNick; |
459 | IntegralRoll = Mess_IntegralRoll; |
477 | IntegralRoll = Mess_IntegralRoll; |
460 | IntegralNick2 = Mess_IntegralNick2; |
478 | IntegralNick2 = Mess_IntegralNick2; |
461 | IntegralRoll2 = Mess_IntegralRoll2; |
479 | IntegralRoll2 = Mess_IntegralRoll2; |
Line -... | Line 480... | ||
- | 480 | ||
462 | 481 | //#define D_LIMIT 128 // MartinR: so war es |
|
- | 482 | #define D_LIMIT 16 |
|
463 | #define D_LIMIT 128 |
483 | // MartinR: Änderung war notwendig, da die Division /8 bereits in der analog.c erfolgt |
464 | 484 | ||
465 | MesswertNick = HiResNick / 8; |
485 | //MesswertNick = HiResNick / 8; // MartinR : so war es |
- | 486 | // MesswertRoll = HiResRoll / 8; // MartinR : so war es |
|
- | 487 | MesswertNick = HiResNick ; // MartinR die Division /8 erfolgt bereits in der analog.c |
|
- | 488 | MesswertRoll = HiResRoll ; // MartinR die Division /8 erfolgt bereits in der analog.c |
|
- | 489 | ||
- | 490 | // MartinR : so war es Anfang |
|
466 | MesswertRoll = HiResRoll / 8; |
491 | /* |
467 | 492 | |
|
468 | if(AdWertNick < 15) MesswertNick = -1000; if(AdWertNick < 7) MesswertNick = -2000; |
493 | if(AdWertNick < 15) MesswertNick = -1000; if(AdWertNick < 7) MesswertNick = -2000; |
469 | if(PlatinenVersion == 10) { if(AdWertNick > 1010) MesswertNick = +1000; if(AdWertNick > 1017) MesswertNick = +2000; } |
494 | if(PlatinenVersion == 10) { if(AdWertNick > 1010) MesswertNick = +1000; if(AdWertNick > 1017) MesswertNick = +2000; } |
470 | else { if(AdWertNick > 2000) MesswertNick = +1000; if(AdWertNick > 2015) MesswertNick = +2000; } |
495 | else { if(AdWertNick > 2000) MesswertNick = +1000; if(AdWertNick > 2015) MesswertNick = +2000; } |
471 | if(AdWertRoll < 15) MesswertRoll = -1000; if(AdWertRoll < 7) MesswertRoll = -2000; |
496 | if(AdWertRoll < 15) MesswertRoll = -1000; if(AdWertRoll < 7) MesswertRoll = -2000; |
472 | if(PlatinenVersion == 10) { if(AdWertRoll > 1010) MesswertRoll = +1000; if(AdWertRoll > 1017) MesswertRoll = +2000; } |
497 | if(PlatinenVersion == 10) { if(AdWertRoll > 1010) MesswertRoll = +1000; if(AdWertRoll > 1017) MesswertRoll = +2000; } |
- | 498 | else { if(AdWertRoll > 2000) MesswertRoll = +1000; if(AdWertRoll > 2015) MesswertRoll = +2000; } |
|
- | 499 | |
|
- | 500 | // MartinR : FC 1.0: Sprung von 500 auf 2000 !! FC-ME: Sprung von 1000 auf 2000 |
|
- | 501 | */ |
|
- | 502 | // MartinR : so war es Ende |
|
- | 503 | ||
- | 504 | // MartinR : Neu Anfang |
|
- | 505 | if(PlatinenVersion == 10) |
|
- | 506 | { |
|
- | 507 | if(AdWertNick > 1010) MesswertNick = +600; |
|
- | 508 | if(AdWertNick > 1017) MesswertNick = +800; |
|
- | 509 | if(AdWertNick < 15) MesswertNick = -600; |
|
- | 510 | if(AdWertNick < 7) MesswertNick = -800; |
|
- | 511 | if(AdWertRoll > 1010) MesswertRoll = +600; |
|
- | 512 | if(AdWertRoll > 1017) MesswertRoll = +800; |
|
- | 513 | if(AdWertRoll < 15) MesswertRoll = -600; |
|
- | 514 | if(AdWertRoll < 7) MesswertRoll = -800; |
|
- | 515 | } |
|
- | 516 | else |
|
- | 517 | { |
|
- | 518 | if(AdWertNick > 2000) MesswertNick = +1200; |
|
- | 519 | if(AdWertNick > 2015) MesswertNick = +1600; |
|
- | 520 | if(AdWertNick < 15) MesswertNick = -1200; |
|
- | 521 | if(AdWertNick < 7) MesswertNick = -1600; |
|
- | 522 | if(AdWertRoll > 2000) MesswertRoll = +1200; |
|
- | 523 | if(AdWertRoll > 2015) MesswertRoll = +1600; |
|
- | 524 | if(AdWertRoll < 15) MesswertRoll = -1200; |
|
- | 525 | if(AdWertRoll < 7) MesswertRoll = -1600; |
|
- | 526 | } |
|
Line 473... | Line 527... | ||
473 | else { if(AdWertRoll > 2000) MesswertRoll = +1000; if(AdWertRoll > 2015) MesswertRoll = +2000; } |
527 | // MartinR : Neu Ende |
- | 528 | ||
- | 529 | if(Parameter_Gyro_D) |
|
474 | 530 | // MartinR: hier sind Änderungen erforderlich, da u.a. MesswertNick = HiResNick / 8 von der fc.c in die analog.c verschoben wurde |
|
475 | if(Parameter_Gyro_D) |
531 | // Hintergrund: Code einsparen |
476 | { |
532 | { |
477 | d2Nick = HiResNick - oldNick; |
533 | d2Nick = HiResNick - oldNick; |
478 | oldNick = (oldNick + HiResNick)/2; |
534 | oldNick = (oldNick + HiResNick)/2; |
479 | if(d2Nick > D_LIMIT) d2Nick = D_LIMIT; |
535 | if(d2Nick > D_LIMIT) d2Nick = D_LIMIT; |
- | 536 | else if(d2Nick < -D_LIMIT) d2Nick = -D_LIMIT; |
|
480 | else if(d2Nick < -D_LIMIT) d2Nick = -D_LIMIT; |
537 | //MesswertNick += (d2Nick * (signed int) Parameter_Gyro_D) / 16; // MartinR : so war es |
481 | MesswertNick += (d2Nick * (signed int) Parameter_Gyro_D) / 16; |
538 | MesswertNick += (d2Nick * (signed int) Parameter_Gyro_D) / 2; // MartinR : geändert |
482 | d2Roll = HiResRoll - oldRoll; |
539 | d2Roll = HiResRoll - oldRoll; |
483 | oldRoll = (oldRoll + HiResRoll)/2; |
540 | oldRoll = (oldRoll + HiResRoll)/2; |
484 | if(d2Roll > D_LIMIT) d2Roll = D_LIMIT; |
541 | if(d2Roll > D_LIMIT) d2Roll = D_LIMIT; |
- | 542 | else if(d2Roll < -D_LIMIT) d2Roll = -D_LIMIT; |
|
485 | else if(d2Roll < -D_LIMIT) d2Roll = -D_LIMIT; |
543 | //MesswertRoll += (d2Roll * (signed int) Parameter_Gyro_D) / 16; // MartinR : so war es |
486 | MesswertRoll += (d2Roll * (signed int) Parameter_Gyro_D) / 16; |
544 | MesswertRoll += (d2Roll * (signed int) Parameter_Gyro_D) / 2; // MartinR : geändert |
487 | HiResNick += (d2Nick * (signed int) Parameter_Gyro_D); |
545 | HiResNick += (d2Nick * (signed int) Parameter_Gyro_D * 8); // martinR: *8 hinzugefügt |
Line 488... | Line 546... | ||
488 | HiResRoll += (d2Roll * (signed int) Parameter_Gyro_D); |
546 | HiResRoll += (d2Roll * (signed int) Parameter_Gyro_D * 8); // martinR: *8 hinzugefügt |
489 | } |
547 | } |
490 | 548 | ||
Line 559... | Line 617... | ||
559 | CHK_POTI_MM(Parameter_J17Timing,EE_Parameter.J17Timing,1,255); |
617 | CHK_POTI_MM(Parameter_J17Timing,EE_Parameter.J17Timing,1,255); |
560 | CHK_POTI(Parameter_Servo3,EE_Parameter.Servo3); |
618 | CHK_POTI(Parameter_Servo3,EE_Parameter.Servo3); |
561 | CHK_POTI(Parameter_Servo4,EE_Parameter.Servo4); |
619 | CHK_POTI(Parameter_Servo4,EE_Parameter.Servo4); |
562 | CHK_POTI(Parameter_Servo5,EE_Parameter.Servo5); |
620 | CHK_POTI(Parameter_Servo5,EE_Parameter.Servo5); |
563 | CHK_POTI(Parameter_MaxHoehe,EE_Parameter.MaxHoehe); |
621 | CHK_POTI(Parameter_MaxHoehe,EE_Parameter.MaxHoehe); |
564 | CHK_POTI(Parameter_MaxHoehe,EE_Parameter.MaxHoehe); |
622 | //CHK_POTI(Parameter_MaxHoehe,EE_Parameter.MaxHoehe); // MartinR: Zeile war doppelt |
565 | CHK_POTI(Parameter_Hoehe_ACC_Wirkung,EE_Parameter.Hoehe_ACC_Wirkung); |
623 | CHK_POTI(Parameter_Hoehe_ACC_Wirkung,EE_Parameter.Hoehe_ACC_Wirkung); |
566 | CHK_POTI(Parameter_Hoehe_GPS_Z,EE_Parameter.Hoehe_GPS_Z); |
624 | CHK_POTI(Parameter_Hoehe_GPS_Z,EE_Parameter.Hoehe_GPS_Z); |
567 | CHK_POTI(Parameter_KompassWirkung,EE_Parameter.KompassWirkung); |
625 | CHK_POTI(Parameter_KompassWirkung,EE_Parameter.KompassWirkung); |
568 | CHK_POTI(Parameter_Gyro_I,EE_Parameter.Gyro_I); |
626 | CHK_POTI(Parameter_Gyro_I,EE_Parameter.Gyro_I); |
569 | CHK_POTI(Parameter_Gyro_D,EE_Parameter.Gyro_D); |
627 | CHK_POTI(Parameter_Gyro_D,EE_Parameter.Gyro_D); |
Line 586... | Line 644... | ||
586 | CHK_POTI(Parameter_CouplingYawCorrection,EE_Parameter.CouplingYawCorrection); |
644 | CHK_POTI(Parameter_CouplingYawCorrection,EE_Parameter.CouplingYawCorrection); |
587 | // CHK_POTI(Parameter_AchsGegenKopplung1,EE_Parameter.AchsGegenKopplung1,0,255); |
645 | // CHK_POTI(Parameter_AchsGegenKopplung1,EE_Parameter.AchsGegenKopplung1,0,255); |
588 | CHK_POTI(Parameter_DynamicStability,EE_Parameter.DynamicStability); |
646 | CHK_POTI(Parameter_DynamicStability,EE_Parameter.DynamicStability); |
589 | CHK_POTI(Parameter_ExternalControl,EE_Parameter.ExternalControl); |
647 | CHK_POTI(Parameter_ExternalControl,EE_Parameter.ExternalControl); |
590 | Ki = 10300 / (Parameter_I_Faktor + 1); |
648 | Ki = 10300 / (Parameter_I_Faktor + 1); |
- | 649 | ||
- | 650 | ||
- | 651 | if(Parameter_UserParam1 > 50) KiHH = 10300 / (Parameter_UserParam2 + 1); else KiHH = Ki; // MartinR : für HH über Schalter |
|
- | 652 | Parameter_NaviGpsModeControl = EE_Parameter.NaviGpsModeControl; //MartinR: Standard: EE_Parameter.NaviGpsModeControl wird übertragen |
|
- | 653 | if(!IntegralFaktor) Parameter_NaviGpsModeControl= 0; // MartinR: wenn HH dann GPS auf free- Mode |
|
- | 654 | // 0 = free; 100 = AID; 200 = coming home //neu |
|
- | 655 | ||
- | 656 | ||
591 | MAX_GAS = EE_Parameter.Gas_Max; |
657 | MAX_GAS = EE_Parameter.Gas_Max; |
592 | MIN_GAS = EE_Parameter.Gas_Min; |
658 | MIN_GAS = EE_Parameter.Gas_Min; |
Line 593... | Line 659... | ||
593 | 659 | ||
594 | tmp = EE_Parameter.OrientationModeControl; |
660 | tmp = EE_Parameter.OrientationModeControl; |
Line 618... | Line 684... | ||
618 | void MotorRegler(void) |
684 | void MotorRegler(void) |
619 | //############################################################################ |
685 | //############################################################################ |
620 | { |
686 | { |
621 | int pd_ergebnis_nick,pd_ergebnis_roll,tmp_int, tmp_int2; |
687 | int pd_ergebnis_nick,pd_ergebnis_roll,tmp_int, tmp_int2; |
622 | int GierMischanteil,GasMischanteil; |
688 | int GierMischanteil,GasMischanteil; |
- | 689 | ||
- | 690 | static long SummeNickHH=0,SummeRollHH=0; // MartinR: Für ACC-HH Umschaltung Prüfen !!!!!!!!!!!!! |
|
- | 691 | ||
623 | static long sollGier = 0,tmp_long,tmp_long2; |
692 | static long sollGier = 0,tmp_long,tmp_long2; |
624 | static long IntegralFehlerNick = 0; |
693 | static long IntegralFehlerNick = 0; |
625 | static long IntegralFehlerRoll = 0; |
694 | static long IntegralFehlerRoll = 0; |
626 | static unsigned int RcLostTimer; |
695 | static unsigned int RcLostTimer; |
627 | static unsigned char delay_neutral = 0; |
696 | static unsigned char delay_neutral = 0; |
Line 769... | Line 838... | ||
769 | { |
838 | { |
770 | modell_fliegt = 1; |
839 | modell_fliegt = 1; |
771 | MotorenEin = 1; |
840 | MotorenEin = 1; |
772 | sollGier = 0; |
841 | sollGier = 0; |
773 | Mess_Integral_Gier = 0; |
842 | Mess_Integral_Gier = 0; |
774 | Mess_Integral_Gier2 = 0; |
843 | //Mess_Integral_Gier2 = 0; //MartinR: Mess_Integral_Gier2 unbenutzt |
775 | Mess_IntegralNick = EE_Parameter.GyroAccFaktor * (long)Mittelwert_AccNick; |
844 | Mess_IntegralNick = EE_Parameter.GyroAccFaktor * (long)Mittelwert_AccNick; |
776 | Mess_IntegralRoll = EE_Parameter.GyroAccFaktor * (long)Mittelwert_AccRoll; |
845 | Mess_IntegralRoll = EE_Parameter.GyroAccFaktor * (long)Mittelwert_AccRoll; |
777 | Mess_IntegralNick2 = IntegralNick; |
846 | Mess_IntegralNick2 = IntegralNick; |
778 | Mess_IntegralRoll2 = IntegralRoll; |
847 | Mess_IntegralRoll2 = IntegralRoll; |
779 | SummeNick = 0; |
848 | SummeNick = 0; |
Line 813... | Line 882... | ||
813 | 882 | ||
814 | if(!NewPpmData-- || (FCFlags & FCFLAG_NOTLANDUNG)) |
883 | if(!NewPpmData-- || (FCFlags & FCFLAG_NOTLANDUNG)) |
815 | { |
884 | { |
816 | static int stick_nick,stick_roll; |
885 | static int stick_nick,stick_roll; |
- | 886 | ParameterZuordnung(); |
|
- | 887 | // MartinR: original: |
|
817 | ParameterZuordnung(); |
888 | /* |
818 | stick_nick = (stick_nick * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_P) / 4; |
889 | stick_nick = (stick_nick * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_P) / 4; |
819 | stick_nick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D; |
890 | stick_nick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D; |
820 | stick_roll = (stick_roll * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_P) / 4; |
891 | stick_roll = (stick_roll * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_P) / 4; |
- | 892 | stick_roll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D; |
|
- | 893 | |
|
- | 894 | */ |
|
- | 895 | // MartinR: geändert Anfang |
|
- | 896 | if(Parameter_UserParam1 > 50) // MartinR: zweiter Stick_P Wert nur, wenn HH über Schalter aktiv ist |
|
- | 897 | { |
|
- | 898 | stick_nick = (stick_nick * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * Parameter_UserParam3 - stick_nick_neutral) / 4; |
|
- | 899 | stick_roll = (stick_roll * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * Parameter_UserParam3 - stick_roll_neutral) / 4 ; |
|
- | 900 | //stick_nick = (PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * Parameter_UserParam3 - stick_nick_neutral); |
|
- | 901 | //stick_roll = (PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * Parameter_UserParam3 - stick_roll_neutral); |
|
- | 902 | } |
|
- | 903 | ||
- | 904 | else |
|
- | 905 | { |
|
- | 906 | stick_nick = (stick_nick * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_P) / 4; |
|
- | 907 | stick_roll = (stick_roll * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_P) / 4; |
|
- | 908 | stick_nick_neutral = stick_nick; // beim Umschalten auf HH wird derletzte Stickwert als Neutralposition verwendet, MartinR |
|
- | 909 | stick_roll_neutral = stick_roll; // beim Umschalten auf HH wird derletzte Stickwert als Neutralposition verwendet, MartinR |
|
- | 910 | } |
|
- | 911 | ||
- | 912 | if(IntegralFaktor) |
|
- | 913 | { |
|
- | 914 | //stick_nick_neutral = stick_nick; // beim Umschalten auf HH wird derletzte Stickwert als Neutralposition verwendet, MartinR |
|
- | 915 | //stick_roll_neutral = stick_roll; // beim Umschalten auf HH wird derletzte Stickwert als Neutralposition verwendet, MartinR |
|
- | 916 | stick_nick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D; |
|
- | 917 | stick_roll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D; |
|
- | 918 | ||
- | 919 | //StickNick = stick_nick - (GPS_Nick + GPS_Nick2); // MartinR: GPS nur im ACC-Mode wirksam wohin verschoben ?? Prüfen !!!!!!!!!!!!!!!!!!!! |
|
- | 920 | //StickRoll = stick_roll - (GPS_Roll + GPS_Roll2); // MartinR: GPS nur im ACC-Mode wirksam |
|
- | 921 | } |
|
- | 922 | /*else // wenn HH , MartinR |
|
- | 923 | { |
|
- | 924 | //stick_nick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D; // MartinR: eventuell vor if verschieben |
|
- | 925 | //stick_roll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D; // MartinR: eventuell vor if verschieben |
|
- | 926 | //StickNick = stick_nick; // MartinR: GPS nur im ACC-Mode wirksam wohin verschoben ?? Prüfen !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
|
- | 927 | //StickRoll = stick_roll; // MartinR: GPS nur im ACC-Mode wirksam |
|
- | 928 | } |
|
- | 929 | */ |
|
- | 930 | // MartinR: geändert Ende |
|
Line 821... | Line 931... | ||
821 | stick_roll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D; |
931 | |
822 | 932 | ||
823 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
933 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
824 | // CareFree und freie Wahl der vorderen Richtung |
934 | // CareFree und freie Wahl der vorderen Richtung |
Line 825... | Line 935... | ||
825 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
935 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
826 | 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}; |
936 | 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}; |
827 | 937 | ||
828 | if(CareFree) |
938 | if(CareFree) |
829 | { |
939 | { |
830 | signed int nick, roll; |
940 | signed int nick, roll; |
831 | nick = stick_nick / 4; |
941 | nick = stick_nick / 4; |
832 | roll = stick_roll / 4; |
942 | roll = stick_roll / 4; |
833 | StickNick = ((FromNC_Rotate_C * nick) + (FromNC_Rotate_S * roll)) / (32 / 4); |
943 | StickNick = ((FromNC_Rotate_C * nick) + (FromNC_Rotate_S * roll)) / (32 / 4); |
834 | StickRoll = ((FromNC_Rotate_C * roll) - (FromNC_Rotate_S * nick)) / (32 / 4); |
944 | StickRoll = ((FromNC_Rotate_C * roll) - (FromNC_Rotate_S * nick)) / (32 / 4); |
835 | } |
945 | } |
836 | else |
946 | else // verrechnung des OrientationAngle |
837 | { |
947 | { |
838 | FromNC_Rotate_C = sintab[EE_Parameter.OrientationAngle + 6]; |
948 | FromNC_Rotate_C = sintab[EE_Parameter.OrientationAngle + 6]; |
Line 849... | Line 959... | ||
849 | StickNick -= (GPS_Nick + GPS_Nick2); |
959 | StickNick -= (GPS_Nick + GPS_Nick2); |
850 | StickRoll -= (GPS_Roll + GPS_Roll2); |
960 | StickRoll -= (GPS_Roll + GPS_Roll2); |
851 | StickGas = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] + 120; |
961 | StickGas = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] + 120; |
Line 852... | Line 962... | ||
852 | 962 | ||
853 | GyroFaktor = (Parameter_Gyro_P + 10.0); |
963 | GyroFaktor = (Parameter_Gyro_P + 10.0); |
854 | IntegralFaktor = Parameter_Gyro_I; |
964 | // IntegralFaktor = Parameter_Gyro_I; // MartinR: verschoben um Code zu sparen |
855 | GyroFaktorGier = (Parameter_Gyro_Gier_P + 10.0); |
965 | GyroFaktorGier = (Parameter_Gyro_Gier_P + 10.0); |
- | 966 | IntegralFaktorGier = Parameter_Gyro_Gier_I; |
|
856 | IntegralFaktorGier = Parameter_Gyro_Gier_I; |
967 | |
- | 968 | ||
857 | 969 | ||
858 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
970 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
859 | //+ Analoge Steuerung per Seriell |
971 | //+ Analoge Steuerung per Seriell |
- | 972 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|
- | 973 | // MartinR: ToDo: eventuell die Kombination HH und Steuerung per Seriell nicht zulassen?? |
|
860 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
974 | |
861 | if(ExternControl.Config & 0x01 && Parameter_ExternalControl > 128) |
975 | if(ExternControl.Config & 0x01 && Parameter_ExternalControl > 128) |
862 | { |
976 | { |
863 | StickNick += (int) ExternControl.Nick * (int) EE_Parameter.Stick_P; |
977 | StickNick += (int) ExternControl.Nick * (int) EE_Parameter.Stick_P; |
864 | StickRoll += (int) ExternControl.Roll * (int) EE_Parameter.Stick_P; |
978 | StickRoll += (int) ExternControl.Roll * (int) EE_Parameter.Stick_P; |
865 | StickGier += ExternControl.Gier; |
979 | StickGier += ExternControl.Gier; |
866 | ExternHoehenValue = (int) ExternControl.Hight * (int)EE_Parameter.Hoehe_Verstaerkung; |
980 | ExternHoehenValue = (int) ExternControl.Hight * (int)EE_Parameter.Hoehe_Verstaerkung; |
867 | if(ExternControl.Gas < StickGas) StickGas = ExternControl.Gas; |
981 | if(ExternControl.Gas < StickGas) StickGas = ExternControl.Gas; |
868 | } |
982 | } |
Line 869... | Line 983... | ||
869 | if(StickGas < 0) StickGas = 0; |
983 | if(StickGas < 0) StickGas = 0; |
Line 870... | Line 984... | ||
870 | 984 | ||
871 | if(EE_Parameter.GlobalConfig & CFG_HEADING_HOLD) IntegralFaktor = 0; |
985 | //if(EE_Parameter.GlobalConfig & CFG_HEADING_HOLD) IntegralFaktor = 0; // MartinR: so war es, verschoben |
872 | 986 | ||
873 | if(abs(StickNick/STICK_GAIN) > MaxStickNick) |
987 | if(abs(StickNick/STICK_GAIN) > MaxStickNick) |
Line 922... | Line 1036... | ||
922 | 1036 | ||
923 | if(Looping_Links || Looping_Rechts) Looping_Roll = 1; else Looping_Roll = 0; |
1037 | if(Looping_Links || Looping_Rechts) Looping_Roll = 1; else Looping_Roll = 0; |
924 | if(Looping_Oben || Looping_Unten) { Looping_Nick = 1; Looping_Roll = 0; Looping_Links = 0; Looping_Rechts = 0;} else Looping_Nick = 0; |
1038 | if(Looping_Oben || Looping_Unten) { Looping_Nick = 1; Looping_Roll = 0; Looping_Links = 0; Looping_Rechts = 0;} else Looping_Nick = 0; |
Line -... | Line 1039... | ||
- | 1039 | } // Ende neue Funken-Werte |
|
925 | } // Ende neue Funken-Werte |
1040 | |
926 | 1041 | ||
927 | if(Looping_Roll || Looping_Nick) |
1042 | if(Looping_Roll || Looping_Nick) |
928 | { |
1043 | { |
929 | if(GasMischanteil > EE_Parameter.LoopGasLimit) GasMischanteil = EE_Parameter.LoopGasLimit; |
1044 | if(GasMischanteil > EE_Parameter.LoopGasLimit) GasMischanteil = EE_Parameter.LoopGasLimit; |
Line 930... | Line -... | ||
930 | TrichterFlug = 1; |
- | |
931 | } |
1045 | TrichterFlug = 1; |
932 | 1046 | } |
|
933 | 1047 | ||
934 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1048 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
935 | // Bei Empfangsausfall im Flug |
1049 | // Bei Empfangsausfall im Flug |
Line 956... | Line 1070... | ||
956 | MittelIntegralNick += IntegralNick; // Für die Mittelwertbildung aufsummieren |
1070 | MittelIntegralNick += IntegralNick; // Für die Mittelwertbildung aufsummieren |
957 | MittelIntegralRoll += IntegralRoll; |
1071 | MittelIntegralRoll += IntegralRoll; |
958 | MittelIntegralNick2 += IntegralNick2; |
1072 | MittelIntegralNick2 += IntegralNick2; |
959 | MittelIntegralRoll2 += IntegralRoll2; |
1073 | MittelIntegralRoll2 += IntegralRoll2; |
Line 960... | Line 1074... | ||
960 | 1074 | ||
- | 1075 | // if(Looping_Nick || Looping_Roll) // MartinR: so war es |
|
961 | if(Looping_Nick || Looping_Roll) |
1076 | if(Looping_Nick || Looping_Roll || (!IntegralFaktor & (Parameter_UserParam1 < 50) & !(EE_Parameter.GlobalConfig & CFG_HEADING_HOLD))) // MartinR: erweitert |
962 | { |
1077 | { |
963 | IntegralAccNick = 0; |
1078 | IntegralAccNick = 0; |
964 | IntegralAccRoll = 0; |
1079 | IntegralAccRoll = 0; |
965 | MittelIntegralNick = 0; |
1080 | MittelIntegralNick = 0; |
Line 970... | Line 1085... | ||
970 | Mess_IntegralRoll2 = Mess_IntegralRoll; |
1085 | Mess_IntegralRoll2 = Mess_IntegralRoll; |
971 | ZaehlMessungen = 0; |
1086 | ZaehlMessungen = 0; |
972 | LageKorrekturNick = 0; |
1087 | LageKorrekturNick = 0; |
973 | LageKorrekturRoll = 0; |
1088 | LageKorrekturRoll = 0; |
974 | } |
1089 | } |
- | 1090 | ||
- | 1091 | if(!IntegralFaktor & (Parameter_UserParam1 < 50) & !(EE_Parameter.GlobalConfig & CFG_HEADING_HOLD)) // MartinR: |
|
- | 1092 | // nur im Moment des Umschaltens von HH auf ACC erfolgt ein Reset der Integrale, nicht aber bei normalem HH |
|
- | 1093 | // um einen im HH-Mode eventuell schwindelig geflogenen ACC_Mode zu resetten! |
|
- | 1094 | // bis zur Umschaltung werden die Integrale für den Kameraausgleich verwendet |
|
- | 1095 | { |
|
- | 1096 | ||
- | 1097 | IntegralNick = 0; // MartinR: im HH-Modus alle unbenutzten Integratoren = 0 |
|
- | 1098 | IntegralRoll = 0; // MartinR: im HH-Modus alle unbenutzten Integratoren = 0 |
|
- | 1099 | Mess_IntegralNick = 0; // MartinR: im HH-Modus alle unbenutzten Integratoren = 0 |
|
- | 1100 | Mess_IntegralRoll = 0; // MartinR: im HH-Modus alle unbenutzten Integratoren = 0 |
|
- | 1101 | //Mess_Integral_Gier = 0; // MartinR: im HH-Modus alle unbenutzten Integratoren = 0 |
|
- | 1102 | //Integral_Gier = 0; // MartinR: im HH-Modus alle unbenutzten Integratoren = 0 |
|
- | 1103 | //Mess_Integral_Gier2 = 0; // MartinR: im HH-Modus alle unbenutzten Integratoren = 0 |
|
- | 1104 | } |
|
- | 1105 | ||
- | 1106 | if((EE_Parameter.GlobalConfig & CFG_HEADING_HOLD) || (Parameter_UserParam1 > 50)) IntegralFaktor = 0; // MartinR geändert und verschoben |
|
- | 1107 | else IntegralFaktor = Parameter_Gyro_I; // MartinR: verschoben um Code zu sparen |
|
Line 975... | Line 1108... | ||
975 | 1108 | ||
976 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1109 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
- | 1110 | if(!Looping_Nick && !Looping_Roll && (Aktuell_az > 512 || MotorenEin)) // MartinR: so war es, für Test wieder aktiviert |
|
- | 1111 | //if(!Looping_Nick && !Looping_Roll && (Aktuell_az > 512 || MotorenEin) && IntegralFaktor) // MartinR: "&& IntegralFaktor" hinzugefügt |
|
977 | if(!Looping_Nick && !Looping_Roll && (Aktuell_az > 512 || MotorenEin)) |
1112 | |
978 | { |
1113 | { |
979 | long tmp_long, tmp_long2; |
1114 | long tmp_long, tmp_long2; |
980 | if(FromNaviCtrl_Value.Kalman_K != -1 /*&& !TrichterFlug*/) |
1115 | if(FromNaviCtrl_Value.Kalman_K != -1 /*&& !TrichterFlug*/) |
981 | { |
1116 | { |
Line 1029... | Line 1164... | ||
1029 | if(ZaehlMessungen >= ABGLEICH_ANZAHL) |
1164 | if(ZaehlMessungen >= ABGLEICH_ANZAHL) |
1030 | { |
1165 | { |
1031 | static int cnt = 0; |
1166 | static int cnt = 0; |
1032 | static char last_n_p,last_n_n,last_r_p,last_r_n; |
1167 | static char last_n_p,last_n_n,last_r_p,last_r_n; |
1033 | static long MittelIntegralNick_Alt,MittelIntegralRoll_Alt; |
1168 | static long MittelIntegralNick_Alt,MittelIntegralRoll_Alt; |
1034 | if(!Looping_Nick && !Looping_Roll && !TrichterFlug && EE_Parameter.Driftkomp) |
1169 | //if(!Looping_Nick && !Looping_Roll && !TrichterFlug && EE_Parameter.Driftkomp) // MartinR: so war es |
- | 1170 | if(!Looping_Nick && !Looping_Roll && !TrichterFlug && EE_Parameter.Driftkomp && IntegralFaktor) // MartinR: "&& IntegralFaktor" hinzugefügt |
|
- | 1171 | ||
1035 | { |
1172 | { |
1036 | MittelIntegralNick /= ABGLEICH_ANZAHL; |
1173 | MittelIntegralNick /= ABGLEICH_ANZAHL; |
1037 | MittelIntegralRoll /= ABGLEICH_ANZAHL; |
1174 | MittelIntegralRoll /= ABGLEICH_ANZAHL; |
1038 | IntegralAccNick = (EE_Parameter.GyroAccFaktor * IntegralAccNick) / ABGLEICH_ANZAHL; |
1175 | IntegralAccNick = (EE_Parameter.GyroAccFaktor * IntegralAccNick) / ABGLEICH_ANZAHL; |
1039 | IntegralAccRoll = (EE_Parameter.GyroAccFaktor * IntegralAccRoll) / ABGLEICH_ANZAHL; |
1176 | IntegralAccRoll = (EE_Parameter.GyroAccFaktor * IntegralAccRoll) / ABGLEICH_ANZAHL; |
Line 1248... | Line 1385... | ||
1248 | 1385 | ||
1249 | #define TRIM_MAX 200 |
1386 | #define TRIM_MAX 200 |
1250 | if(TrimNick > TRIM_MAX) TrimNick = TRIM_MAX; else if(TrimNick <-TRIM_MAX) TrimNick =-TRIM_MAX; |
1387 | if(TrimNick > TRIM_MAX) TrimNick = TRIM_MAX; else if(TrimNick <-TRIM_MAX) TrimNick =-TRIM_MAX; |
Line -... | Line 1388... | ||
- | 1388 | if(TrimRoll > TRIM_MAX) TrimRoll = TRIM_MAX; else if(TrimRoll <-TRIM_MAX) TrimRoll =-TRIM_MAX; |
|
- | 1389 | ||
- | 1390 | //MesswertNick = IntegralNickMalFaktor + (long)((long)MesswertNick * GyroFaktor + (long)TrimNick * 128L) / (256L / STICK_GAIN);// MartinR so war es |
|
- | 1391 | //MesswertRoll = IntegralRollMalFaktor + (long)((long)MesswertRoll * GyroFaktor + (long)TrimRoll * 128L) / (256L / STICK_GAIN);// MartinR so war es |
|
- | 1392 | ||
- | 1393 | if(!IntegralFaktor) // MartinR : HH-Mode hinzugefügt |
|
- | 1394 | { |
|
- | 1395 | MesswertNick = (long) ((long)MesswertNick * GyroFaktor) / (256L / STICK_GAIN) ; // MartinR : hinzugefügt |
|
- | 1396 | MesswertRoll = (long) ((long)MesswertRoll * GyroFaktor) / (256L / STICK_GAIN) ; // MartinR : hinzugefügt |
|
- | 1397 | MesswertGier = (long)(MesswertGier * 2 * (long)GyroFaktorGier) / (256L / STICK_GAIN); |
|
- | 1398 | Mess_Integral_Gier = 0; // MartinR: im HH-Modus alle unbenutzten Integratoren = 0 |
|
- | 1399 | Integral_Gier = 0; // MartinR: im HH-Modus alle unbenutzten Integratoren = 0 |
|
- | 1400 | } |
|
1251 | if(TrimRoll > TRIM_MAX) TrimRoll = TRIM_MAX; else if(TrimRoll <-TRIM_MAX) TrimRoll =-TRIM_MAX; |
1401 | else // MartinR: ACC-Mode so war es |
1252 | 1402 | { |
|
1253 | MesswertNick = IntegralNickMalFaktor + (long)((long)MesswertNick * GyroFaktor + (long)TrimNick * 128L) / (256L / STICK_GAIN); |
1403 | MesswertNick = IntegralNickMalFaktor + (long)((long)MesswertNick * GyroFaktor + (long)TrimNick * 128L) / (256L / STICK_GAIN); |
- | 1404 | MesswertRoll = IntegralRollMalFaktor + (long)((long)MesswertRoll * GyroFaktor + (long)TrimRoll * 128L) / (256L / STICK_GAIN); |
|
- | 1405 | MesswertGier = (long)(MesswertGier * 2 * (long)GyroFaktorGier) / (256L / STICK_GAIN) + (long)(Integral_Gier * IntegralFaktorGier) / (2 * (44000 / STICK_GAIN)); |
|
- | 1406 | } |
|
Line 1254... | Line 1407... | ||
1254 | MesswertRoll = IntegralRollMalFaktor + (long)((long)MesswertRoll * GyroFaktor + (long)TrimRoll * 128L) / (256L / STICK_GAIN); |
1407 | |
1255 | MesswertGier = (long)(MesswertGier * 2 * (long)GyroFaktorGier) / (256L / STICK_GAIN) + (long)(Integral_Gier * IntegralFaktorGier) / (2 * (44000 / STICK_GAIN)); |
1408 | //MesswertGier = (long)(MesswertGier * 2 * (long)GyroFaktorGier) / (256L / STICK_GAIN) + (long)(Integral_Gier * IntegralFaktorGier) / (2 * (44000 / STICK_GAIN)); // MartinR so war es |
1256 | 1409 | ||
1257 | // Maximalwerte abfangen |
1410 | // Maximalwerte abfangen |
Line 1341... | Line 1494... | ||
1341 | } |
1494 | } |
Line 1342... | Line 1495... | ||
1342 | 1495 | ||
1343 | // if height control is activated by an rc channel |
1496 | // if height control is activated by an rc channel |
1344 | if(EE_Parameter.GlobalConfig & CFG_HOEHEN_SCHALTER) // Regler wird über Schalter gesteuert |
1497 | if(EE_Parameter.GlobalConfig & CFG_HOEHEN_SCHALTER) // Regler wird über Schalter gesteuert |
1345 | { // check if parameter is less than activation threshold |
1498 | { // check if parameter is less than activation threshold |
- | 1499 | // if(Parameter_MaxHoehe < 50) // for 3 or 2-state switch height control is disabled in lowest position // MartinR :so war es |
|
1346 | if(Parameter_MaxHoehe < 50) // for 3 or 2-state switch height control is disabled in lowest position |
1500 | if(Parameter_MaxHoehe < 50 || (Parameter_UserParam1 > 140) ) // MartinR: Schalter aus oder HH ohne Höhenregler über UsererParam1 an |
1347 | { //height control not active |
1501 | { //height control not active |
1348 | if(!delay--) |
1502 | if(!delay--) |
1349 | { |
1503 | { |
1350 | HoehenReglerAktiv = 0; // disable height control |
1504 | HoehenReglerAktiv = 0; // disable height control |
Line 1359... | Line 1513... | ||
1359 | } |
1513 | } |
1360 | } |
1514 | } |
1361 | else // no switchable height control |
1515 | else // no switchable height control |
1362 | { |
1516 | { |
1363 | SollHoehe = ((int16_t) ExternHoehenValue + (int16_t) Parameter_MaxHoehe) * (int)EE_Parameter.Hoehe_Verstaerkung; |
1517 | SollHoehe = ((int16_t) ExternHoehenValue + (int16_t) Parameter_MaxHoehe) * (int)EE_Parameter.Hoehe_Verstaerkung; |
- | 1518 | // HoehenReglerAktiv = 1; // MartinR : so war es |
|
- | 1519 | // MartinR : geändert Anfang |
|
- | 1520 | if(Parameter_UserParam1 > 140) // HH über Schalter: HH an + Höhenregler abgeschaltet, Nachführen von Parametern |
|
- | 1521 | { |
|
- | 1522 | HoehenReglerAktiv = 0; |
|
- | 1523 | } |
|
- | 1524 | else // Höhenregler mit Sollhöhe über Poti aktiv |
|
- | 1525 | { |
|
1364 | HoehenReglerAktiv = 1; |
1526 | HoehenReglerAktiv = 1; |
- | 1527 | } |
|
- | 1528 | // MartinR : geändert Ende |
|
1365 | } |
1529 | } |
Line 1366... | Line 1530... | ||
1366 | 1530 | ||
1367 | // calculate cos of nick and roll angle used for projection of the vertical hoover gas |
1531 | // calculate cos of nick and roll angle used for projection of the vertical hoover gas |
1368 | tmp_int = (int)(IntegralNick/GIER_GRAD_FAKTOR); // nick angle in deg |
1532 | tmp_int = (int)(IntegralNick/GIER_GRAD_FAKTOR); // nick angle in deg |
Line 1638... | Line 1802... | ||
1638 | if(GierMischanteil < -(MIN_GIERGAS / 2)) GierMischanteil = -(MIN_GIERGAS / 2); |
1802 | if(GierMischanteil < -(MIN_GIERGAS / 2)) GierMischanteil = -(MIN_GIERGAS / 2); |
1639 | } |
1803 | } |
1640 | tmp_int = MAX_GAS*STICK_GAIN; |
1804 | tmp_int = MAX_GAS*STICK_GAIN; |
1641 | if(GierMischanteil > ((tmp_int - GasMischanteil))) GierMischanteil = ((tmp_int - GasMischanteil)); |
1805 | if(GierMischanteil > ((tmp_int - GasMischanteil))) GierMischanteil = ((tmp_int - GasMischanteil)); |
1642 | if(GierMischanteil < -((tmp_int - GasMischanteil))) GierMischanteil = -((tmp_int - GasMischanteil)); |
1806 | if(GierMischanteil < -((tmp_int - GasMischanteil))) GierMischanteil = -((tmp_int - GasMischanteil)); |
- | 1807 | ||
- | 1808 | ||
- | 1809 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|
- | 1810 | // Nick / Roll-Achse // MartinR: um Code zu sparen wurde Nick und Roll zusammengefasst |
|
- | 1811 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|
- | 1812 | DiffNick = MesswertNick - StickNick; // Differenz bestimmen |
|
- | 1813 | DiffRoll = MesswertRoll - StickRoll; // Differenz bestimmen |
|
Line -... | Line 1814... | ||
- | 1814 | ||
- | 1815 | pd_ergebnis_nick = (EE_Parameter.Gyro_Stability * DiffNick) / 8 ; // Zwischenergebnis um Code zu sparen |
|
- | 1816 | pd_ergebnis_roll = (EE_Parameter.Gyro_Stability * DiffRoll) / 8; |
|
- | 1817 | if(IntegralFaktor) // MartinR : ACC-Mode |
|
- | 1818 | { |
|
- | 1819 | SummeNick += IntegralNickMalFaktor - StickNick; // I-Anteil bei Winkelregelung |
|
- | 1820 | if(SummeNick > (STICK_GAIN * 8000L)) SummeNick = (STICK_GAIN * 8000L); // MartinR : von 16000 auf 8000, da überlauf |
|
- | 1821 | if(SummeNick < -(8000L * STICK_GAIN)) SummeNick = -(8000L * STICK_GAIN); // MartinR : von 16000 auf 8000, da überlauf |
|
- | 1822 | pd_ergebnis_nick += (SummeNick / Ki); // PI-Regler für Nick |
|
- | 1823 | SummeNickHH = 0 ; |
|
- | 1824 | ||
- | 1825 | SummeRoll += IntegralRollMalFaktor - StickRoll; |
|
- | 1826 | if(SummeRoll > (STICK_GAIN * 8000L)) SummeRoll = (STICK_GAIN * 8000L);// MartinR : von 16000 auf 8000, da überlauf |
|
- | 1827 | if(SummeRoll < -(8000L * STICK_GAIN)) SummeRoll = -(8000L * STICK_GAIN);// MartinR : von 16000 auf 8000, da überlauf |
|
- | 1828 | pd_ergebnis_roll += (SummeRoll / Ki); // PI-Regler für Roll |
|
- | 1829 | SummeRollHH = 0; |
|
- | 1830 | ||
- | 1831 | } |
|
- | 1832 | else // MartinR : HH-Mode |
|
- | 1833 | { |
|
- | 1834 | SummeNickHH += DiffNick; // I-Anteil bei HH |
|
- | 1835 | if(SummeNickHH > (STICK_GAIN * 8000L)) SummeNickHH = (STICK_GAIN * 8000L); // MartinR : von 16000 auf 8000, da überlauf |
|
- | 1836 | if(SummeNickHH < -(8000L * STICK_GAIN)) SummeNickHH = -(8000L * STICK_GAIN); // MartinR : von 16000 auf 8000, da überlauf |
|
- | 1837 | pd_ergebnis_nick += SummeNickHH / KiHH; // MartinR: PI-Regler für Nick bei HH |
|
- | 1838 | SummeNick = 0; |
|
- | 1839 | ||
- | 1840 | SummeRollHH += DiffRoll; // I-Anteil bei HH |
|
- | 1841 | if(SummeRollHH > (STICK_GAIN * 8000L)) SummeRollHH = (STICK_GAIN * 8000L);// MartinR : von 16000 auf 8000, da überlauf |
|
- | 1842 | if(SummeRollHH < -(8000L * STICK_GAIN)) SummeRollHH = -(8000L * STICK_GAIN);// MartinR : von 16000 auf 8000, da überlauf |
|
- | 1843 | pd_ergebnis_roll += SummeRollHH / KiHH; // MartinR: PI-Regler für Roll bei HH |
|
- | 1844 | SummeRoll = 0; |
|
- | 1845 | } |
|
- | 1846 | // MartinR : geändert Ende |
|
- | 1847 | ||
- | 1848 | ||
- | 1849 | tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
|
- | 1850 | if(pd_ergebnis_nick > tmp_int) pd_ergebnis_nick = tmp_int; |
|
- | 1851 | if(pd_ergebnis_nick < -tmp_int) pd_ergebnis_nick = -tmp_int; |
|
- | 1852 | ||
- | 1853 | //tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
|
- | 1854 | if(pd_ergebnis_roll > tmp_int) pd_ergebnis_roll = tmp_int; |
|
- | 1855 | if(pd_ergebnis_roll < -tmp_int) pd_ergebnis_roll = -tmp_int; |
|
- | 1856 | ||
- | 1857 | ||
- | 1858 | // MartinR: alt |
|
1643 | 1859 | /* |
|
1644 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1860 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1645 | // Nick-Achse |
1861 | // Nick-Achse |
1646 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1862 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
- | 1863 | DiffNick = MesswertNick - StickNick; // Differenz bestimmen |
|
- | 1864 | // MartinR : so war es Anfang |
|
1647 | DiffNick = MesswertNick - StickNick; // Differenz bestimmen |
1865 | /+ |
1648 | if(IntegralFaktor) SummeNick += IntegralNickMalFaktor - StickNick; // I-Anteil bei Winkelregelung |
1866 | if(IntegralFaktor) SummeNick += IntegralNickMalFaktor - StickNick; // I-Anteil bei Winkelregelung |
1649 | else SummeNick += DiffNick; // I-Anteil bei HH |
1867 | else SummeNick += DiffNick; // I-Anteil bei HH |
1650 | if(SummeNick > (STICK_GAIN * 16000L)) SummeNick = (STICK_GAIN * 16000L); |
1868 | if(SummeNick > (STICK_GAIN * 16000L)) SummeNick = (STICK_GAIN * 16000L); |
1651 | if(SummeNick < -(16000L * STICK_GAIN)) SummeNick = -(16000L * STICK_GAIN); |
1869 | if(SummeNick < -(16000L * STICK_GAIN)) SummeNick = -(16000L * STICK_GAIN); |
1652 | pd_ergebnis_nick = (EE_Parameter.Gyro_Stability * DiffNick) / 8 + SummeNick / Ki; // PI-Regler für Nick |
1870 | pd_ergebnis_nick = (EE_Parameter.Gyro_Stability * DiffNick) / 8 + SummeNick / Ki; // PI-Regler für Nick |
- | 1871 | // Motor Vorn |
|
- | 1872 | |
|
- | 1873 | +/ |
|
- | 1874 | // MartinR : so war es Ende |
|
- | 1875 | |
|
- | 1876 | // MartinR : geändert Anfang |
|
- | 1877 | pd_ergebnis_nick = (EE_Parameter.Gyro_Stability * DiffNick) / 8 ; // Zwischenergebnis um Code zu sparen |
|
- | 1878 | if(IntegralFaktor) // MartinR : ACC-Mode |
|
- | 1879 | { |
|
- | 1880 | SummeNick += IntegralNickMalFaktor - StickNick; // I-Anteil bei Winkelregelung |
|
- | 1881 | if(SummeNick > (STICK_GAIN * 8000L)) SummeNick = (STICK_GAIN * 8000L); // MartinR : von 16000 auf 8000, da überlauf |
|
- | 1882 | if(SummeNick < -(8000L * STICK_GAIN)) SummeNick = -(8000L * STICK_GAIN); // MartinR : von 16000 auf 8000, da überlauf |
|
- | 1883 | //pd_ergebnis_nick = DiffNick + (SummeNick / Ki); |
|
- | 1884 | pd_ergebnis_nick += (SummeNick / Ki); // PI-Regler für Nick |
|
- | 1885 | SummeNickHH = 0 ; |
|
- | 1886 | } |
|
- | 1887 | else // MartinR : HH-Mode |
|
- | 1888 | { |
|
- | 1889 | SummeNickHH += DiffNick; // I-Anteil bei HH |
|
- | 1890 | if(SummeNickHH > (STICK_GAIN * 8000L)) SummeNickHH = (STICK_GAIN * 8000L); // MartinR : von 16000 auf 8000, da überlauf |
|
- | 1891 | if(SummeNickHH < -(8000L * STICK_GAIN)) SummeNickHH = -(8000L * STICK_GAIN); // MartinR : von 16000 auf 8000, da überlauf |
|
- | 1892 | pd_ergebnis_nick += SummeNickHH / KiHH; // MartinR: PI-Regler für Nick bei HH |
|
- | 1893 | SummeNick = 0; |
|
- | 1894 | } |
|
- | 1895 | // MartinR : geändert Ende |
|
- | 1896 | |
|
1653 | // Motor Vorn |
1897 | |
1654 | tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
1898 | tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
1655 | if(pd_ergebnis_nick > tmp_int) pd_ergebnis_nick = tmp_int; |
1899 | if(pd_ergebnis_nick > tmp_int) pd_ergebnis_nick = tmp_int; |
Line 1656... | Line 1900... | ||
1656 | if(pd_ergebnis_nick < -tmp_int) pd_ergebnis_nick = -tmp_int; |
1900 | if(pd_ergebnis_nick < -tmp_int) pd_ergebnis_nick = -tmp_int; |
1657 | 1901 | ||
1658 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1902 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1659 | // Roll-Achse |
1903 | // Roll-Achse |
- | 1904 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|
- | 1905 | DiffRoll = MesswertRoll - StickRoll; // Differenz bestimmen |
|
1660 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1906 | // MartinR : so war es Anfang |
1661 | DiffRoll = MesswertRoll - StickRoll; // Differenz bestimmen |
1907 | /+ |
1662 | if(IntegralFaktor) SummeRoll += IntegralRollMalFaktor - StickRoll;// I-Anteil bei Winkelregelung |
1908 | if(IntegralFaktor) SummeRoll += IntegralRollMalFaktor - StickRoll;// I-Anteil bei Winkelregelung |
1663 | else SummeRoll += DiffRoll; // I-Anteil bei HH |
1909 | else SummeRoll += DiffRoll; // I-Anteil bei HH |
1664 | if(SummeRoll > (STICK_GAIN * 16000L)) SummeRoll = (STICK_GAIN * 16000L); |
1910 | if(SummeRoll > (STICK_GAIN * 16000L)) SummeRoll = (STICK_GAIN * 16000L); |
- | 1911 | if(SummeRoll < -(16000L * STICK_GAIN)) SummeRoll = -(16000L * STICK_GAIN); |
|
- | 1912 | pd_ergebnis_roll = (EE_Parameter.Gyro_Stability * DiffRoll) / 8 + SummeRoll / Ki; // PI-Regler für Roll |
|
- | 1913 | +/ |
|
- | 1914 | // MartinR : so war es Ende |
|
- | 1915 | |
|
- | 1916 | // MartinR : geändert Anfang |
|
- | 1917 | pd_ergebnis_roll = (EE_Parameter.Gyro_Stability * DiffRoll) / 8; |
|
- | 1918 | if(IntegralFaktor) // MartinR : ACC-Mode |
|
- | 1919 | { |
|
- | 1920 | SummeRoll += IntegralRollMalFaktor - StickRoll; |
|
- | 1921 | if(SummeRoll > (STICK_GAIN * 8000L)) SummeRoll = (STICK_GAIN * 8000L);// MartinR : von 16000 auf 8000, da überlauf |
|
- | 1922 | if(SummeRoll < -(8000L * STICK_GAIN)) SummeRoll = -(8000L * STICK_GAIN);// MartinR : von 16000 auf 8000, da überlauf |
|
- | 1923 | //tmp_int = SummeRoll / Ki; |
|
- | 1924 | //pd_ergebnis_roll = DiffRoll + tmp_int; // MartinR: PI-Regler im ACC-Mode |
|
- | 1925 | pd_ergebnis_roll += SummeRoll / Ki; // PI-Regler für Roll |
|
- | 1926 | //SummeRollHH = (IntegralRollMalFaktor + tmp_int - stick_roll_neutral + (TrimRoll * STICK_GAIN / 2)) * KiHH;// MartinR: Startwert von SummeRollHH bei Umschaltung auf HH |
|
- | 1927 | // MartinR: Hintergrund: pd_ergebnis_xx soll sich beim Umschalten nicht ändern! |
|
- | 1928 | SummeRollHH = 0; |
|
- | 1929 | } |
|
- | 1930 | else // MartinR : HH-Mode |
|
- | 1931 | { |
|
- | 1932 | SummeRollHH += DiffRoll; // I-Anteil bei HH |
|
- | 1933 | if(SummeRollHH > (STICK_GAIN * 8000L)) SummeRollHH = (STICK_GAIN * 8000L);// MartinR : von 16000 auf 8000, da überlauf |
|
- | 1934 | if(SummeRollHH < -(8000L * STICK_GAIN)) SummeRollHH = -(8000L * STICK_GAIN);// MartinR : von 16000 auf 8000, da überlauf |
|
- | 1935 | pd_ergebnis_roll += SummeRollHH / KiHH; // MartinR: PI-Regler für Roll bei HH |
|
- | 1936 | SummeRoll = 0; |
|
- | 1937 | } |
|
1665 | if(SummeRoll < -(16000L * STICK_GAIN)) SummeRoll = -(16000L * STICK_GAIN); |
1938 | // MartinR : geändert Ende |
1666 | pd_ergebnis_roll = (EE_Parameter.Gyro_Stability * DiffRoll) / 8 + SummeRoll / Ki; // PI-Regler für Roll |
1939 | |
1667 | tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
1940 | tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
- | 1941 | if(pd_ergebnis_roll > tmp_int) pd_ergebnis_roll = tmp_int; |
|
- | 1942 | if(pd_ergebnis_roll < -tmp_int) pd_ergebnis_roll = -tmp_int; |
|
Line 1668... | Line 1943... | ||
1668 | if(pd_ergebnis_roll > tmp_int) pd_ergebnis_roll = tmp_int; |
1943 | |
1669 | if(pd_ergebnis_roll < -tmp_int) pd_ergebnis_roll = -tmp_int; |
1944 | */ |
1670 | 1945 | ||
1671 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1946 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
Line 1690... | Line 1965... | ||
1690 | if(Mixer.Motor[i][3] == 64) tmp_int += GierMischanteil; |
1965 | if(Mixer.Motor[i][3] == 64) tmp_int += GierMischanteil; |
1691 | else if(Mixer.Motor[i][3] == -64) tmp_int -= GierMischanteil; |
1966 | else if(Mixer.Motor[i][3] == -64) tmp_int -= GierMischanteil; |
1692 | else tmp_int += ((long)GierMischanteil * Mixer.Motor[i][3]) / 64L; |
1967 | else tmp_int += ((long)GierMischanteil * Mixer.Motor[i][3]) / 64L; |
Line 1693... | Line 1968... | ||
1693 | 1968 | ||
1694 | if(tmp_int > tmp_motorwert[i]) tmp_int = (tmp_motorwert[i] + tmp_int) / 2; // MotorSmoothing |
1969 | if(tmp_int > tmp_motorwert[i]) tmp_int = (tmp_motorwert[i] + tmp_int) / 2; // MotorSmoothing |
- | 1970 | //else tmp_int = 2 * tmp_int - tmp_motorwert[i]; // MotorSmoothing // MartinR: so war es |
|
Line 1695... | Line 1971... | ||
1695 | else tmp_int = 2 * tmp_int - tmp_motorwert[i]; // MotorSmoothing |
1971 | //else tmp_int = tmp_int; // MartinR: Entsprechend Vorschlag von MartinW geändert |
1696 | 1972 | ||
1697 | LIMIT_MIN_MAX(tmp_int,MIN_GAS * 4,MAX_GAS * 4); |
1973 | LIMIT_MIN_MAX(tmp_int,MIN_GAS * 4,MAX_GAS * 4); |
1698 | Motor[i].SetPoint = tmp_int / 4; |
1974 | Motor[i].SetPoint = tmp_int / 4; |