Stap 3: Demo PID-regelaar
Eflite Outrunner Motor
35 amp ESC
11,1 V LiPo batterij
1/2" PVC
Een oud zagen paard naar een stand
De controller ziet er in de hoek van de arm is opknoping op met behulp van onze versnellingsmeter en een gyroscoop, en die gegevens worden gebruikt om te bepalen hoeveel stroom te gooien van de motor te arm een niveau.
Omdat het ESC wordt gebruikt voor het aansluiten van uw motor op een radio ontvanger bus ontworpen voor servo's, is het relatief eenvoudig te bepalen van een borstelloze AC-motor met een ESC op een Arduino dankzij de Servo.h + Servo.cpp in uw omslag van bibliotheken. Ik denk dat het servo-protocol gebruikt pulse-positie modulatie (PPM), die kan worden bereikt gebruikend een PWM pin op de arduino met servo.write() functie.
http://www.Hooked-on-RC-Airplanes.com/servo-tutorial.html
Het is belangrijk om veiligheid bewust tijdens het uitvoeren van deze motoren, aangezien zij gaan zeer snel. * ALTIJD dragen veiligheid glazen * * de propeller ophouden totdat u absoluut nodig hebt it *
Hebt u om te schrijven een functie naar arm(); uw ESC zodat u kunt de snelheid instellen. In principe moet u schrijven van het ESC, laag, hoog, en dan weer laag te houden.
http://www.Arduino.CC/cgi-bin/yabb2/YaBB.pl?num=1226292633 Dit forum gaat over hoe u kunt besturen van een borstelloze motor, en is waar ik heb kader voor mijn arm(); functie en setSpeed (); functie.
U kon enkel een servo.write(0-180) gebruiken om uw snelheid op uw esc, maar u kunt het ook toewijzen op een schaal van 0-100. U kunt het downloaden van de motor_functions aan de onderkant van de stap. Als het niet werkt kunt u mij zeggen!! Ik kan gewoon toe te voegen in de instructies!
Met behulp van deze functies geeft u volledige motorische controle. U moet met uw eigen code voor uw specifieke ESC zenuwachtig. Door te verklaren onze sensor functies onafhankelijk van de lus kunnen we nu de motor en de sensoren tegelijkertijd uitvoeren. Dit is waar ik mijn eerste belangrijke tegenslag raakte. Omdat de motor zo veel huidige van de batterij trekt, was het inducerende stromingen in mijn I2C-bus. Mijn sensor zou werken prima wanneer de motor was uitgeschakeld, maar wanneer de motor liep de waarden waren vrijwel zinloos.
Ik nam de volgende stappen uit om het schoonmaken van het lawaai:
Ik heb een ferriet ring toegevoegd aan het esc (met terugwerkende kracht, dit waarschijnlijk gewoon beschermt het ESC lawaai-geleerd te gebruiken na mijn Rössl crashte http://www.hobbyking.com/hobbyking/store/__23206__Clip_On_Soft_Ferrite_Rings_5pc_.html)
Ik de sensoren zo ver mogelijk van de motor gemonteerd
Twisted al mijn draden om te proberen en te minimaliseren huidige inductie
Ik vond deze websites om te helpen omgaan met mijn probleem:
http://diydrones.com/forum/topics/PID-controller-I2C-bus-Noise-from-ESC?xg_source=activity //this is een draad die ik begon op DIY drones
http://forum.allaboutcircuits.com/showthread.php?t=41916
Dit leek sensor fout te minimaliseren, maar nog steeds ongeveer 5 uit elke 20 waarden waren uit +-10 graden. Om dit schoon te gemedieerde ik de sensor-waardes door:
Bouwen van een aray te houden van 20 waarden zoals die chronologisch verschenen
Bouwen van een matrix die de laatste 20 waarden gesorteerd in gehouden (oplopend of aflopend; het maakt niet uit want we zijn op zoek naar de mediaan)
Ik gebruikte een zeepbel soort om te helpen sorteren mijn waarden
Ik vond deze website te helpen verklaren hoe sorteer array efficiënt:
http://mathbits.com/mathbits/CompSci/arrays/sorting.htm
U zult moeten construeren veelvouden van deze functies voor meerdere waarden sorteren (x, y, z; dx, dy, dz)
Mijn zeepbel sorteer en mediaan functies kunnen worden gedownload op de onderkant van de stap!
Nu dat uw sensoren waarden congruent zijn en u controle over uw AC-motor hebt, kunnen we beginnen werkelijke PID controle!
De wikipedia-pagina heeft een goede baan uit te leggen hoe het programma moet worden gestructureerd met behulp van psuedocode. Er zijn vele, vele manieren om dit te implementeren. Het hangt af van hoe lang u wilt uw feedback gebruiken voor u integraal en derrivative termen.
Hier vindt u mijn PID_sample aan de onderkant van deze stap!
Afstemmen van de PID: er zijn vele manieren om af te stemmen op een PID. U kunt door software, gok en controleer, ik zou proberen met behulp van de methode Zieger Nichols.
Enigerlei wijze, u begint door alleen het voeren van uw output met de proportionele fout. KP zo instellen dat de proportionele termijn nooit uitvoercapaciteit overschrijdt. Kortom, het systeem zal schommelen, wilt u het aan het temperen van rond uw setpoint (of bij de minst niet toenemen in de tijd!). Zodra u hebt gevonden een geschikte KP kunt u instellen dat KD of KI. Verschillende mensen zeggen verschillende dingen als het gaat om die men eerst doen, maar integraal termijn een undercorrection naar het setpoint versnellen zal terwijl de derrivative termijn een overcorrection zal vertragen.
http://www.YouTube.com/watch?v=_qlgWSP-kfk&feature=g-UPL
Na het spelen met de code voor een tijdje moet het duidelijk geworden hoe adaptieve dit type controller is aan uw specifieke systeem. Vergeet niet, probeer en feedforward zo veel als je weet hoe! Zodra u vertrouwd bent ga je gang en de controller installeren!!