Latest version of my quadcopter controller with an LPC1768 and MPU9250.

Dependencies:   mbed

Currently running on a custom PCB with 30.5 x 30.5mm mounts. There are also 2 PC apps that go with the software; one to set up the PID controller and one to balance the motors and props. If anyone is interested, send me a message and I'll upload them.

Committer:
Anaesthetix
Date:
Thu Jul 12 13:53:55 2018 +0000
Revision:
4:fab65ad01ab4
Parent:
0:0929d3d566cf
Child:
7:d86c41443f6d
Minor changes and comments

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Anaesthetix 4:fab65ad01ab4 1 // Coded by Erik van de Coevering
Anaesthetix 4:fab65ad01ab4 2 // DSP-style low-pass filters designed with Matlab's FDAtool.
Anaesthetix 4:fab65ad01ab4 3 // For information on how to implement these filters, check this pdf: http://spinlab.wpi.edu/courses/ece4703_2009/how_to_interpret_matlab_dfii_sos.pdf
Anaesthetix 4:fab65ad01ab4 4
Anaesthetix 0:0929d3d566cf 5 #include "LPfilter.h"
Anaesthetix 0:0929d3d566cf 6
Anaesthetix 0:0929d3d566cf 7 float LPfilter::run(float input) {
Anaesthetix 0:0929d3d566cf 8 filterbuffer[2] = filterbuffer[1];
Anaesthetix 0:0929d3d566cf 9 filterbuffer[1] = filterbuffer[0];
Anaesthetix 0:0929d3d566cf 10 filterbuffer[0] = input*LP_A + filterbuffer[1]*LP_B + filterbuffer[2]*LP_C;
Anaesthetix 0:0929d3d566cf 11
Anaesthetix 0:0929d3d566cf 12 out = filterbuffer[0]*LP_D + filterbuffer[1]*LP_E + filterbuffer[2]*LP_F;
Anaesthetix 0:0929d3d566cf 13 return out;
Anaesthetix 0:0929d3d566cf 14 }
Anaesthetix 0:0929d3d566cf 15
Anaesthetix 0:0929d3d566cf 16 float LPfilter2::run(float input) {
Anaesthetix 0:0929d3d566cf 17 filterbuffer1[2] = filterbuffer1[1];
Anaesthetix 0:0929d3d566cf 18 filterbuffer1[1] = filterbuffer1[0];
Anaesthetix 0:0929d3d566cf 19 filterbuffer1[0] = input*0.003762202981699 + filterbuffer1[1]*1.893415601023 + filterbuffer1[2]*-0.9084644129493;
Anaesthetix 0:0929d3d566cf 20
Anaesthetix 0:0929d3d566cf 21 out_temp = filterbuffer1[0] + filterbuffer1[1]*2.0f + filterbuffer1[2];
Anaesthetix 0:0929d3d566cf 22
Anaesthetix 0:0929d3d566cf 23 filterbuffer2[2] = filterbuffer2[1];
Anaesthetix 0:0929d3d566cf 24 filterbuffer2[1] = filterbuffer2[0];
Anaesthetix 0:0929d3d566cf 25 filterbuffer2[0] = out_temp*0.003533495923378 + filterbuffer2[1]*1.778313488139 + filterbuffer2[2]*-0.7924474718329;
Anaesthetix 0:0929d3d566cf 26
Anaesthetix 0:0929d3d566cf 27 out = filterbuffer2[0] + filterbuffer2[1]*2.0f + filterbuffer2[2];
Anaesthetix 0:0929d3d566cf 28 return out;
Anaesthetix 0:0929d3d566cf 29 }
Anaesthetix 0:0929d3d566cf 30
Anaesthetix 0:0929d3d566cf 31 float LPfilter2_1::run(float input) {
Anaesthetix 0:0929d3d566cf 32 filterbuffer1[2] = filterbuffer1[1];
Anaesthetix 0:0929d3d566cf 33 filterbuffer1[1] = filterbuffer1[0];
Anaesthetix 0:0929d3d566cf 34 filterbuffer1[0] = input*0.007954132308248 + filterbuffer1[1]*1.836787188551 + filterbuffer1[2]*-0.8686037177835;
Anaesthetix 0:0929d3d566cf 35
Anaesthetix 0:0929d3d566cf 36 out_temp = filterbuffer1[0] + filterbuffer1[1]*2.0f + filterbuffer1[2];
Anaesthetix 0:0929d3d566cf 37
Anaesthetix 0:0929d3d566cf 38 filterbuffer2[2] = filterbuffer2[1];
Anaesthetix 0:0929d3d566cf 39 filterbuffer2[1] = filterbuffer2[0];
Anaesthetix 0:0929d3d566cf 40 filterbuffer2[0] = out_temp*0.007277930990548 + filterbuffer2[1]*1.680637168775 + filterbuffer2[2]*-0.7097488927369;
Anaesthetix 0:0929d3d566cf 41
Anaesthetix 0:0929d3d566cf 42 out = filterbuffer2[0] + filterbuffer2[1]*2.0f + filterbuffer2[2];
Anaesthetix 0:0929d3d566cf 43 return out;
Anaesthetix 0:0929d3d566cf 44 }
Anaesthetix 0:0929d3d566cf 45