20
$\begingroup$

With a 600 mm (2 foot) motor-to-motor quadcopter, what frequency does my output-sense-calculate-output update loop need to stay stable?

I'm estimating a total takeoff weight of very roughly 2 pounds ( 0.9 kg ), which I expect to be mostly motors and batteries.

$\endgroup$
17
$\begingroup$

As Rocketmagnet suggests, what frequency you "need" will depend on a lot of things. The more responsive your rotors are, the more sensitive your craft will be to random spikes in motor commands. These random spikes may be caused by noisy sensor readings caused by physical imperfections, which means you would need to lower your controller gains, which in turn might mean your quadrotor may become more unstable. Some other factors include the rotational inertias of the quadrotor, the propellers' blade pitch, the location of the center of mass, and the motor-to-motor distance.

I programmed a flight controller from scratch for my 2 kg tricopter running on an ATmega1280 and found that at:

  • 50 Hz: It will stay in the air but is nigh impossible to control.
  • 100 Hz: It will at least avoid immediately tipping to one side.
  • 200 Hz: I can let it loose indoors at hover throttle and it will stay more or less in one spot.

It may be of interest to note that the higher the control frequency, the more effective your rotor inertias become at being physical dampers, which helps nullify IMU noise and improve flight stability.

But if I had to give a hard number for a minimum flight controller update frequency for a quadrotor of that size suitable for indoor navigation, based on personal experience...

I'd say 80 Hz.

$\endgroup$
  • 1
    $\begingroup$ I don't understand why you suggested 80Hz when you had to use 200Hz on a much larger craft, if anything when the system is smaller you need a faster sampling time as the natural frequencies are higher because there's less inertia. $\endgroup$ – goncalo luis Oct 29 '14 at 9:46
  • $\begingroup$ Are there any benefits to running above 200 Hz? I have a system which runs at 2Khz at the moment, but at the cost of some extra weight. $\endgroup$ – tuskiomi Jun 5 '17 at 20:15
  • $\begingroup$ (Wow this is an old thread, but) @goncaloluis I suggested 80Hz as a hard minimum. You're totally right about needing a faster sampling rate for smaller craft. :) $\endgroup$ – yoos Jun 7 '17 at 15:22
  • 1
    $\begingroup$ @tuskiomi To a certain point.. Your application and desired bandwidth should drive your required control loop frequency, but as many have noted, inertia becomes the limiting factor eventually. $\endgroup$ – yoos Jun 7 '17 at 15:26
2
$\begingroup$

50-200Hz is pretty normal as we can see in the open source projects. You have to consider that in most cases the inertia of the motors and communication with the ESCs is the limiting factor.

$\endgroup$
  • 2
    $\begingroup$ @Shahbaz: Being "open source" affects our knowledge of the control loop frequency. If it's not open source, we generally have no idea what the control loop frequency is. $\endgroup$ – David Cary Oct 31 '12 at 13:17
  • $\begingroup$ Not completely true. Closed-source flight controllers usually publish their control frequency. Most of them output control at 400hz to make them compatible with standard electronic speed controllers (ESCs). E.g. the popular DJI Wookong-M: dji-innovations.com/tech-spec/wookong-m-sepc $\endgroup$ – foobarbecue Jul 10 '13 at 15:21
1
$\begingroup$

To be able to a hard number you would need to have a mathematical model your craft and analyse it. There are two options to get a model of a system:

1)You come up with a mathematical representation of the quadcopter via free body diagrams;

2)You build a gig to test the quadcopter without any control system and use identification theory to find a model;

Then you'll have to linearize your model, a quadcopter is inherently non linear. Make a bode plot of the system, the frequency you need is about twice the highest frequency of your system.

This is the the "pro" way of doing it. If you don't want to go through all this, use a value like what user65 and yoos have suggested (read my comment on yoos answer) and iterate until you get what you want. You also don't want the sample time to be too high, because you'll start having problems when the control system responds to noise.

$\endgroup$
1
$\begingroup$

Your question can only be answered specifically if we have the model parameters of your system. The most principled approach to answering your question would be to represent the highly nonlinear dynamics of your system in discrete time; then using this representation, a maximum step size for which stability is achieved can be determined--this will be maximum value that your system can successfully use. A minimum step size will be determined not by the dynamics of the system, but by the hardware that you are using--overrunning is what would concern me in this case.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.