author

proscratcher10

1
Inbox View Profile
3Comments
I like to make fun projects with Arduino
  • I have been working on an Arduino based flight controller for quad-copters. I have written a PID controller to balance the quad(on one axis), but after 15 seconds, it starts oscillating violently and eventually gets out of control. I have been trying to tune the Gain values, but it doesn't seem to be helping much. From what I know, increasing the differential gain helps dampen over-correction, but it doesn't seem to be helping that much. I would appreciate any advice on how to fix the oscillation problem. What I want is a stable quad-copter that can still arrive at the target position quickly. Thanks!Here is my code://These are my PID Gain valuespGain = 0.13;iGain = 0.004;dGain = 0.62;//This is my PID controller that runs each looperror = target - (int)angle_roll_output;//Proportional ter…

    see more »

    I have been working on an Arduino based flight controller for quad-copters. I have written a PID controller to balance the quad(on one axis), but after 15 seconds, it starts oscillating violently and eventually gets out of control. I have been trying to tune the Gain values, but it doesn't seem to be helping much. From what I know, increasing the differential gain helps dampen over-correction, but it doesn't seem to be helping that much. I would appreciate any advice on how to fix the oscillation problem. What I want is a stable quad-copter that can still arrive at the target position quickly. Thanks!Here is my code://These are my PID Gain valuespGain = 0.13;iGain = 0.004;dGain = 0.62;//This is my PID controller that runs each looperror = target - (int)angle_roll_output;//Proportional termP = (float)error * pGain;//Integral termerrorsum += error;if(errorsum > sumlimit){ errorsum = sumlimit;}else if(errorsum < -sumlimit) { errorsum = -sumlimit;}I = (float)errorsum * iGain;//Differential termerrorslope = error - lasterror;D = (float)errorslope * dGain;lasterror = error;correction = (int)(P + I + D);if(correction > 20){ correction = 20;}else if(correction < -20) { correction = -20;}

    View Instructable »
  • Thanks for sharing your project. I would like to only use one or two motors to test a control circuit. Could you help me with a schematic and code on how to do that.

    View Instructable »