First of all - it's a long read so thanks in advance.
I'm trying to improve the vibration in my quad and I have a few questions.
First some details: I'm using a Drotek 10DOF with a MPU9250 imu connected by i2c to a raspberry pi that samples the gyro and accelerometer at a stable 1Khz (using the FIFO).
Build log is here: http://jeanleflambeur.wordpress.com/
My first test was without any damping and propellers - just the motors at half throttle. I was getting +- 8m/s^2 average in all axes. It's probably due to the bad Suppo 2208 bearings and unbalanced motor bell.
For the second test I detached the whole electronics case - at around 100g - from the quad arms using 8 silicon dampers (see here: http://jeanleflambeur.wordpress.com/2014/09/18/hw-is-ready/) with ear plugs in their center.
The result was better at around +-3m/s^2 accelerometer vibration.
I've read all I could get my hands on on this topic - including the damping or no damping debate here on diydrones so I understand the basics behind the noise:
- useful bandwidth of the quad is < 10Hz
- most of the noise comes from the motors themselves at a frequency of RPM/60 Hz + props at RPM/30 Hz (for 2-blade props) and in practice it's between 40-300Hz
- there are interactions between the frequencies of the 4 motors at the center of the quad which can result in lower frequencies
- mechanical damping has to be tuned for the actual mass of the imu/board/case
- sampling aliasing is an issue if the nyquist frequency is at or below the max vibration frequency and this renders digital low pass filters useless
- there are resonances the to the frame
- vibration is unavoidable in-flight due to the interaction of props and air flow even if motors and props are balanced
Since I sample at 1Khz and my motors go as high as 200hz (400Hz with 2 bladed props) I imagined I can try to analyze the noise and design a filter for it.
Yesterday I finished the first test - I send all the gyro + acc data from the quad to the ground station through wifi and analyzed it with FFTW to see it in real-time.
To my surprise the noise is very well behaved. So:
1. (I'm testing without props for now, so it's not realistic yet)
2. Violently rotating and moving the quad around results in a frequency lower than 5Hz. I conclude from this that the useful signal frequency is <5-10Hz.
3. Motors at min throttle (the minimum stable throttle for all 4 of them) results in a frequency of 40Hz without any harmonics
4. Throttling up increases the frequency - as expected - until half-throttle where the frequency stabilizes at around 100Hz up until the throttle goes to 70%. The freq jumps in that moment to ~130-150Hz. I assume I hit the resonance frequency of the quad frame.
Since there is such a high gap between the useful frequency (5Hz) and the min noise frequency (40Hz) I should be able to design a very efficient filter for this. Try it out here:
with these params:
filtertype = Butterworth lowpass, order = 4, samplerate = 1000, corner1 = 10
So with this filter I should get an attenuation of close to zero (<0.02) at around 50Hz.
I don't understand the phase shift though and if it's something I need to worry about at frequencies of <5Hz.
Here's a zoom from 0 to 50Hz:
So - considering my limited knowledge of digital signal processing and filters, my questions are:
- Am I missing something? So far this looks too easy
- Is it worth it to increase the sample rate to from 1 to 8Khz? The 9250 cannot do any intermediary sample rate so it has to be either 1 or 8Khz
- Is the phase shift (the blue line in the graph) something that I need to worry?
- Does a stiff mount make more sense than a damped one considering that all vibration is below the nyquist frequency (this is my assumption, of course)? I'm thinking that any damping that is not properly tuned will bring some of the high frequencies into my useful bandwidth of <10Hz and I will not be able to eliminate them with my LPF.
This week I will gather more data and I will post here all my findings.
Here's a screenshot of a LPF applied to the motor noise while rotating the quad around.
The motors spin at very low throttle (15%) and there are no props attached.
In the accelerometer (lower graph) there is still some low frequency noise visible but overall it's way cleaner.
The filter is a 4-pole butterworth with 15Hz cutoff.
/* Digital filter designed by mkfilter/mkshape/gencode A.J. Fisher
Command line: /www/usr/fisher/helpers/mkfilter -Bu -Lp -o 4 -a 1.0000000000e-02 0.0000000000e+00 -l */
static constexpr size_t NZEROS = 4;
static constexpr size_t NPOLES = 4;
static constexpr float GAIN = 2.286922409e+05;
float xv[NZEROS+1], yv[NPOLES+1];
float process(float t)
xv = xv; xv = xv; xv = xv; xv = xv;
xv = t / GAIN;
yv = yv; yv = yv; yv = yv; yv = yv;
yv = (xv + xv) + 4 * (xv + xv) + 6 * xv
+ ( -0.7816187403f * yv) + ( 3.3189386048f * yv)
+ ( -5.2911525842f * yv) + ( 3.7537627567f * yv);
There is a slight delay of a few milliseconds visible that I need to measure properly.
This weekend I'll make a video of the filter in action, including with props attached.