Rev 676 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 676 | Rev 677 | ||
---|---|---|---|
Line 432... | Line 432... | ||
432 | dist_flown +=gps_g2t_act_v; // Vorgabe der Strecke anhand der Geschwindigkeit |
432 | dist_flown +=gps_g2t_act_v; // Vorgabe der Strecke anhand der Geschwindigkeit |
433 | gps_sub_state = GPS_HOME_FAST_IN_TOL; |
433 | gps_sub_state = GPS_HOME_FAST_IN_TOL; |
434 | } |
434 | } |
435 | else if ((d1 < GPS_G2T_FAST_TOL) && (d2 < GPS_G2T_FAST_TOL)) //nur weiter wenn Lage innerhalb der Toleranz |
435 | else if ((d1 < GPS_G2T_FAST_TOL) && (d2 < GPS_G2T_FAST_TOL)) //nur weiter wenn Lage innerhalb der Toleranz |
436 | { |
436 | { |
437 | if (gps_g2t_act_v > GPS_G2T_V_MAX/2) gps_g2t_act_v -= 1; //Geschwindigkeit auf Haaelte runter oder rauffahren |
437 | if (gps_g2t_act_v > GPS_G2T_V_MAX/2) gps_g2t_act_v -= 1; //Geschwindigkeit auf Haeflte runter oder rauffahren |
438 | else if (gps_g2t_act_v < GPS_G2T_V_MAX/2) gps_g2t_act_v += 1; //Geschwindigkeit erhoehen |
438 | else if (gps_g2t_act_v < GPS_G2T_V_MAX/2) gps_g2t_act_v += 1; |
439 | dist_flown +=gps_g2t_act_v; // Vorgabe der Strecke anhand der Geschwindigkeit |
439 | dist_flown +=gps_g2t_act_v; // Vorgabe der Strecke anhand der Geschwindigkeit |
440 | gps_sub_state = GPS_HOME_FAST_IN_TOL; |
440 | gps_sub_state = GPS_HOME_FAST_IN_TOL; |
441 | } |
441 | } |
442 | else //Den Lageregler in Ruhe arbeiten lassen weil ausserhalb der Toleranz |
442 | else //Den Lageregler in Ruhe arbeiten lassen weil ausserhalb der Toleranz |
443 | { |
443 | { |
444 | if (gps_g2t_act_v > 1) gps_g2t_act_v--; // Geschwindigkeit reduzieren |
444 | if (gps_g2t_act_v > 1) gps_g2t_act_v--; // Geschwindigkeit reduzieren |
445 | // dist_flown++; //Auch ausserhalb der Toleranz langsam erhoehen |
445 | // dist_flown++; //Auch ausserhalb der Toleranz langsam erhoehen |
446 | gps_sub_state = GPS_HOME_FAST_OUTOF_TOL; |
446 | gps_sub_state = GPS_HOME_FAST_OUTOF_TOL; |
447 | } |
447 | } |
448 | hold_reset_int = 0; // Integrator einsschalten |
448 | hold_reset_int = 1; // Integrator aussschalten |
449 | hold_fast = 1; // Regler fuer schnellen Flug |
449 | hold_fast = 1; // Regler fuer schnellen Flug |
450 | dist_frm_start_east = (int)(((long)dist_flown * (long)sin_i(hdng_2home))/1000); |
450 | dist_frm_start_east = (int)(((long)dist_flown * (long)sin_i(hdng_2home))/1000); |
451 | dist_frm_start_north = (int)(((long)dist_flown * (long)cos_i(hdng_2home))/1000); |
451 | dist_frm_start_north = (int)(((long)dist_flown * (long)cos_i(hdng_2home))/1000); |
452 | gps_rel_hold_position.utm_east = gps_rel_start_position.utm_east + dist_frm_start_east; //naechster Zielpunkt |
452 | gps_rel_hold_position.utm_east = gps_rel_start_position.utm_east + dist_frm_start_east; //naechster Zielpunkt |
453 | gps_rel_hold_position.utm_north = gps_rel_start_position.utm_north + dist_frm_start_north; //naechster Zielpunkt |
453 | gps_rel_hold_position.utm_north = gps_rel_start_position.utm_north + dist_frm_start_north; //naechster Zielpunkt |
Line 517... | Line 517... | ||
517 | gps_updte_flag = 0; // Neue Werte koennen vom GPS geholt werden |
517 | gps_updte_flag = 0; // Neue Werte koennen vom GPS geholt werden |
518 | dist_east = (int)delta_east; //merken |
518 | dist_east = (int)delta_east; //merken |
519 | dist_north = (int)delta_north; |
519 | dist_north = (int)delta_north; |
Line 520... | Line 520... | ||
520 | 520 | ||
- | 521 | ||
521 | 522 | // #define GPSINT_MAX 3000 // Neues Verfahren ab 30.12.2007 bei Integratoroverflow |
|
522 | #define GPSINT_MAX 3000 // Neues Verfahren ab 30.12.2007 bei Integratoroverflow |
523 | long int gpsintmax; |
- | 524 | if (Parameter_UserParam2 > 0) |
|
- | 525 | { |
|
- | 526 | gpsintmax = (GPS_NICKROLL_MAX * GPS_V * GPS_USR_PAR_FKT * ((32*4)/10))/(long)Parameter_UserParam2; //auf ungefeahren Maximalwert begrenzen |
|
523 | if ((abs(int_east) > GPSINT_MAX) || (abs(int_north)> GPSINT_MAX)) |
527 | if ((abs(int_east) > (int)gpsintmax) || (abs(int_north)> (int)gpsintmax)) |
- | 528 | { |
|
- | 529 | int_ovfl_cnt += 1; // Zahl der Overflows zaehlen |
|
- | 530 | } |
|
- | 531 | if (int_ovfl_cnt > 0) //bei Overflow Wert Integratorwert reduzieren |
|
- | 532 | { |
|
- | 533 | int_ovfl_cnt -= 1; |
|
- | 534 | int_east = (int_east*7)/8; // Wert reduzieren |
|
- | 535 | int_north = (int_north*7)/8; |
|
- | 536 | } |
|
- | 537 | ||
- | 538 | if (hold_reset_int > 0) //Im Schnellen Mode Integrator abschalten |
|
- | 539 | { |
|
- | 540 | int_east = 0; |
|
524 | { |
541 | int_north = 0; |
525 | if (int_ovfl_cnt < 40) int_ovfl_cnt += 1; // Zahl der Overflows zaehlen |
542 | } |
526 | } |
543 | } |
527 | if (int_ovfl_cnt > 0) //bei Overflow Wert Integratorwert reduzieren |
544 | else // Integrator deaktiviert |
528 | { |
- | |
529 | int_ovfl_cnt -= 1; |
545 | { |
530 | int_east = (int_east*7)/8; // Wert reduzieren |
546 | int_east = 0; |
Line 531... | Line -... | ||
531 | int_north = (int_north*7)/8; |
- | |
532 | } |
- | |
533 | 547 | int_north = 0; |
|
534 | if (hold_reset_int > 0) //Im Schnellen Mode Integrator abschalten |
548 | } |
535 | { |
- | |
Line 536... | Line 549... | ||
536 | int_east = 0; |
549 | |
537 | int_north = 0; |
550 | debug_gp_4 = (int)int_east; // zum Debuggen |
538 | } |
551 | debug_gp_5 = (int)int_north; // zum Debuggen |
539 | 552 | ||
540 | //I Werte begrenzen |
553 | //I Werte begrenzen |
541 | #define INT1_MAX (GPS_NICKROLL_MAX * GPS_V*5)/10// auf 40 Prozent des maximalen Nick/Rollwert begrenzen |
554 | #define INT1_MAX (GPS_NICKROLL_MAX * GPS_V*2)/10// auf 20 Prozent des maximalen Nick/Rollwert begrenzen |
542 | int_east1 = ((((long)int_east) * Parameter_UserParam2)/32)/GPS_USR_PAR_FKT; |
555 | int_east1 = ((((long)int_east) * Parameter_UserParam2)/32)/GPS_USR_PAR_FKT; |
Line 550... | Line 563... | ||
550 | { |
563 | { |
551 | amplfy_speed_east = DIFF_Y_F_MAX; |
564 | amplfy_speed_east = DIFF_Y_F_MAX; |
552 | amplfy_speed_north = DIFF_Y_F_MAX; |
565 | amplfy_speed_north = DIFF_Y_F_MAX; |
553 | amplfy_speed_east *= (Parameter_UserParam3/GPS_USR_PAR_FKT); |
566 | amplfy_speed_east *= (Parameter_UserParam3/GPS_USR_PAR_FKT); |
554 | amplfy_speed_north *= (Parameter_UserParam3/GPS_USR_PAR_FKT); |
567 | amplfy_speed_north *= (Parameter_UserParam3/GPS_USR_PAR_FKT); |
555 | speed_east = (speed_east * (long)amplfy_speed_east) /100; |
568 | speed_east = (speed_east * (long)amplfy_speed_east) /50; |
556 | speed_north = (speed_north * (long)amplfy_speed_north)/100; |
569 | speed_north = (speed_north * (long)amplfy_speed_north)/50; |
557 | // D Werte begrenzen |
570 | // D Werte begrenzen |
558 | #define D_F_MAX (GPS_NICKROLL_MAX * GPS_V*7)/10 // auf 70 Prozent des Maximalen Nick/Rollwert begrenzen |
571 | #define D_F_MAX (GPS_NICKROLL_MAX * GPS_V*7)/10 // auf 70 Prozent des Maximalen Nick/Rollwert begrenzen |
559 | if (speed_east > D_F_MAX) speed_east = D_F_MAX; |
572 | if (speed_east > D_F_MAX) speed_east = D_F_MAX; |
560 | else if (speed_east < -D_F_MAX) speed_east = -D_F_MAX; |
573 | else if (speed_east < -D_F_MAX) speed_east = -D_F_MAX; |
561 | if (speed_north > D_F_MAX) speed_north = D_F_MAX; |
574 | if (speed_north > D_F_MAX) speed_north = D_F_MAX; |