Subversion Repositories FlightCtrl

Rev

Rev 1821 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1775 - 1
#include <inttypes.h>
2
#include "attitude.h"
3
#include "uart0.h"
4
#include "configuration.h"
5
#include "dongfangMath.h"
6
 
7
// For scope debugging only!
1872 - 8
#include "output.h"
1775 - 9
 
10
// = cos^2(45 degs).
1821 - 11
const int32_t MINPROJECTION = (int32_t) MATH_UNIT_FACTOR * MATH_UNIT_FACTOR / 2;
1775 - 12
 
13
// Takes 380 - 400 usec. Way too slow.
14
// With static MINPROJECTION: 220 usec.
15
uint16_t AC_getThrottle(uint16_t throttle) {
1821 - 16
        int32_t projection;
1872 - 17
    uint8_t effect = dynamicParams.UserParams[2]; // Userparam 3
18
    int16_t deltaThrottle;
1775 - 19
 
1821 - 20
        // part1 start: 150 usec
21
        // It's factor (int32_t)MATH_UNIT_FACTOR^2 too high.
1872 - 22
        projection = 0;
23
 
24
        // (int32_t) int_cos(angle[PITCH]) * (int32_t) int_cos(angle[ROLL]);
1821 - 25
        // part1 end.
26
        if (projection < MINPROJECTION && projection >= 0) {
27
                // projection = MINPROJECTION;
28
                deltaThrottle = 0;
29
        } else if (projection > -MINPROJECTION && projection < 0) {
30
                // projection = -MINPROJECITON;
31
                deltaThrottle = 0;
1872 - 32
        } else {
1821 - 33
                /*
34
                 * We need delta throttle = constant/projection1
35
                 * (constant * MATH_UNIT_FACTOR^2) / projection.
36
                 */
37
                deltaThrottle = ((int32_t) effect * (int32_t) MATH_UNIT_FACTOR
38
                                * (int32_t) MATH_UNIT_FACTOR) / (projection / 10) - effect * 10;
39
        // DebugOut.Analog[13] = deltaThrottle;
1872 - 40
        }
1775 - 41
 
1821 - 42
        return throttle + deltaThrottle;
1775 - 43
}
44
/*
1821 - 45
 har: R = e * k/p
46
 vil  R = e * ( 1 - k/p )
47
 = e - ek/p
48
 */