Rev 918 | Rev 927 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 918 | Rev 921 | ||
---|---|---|---|
Line 119... | Line 119... | ||
119 | unsigned char Parameter_ServoNickControl = 100; |
119 | unsigned char Parameter_ServoNickControl = 100; |
120 | unsigned char Parameter_LoopGasLimit = 70; |
120 | unsigned char Parameter_LoopGasLimit = 70; |
121 | unsigned char Parameter_AchsKopplung1 = 0; |
121 | unsigned char Parameter_AchsKopplung1 = 0; |
122 | unsigned char Parameter_AchsGegenKopplung1 = 0; |
122 | unsigned char Parameter_AchsGegenKopplung1 = 0; |
123 | unsigned char Parameter_DynamicStability = 100; |
123 | unsigned char Parameter_DynamicStability = 100; |
- | 124 | unsigned char Parameter_J16Bitmask; // for the J16 Output |
|
- | 125 | unsigned char Parameter_J16Timing; // for the J16 Output |
|
- | 126 | unsigned char Parameter_J17Bitmask; // for the J17 Output |
|
- | 127 | unsigned char Parameter_J17Timing; // for the J17 Output |
|
- | 128 | unsigned char Parameter_NaviGpsModeControl; // Parameters for the Naviboard |
|
- | 129 | unsigned char Parameter_NaviGpsGain; |
|
- | 130 | unsigned char Parameter_NaviGpsP; |
|
- | 131 | unsigned char Parameter_NaviGpsI; |
|
- | 132 | unsigned char Parameter_NaviGpsD; |
|
- | 133 | unsigned char Parameter_NaviGpsACC; |
|
- | 134 | unsigned char Parameter_ExternalControl; |
|
124 | struct mk_param_struct EE_Parameter; |
135 | struct mk_param_struct EE_Parameter; |
125 | signed int ExternStickNick = 0,ExternStickRoll = 0,ExternStickGier = 0, ExternHoehenValue = -20; |
136 | signed int ExternStickNick = 0,ExternStickRoll = 0,ExternStickGier = 0, ExternHoehenValue = -20; |
126 | int MaxStickNick = 0,MaxStickRoll = 0; |
137 | int MaxStickNick = 0,MaxStickRoll = 0; |
127 | unsigned int modell_fliegt = 0; |
138 | unsigned int modell_fliegt = 0; |
- | 139 | unsigned char MikroKopterFlags = 0; |
|
Line 128... | Line 140... | ||
128 | 140 | ||
129 | void Piep(unsigned char Anzahl) |
141 | void Piep(unsigned char Anzahl) |
130 | { |
142 | { |
131 | while(Anzahl--) |
143 | while(Anzahl--) |
Line 193... | Line 205... | ||
193 | Umschlag180Roll = ((long) EE_Parameter.WinkelUmschlagRoll * 2500L) + 15000L; |
205 | Umschlag180Roll = ((long) EE_Parameter.WinkelUmschlagRoll * 2500L) + 15000L; |
194 | ExternHoehenValue = 0; |
206 | ExternHoehenValue = 0; |
195 | ErsatzKompass = KompassValue * GIER_GRAD_FAKTOR; |
207 | ErsatzKompass = KompassValue * GIER_GRAD_FAKTOR; |
196 | GierGyroFehler = 0; |
208 | GierGyroFehler = 0; |
197 | SendVersionToNavi = 1; |
209 | SendVersionToNavi = 1; |
- | 210 | LED_Init(); |
|
- | 211 | MikroKopterFlags |= FLAG_CALIBRATE; |
|
198 | } |
212 | } |
Line 199... | Line 213... | ||
199 | 213 | ||
200 | //############################################################################ |
214 | //############################################################################ |
201 | // Bearbeitet die Messwerte |
215 | // Bearbeitet die Messwerte |
Line 353... | Line 367... | ||
353 | //############################################################################ |
367 | //############################################################################ |
354 | // Senden der Motorwerte per I2C-Bus |
368 | // Senden der Motorwerte per I2C-Bus |
355 | void SendMotorData(void) |
369 | void SendMotorData(void) |
356 | //############################################################################ |
370 | //############################################################################ |
357 | { |
371 | { |
358 | if(MOTOR_OFF || !MotorenEin) |
372 | if(!MotorenEin) |
359 | { |
373 | { |
360 | Motor_Hinten = 0; |
374 | Motor_Hinten = 0; |
361 | Motor_Vorne = 0; |
375 | Motor_Vorne = 0; |
362 | Motor_Rechts = 0; |
376 | Motor_Rechts = 0; |
363 | Motor_Links = 0; |
377 | Motor_Links = 0; |
364 | if(MotorTest[0]) Motor_Vorne = MotorTest[0]; |
378 | if(MotorTest[0]) Motor_Vorne = MotorTest[0]; |
365 | if(MotorTest[1]) Motor_Hinten = MotorTest[1]; |
379 | if(MotorTest[1]) Motor_Hinten = MotorTest[1]; |
366 | if(MotorTest[2]) Motor_Links = MotorTest[2]; |
380 | if(MotorTest[2]) Motor_Links = MotorTest[2]; |
367 | if(MotorTest[3]) Motor_Rechts = MotorTest[3]; |
381 | if(MotorTest[3]) Motor_Rechts = MotorTest[3]; |
- | 382 | MikroKopterFlags &= ~(FLAG_MOTOR_RUN | FLAG_FLY); |
|
368 | } |
383 | } else MikroKopterFlags |= FLAG_MOTOR_RUN; |
Line 369... | Line 384... | ||
369 | 384 | ||
370 | DebugOut.Analog[12] = Motor_Vorne; |
385 | DebugOut.Analog[12] = Motor_Vorne; |
371 | DebugOut.Analog[13] = Motor_Hinten; |
386 | DebugOut.Analog[13] = Motor_Hinten; |
372 | DebugOut.Analog[14] = Motor_Links; |
387 | DebugOut.Analog[14] = Motor_Links; |
Line 384... | Line 399... | ||
384 | // Trägt ggf. das Poti als Parameter ein |
399 | // Trägt ggf. das Poti als Parameter ein |
385 | void ParameterZuordnung(void) |
400 | void ParameterZuordnung(void) |
386 | //############################################################################ |
401 | //############################################################################ |
387 | { |
402 | { |
Line 388... | Line 403... | ||
388 | 403 | ||
- | 404 | #define CHK_POTI_MM(b,a,min,max) { if(a > 250) { if(a == 251) b = Poti1; else if(a == 252) b = Poti2; else if(a == 253) b = Poti3; else if(a == 254) b = Poti4;} else b = a; if(b <= min) b = min; else if(b >= max) b = max;} |
|
389 | #define CHK_POTI(b,a,min,max) { if(a > 250) { if(a == 251) b = Poti1; else if(a == 252) b = Poti2; else if(a == 253) b = Poti3; else if(a == 254) b = Poti4;} else b = a; if(b <= min) b = min; else if(b >= max) b = max;} |
405 | #define CHK_POTI(b,a,min,max) { if(a > 250) { if(a == 251) b = Poti1; else if(a == 252) b = Poti2; else if(a == 253) b = Poti3; else if(a == 254) b = Poti4;} else b = a; } |
390 | CHK_POTI(Parameter_MaxHoehe,EE_Parameter.MaxHoehe,0,255); |
406 | CHK_POTI(Parameter_MaxHoehe,EE_Parameter.MaxHoehe,0,255); |
391 | CHK_POTI(Parameter_Luftdruck_D,EE_Parameter.Luftdruck_D,0,100); |
407 | CHK_POTI_MM(Parameter_Luftdruck_D,EE_Parameter.Luftdruck_D,0,100); |
392 | CHK_POTI(Parameter_Hoehe_P,EE_Parameter.Hoehe_P,0,100); |
408 | CHK_POTI_MM(Parameter_Hoehe_P,EE_Parameter.Hoehe_P,0,100); |
393 | CHK_POTI(Parameter_Hoehe_ACC_Wirkung,EE_Parameter.Hoehe_ACC_Wirkung,0,255); |
409 | CHK_POTI(Parameter_Hoehe_ACC_Wirkung,EE_Parameter.Hoehe_ACC_Wirkung,0,255); |
394 | CHK_POTI(Parameter_KompassWirkung,EE_Parameter.KompassWirkung,0,255); |
410 | CHK_POTI(Parameter_KompassWirkung,EE_Parameter.KompassWirkung,0,255); |
395 | CHK_POTI(Parameter_Gyro_P,EE_Parameter.Gyro_P,10,255); |
411 | CHK_POTI_MM(Parameter_Gyro_P,EE_Parameter.Gyro_P,10,255); |
396 | CHK_POTI(Parameter_Gyro_I,EE_Parameter.Gyro_I,0,255); |
412 | CHK_POTI(Parameter_Gyro_I,EE_Parameter.Gyro_I,0,255); |
397 | CHK_POTI(Parameter_I_Faktor,EE_Parameter.I_Faktor,0,255); |
413 | CHK_POTI(Parameter_I_Faktor,EE_Parameter.I_Faktor,0,255); |
398 | CHK_POTI(Parameter_UserParam1,EE_Parameter.UserParam1,0,255); |
414 | CHK_POTI(Parameter_UserParam1,EE_Parameter.UserParam1,0,255); |
399 | CHK_POTI(Parameter_UserParam2,EE_Parameter.UserParam2,0,255); |
415 | CHK_POTI(Parameter_UserParam2,EE_Parameter.UserParam2,0,255); |
Line 406... | Line 422... | ||
406 | CHK_POTI(Parameter_ServoNickControl,EE_Parameter.ServoNickControl,0,255); |
422 | CHK_POTI(Parameter_ServoNickControl,EE_Parameter.ServoNickControl,0,255); |
407 | CHK_POTI(Parameter_LoopGasLimit,EE_Parameter.LoopGasLimit,0,255); |
423 | CHK_POTI(Parameter_LoopGasLimit,EE_Parameter.LoopGasLimit,0,255); |
408 | CHK_POTI(Parameter_AchsKopplung1, EE_Parameter.AchsKopplung1,0,255); |
424 | CHK_POTI(Parameter_AchsKopplung1, EE_Parameter.AchsKopplung1,0,255); |
409 | CHK_POTI(Parameter_AchsGegenKopplung1,EE_Parameter.AchsGegenKopplung1,0,255); |
425 | CHK_POTI(Parameter_AchsGegenKopplung1,EE_Parameter.AchsGegenKopplung1,0,255); |
410 | CHK_POTI(Parameter_DynamicStability,EE_Parameter.DynamicStability,0,255); |
426 | CHK_POTI(Parameter_DynamicStability,EE_Parameter.DynamicStability,0,255); |
- | 427 | CHK_POTI_MM(Parameter_J16Timing,EE_Parameter.J16Timing,1,255); |
|
- | 428 | CHK_POTI_MM(Parameter_J17Timing,EE_Parameter.J17Timing,1,255); |
|
- | 429 | CHK_POTI(Parameter_NaviGpsModeControl,EE_Parameter.NaviGpsModeControl,0,255); |
|
- | 430 | CHK_POTI(Parameter_NaviGpsGain,EE_Parameter.NaviGpsGain,0,255); |
|
- | 431 | CHK_POTI(Parameter_NaviGpsP,EE_Parameter.NaviGpsP,0,255); |
|
- | 432 | CHK_POTI(Parameter_NaviGpsI,EE_Parameter.NaviGpsI,0,255); |
|
- | 433 | CHK_POTI(Parameter_NaviGpsD,EE_Parameter.NaviGpsD,0,255); |
|
- | 434 | CHK_POTI(Parameter_NaviGpsACC,EE_Parameter.NaviGpsACC,0,255); |
|
- | 435 | CHK_POTI(Parameter_ExternalControl,EE_Parameter.ExternalControl,0,255); |
|
Line 411... | Line 436... | ||
411 | 436 | ||
412 | Ki = (float) Parameter_I_Faktor * 0.0001; |
437 | Ki = (float) Parameter_I_Faktor * 0.0001; |
413 | MAX_GAS = EE_Parameter.Gas_Max; |
438 | MAX_GAS = EE_Parameter.Gas_Max; |
414 | MIN_GAS = EE_Parameter.Gas_Min; |
439 | MIN_GAS = EE_Parameter.Gas_Min; |
Line 482... | Line 507... | ||
482 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
507 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
483 | if(SenderOkay > 140) |
508 | if(SenderOkay > 140) |
484 | { |
509 | { |
485 | Notlandung = 0; |
510 | Notlandung = 0; |
486 | RcLostTimer = EE_Parameter.NotGasZeit * 50; |
511 | RcLostTimer = EE_Parameter.NotGasZeit * 50; |
487 | if(GasMischanteil > 40) |
512 | if(GasMischanteil > 40 && MotorenEin) |
488 | { |
513 | { |
489 | if(modell_fliegt < 0xffff) modell_fliegt++; |
514 | if(modell_fliegt < 0xffff) modell_fliegt++; |
490 | } |
515 | } |
491 | if((modell_fliegt < 256)) |
516 | if((modell_fliegt < 256)) |
492 | { |
517 | { |
Line 497... | Line 522... | ||
497 | NeueKompassRichtungMerken = 1; |
522 | NeueKompassRichtungMerken = 1; |
498 | sollGier = 0; |
523 | sollGier = 0; |
499 | Mess_Integral_Gier = 0; |
524 | Mess_Integral_Gier = 0; |
500 | Mess_Integral_Gier2 = 0; |
525 | Mess_Integral_Gier2 = 0; |
501 | } |
526 | } |
502 | } |
527 | } else MikroKopterFlags |= FLAG_FLY; |
- | 528 | ||
503 | if((PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] > 80) && MotorenEin == 0) |
529 | if((PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] > 80) && MotorenEin == 0) |
504 | { |
530 | { |
505 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
531 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
506 | // auf Nullwerte kalibrieren |
532 | // auf Nullwerte kalibrieren |
507 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
533 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
Line 586... | Line 612... | ||
586 | Mess_IntegralRoll = 0; |
612 | Mess_IntegralRoll = 0; |
587 | Mess_IntegralNick2 = IntegralNick; |
613 | Mess_IntegralNick2 = IntegralNick; |
588 | Mess_IntegralRoll2 = IntegralRoll; |
614 | Mess_IntegralRoll2 = IntegralRoll; |
589 | SummeNick = 0; |
615 | SummeNick = 0; |
590 | SummeRoll = 0; |
616 | SummeRoll = 0; |
- | 617 | MikroKopterFlags |= FLAG_START; |
|
591 | } |
618 | } |
592 | } |
619 | } |
593 | else delay_einschalten = 0; |
620 | else delay_einschalten = 0; |
594 | //Auf Neutralwerte setzen |
621 | //Auf Neutralwerte setzen |
595 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
622 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
Line 639... | Line 666... | ||
639 | IntegralFaktor = ((float) Parameter_Gyro_I) / (44000 / STICK_GAIN); |
666 | IntegralFaktor = ((float) Parameter_Gyro_I) / (44000 / STICK_GAIN); |
Line 640... | Line 667... | ||
640 | 667 | ||
641 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
668 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
642 | //+ Digitale Steuerung per DubWise |
669 | //+ Digitale Steuerung per DubWise |
643 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
670 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
644 | #define KEY_VALUE (Parameter_UserParam8 * 4) //(Poti3 * 8) |
671 | #define KEY_VALUE (Parameter_ExternalControl * 4) //(Poti3 * 8) |
645 | if(DubWiseKeys[1]) beeptime = 10; |
672 | if(DubWiseKeys[1]) beeptime = 10; |
646 | if(DubWiseKeys[1] & DUB_KEY_UP) tmp_int = KEY_VALUE; else |
673 | if(DubWiseKeys[1] & DUB_KEY_UP) tmp_int = KEY_VALUE; else |
647 | if(DubWiseKeys[1] & DUB_KEY_DOWN) tmp_int = -KEY_VALUE; else tmp_int = 0; |
674 | if(DubWiseKeys[1] & DUB_KEY_DOWN) tmp_int = -KEY_VALUE; else tmp_int = 0; |
648 | ExternStickNick = (ExternStickNick * 7 + tmp_int) / 8; |
675 | ExternStickNick = (ExternStickNick * 7 + tmp_int) / 8; |
Line 659... | Line 686... | ||
659 | StickRoll += (STICK_GAIN * ExternStickRoll) / 8; |
686 | StickRoll += (STICK_GAIN * ExternStickRoll) / 8; |
660 | StickGier += STICK_GAIN * ExternStickGier; |
687 | StickGier += STICK_GAIN * ExternStickGier; |
661 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
688 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
662 | //+ Analoge Steuerung per Seriell |
689 | //+ Analoge Steuerung per Seriell |
663 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
690 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
664 | if(ExternControl.Config & 0x01 && Parameter_UserParam8 > 128) |
691 | if(ExternControl.Config & 0x01 && Parameter_ExternalControl > 128) |
665 | { |
692 | { |
666 | StickNick += (int) ExternControl.Nick * (int) EE_Parameter.Stick_P; |
693 | StickNick += (int) ExternControl.Nick * (int) EE_Parameter.Stick_P; |
667 | StickRoll += (int) ExternControl.Roll * (int) EE_Parameter.Stick_P; |
694 | StickRoll += (int) ExternControl.Roll * (int) EE_Parameter.Stick_P; |
668 | StickGier += ExternControl.Gier; |
695 | StickGier += ExternControl.Gier; |
669 | ExternHoehenValue = (int) ExternControl.Hight * (int)EE_Parameter.Hoehe_Verstaerkung; |
696 | ExternHoehenValue = (int) ExternControl.Hight * (int)EE_Parameter.Hoehe_Verstaerkung; |
Line 842... | Line 869... | ||
842 | // IntegralFehlerRoll = (IntegralFehlerRoll * 1 + tmp_long2) / 2; |
869 | // IntegralFehlerRoll = (IntegralFehlerRoll * 1 + tmp_long2) / 2; |
843 | if(GierGyroFehler > ABGLEICH_ANZAHL/2) AdNeutralGier++; |
870 | if(GierGyroFehler > ABGLEICH_ANZAHL/2) AdNeutralGier++; |
844 | if(GierGyroFehler <-ABGLEICH_ANZAHL/2) AdNeutralGier--; |
871 | if(GierGyroFehler <-ABGLEICH_ANZAHL/2) AdNeutralGier--; |
Line 845... | Line 872... | ||
845 | 872 | ||
846 | DebugOut.Analog[22] = MittelIntegralRoll / 26; |
- | |
- | 873 | DebugOut.Analog[22] = MittelIntegralRoll / 26; |
|
847 | 874 | //DebugOut.Analog[24] = GierGyroFehler; |
|
Line 848... | Line 875... | ||
848 | GierGyroFehler = 0; |
875 | GierGyroFehler = 0; |
849 | 876 | ||
Line 892... | Line 919... | ||
892 | } else last_n_n = 0; |
919 | } else last_n_n = 0; |
893 | } |
920 | } |
894 | else |
921 | else |
895 | { |
922 | { |
896 | cnt = 0; |
923 | cnt = 0; |
897 | KompassSignalSchlecht = 500; |
924 | KompassSignalSchlecht = 1000; |
898 | } |
925 | } |
899 | if(cnt > EE_Parameter.Driftkomp) cnt = EE_Parameter.Driftkomp; |
926 | if(cnt > EE_Parameter.Driftkomp) cnt = EE_Parameter.Driftkomp; |
900 | if(IntegralFehlerNick > FEHLER_LIMIT) AdNeutralNick += cnt; |
927 | if(IntegralFehlerNick > FEHLER_LIMIT) AdNeutralNick += cnt; |
901 | if(IntegralFehlerNick < -FEHLER_LIMIT) AdNeutralNick -= cnt; |
928 | if(IntegralFehlerNick < -FEHLER_LIMIT) AdNeutralNick -= cnt; |
Line 929... | Line 956... | ||
929 | else last_r_n = 1; |
956 | else last_r_n = 1; |
930 | } else last_r_n = 0; |
957 | } else last_r_n = 0; |
931 | } else |
958 | } else |
932 | { |
959 | { |
933 | cnt = 0; |
960 | cnt = 0; |
934 | KompassSignalSchlecht = 500; |
961 | KompassSignalSchlecht = 1000; |
935 | } |
962 | } |
Line 936... | Line 963... | ||
936 | 963 | ||
937 | if(cnt > EE_Parameter.Driftkomp) cnt = EE_Parameter.Driftkomp; |
964 | if(cnt > EE_Parameter.Driftkomp) cnt = EE_Parameter.Driftkomp; |
938 | if(IntegralFehlerRoll > FEHLER_LIMIT) AdNeutralRoll += cnt; |
965 | if(IntegralFehlerRoll > FEHLER_LIMIT) AdNeutralRoll += cnt; |
939 | if(IntegralFehlerRoll < -FEHLER_LIMIT) AdNeutralRoll -= cnt; |
- | |
940 | /*DebugOut.Analog[27] = ausgleichRoll; |
- | |
941 | DebugOut.Analog[23] = AdNeutralNick;//10*(AdNeutralNick - StartNeutralNick); |
- | |
942 | DebugOut.Analog[24] = 10*(AdNeutralRoll - StartNeutralRoll); |
- | |
943 | */ |
966 | if(IntegralFehlerRoll < -FEHLER_LIMIT) AdNeutralRoll -= cnt; |
944 | } |
967 | } |
945 | else |
968 | else |
946 | { |
969 | { |
947 | LageKorrekturRoll = 0; |
970 | LageKorrekturRoll = 0; |
Line 969... | Line 992... | ||
969 | // Gieren |
992 | // Gieren |
970 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
993 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
971 | // if(GasMischanteil < 35) { if(StickGier > 10) StickGier = 10; else if(StickGier < -10) StickGier = -10;}; |
994 | // if(GasMischanteil < 35) { if(StickGier > 10) StickGier = 10; else if(StickGier < -10) StickGier = -10;}; |
972 | if(abs(StickGier) > 15) // war 35 |
995 | if(abs(StickGier) > 15) // war 35 |
973 | { |
996 | { |
- | 997 | KompassSignalSchlecht = 1000; |
|
974 | if(!(EE_Parameter.GlobalConfig & CFG_KOMPASS_FIX)) |
998 | if(!(EE_Parameter.GlobalConfig & CFG_KOMPASS_FIX)) |
975 | { |
999 | { |
976 | NeueKompassRichtungMerken = 1; |
1000 | NeueKompassRichtungMerken = 1; |
977 | KompassStartwert = ErsatzKompass; |
1001 | KompassStartwert = ErsatzKompass; |
978 | KompassSignalSchlecht = 250; |
- | |
979 | }; |
1002 | }; |
980 | } |
1003 | } |
981 | tmp_int = (long) EE_Parameter.Gier_P * ((long)StickGier * abs(StickGier)) / 512L; // expo y = ax + bx² |
1004 | tmp_int = (long) EE_Parameter.Gier_P * ((long)StickGier * abs(StickGier)) / 512L; // expo y = ax + bx² |
982 | tmp_int += (EE_Parameter.Gier_P * StickGier) / 4; |
1005 | tmp_int += (EE_Parameter.Gier_P * StickGier) / 4; |
983 | sollGier = tmp_int; |
1006 | sollGier = tmp_int; |
Line 995... | Line 1018... | ||
995 | int w,v,r,fehler,korrektur; |
1018 | int w,v,r,fehler,korrektur; |
996 | w = abs(IntegralNick /512); // mit zunehmender Neigung den Einfluss drosseln |
1019 | w = abs(IntegralNick /512); // mit zunehmender Neigung den Einfluss drosseln |
997 | v = abs(IntegralRoll /512); |
1020 | v = abs(IntegralRoll /512); |
998 | if(v > w) w = v; // grösste Neigung ermitteln |
1021 | if(v > w) w = v; // grösste Neigung ermitteln |
999 | korrektur = w / 8 + 1; |
1022 | korrektur = w / 8 + 1; |
- | 1023 | fehler = ((540 + KompassValue - (ErsatzKompass/GIER_GRAD_FAKTOR)) % 360) - 180; |
|
- | 1024 | //DebugOut.Analog[25] = KompassSignalSchlecht; |
|
- | 1025 | if(!KompassSignalSchlecht && w < 25) |
|
- | 1026 | { |
|
- | 1027 | GierGyroFehler += fehler; |
|
1000 | if(w < 25 && NeueKompassRichtungMerken && !KompassSignalSchlecht) |
1028 | if(NeueKompassRichtungMerken) |
1001 | { |
1029 | { |
1002 | beeptime = 200; |
1030 | beeptime = 200; |
1003 | // KompassStartwert = KompassValue; |
1031 | // KompassStartwert = KompassValue; |
1004 | KompassStartwert = (ErsatzKompass/GIER_GRAD_FAKTOR); |
1032 | KompassStartwert = (ErsatzKompass/GIER_GRAD_FAKTOR); |
1005 | NeueKompassRichtungMerken = 0; |
1033 | NeueKompassRichtungMerken = 0; |
- | 1034 | } |
|
1006 | } |
1035 | } |
1007 | fehler = ((540 + KompassValue - (ErsatzKompass/GIER_GRAD_FAKTOR)) % 360) - 180; |
- | |
1008 | ErsatzKompass += (fehler * 8) / korrektur; |
1036 | ErsatzKompass += (fehler * 8) / korrektur; |
1009 | w = (w * Parameter_KompassWirkung) / 64; // auf die Wirkung normieren |
1037 | w = (w * Parameter_KompassWirkung) / 32; // auf die Wirkung normieren |
1010 | w = Parameter_KompassWirkung - w; // Wirkung ggf drosseln |
1038 | w = Parameter_KompassWirkung - w; // Wirkung ggf drosseln |
1011 | if(w > 0) |
1039 | if(w >= 0) |
1012 | { |
1040 | { |
1013 | if(!KompassSignalSchlecht) |
1041 | if(!KompassSignalSchlecht) |
1014 | { |
1042 | { |
1015 | GierGyroFehler += fehler; |
- | |
1016 | v = 64 + ((MaxStickNick + MaxStickRoll)) / 8; |
1043 | v = 64 + ((MaxStickNick + MaxStickRoll)) / 8; |
1017 | r = ((540 + (ErsatzKompass/GIER_GRAD_FAKTOR) - KompassStartwert) % 360) - 180; |
1044 | r = ((540 + (ErsatzKompass/GIER_GRAD_FAKTOR) - KompassStartwert) % 360) - 180; |
1018 | // r = KompassRichtung; |
1045 | // r = KompassRichtung; |
1019 | v = (r * w) / v; // nach Kompass ausrichten |
1046 | v = (r * w) / v; // nach Kompass ausrichten |
1020 | w = 3 * Parameter_KompassWirkung; |
1047 | w = 3 * Parameter_KompassWirkung; |
Line 1023... | Line 1050... | ||
1023 | if(v < -w) v = -w; |
1050 | if(v < -w) v = -w; |
1024 | Mess_Integral_Gier += v; |
1051 | Mess_Integral_Gier += v; |
1025 | } |
1052 | } |
1026 | if(KompassSignalSchlecht) KompassSignalSchlecht--; |
1053 | if(KompassSignalSchlecht) KompassSignalSchlecht--; |
1027 | } |
1054 | } |
1028 | else KompassSignalSchlecht = 250; // so lange das Signal taub stellen --> ca. 0,5 sek |
1055 | else KompassSignalSchlecht = 500; // so lange das Signal taub stellen --> ca. 1 sek |
1029 | - | ||
1030 | } |
1056 | } |
1031 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1057 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
Line 1032... | Line 1058... | ||
1032 | 1058 | ||
1033 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1059 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |