Subversion Repositories FlightCtrl

Rev

Rev 1221 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1221 Rev 1222
Line 124... Line 124...
124
int16_t NaviAccNick = 0, NaviAccRoll = 0, NaviCntAcc = 0;
124
int16_t NaviAccNick = 0, NaviAccRoll = 0, NaviCntAcc = 0;
Line 125... Line 125...
125
 
125
 
126
 
126
 
127
// MK flags
127
// MK flags
Line 128... Line 128...
128
uint16_t ModelIsFlying = 0;
128
uint16_t ModelIsFlying = 0;
Line 129... Line 129...
129
uint8_t  MKFlags = 0;
129
uint8_t  volatile MKFlags = 0;
-
 
130
 
-
 
131
int32_t TurnOver180Nick = 250000L, TurnOver180Roll = 250000L;
130
 
132
 
Line 131... Line 133...
131
int32_t TurnOver180Nick = 250000L, TurnOver180Roll = 250000L;
133
uint8_t GyroPFactor, GyroIFactor;       // the PD factors for the attitude control
Line 132... Line -...
132
 
-
 
Line 133... Line 134...
133
uint8_t GyroPFactor, GyroIFactor; // the PD factors for the attitude control
134
uint8_t GyroYawPFactor, GyroYawIFactor; // the PD factors for the yae control
Line 134... Line 135...
134
int16_t Ki = 10300 / 33;
135
 
135
 
136
int16_t Ki = 10300 / 33;
136
int16_t  Poti1 = 0, Poti2 = 0, Poti3 = 0, Poti4 = 0, Poti5 = 0, Poti6 = 0, Poti7 = 0, Poti8 = 0;
137
 
Line 156... Line 157...
156
 
157
 
157
uint8_t LoopingNick = 0, LoopingRoll = 0;
158
uint8_t LoopingNick = 0, LoopingRoll = 0;
Line 158... Line 159...
158
uint8_t LoopingLeft = 0, LoopingRight = 0, LoopingDown = 0, LoopingTop = 0;
159
uint8_t LoopingLeft = 0, LoopingRight = 0, LoopingDown = 0, LoopingTop = 0;
Line 159... Line 160...
159
 
160
 
160
 
161
 
Line 527... Line 528...
527
/************************************************************************/
528
/************************************************************************/
528
/*  Transmit Motor Data via I2C                                         */
529
/*  Transmit Motor Data via I2C                                         */
529
/************************************************************************/
530
/************************************************************************/
530
void SendMotorData(void)
531
void SendMotorData(void)
531
{
532
{
-
 
533
        uint8_t i;
532
    if(!(MKFlags & MKFLAG_MOTOR_RUN))
534
    if(!(MKFlags & MKFLAG_MOTOR_RUN))
533
    {
535
    {
534
                #ifdef USE_QUADRO
-
 
535
                Motor1 = 0;
-
 
536
                Motor2 = 0;
-
 
537
                Motor3 = 0;
-
 
538
                Motor4 = 0;
-
 
539
                if(MotorTest[0]) Motor1 = MotorTest[0];
-
 
540
                if(MotorTest[1]) Motor2 = MotorTest[1];
-
 
541
                if(MotorTest[2]) Motor3 = MotorTest[2];
-
 
542
                if(MotorTest[3]) Motor4 = MotorTest[3];
-
 
543
                #else
-
 
544
                Motor1 = 0;
-
 
545
                Motor2 = 0;
-
 
546
                Motor3 = 0;
-
 
547
                Motor4 = 0;
-
 
548
                Motor5 = 0;
-
 
549
                Motor6 = 0;
-
 
550
                Motor7 = 0;
-
 
551
                Motor8 = 0;
-
 
552
                if(MotorTest[0]) {Motor1 = MotorTest[0]; Motor2 = MotorTest[0];}
-
 
553
                if(MotorTest[3]) {Motor3 = MotorTest[3]; Motor4 = MotorTest[3];}
-
 
554
                if(MotorTest[1]) {Motor5 = MotorTest[1]; Motor6 = MotorTest[1];}
-
 
555
                if(MotorTest[2]) {Motor7 = MotorTest[2]; Motor8 = MotorTest[2];}
-
 
556
 
-
 
557
                #endif
-
 
558
                MKFlags &= ~(MKFLAG_FLY|MKFLAG_START); // clear flag FLY and START if motors are off
536
                MKFlags &= ~(MKFLAG_FLY|MKFLAG_START); // clear flag FLY and START if motors are off
-
 
537
                for(i = 0; i < MAX_MOTORS; i++)
-
 
538
                {
-
 
539
                        if(!MotorTest_Active) Motor[i].SetPoint = 0;
-
 
540
                        else                  Motor[i].SetPoint = MotorTest[i];
-
 
541
                }
-
 
542
                if(MotorTest_Active) MotorTest_Active--;
559
        }
543
        }
560
        #ifdef USE_QUADRO
-
 
Line 561... Line 544...
561
 
544
 
562
        DebugOut.Analog[12] = Motor1; // Front
545
        DebugOut.Analog[12] = Motor[0].SetPoint; // Front
563
        DebugOut.Analog[13] = Motor2; // Rear
546
        DebugOut.Analog[13] = Motor[1].SetPoint; // Rear
564
        DebugOut.Analog[14] = Motor4; // Left
547
        DebugOut.Analog[14] = Motor[3].SetPoint; // Left
565
        DebugOut.Analog[15] = Motor3; // Right
-
 
566
        #else // OCTO Motor addresses are counted clockwise starting at the head
-
 
567
        DebugOut.Analog[12] = (Motor1 + Motor2) / 2;
-
 
568
        DebugOut.Analog[13] = (Motor5 + Motor6) / 2;
-
 
569
        DebugOut.Analog[14] = (Motor7 + Motor8) / 2;
-
 
570
        DebugOut.Analog[15] = (Motor3 + Motor4) / 2;
-
 
571
        #endif
548
        DebugOut.Analog[15] = Motor[2].SetPoint; // Right
572
    //Start I2C Interrupt Mode
549
    //Start I2C Interrupt Mode
573
    twi_state = TWI_STATE_MOTOR_TX;
-
 
574
    I2C_Start();
550
    I2C_Start(TWI_STATE_MOTOR_TX);
Line 575... Line -...
575
}
-
 
576
 
551
}
577
 
552
 
578
 
553
 
579
/************************************************************************/
554
/************************************************************************/
580
/*  Map the parameter to poti values                                    */
555
/*  Map the parameter to poti values                                    */
Line 650... Line 625...
650
/************************************************************************/
625
/************************************************************************/
651
/*  MotorControl                                                        */
626
/*  MotorControl                                                        */
652
/************************************************************************/
627
/************************************************************************/
653
void MotorControl(void)
628
void MotorControl(void)
654
{
629
{
655
        int16_t MotorValue, h, tmp_int;
630
        int16_t h, tmp_int;
Line 656... Line 631...
656
 
631
 
657
        // Mixer Fractions that are combined for Motor Control
632
        // Mixer Fractions that are combined for Motor Control
Line 658... Line 633...
658
        int16_t YawMixFraction, GasMixFraction, NickMixFraction, RollMixFraction;
633
        int16_t YawMixFraction, GasMixFraction, NickMixFraction, RollMixFraction;
Line 670... Line 645...
670
        static uint8_t HeightControlActive = 0;
645
        static uint8_t HeightControlActive = 0;
671
        static int16_t HeightControlGas = 0;
646
        static int16_t HeightControlGas = 0;
672
        static int8_t  TimerDebugOut = 0;
647
        static int8_t  TimerDebugOut = 0;
673
        static uint16_t UpdateCompassCourse = 0;
648
        static uint16_t UpdateCompassCourse = 0;
674
        // high resolution motor values for smoothing of PID motor outputs
649
        // high resolution motor values for smoothing of PID motor outputs
675
        static int16_t MotorValue1 = 0, MotorValue2 = 0, MotorValue3 = 0, MotorValue4 = 0;
-
 
676
        #ifndef USE_QUADRO
-
 
677
        static int16_t MotorValue5 = 0, MotorValue6 = 0, MotorValue7 = 0, MotorValue8 = 0;
650
        static int16_t MotorValue[MAX_MOTORS];
678
        #endif
651
        uint8_t i;
Line 679... Line 652...
679
 
652
 
680
        Mean();
653
        Mean();
Line 681... Line 654...
681
        GRN_ON;
654
        GRN_ON;
Line 960... Line 933...
960
                StickGas  = PPM_in[ParamSet.ChannelAssignment[CH_GAS]] + 120;// shift to positive numbers
933
                StickGas  = PPM_in[ParamSet.ChannelAssignment[CH_GAS]] + 120;// shift to positive numbers
Line 961... Line 934...
961
 
934
 
962
                // update gyro control loop factors
935
                // update gyro control loop factors
963
                GyroPFactor = FCParam.GyroP + 10;
936
                GyroPFactor = FCParam.GyroP + 10;
-
 
937
                GyroIFactor = FCParam.GyroI;
-
 
938
                GyroYawPFactor = FCParam.GyroP + 10;
Line 964... Line 939...
964
                GyroIFactor = FCParam.GyroI;
939
                GyroYawIFactor = FCParam.GyroI;
965
 
940
 
966
 
941
 
Line 1052... Line 1027...
1052
        {
1027
        {
1053
                StickYaw = 0;
1028
                StickYaw = 0;
1054
                StickNick = 0;
1029
                StickNick = 0;
1055
                StickRoll = 0;
1030
                StickRoll = 0;
1056
                GyroPFactor  = 90;
1031
                GyroPFactor  = 90;
1057
                GyroIFactor = 120;
1032
                GyroIFactor  = 120;
-
 
1033
                GyroYawPFactor = 90;
-
 
1034
                GyroYawIFactor = 120;
1058
                LoopingRoll = 0;
1035
                LoopingRoll = 0;
1059
                LoopingNick = 0;
1036
                LoopingNick = 0;
1060
                MaxStickNick = 0;
1037
                MaxStickNick = 0;
1061
                MaxStickRoll = 0;
1038
                MaxStickRoll = 0;
1062
        }
1039
        }
Line 1444... Line 1421...
1444
                DebugOut.Analog[19] = CompassCalState;
1421
                DebugOut.Analog[19] = CompassCalState;
1445
        //      DebugOut.Analog[24] = GyroNick/2;
1422
        //      DebugOut.Analog[24] = GyroNick/2;
1446
        //      DebugOut.Analog[25] = GyroRoll/2;
1423
        //      DebugOut.Analog[25] = GyroRoll/2;
1447
                DebugOut.Analog[27] = (int16_t)FCParam.KalmanMaxDrift;
1424
                DebugOut.Analog[27] = (int16_t)FCParam.KalmanMaxDrift;
1448
        //      DebugOut.Analog[28] = (int16_t)FCParam.KalmanMaxFusion;
1425
        //      DebugOut.Analog[28] = (int16_t)FCParam.KalmanMaxFusion;
1449
        //      DebugOut.Analog[29] = (int16_t)FCParam.KalmanK;
-
 
1450
                DebugOut.Analog[30] = GPSStickNick;
1426
                DebugOut.Analog[30] = GPSStickNick;
1451
                DebugOut.Analog[31] = GPSStickRoll;
1427
                DebugOut.Analog[31] = GPSStickRoll;
1452
        }
1428
        }
Line 1453... Line 1429...
1453
 
1429
 
Line 1483... Line 1459...
1483
        {
1459
        {
1484
                PPartRoll = 0;
1460
                PPartRoll = 0;
1485
        }
1461
        }
1486
        PDPartRoll = PPartRoll + (int32_t)((int32_t)GyroRoll * GyroPFactor +  (int32_t)TrimRoll * 128L) / (256L / STICK_GAIN); // +D-Part
1462
        PDPartRoll = PPartRoll + (int32_t)((int32_t)GyroRoll * GyroPFactor +  (int32_t)TrimRoll * 128L) / (256L / STICK_GAIN); // +D-Part
Line 1487... Line -...
1487
 
-
 
1488
        // octo has a double yaw momentum because of the doubled motor number
-
 
1489
        // therefore double D-Part and halfen P-Part for the same result
-
 
1490
        #ifdef USE_OCTO
-
 
1491
        PDPartYaw =  (int32_t)(GyroYaw * 4 * (int32_t)GyroPFactor) / (256L / STICK_GAIN) + (int32_t)(IntegralGyroYaw * GyroIFactor) / (4 * (44000 / STICK_GAIN));
-
 
1492
        #else
1463
 
1493
        PDPartYaw =  (int32_t)(GyroYaw * 2 * (int32_t)GyroPFactor) / (256L / STICK_GAIN) + (int32_t)(IntegralGyroYaw * GyroIFactor) / (2 * (44000 / STICK_GAIN));
-
 
Line 1494... Line 1464...
1494
        #endif
1464
        PDPartYaw =  (int32_t)(GyroYaw * 2 * (int32_t)GyroYawPFactor) / (256L / STICK_GAIN) + (int32_t)(IntegralGyroYaw * GyroYawIFactor) / (2 * (44000 / STICK_GAIN));
1495
 
1465
 
Line 1496... Line 1466...
1496
        //DebugOut.Analog[21] = PDPartNick;
1466
        //DebugOut.Analog[21] = PDPartNick;
Line 1501... Line 1471...
1501
        CHECK_MIN_MAX(PDPartNick, -SENSOR_LIMIT, SENSOR_LIMIT);
1471
        CHECK_MIN_MAX(PDPartNick, -SENSOR_LIMIT, SENSOR_LIMIT);
1502
        CHECK_MIN_MAX(PDPartRoll, -SENSOR_LIMIT, SENSOR_LIMIT);
1472
        CHECK_MIN_MAX(PDPartRoll, -SENSOR_LIMIT, SENSOR_LIMIT);
1503
        CHECK_MIN_MAX(PDPartYaw,  -SENSOR_LIMIT, SENSOR_LIMIT);
1473
        CHECK_MIN_MAX(PDPartYaw,  -SENSOR_LIMIT, SENSOR_LIMIT);
Line 1504... Line 1474...
1504
 
1474
 
-
 
1475
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
 
1476
// all BL-Ctrl connected?
-
 
1477
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
 
1478
        if(MissingMotor)
-
 
1479
        {
-
 
1480
                // if we are in the lift off condition
-
 
1481
                if( (ModelIsFlying > 1) && (ModelIsFlying < 50) && (GasMixFraction > 0) )
-
 
1482
                ModelIsFlying = 1; // keep within lift off condition
-
 
1483
                GasMixFraction = ParamSet.GasMin; // reduce gas to min to avoid lift of
-
 
1484
        }
-
 
1485
 
1505
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1486
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1506
// Height Control
1487
// Height Control
1507
// The height control algorithm reduces the gas but does not increase the gas.
1488
// The height control algorithm reduces the gas but does not increase the gas.
Line 1508... Line 1489...
1508
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1489
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Line 1636... Line 1617...
1636
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1617
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1637
        tmp_int = (int32_t)((int32_t)FCParam.DynamicStability * (int32_t)(GasMixFraction + abs(YawMixFraction) / 2)) / 64;
1618
        tmp_int = (int32_t)((int32_t)FCParam.DynamicStability * (int32_t)(GasMixFraction + abs(YawMixFraction) / 2)) / 64;
1638
        CHECK_MIN_MAX(NickMixFraction, -tmp_int, tmp_int);
1619
        CHECK_MIN_MAX(NickMixFraction, -tmp_int, tmp_int);
1639
        CHECK_MIN_MAX(RollMixFraction, -tmp_int, tmp_int);
1620
        CHECK_MIN_MAX(RollMixFraction, -tmp_int, tmp_int);
Line 1640... Line -...
1640
 
-
 
1641
#ifdef USE_QUADRO
-
 
1642
 
-
 
1643
        // QuadroKopter Mixer
-
 
1644
 
-
 
1645
        // Motor Front (++)
1621
 
1646
    MotorValue = GasMixFraction + NickMixFraction + YawMixFraction;
-
 
1647
    MotorValue1 = MotorSmoothing(MotorValue, MotorValue1);
-
 
1648
    MotorValue = MotorValue1 / STICK_GAIN;
-
 
1649
    CHECK_MIN_MAX(MotorValue, ParamSet.GasMin, ParamSet.GasMax);
-
 
1650
        Motor1 = MotorValue;
-
 
1651
 
-
 
1652
        // Motor Rear (-+)
-
 
1653
        MotorValue = GasMixFraction - NickMixFraction + YawMixFraction;
-
 
1654
        MotorValue2 = MotorSmoothing(MotorValue, MotorValue2);
-
 
1655
        MotorValue = MotorValue2 / STICK_GAIN;
-
 
1656
        CHECK_MIN_MAX(MotorValue, ParamSet.GasMin, ParamSet.GasMax);
-
 
1657
        Motor2 = MotorValue;
-
 
1658
 
-
 
1659
        // Motor Right (--)
-
 
1660
        MotorValue = GasMixFraction - RollMixFraction - YawMixFraction;
-
 
1661
        MotorValue3 = MotorSmoothing(MotorValue, MotorValue3);
-
 
1662
        MotorValue = MotorValue3 / STICK_GAIN;
-
 
1663
        CHECK_MIN_MAX(MotorValue, ParamSet.GasMin, ParamSet.GasMax);
-
 
1664
    Motor3 = MotorValue;
-
 
1665
 
-
 
1666
        // Motor Left (+-)
-
 
1667
    MotorValue = GasMixFraction + RollMixFraction - YawMixFraction;
-
 
1668
    MotorValue4 = MotorSmoothing(MotorValue, MotorValue4);
-
 
1669
    MotorValue = MotorValue4 / STICK_GAIN;
-
 
1670
        CHECK_MIN_MAX(MotorValue, ParamSet.GasMin, ParamSet.GasMax);
-
 
1671
    Motor4 = MotorValue;
-
 
1672
 
-
 
1673
#endif
-
 
1674
 
-
 
1675
#ifdef USE_OCTO
-
 
1676
 
1622
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1677
        // OctoKopter Mixer
-
 
1678
 
-
 
1679
        // Motor 1 (+++)
1623
// Universal Mixer
1680
    MotorValue = GasMixFraction + NickMixFraction + RollMixFraction + YawMixFraction;
-
 
1681
    MotorValue1 = MotorSmoothing(MotorValue, MotorValue1);
-
 
1682
    MotorValue = MotorValue1 / STICK_GAIN;
-
 
1683
        CHECK_MIN_MAX(MotorValue, ParamSet.GasMin, ParamSet.GasMax);
-
 
1684
        Motor1= MotorValue;
-
 
1685
 
-
 
1686
        // Motor 2 (+--)
-
 
1687
        MotorValue = GasMixFraction + NickMixFraction - RollMixFraction - YawMixFraction;
-
 
1688
        MotorValue2 = MotorSmoothing(MotorValue, MotorValue2);
-
 
1689
    MotorValue = MotorValue2 / STICK_GAIN;
-
 
1690
        CHECK_MIN_MAX(MotorValue, ParamSet.GasMin, ParamSet.GasMax);
-
 
1691
        Motor2 = MotorValue;
-
 
1692
 
-
 
1693
        // Motor 3 (+-+)
-
 
1694
        MotorValue = GasMixFraction + NickMixFraction - RollMixFraction + YawMixFraction;
-
 
1695
        MotorValue3 = MotorSmoothing(MotorValue, MotorValue3);
-
 
1696
    MotorValue = MotorValue3 / STICK_GAIN;
-
 
1697
        CHECK_MIN_MAX(MotorValue, ParamSet.GasMin, ParamSet.GasMax);
-
 
1698
        Motor3 = MotorValue;
-
 
1699
 
-
 
1700
        // Motor 4 (---)
-
 
1701
        MotorValue = GasMixFraction - NickMixFraction - RollMixFraction - YawMixFraction;
-
 
1702
        MotorValue4 = MotorSmoothing(MotorValue, MotorValue4);
-
 
1703
    MotorValue = MotorValue4 / STICK_GAIN;
-
 
1704
        CHECK_MIN_MAX(MotorValue, ParamSet.GasMin, ParamSet.GasMax);
-
 
1705
        Motor4 = MotorValue;
-
 
1706
 
-
 
1707
        // Motor 5 (--+)
-
 
1708
        MotorValue = GasMixFraction - NickMixFraction - RollMixFraction + YawMixFraction;
-
 
1709
        MotorValue5 = MotorSmoothing(MotorValue, MotorValue5);
-
 
1710
    MotorValue = MotorValue5 / STICK_GAIN;
-
 
1711
        CHECK_MIN_MAX(MotorValue, ParamSet.GasMin, ParamSet.GasMax);
1624
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1712
    Motor5 = MotorValue;
1625
        for(i = 0; i < MAX_MOTORS; i++)
1713
 
1626
        {
1714
        // Motor 6 (-+-)
-
 
1715
        MotorValue = GasMixFraction - NickMixFraction + RollMixFraction - YawMixFraction;
-
 
1716
        MotorValue6 = MotorSmoothing(MotorValue, MotorValue6);
-
 
1717
    MotorValue = MotorValue6 / STICK_GAIN;
-
 
1718
        CHECK_MIN_MAX(MotorValue, ParamSet.GasMin, ParamSet.GasMax);
-
 
1719
    Motor6 = MotorValue;
-
 
1720
 
-
 
1721
        // Motor7 (-++)
-
 
1722
        MotorValue = GasMixFraction - NickMixFraction + RollMixFraction + YawMixFraction;
-
 
1723
        MotorValue7 = MotorSmoothing(MotorValue, MotorValue7);
-
 
1724
    MotorValue = MotorValue7 / STICK_GAIN;
-
 
1725
        CHECK_MIN_MAX(MotorValue, ParamSet.GasMin, ParamSet.GasMax);
-
 
1726
    Motor7 = MotorValue;
-
 
1727
 
-
 
1728
    // Motor8 (++-)
-
 
1729
        MotorValue = GasMixFraction + NickMixFraction + RollMixFraction - YawMixFraction;
-
 
1730
        MotorValue8 = MotorSmoothing(MotorValue, MotorValue8);
-
 
1731
    MotorValue = MotorValue8 / STICK_GAIN;
1627
                int16_t tmp;
1732
        CHECK_MIN_MAX(MotorValue, ParamSet.GasMin, ParamSet.GasMax);
-
 
1733
    Motor8 = MotorValue;
-
 
1734
#endif
-
 
1735
 
-
 
1736
#ifdef USE_OCTO2
-
 
1737
 
-
 
1738
        // Octokopter Mixer alternativ setup
1628
                if(Mixer.Motor[i][MIX_GAS] > 0) // if gas then mixer
1739
 
1629
                {
1740
    MotorValue = GasMixFraction + NickMixFraction + YawMixFraction;
-
 
1741
    MotorValue1 = MotorSmoothing(MotorValue, MotorValue1);
-
 
1742
    MotorValue = MotorValue1 / STICK_GAIN;
-
 
1743
    CHECK_MIN_MAX(MotorValue, ParamSet.GasMin, ParamSet.GasMax);
-
 
1744
        Motor1 = MotorValue;
-
 
1745
 
-
 
1746
    MotorValue = GasMixFraction + NickMixFraction - RollMixFraction - YawMixFraction;
-
 
1747
    MotorValue2 = MotorSmoothing(MotorValue, MotorValue2);
-
 
1748
    MotorValue = MotorValue2 / STICK_GAIN;
-
 
1749
    CHECK_MIN_MAX(MotorValue, ParamSet.GasMin, ParamSet.GasMax);
-
 
1750
        Motor2 = MotorValue;
-
 
1751
 
-
 
1752
        MotorValue = GasMixFraction - RollMixFraction + YawMixFraction;
-
 
1753
    MotorValue3 = MotorSmoothing(MotorValue, MotorValue3);
-
 
1754
    MotorValue = MotorValue3 / STICK_GAIN;
-
 
1755
    CHECK_MIN_MAX(MotorValue, ParamSet.GasMin, ParamSet.GasMax);
-
 
1756
    Motor3 = MotorValue;
-
 
1757
 
-
 
1758
        MotorValue = GasMixFraction - NickMixFraction - RollMixFraction - YawMixFraction;
-
 
1759
    MotorValue4 = MotorSmoothing(MotorValue, MotorValue4);
-
 
1760
    MotorValue = MotorValue4 / STICK_GAIN;
-
 
1761
    CHECK_MIN_MAX(MotorValue, ParamSet.GasMin, ParamSet.GasMax);
-
 
1762
    Motor4 = MotorValue;
-
 
1763
 
-
 
1764
        MotorValue = GasMixFraction - RollMixFraction + YawMixFraction;
-
 
1765
    MotorValue5 = MotorSmoothing(MotorValue, MotorValue5);
-
 
1766
    MotorValue = MotorValue5 / STICK_GAIN;
-
 
1767
    CHECK_MIN_MAX(MotorValue, ParamSet.GasMin, ParamSet.GasMax);
-
 
1768
        Motor5 = MotorValue;
-
 
1769
 
1630
                        tmp =  ((int32_t)GasMixFraction  * Mixer.Motor[i][MIX_GAS] ) / 64L;
1770
        MotorValue = GasMixFraction - NickMixFraction + RollMixFraction - YawMixFraction;
-
 
1771
    MotorValue6 = MotorSmoothing(MotorValue, MotorValue6);
-
 
1772
    MotorValue = MotorValue6 / STICK_GAIN;
-
 
1773
    CHECK_MIN_MAX(MotorValue, ParamSet.GasMin, ParamSet.GasMax);
-
 
1774
        Motor6 = MotorValue;
-
 
1775
 
-
 
1776
    MotorValue = GasMixFraction + RollMixFraction + YawMixFraction;
-
 
1777
    MotorValue7 = MotorSmoothing(MotorValue, MotorValue7);
-
 
1778
    MotorValue = MotorValue7 / STICK_GAIN;
-
 
1779
    CHECK_MIN_MAX(MotorValue, ParamSet.GasMin, ParamSet.GasMax);
-
 
1780
    Motor7 = MotorValue;
-
 
1781
 
-
 
1782
    MotorValue = GasMixFraction + NickMixFraction + RollMixFraction - YawMixFraction;
-
 
1783
    MotorValue8 = MotorSmoothing(MotorValue, MotorValue8);
-
 
1784
    MotorValue = MotorValue8 / STICK_GAIN;
-
 
1785
    CHECK_MIN_MAX(MotorValue, ParamSet.GasMin, ParamSet.GasMax);
-
 
1786
    Motor8 = MotorValue;
-
 
1787
#endif
-
 
1788
 
-
 
1789
#ifdef USE_OCTO3
-
 
1790
 
-
 
1791
        // Octokopter Mixer alternativ setup
-
 
1792
 
1631
                        tmp += ((int32_t)NickMixFraction * Mixer.Motor[i][MIX_NICK]) / 64L;
1793
    MotorValue = GasMixFraction + NickMixFraction + YawMixFraction;
-
 
1794
    MotorValue1 = MotorSmoothing(MotorValue, MotorValue1);
-
 
1795
    MotorValue = MotorValue1 / STICK_GAIN;
-
 
1796
    CHECK_MIN_MAX(MotorValue, ParamSet.GasMin, ParamSet.GasMax);
-
 
1797
        Motor1 = MotorValue;
-
 
1798
 
1632
                        tmp += ((int32_t)RollMixFraction * Mixer.Motor[i][MIX_ROLL]) / 64L;
1799
    MotorValue = GasMixFraction + NickMixFraction - YawMixFraction;
-
 
1800
    MotorValue2 = MotorSmoothing(MotorValue, MotorValue2);
-
 
1801
    MotorValue = MotorValue2 / STICK_GAIN;
-
 
1802
    CHECK_MIN_MAX(MotorValue, ParamSet.GasMin, ParamSet.GasMax);
-
 
1803
        Motor2 = MotorValue;
-
 
1804
 
-
 
1805
        MotorValue = GasMixFraction - RollMixFraction + YawMixFraction;
-
 
1806
    MotorValue3 = MotorSmoothing(MotorValue, MotorValue3);
-
 
1807
    MotorValue = MotorValue3 / STICK_GAIN;
-
 
1808
    CHECK_MIN_MAX(MotorValue, ParamSet.GasMin, ParamSet.GasMax);
-
 
1809
    Motor3 = MotorValue;
-
 
1810
 
-
 
1811
        MotorValue = GasMixFraction - RollMixFraction - YawMixFraction;
-
 
1812
    MotorValue4 = MotorSmoothing(MotorValue, MotorValue4);
-
 
1813
    MotorValue = MotorValue4 / STICK_GAIN;
-
 
1814
    CHECK_MIN_MAX(MotorValue, ParamSet.GasMin, ParamSet.GasMax);
-
 
1815
    Motor4 = MotorValue;
-
 
1816
 
-
 
1817
        MotorValue = GasMixFraction - NickMixFraction + YawMixFraction;
-
 
1818
    MotorValue5 = MotorSmoothing(MotorValue, MotorValue5);
-
 
1819
    MotorValue = MotorValue5 / STICK_GAIN;
-
 
1820
    CHECK_MIN_MAX(MotorValue, ParamSet.GasMin, ParamSet.GasMax);
-
 
1821
        Motor5 = MotorValue;
-
 
1822
 
-
 
1823
        MotorValue = GasMixFraction - NickMixFraction - YawMixFraction;
1633
                        tmp += ((int32_t)YawMixFraction  * Mixer.Motor[i][MIX_YAW] ) / 64L;
1824
    MotorValue6 = MotorSmoothing(MotorValue, MotorValue6);
1634
                        MotorValue[i] = MotorSmoothing(tmp, MotorValue[i]);  // Spike Filter
1825
    MotorValue = MotorValue6 / STICK_GAIN;
1635
                        tmp = MotorValue[i] / STICK_GAIN;
1826
    CHECK_MIN_MAX(MotorValue, ParamSet.GasMin, ParamSet.GasMax);
1636
                        CHECK_MIN_MAX(tmp, ParamSet.GasMin, ParamSet.GasMax);
1827
        Motor6 = MotorValue;
-
 
1828
 
-
 
1829
    MotorValue = GasMixFraction + RollMixFraction + YawMixFraction;
-
 
1830
    MotorValue7 = MotorSmoothing(MotorValue, MotorValue7);
-
 
1831
    MotorValue = MotorValue7 / STICK_GAIN;
-
 
1832
    CHECK_MIN_MAX(MotorValue, ParamSet.GasMin, ParamSet.GasMax);
-
 
1833
    Motor7 = MotorValue;
1637
                        Motor[i].SetPoint = tmp;
1834
 
-
 
1835
    MotorValue = GasMixFraction + RollMixFraction - YawMixFraction;
-
 
1836
    MotorValue8 = MotorSmoothing(MotorValue, MotorValue8);
-
 
1837
    MotorValue = MotorValue8 / STICK_GAIN;
-
 
1838
    CHECK_MIN_MAX(MotorValue, ParamSet.GasMin, ParamSet.GasMax);
1638
                }
1839
    Motor8 = MotorValue;
-
 
1840
#endif
-
 
1841
 
1639
                else Motor[i].SetPoint = 0;
1842
 
1640
        }