Latest version of my quadcopter controller with an LPC1768 and MPU9250.
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.
Diff: Filters/LPfilter.cpp
- Revision:
- 7:d86c41443f6d
- Parent:
- 4:fab65ad01ab4
--- a/Filters/LPfilter.cpp Sat Jul 14 10:30:20 2018 +0000 +++ b/Filters/LPfilter.cpp Tue Jul 17 14:56:05 2018 +0000 @@ -1,9 +1,9 @@ // Coded by Erik van de Coevering -// DSP-style low-pass filters designed with Matlab's FDAtool. +// DSP-style low-pass IIR filters designed with Matlab's FDAtool. // 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 #include "LPfilter.h" - +/* float LPfilter::run(float input) { filterbuffer[2] = filterbuffer[1]; filterbuffer[1] = filterbuffer[0]; @@ -42,4 +42,33 @@ out = filterbuffer2[0] + filterbuffer2[1]*2.0f + filterbuffer2[2]; return out; } +*/ +//8th order IIR filter, with Fs = 1500Hz and Fc = 45Hz +float LPfilter8::run(float input) { + filterbuffer1[2] = filterbuffer1[1]; + filterbuffer1[1] = filterbuffer1[0]; + filterbuffer1[0] = input*0.008544036438708 + filterbuffer1[1]*1.895289756537 + filterbuffer1[2]*-0.9294659022914; + + out_temp1 = filterbuffer1[0] + filterbuffer1[1]*2.0f + filterbuffer1[2]; + + filterbuffer2[2] = filterbuffer2[1]; + filterbuffer2[1] = filterbuffer2[0]; + filterbuffer2[0] = out_temp1*0.008021326615853 + filterbuffer2[1]*1.779339107215 + filterbuffer2[2]*-0.811424413678; + + out_temp2 = filterbuffer2[0] + filterbuffer2[1]*2.0f + filterbuffer2[2]; + + filterbuffer3[2] = filterbuffer3[1]; + filterbuffer3[1] = filterbuffer3[0]; + filterbuffer3[0] = out_temp2*0.007662537043122 + filterbuffer3[1]*1.699750237618 + filterbuffer3[2]*-0.7304003857905; + + out_temp3 = filterbuffer3[0] + filterbuffer3[1]*2.0f + filterbuffer3[2]; + + filterbuffer4[2] = filterbuffer4[1]; + filterbuffer4[1] = filterbuffer4[0]; + filterbuffer4[0] = out_temp3*0.007481430998498 + filterbuffer4[1]*1.659576201179 + filterbuffer4[2]*-0.6895019251732; + + out = filterbuffer4[0] + filterbuffer4[1]*2.0f + filterbuffer4[2]; + + return out; +}