7" quad - quad angle randomly drifts in acro despite zero stick input

Shaking at either end of the throttle range is often down to MOT_THST_EXPO being set wrong. This is intended to linearize the thrust so that your PIDs are valid for the whole throttle range. The default is too high for smaller quads. Usually it manifests at high throttle though since autotune is done at hover throttle.

Shaking on low/zero throttle for me tends to be yaw oscillation. You can often eliminate this by adding D or reducing P.

Propwash shaking tends to be either an overly aggressive tune or poor notch filtering.

1 Like

I don’t have experience with these small quads but:
Leonard Hall explained setting and testing MOT_THST_EXPO

  • set too high you can see instability at low throttle
  • set too low you can see instability at high throttle

I’m taking Andys other comments on shaking and setting them in stone alongside some of Leonards comments.

This was really helpful; there’s now way I could have found this myself.

Setting MOT_THST_EXPO to 0 helped significantly (like improved the problem by ~70%). The next I tried was increasing the MOT_SPIN_MIN, which seemed to help further. I need to play with this a bit more and probably re-run auto-tune.

It still feels like the PIDS are a bit loose at lower throttle, so are there any other things I should double check? At moderate throttle the PIDS work really well. I can fly through my own propwash and the quad handles it like a champ.

1 Like

That will be too low. Something like 0.45 would be better

1 Like

To Andy,Dave or Randy,all very knowledgeable and so so helpful,I have my 7 incher and it flies really well except in stabilised mode on a punch out there is plenty of power,but appears a very slight delay coming from hover setting to applying power then it is away,what parameter do I play with to alter that,Many thanks in advance

Pretty sure you are not going to get super crisp throttle response unless you use acro.

1 Like

Hi Andy,will set a switch on acro tomorrow though I dont really need acro at the moment and thank you kind sir

I found I can get a working tune with MOT_THST_EXP = 0 or MOT_THST_EXP = 0.3, with MOT_THST_EXP=0 feeling slightly better with the higher P/D and lower throttle (I could probably spend more time on this). I didn’t try as high as 0.45.

I’m seeing some behavior independent of this though; the quad starts losing stabilization if it remains at low throttle for some period of time (like half a second). This makes it impossible to do ‘hang-time’ maneuvers. I managed to capture in this in flight by punching out and then letting throttle go to zero while quad is mostly level. Notice pitch-actual starts deviating from pitch-desired by itself, then corrects when I add throttle. My ATC_THR_MIX_MAN is set to 1.


1 Like

I had a chat with @Leonardthall - this is almost certain noise and lack of throttle gain because your expo is too low. You need to set expo to something sensible and re-run autotune. Start with 0.5 and see how that goes. Also you may find that your high filter settings are letting through too much noise, you might want to lower them a bit (again you need to retune after).

Note that it is pointless changing expo if you do not retune

Ok, I’ll try that from scratch.

Honestly I’m a bit confused how this works though. If I have sufficient MOT_SPIN_MIN (it’s set to 0.12… my hover ends up 0.2), I would have expected to get past the extremely poor thrust region of the motor response. And why would the quad be able to stabilize itself perfectly for the first 1.5 seconds, then completely fail (felt like the back motors just stopped)?

my FFT looks like this for this flight

I find it hard to believe that spin min needs to be 0.12 when hover throttle is 0.2. Why so high? What do you have spin arm set to? On my 3" min is set to 0.05 and spin arm to 0.03

It shouldn’t need to be that high (it used to be 0.09 and could probably be even lower), but it’s one of the things I’ve done to improve/debug the low throttle responsiveness/stability.

At least if some issue was due to motor losing responsiveness at its low-end, raising the min spin would help. And since I’m not seeing much improvement and min isn’t so far from hover, I suspect it’s something else.

I tried running your log through mavfft_isb.py and got an error - its because you have opts set to 3, which is an error - you can’t do sample rate logging with post-filter. Sample-rate logging is by definition pre-filter. So I’m not sure what your FFT data is showing but you should changes opts to 2

The way these things work is we have to eliminate all the obvious things before diving deeper - otherwise there are too many variables. So you may or may not be right, but either way we need to eliminate that from the equation.

If you can do your next log with attitude fast logging that would also help

I had it set get post-filter data to double check my filters worked and I later ticked the sensor rate logging because I thought it got me higher sampling rate as it seemed Iike the time plots had a very long sampling period and maybe I wasn’t getting all of the frequency information. I seemed to have missed the note to not enable both.

So I’ll set opt to 2 and enable attitude fast logging for my next flights.

One of the reasons I raised my Spin_Min and lowered MOT_THST_EXP was to get rid of some ‘grinding’ sound from the motors that occurs at low throttle (with just quad level and dropping down from hover, or dropping down and sitting on the ground).

The first question is this due to tuning, so I should tune every time I change spin or THST. Thus, I plan to run a controlled series of experiments where I do a sweep of MOT_THST and for each value of MOT_THST, I run run auto-tune -> test hover -> check for low throttle grinding -> apply static notch where applicable -> check for low throttle oscillation and the loss of control issue (or anything else you may suggest I check)

Before I start this, could you take a look at one log to check if the logging setup looks good so I know my logs will be useful for analysis later?

This log is after I raised my MOT_THST_EXP to 0.4, ran an auto-tune, and applied a notch filter at 214Hz to kill a huge spike of noise (seems associated with the 'grinding I get with higher MOT_THST_EXP and doesn’t go away with autotune).


Ok, so one big problem here is that your RPM feedback rate is too low. The default at 10Hz is going to struggle to kill noise. Since you are on a Matek405, I recommend you try the -bdshot target (shouldn’t need to change any parameters) and then you will get much higher RPM feedback to the notch which should kill the noise much more effectively. I would do this before playing around with static notches.

If you don’t want to use the bdshot target (or can’t, the target is for a STD, no idea how well that maps to a wing, also the target changes which UART has full DMA so would affect your use of CRSF) then raise the telemetry rate to say 100Hz - so SERVO_BLH_TRATE = 100.

The other thing you can do is raise SCHED_LOOP_RATE to 800 - this always makes a big difference on smaller craft.

Note that you are asking quite a lot of this board, there would be more options with an F7 or H7.

The logging looks good. You can see R/P/Y oscillation on RATE.R/P/Y so some more tuning required.

1 Like

I’ll try the setting changes since changing the target will make me move my UART1 (assuming it works). Thanks for your advise.

Long-term I’ll look into upgrading the FC to an F7. Does the kakute F7 AIO look good? Having a uSD card is like a requirement :slight_smile: and that seems like the only option.

1 Like

H7, all The Matek H743 boards, even the mini, have an Sd card. Ditch the F4.

I have a Kakute F7 AIO and an F7 Mini. Nice boards but not an H7. Impressed so far with the Matek H743-Mini.

1 Like

Ah sorry I didn’t make my constraints clear. For my build I wanted an FC with a built in PDB with pads at each corner for my individual ESCs, which means an matek F722-SE. That didn’t look like it’s supported. Otherwise I’d have gone with a Matek.

I’m curious, is adding support mainly a matter of figuring out the right IO mapping (like making a header file) for the target or more complex? I’ve got some basic coding experience so trying to judge if it’s something I can do.