Rev 1153 | Rev 1166 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1153 | Rev 1155 | ||
---|---|---|---|
Line 147... | Line 147... | ||
147 | unsigned int modell_fliegt = 0; |
147 | unsigned int modell_fliegt = 0; |
148 | unsigned char MikroKopterFlags = 0; |
148 | unsigned char MikroKopterFlags = 0; |
149 | long GIER_GRAD_FAKTOR = 1291; |
149 | long GIER_GRAD_FAKTOR = 1291; |
150 | signed int KopplungsteilNickRoll,KopplungsteilRollNick; |
150 | signed int KopplungsteilNickRoll,KopplungsteilRollNick; |
Line -... | Line 151... | ||
- | 151 | ||
151 | 152 | ||
152 | void Piep(unsigned char Anzahl) |
153 | void Piep(unsigned char Anzahl) |
153 | { |
154 | { |
154 | while(Anzahl--) |
155 | while(Anzahl--) |
155 | { |
156 | { |
Line 196... | Line 197... | ||
196 | AdNeutralGierBias = AdNeutralGier; |
197 | AdNeutralGierBias = AdNeutralGier; |
197 | StartNeutralRoll = AdNeutralRoll; |
198 | StartNeutralRoll = AdNeutralRoll; |
198 | StartNeutralNick = AdNeutralNick; |
199 | StartNeutralNick = AdNeutralNick; |
199 | if(eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_NICK]) > 4) |
200 | if(eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_NICK]) > 4) |
200 | { |
201 | { |
201 | NeutralAccY = abs(Mittelwert_AccRoll) / ACC_AMPLIFY; |
202 | NeutralAccY = abs(Mittelwert_AccRoll) / (2*ACC_AMPLIFY); |
202 | NeutralAccX = abs(Mittelwert_AccNick) / ACC_AMPLIFY; |
203 | NeutralAccX = abs(Mittelwert_AccNick) / (2*ACC_AMPLIFY); |
203 | NeutralAccZ = Aktuell_az; |
204 | NeutralAccZ = Aktuell_az; |
204 | } |
205 | } |
205 | else |
206 | else |
206 | { |
207 | { |
207 | NeutralAccX = (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_NICK]) * 256 + (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_NICK+1]); |
208 | NeutralAccX = (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_NICK]) * 256 + (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_NICK+1]); |
Line 265... | Line 266... | ||
265 | NaviAccNick += AdWertAccNick; |
266 | NaviAccNick += AdWertAccNick; |
266 | NaviAccRoll += AdWertAccRoll; |
267 | NaviAccRoll += AdWertAccRoll; |
267 | NaviCntAcc++; |
268 | NaviCntAcc++; |
268 | IntegralAccZ += Aktuell_az - NeutralAccZ; |
269 | IntegralAccZ += Aktuell_az - NeutralAccZ; |
Line -... | Line 270... | ||
- | 270 | ||
- | 271 | if(abs(Mittelwert_AccRoll > 50)) { DebugOut.Analog[16]++; DebugOut.Analog[17] = Mittelwert_AccRoll;}; |
|
- | 272 | ||
- | 273 | //++++++++++++++++++++++++++++++++++++++++++++++++ |
|
- | 274 | // ADC einschalten |
|
- | 275 | AdReady = 0; |
|
- | 276 | ANALOG_ON; |
|
- | 277 | //++++++++++++++++++++++++++++++++++++++++++++++++ |
|
269 | 278 | ||
270 | if(Mess_IntegralRoll > 93000L) winkel_roll = 93000L; |
279 | if(Mess_IntegralRoll > 93000L) winkel_roll = 93000L; |
271 | else if(Mess_IntegralRoll <-93000L) winkel_roll = -93000L; |
280 | else if(Mess_IntegralRoll <-93000L) winkel_roll = -93000L; |
Line 272... | Line 281... | ||
272 | else winkel_roll = Mess_IntegralRoll; |
281 | else winkel_roll = Mess_IntegralRoll; |
Line 366... | Line 375... | ||
366 | { |
375 | { |
367 | if(AdWertNick > 2000) MesswertNick = +1000; |
376 | if(AdWertNick > 2000) MesswertNick = +1000; |
368 | if(AdWertNick > 2015) MesswertNick = +2000; |
377 | if(AdWertNick > 2015) MesswertNick = +2000; |
369 | } |
378 | } |
Line 370... | Line -... | ||
370 | - | ||
371 | //++++++++++++++++++++++++++++++++++++++++++++++++ |
- | |
372 | // ADC einschalten |
- | |
373 | ANALOG_ON; |
- | |
374 | //++++++++++++++++++++++++++++++++++++++++++++++++ |
- | |
375 | 379 | ||
376 | Integral_Gier = Mess_Integral_Gier; |
380 | Integral_Gier = Mess_Integral_Gier; |
377 | IntegralNick = Mess_IntegralNick; |
381 | IntegralNick = Mess_IntegralNick; |
378 | IntegralRoll = Mess_IntegralRoll; |
382 | IntegralRoll = Mess_IntegralRoll; |
379 | IntegralNick2 = Mess_IntegralNick2; |
383 | IntegralNick2 = Mess_IntegralNick2; |
Line 544... | Line 548... | ||
544 | //############################################################################ |
548 | //############################################################################ |
545 | // |
549 | // |
546 | void MotorRegler(void) |
550 | void MotorRegler(void) |
547 | //############################################################################ |
551 | //############################################################################ |
548 | { |
552 | { |
549 | int motorwert,pd_ergebnis, pd_ergebnis_nick,pd_ergebnis_roll,h,tmp_int; |
553 | int motorwert,pd_ergebnis_nick,pd_ergebnis_roll,h,tmp_int; |
550 | int GierMischanteil,GasMischanteil; |
554 | int GierMischanteil,GasMischanteil; |
551 | static long SummeNick=0,SummeRoll=0; |
555 | static long SummeNick=0,SummeRoll=0; |
552 | static long sollGier = 0,tmp_long,tmp_long2; |
556 | static long sollGier = 0,tmp_long,tmp_long2; |
553 | static long IntegralFehlerNick = 0; |
557 | static long IntegralFehlerNick = 0; |
554 | static long IntegralFehlerRoll = 0; |
558 | static long IntegralFehlerRoll = 0; |
Line 924... | Line 928... | ||
924 | if(abs(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]) > 25) |
928 | if(abs(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]) > 25) |
925 | { |
929 | { |
926 | tmp_long /= 3; |
930 | tmp_long /= 3; |
927 | tmp_long2 /= 3; |
931 | tmp_long2 /= 3; |
928 | } |
932 | } |
- | 933 | ||
929 | #define AUSGLEICH 32 |
934 | #define AUSGLEICH 32 |
930 | if(tmp_long > AUSGLEICH) tmp_long = AUSGLEICH; |
935 | if(tmp_long > AUSGLEICH) tmp_long = AUSGLEICH; |
931 | if(tmp_long < -AUSGLEICH) tmp_long =-AUSGLEICH; |
936 | if(tmp_long < -AUSGLEICH) tmp_long =-AUSGLEICH; |
932 | if(tmp_long2 > AUSGLEICH) tmp_long2 = AUSGLEICH; |
937 | if(tmp_long2 > AUSGLEICH) tmp_long2 = AUSGLEICH; |
933 | if(tmp_long2 <-AUSGLEICH) tmp_long2 =-AUSGLEICH; |
938 | if(tmp_long2 <-AUSGLEICH) tmp_long2 =-AUSGLEICH; |
934 | } |
939 | } |
Line 1336... | Line 1341... | ||
1336 | } |
1341 | } |
1337 | } |
1342 | } |
1338 | if(GasMischanteil > (MAX_GAS - 20) * STICK_GAIN) GasMischanteil = (MAX_GAS - 20) * STICK_GAIN; |
1343 | if(GasMischanteil > (MAX_GAS - 20) * STICK_GAIN) GasMischanteil = (MAX_GAS - 20) * STICK_GAIN; |
Line 1339... | Line -... | ||
1339 | - | ||
1340 | 1344 | ||
1341 | #ifdef OCTO |
1345 | |
1342 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1346 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1343 | // + Mischer und PI-Regler |
1347 | // + Mischer und PI-Regler |
1344 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1348 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
Line 1389... | Line 1393... | ||
1389 | pd_ergebnis_roll = DiffRoll + SummeRoll / Ki; // PI-Regler für Roll |
1393 | pd_ergebnis_roll = DiffRoll + SummeRoll / Ki; // PI-Regler für Roll |
1390 | tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
1394 | tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
1391 | if(pd_ergebnis_roll > tmp_int) pd_ergebnis_roll = tmp_int; |
1395 | if(pd_ergebnis_roll > tmp_int) pd_ergebnis_roll = tmp_int; |
1392 | if(pd_ergebnis_roll < -tmp_int) pd_ergebnis_roll = -tmp_int; |
1396 | if(pd_ergebnis_roll < -tmp_int) pd_ergebnis_roll = -tmp_int; |
Line -... | Line 1397... | ||
- | 1397 | ||
- | 1398 | #ifndef OCTO |
|
- | 1399 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|
- | 1400 | // Quadro-Mischer |
|
- | 1401 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|
- | 1402 | motorwert = GasMischanteil + pd_ergebnis_nick + GierMischanteil; // Mischer |
|
- | 1403 | motorwert /= STICK_GAIN; CHECK_MIN_MAX(motorwert,MIN_GAS,MAX_GAS); |
|
- | 1404 | Motor_Vorne = motorwert; |
|
- | 1405 | ||
- | 1406 | motorwert = GasMischanteil - pd_ergebnis_nick + GierMischanteil; |
|
- | 1407 | motorwert /= STICK_GAIN; CHECK_MIN_MAX(motorwert,MIN_GAS,MAX_GAS); |
|
- | 1408 | Motor_Hinten = motorwert; |
|
- | 1409 | ||
- | 1410 | motorwert = GasMischanteil + pd_ergebnis_roll - GierMischanteil; |
|
- | 1411 | motorwert /= STICK_GAIN; CHECK_MIN_MAX(motorwert,MIN_GAS,MAX_GAS); |
|
- | 1412 | Motor_Links = motorwert; |
|
- | 1413 | ||
- | 1414 | motorwert = GasMischanteil - pd_ergebnis_roll - GierMischanteil; |
|
- | 1415 | motorwert /= STICK_GAIN; CHECK_MIN_MAX(motorwert,MIN_GAS,MAX_GAS); |
|
- | 1416 | Motor_Rechts = motorwert; |
|
- | 1417 | // +++++++++++++++++++++++++++++++++++++++++++++++ |
|
- | 1418 | ||
1393 | 1419 | #else |
|
1394 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1420 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1395 | // Octo-Mischer |
1421 | // Octo-Mischer |
1396 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1422 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1397 | motorwert = GasMischanteil + pd_ergebnis_nick + pd_ergebnis_roll + GierMischanteil; |
- | |
1398 | motorwert /= STICK_GAIN; |
- | |
1399 | if ((motorwert < 0)) motorwert = 0; |
- | |
1400 | else if(motorwert > MAX_GAS) motorwert = MAX_GAS; |
1423 | motorwert = GasMischanteil + pd_ergebnis_nick + pd_ergebnis_roll + GierMischanteil; |
1401 | if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
1424 | motorwert /= STICK_GAIN; CHECK_MIN_MAX(motorwert,MIN_GAS,MAX_GAS); |
Line 1402... | Line 1425... | ||
1402 | Motor1 = motorwert; |
1425 | Motor1 = motorwert; |
1403 | - | ||
1404 | motorwert = GasMischanteil + pd_ergebnis_nick - pd_ergebnis_roll - GierMischanteil; |
- | |
1405 | motorwert /= STICK_GAIN; |
- | |
1406 | if ((motorwert < 0)) motorwert = 0; |
1426 | |
1407 | else if(motorwert > MAX_GAS) motorwert = MAX_GAS; |
1427 | motorwert = GasMischanteil + pd_ergebnis_nick - pd_ergebnis_roll - GierMischanteil; |
Line 1408... | Line 1428... | ||
1408 | if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
1428 | motorwert /= STICK_GAIN; CHECK_MIN_MAX(motorwert,MIN_GAS,MAX_GAS); |
1409 | Motor2 = motorwert; |
- | |
1410 | - | ||
1411 | motorwert = GasMischanteil + pd_ergebnis_nick - pd_ergebnis_roll + GierMischanteil; |
- | |
1412 | motorwert /= STICK_GAIN; |
1429 | Motor2 = motorwert; |
1413 | if ((motorwert < 0)) motorwert = 0; |
1430 | |
Line 1414... | Line 1431... | ||
1414 | else if(motorwert > MAX_GAS) motorwert = MAX_GAS; |
1431 | motorwert = GasMischanteil + pd_ergebnis_nick - pd_ergebnis_roll + GierMischanteil; |
1415 | if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
- | |
1416 | Motor3 = motorwert; |
- | |
1417 | - | ||
1418 | motorwert = GasMischanteil - pd_ergebnis_nick - pd_ergebnis_roll - GierMischanteil; |
1432 | motorwert /= STICK_GAIN; CHECK_MIN_MAX(motorwert,MIN_GAS,MAX_GAS); |
1419 | motorwert /= STICK_GAIN; |
1433 | Motor3 = motorwert; |
Line 1420... | Line 1434... | ||
1420 | if ((motorwert < 0)) motorwert = 0; |
1434 | |
1421 | else if(motorwert > MAX_GAS) motorwert = MAX_GAS; |
- | |
1422 | if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
- | |
1423 | Motor4 = motorwert; |
- | |
1424 | 1435 | motorwert = GasMischanteil - pd_ergebnis_nick - pd_ergebnis_roll - GierMischanteil; |
|
1425 | motorwert = GasMischanteil - pd_ergebnis_nick - pd_ergebnis_roll + GierMischanteil; |
1436 | motorwert /= STICK_GAIN; CHECK_MIN_MAX(motorwert,MIN_GAS,MAX_GAS); |
Line 1426... | Line 1437... | ||
1426 | motorwert /= STICK_GAIN; |
1437 | Motor4 = motorwert; |
1427 | if ((motorwert < 0)) motorwert = 0; |
- | |
1428 | else if(motorwert > MAX_GAS) motorwert = MAX_GAS; |
- | |
1429 | if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
- | |
1430 | Motor5 = motorwert; |
1438 | |
1431 | 1439 | motorwert = GasMischanteil - pd_ergebnis_nick - pd_ergebnis_roll + GierMischanteil; |
|
Line 1432... | Line 1440... | ||
1432 | motorwert = GasMischanteil - pd_ergebnis_nick + pd_ergebnis_roll - GierMischanteil; |
1440 | motorwert /= STICK_GAIN; CHECK_MIN_MAX(motorwert,MIN_GAS,MAX_GAS); |
1433 | motorwert /= STICK_GAIN; |
- | |
1434 | if ((motorwert < 0)) motorwert = 0; |
- | |
1435 | else if(motorwert > MAX_GAS) motorwert = MAX_GAS; |
- | |
1436 | if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
1441 | Motor5 = motorwert; |
1437 | Motor6 = motorwert; |
1442 | |
Line 1438... | Line 1443... | ||
1438 | 1443 | motorwert = GasMischanteil - pd_ergebnis_nick + pd_ergebnis_roll - GierMischanteil; |
|
1439 | motorwert = GasMischanteil - pd_ergebnis_nick + pd_ergebnis_roll + GierMischanteil; |
- | |
1440 | motorwert /= STICK_GAIN; |
- | |
1441 | if ((motorwert < 0)) motorwert = 0; |
- | |
1442 | else if(motorwert > MAX_GAS) motorwert = MAX_GAS; |
1444 | motorwert /= STICK_GAIN; CHECK_MIN_MAX(motorwert,MIN_GAS,MAX_GAS); |
1443 | if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
1445 | Motor6 = motorwert; |
1444 | Motor7 = motorwert; |
1446 | |
- | 1447 | motorwert = GasMischanteil - pd_ergebnis_nick + pd_ergebnis_roll + GierMischanteil; |
|
1445 | 1448 | motorwert /= STICK_GAIN; CHECK_MIN_MAX(motorwert,MIN_GAS,MAX_GAS); |
|
1446 | motorwert = GasMischanteil + pd_ergebnis_nick + pd_ergebnis_roll - GierMischanteil; |
1449 | Motor7 = motorwert; |
1447 | motorwert /= STICK_GAIN; |
1450 | |
1448 | if ((motorwert < 0)) motorwert = 0; |
1451 | motorwert = GasMischanteil + pd_ergebnis_nick + pd_ergebnis_roll - GierMischanteil; |
1449 | else if(motorwert > MAX_GAS) motorwert = MAX_GAS; |
1452 | motorwert /= STICK_GAIN; CHECK_MIN_MAX(motorwert,MIN_GAS,MAX_GAS); |
1450 | if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
1453 | Motor8 = motorwert; |
1451 | Motor8 = motorwert; |
1454 | // +++++++++++++++++++++++++++++++++++++++++++++++ |
1452 | // +++++++++++++++++++++++++++++++++++++++++++++++ |
- | |
1453 | /* |
- | |
1454 | if(Poti1 > 20) Motor1 = 0; |
- | |
1455 | if(Poti1 > 90) Motor6 = 0; |
- | |
1456 | if(Poti1 > 140) Motor2 = 0; |
- | |
1457 | if(Poti1 > 200) Motor7 = 0; |
- | |
1458 | */ |
- | |
1459 | } |
- | |
1460 | #else |
- | |
1461 | - | ||
1462 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
- | |
1463 | // + Mischer und PI-Regler |
- | |
1464 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
- | |
1465 | DebugOut.Analog[7] = GasMischanteil; |
- | |
1466 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
- | |
1467 | // Gier-Anteil |
- | |
1468 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
- | |
1469 | #define MUL_G 1.0 |
- | |
1470 | GierMischanteil = MesswertGier - sollGier * STICK_GAIN; // Regler für Gier |
- | |
1471 | //GierMischanteil = 0; |
- | |
1472 | #define MIN_GIERGAS (40*STICK_GAIN) // unter diesem Gaswert trotzdem Gieren |
- | |
1473 | if(GasMischanteil > MIN_GIERGAS) |
- | |
1474 | { |
- | |
1475 | if(GierMischanteil > (GasMischanteil / 2)) GierMischanteil = GasMischanteil / 2; |
- | |
1476 | if(GierMischanteil < -(GasMischanteil / 2)) GierMischanteil = -(GasMischanteil / 2); |
- | |
1477 | } |
- | |
1478 | else |
- | |
1479 | { |
- | |
1480 | if(GierMischanteil > (MIN_GIERGAS / 2)) GierMischanteil = MIN_GIERGAS / 2; |
- | |
1481 | if(GierMischanteil < -(MIN_GIERGAS / 2)) GierMischanteil = -(MIN_GIERGAS / 2); |
- | |
1482 | } |
- | |
1483 | tmp_int = MAX_GAS*STICK_GAIN; |
- | |
1484 | if(GierMischanteil > ((tmp_int - GasMischanteil))) GierMischanteil = ((tmp_int - GasMischanteil)); |
- | |
1485 | if(GierMischanteil < -((tmp_int - GasMischanteil))) GierMischanteil = -((tmp_int - GasMischanteil)); |
- | |
1486 | - | ||
1487 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
- | |
1488 | // Nick-Achse |
- | |
1489 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
- | |
1490 | DiffNick = MesswertNick - StickNick; // Differenz bestimmen |
- | |
1491 | if(IntegralFaktor) SummeNick += IntegralNickMalFaktor - StickNick; // I-Anteil bei Winkelregelung |
- | |
1492 | else SummeNick += DiffNick; // I-Anteil bei HH |
- | |
1493 | if(SummeNick > (STICK_GAIN * 16000L)) SummeNick = (STICK_GAIN * 16000L); |
- | |
1494 | if(SummeNick < -(16000L * STICK_GAIN)) SummeNick = -(16000L * STICK_GAIN); |
- | |
1495 | pd_ergebnis = DiffNick + SummeNick / Ki; // PI-Regler für Nick |
- | |
1496 | // Motor Vorn |
- | |
1497 | tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
- | |
1498 | if(pd_ergebnis > tmp_int) pd_ergebnis = tmp_int; |
- | |
1499 | if(pd_ergebnis < -tmp_int) pd_ergebnis = -tmp_int; |
- | |
1500 | - | ||
1501 | motorwert = GasMischanteil + pd_ergebnis + GierMischanteil; // Mischer |
- | |
1502 | motorwert /= STICK_GAIN; |
- | |
1503 | if ((motorwert < 0)) motorwert = 0; |
- | |
1504 | else if(motorwert > MAX_GAS) motorwert = MAX_GAS; |
- | |
1505 | if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
- | |
1506 | Motor_Vorne = motorwert; |
- | |
1507 | // Motor Heck |
- | |
1508 | motorwert = GasMischanteil - pd_ergebnis + GierMischanteil; |
- | |
1509 | motorwert /= STICK_GAIN; |
- | |
1510 | if ((motorwert < 0)) motorwert = 0; |
- | |
1511 | else if(motorwert > MAX_GAS) motorwert = MAX_GAS; |
- | |
1512 | if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
- | |
1513 | Motor_Hinten = motorwert; |
- | |
1514 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
- | |
1515 | // Roll-Achse |
- | |
1516 | // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
- | |
1517 | DiffRoll = MesswertRoll - StickRoll; // Differenz bestimmen |
- | |
1518 | if(IntegralFaktor) SummeRoll += IntegralRollMalFaktor - StickRoll;// I-Anteil bei Winkelregelung |
- | |
1519 | else SummeRoll += DiffRoll; // I-Anteil bei HH |
- | |
1520 | if(SummeRoll > (STICK_GAIN * 16000L)) SummeRoll = (STICK_GAIN * 16000L); |
- | |
1521 | if(SummeRoll < -(16000L * STICK_GAIN)) SummeRoll = -(16000L * STICK_GAIN); |
- | |
1522 | pd_ergebnis = DiffRoll + SummeRoll / Ki; // PI-Regler für Roll |
- | |
1523 | tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
- | |
1524 | if(pd_ergebnis > tmp_int) pd_ergebnis = tmp_int; |
- | |
1525 | if(pd_ergebnis < -tmp_int) pd_ergebnis = -tmp_int; |
- | |
1526 | // Motor Links |
- | |
1527 | motorwert = GasMischanteil + pd_ergebnis - GierMischanteil; |
- | |
1528 | motorwert /= STICK_GAIN; |
- | |
1529 | if ((motorwert < 0)) motorwert = 0; |
- | |
1530 | else if(motorwert > MAX_GAS) motorwert = MAX_GAS; |
- | |
1531 | if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
- | |
1532 | Motor_Links = motorwert; |
- | |
1533 | // Motor Rechts |
- | |
1534 | motorwert = GasMischanteil - pd_ergebnis - GierMischanteil; |
- | |
1535 | motorwert /= STICK_GAIN; |
- | |
1536 | if ((motorwert < 0)) motorwert = 0; |
- | |
1537 | else if(motorwert > MAX_GAS) motorwert = MAX_GAS; |
- | |
1538 | if (motorwert < MIN_GAS) motorwert = MIN_GAS; |
- | |
1539 | Motor_Rechts = motorwert; |
- |