Intro till modell flygplan Autopilot! (3 / 7 steg)
Steg 3: Demo PID-regulator
Eflite Outrunner Motor
35 amp ESC
11.1 V LiPo batteri
1/2" PVC
En gammal såg hästen för en monter
Registeransvarige ser ut i vinkel armen hänger på att använda våra accelerometer och gyroskop, och använder denna data för att avgöra hur mycket ström att kasta motorn för att göra den arm.
Eftersom ESC för att koppla in din motor i en radio mottagare buss avsedd för servon, är det relativt lätt att kontrollera en borstlös växelströmsmotor med en ESC på en Arduino tack vare Servo.h + Servo.cpp i mappen bibliotek. Jag tror servo protokollet använder puls position modulation (PPM) som kan uppnås med en PWM stift på din arduino med servo.write() funktion.
http://www.hooked-on-RC-airplanes.com/servo-tutorial.html
Det är viktigt att vara saftey medveten när du kör dessa motorer, eftersom de går extremt snabbt. * ALLTID bära saftey glasögon * * lämna propellern bort tills du absolut behöver it *
Du kommer att behöva skriva en funktion till arm(); din ESC så att du kan ställa in dess hastighet. I princip måste du skriva ESK låg, hög, och låg sedan igen.
http://www.Arduino.cc/cgi-bin/yabb2/YaBB.pl?NUM=1226292633 Detta forum går över hur man styr en borstlös motor och där jag fick ram för min arm(); funktion och setSpeed (); funktion.
Du kan bara använda en servo.write(0-180) för att ställa din hastighet på din esc, men du kan även mappa det på en skala från 0-100. Du kan hämta motor_functions längst ned i steget. Om det inte fungerar vänligen berätta!! Jag kan enkelt lägga till det i instruktionerna!
Med dessa funktioner ger dig full motorstyrning. Du kommer att behöva sitter och plockar med din egen kod för din särskilda ESC. Genom att förklara vår sensor fungerar oberoende av slingan kan vi nu köra motor och sensorer på samma gång. Det är där jag träffade min första stora bakslag. Eftersom motorn drar så mycket ström från batteriet, det inducera strömmar i min I2C bussen. Min sensor skulle fungera bra när motorn var avstängd, men när motorn var igång värdena som var ganska mycket meningslöst.
Jag tog följande steg för att rensa upp buller:
Jag la en ferrit ring till ESK (retroaktivt, detta förmodligen bara skyddar ESK från buller-lärt sig att använda dessa efter min Zagi kraschade http://www.hobbyking.com/hobbyking/store/__23206__Clip_On_Soft_Ferrite_Rings_5pc_.html)
Jag monterade sensorerna så långt bort som möjligt från motorn
Twisted alla mina kablar för att försöka minimera aktuella induktion
Jag hittade dessa webbplatser för att ta itu med mina problem:
http://diydrones.com/forum/topics/PID-Controller-I2C-Bus-Noise-from-ESC?xg_source=activity //this är en tråd som jag började på DIY drönare
http://forum.allaboutcircuits.com/showthread.php?t=41916
Detta verkade minimera sensor fel, men fortfarande cirka 5 av varje 20 värden var iväg med +-10 grader. För att rensa detta medierad jag sensorn värdena med:
Bygga en aray för att hålla 20 värden som de dök upp kronologiskt
Bygga en matris som hölls senaste 20 värdena sorteras i (stigande eller fallande ordning, det spelar ingen roll eftersom vi letar efter medianen)
Jag använde en bubbla sortera för att sortera mina värderingar
Jag hittade denna webbplats för att hjälpa till att förklara hur man effektivt sortera array:
http://mathbits.com/mathbits/compsci/arrays/sorting.htm
Du kommer att behöva konstruera multiplar av dessa sortering funktioner för flera värden (x, y, z; dx, dy, dz)
Min bubbla typ och medianen funktioner kan laddas ner på botten av steget!
Nu när dina sensorer värden är kongruenta och du har kontroll över din AC-motor, kan vi börja faktiska PID control!
Wikipedias sida gör ett bra jobb som förklarar hur programmet ska vara strukturerat med hjälp av psuedocode. Det finns många, många sätt att genomföra detta. Det beror på hur länge du vill använda din feedback för integrerad och derrivative termer.
Du kan hitta min PID_sample längst ned i detta steg!
Tuning PID: det finns många sätt att ställa in ett PID. Kan du av programvara, gissa och kolla, jag skulle prova med metoden Zieger Nichols.
Något sätt, du börja genom att bara köra din produktion med proportionell fel. Ange KP så att proportionella termen aldrig överstiger produktionskapacitet. I grund och botten systemet kommer att svänga, det ska dämpa runt din setpoint (eller åtminstone inte öka över tid!). När du har hittat en lämplig KP kan du antingen ange KD eller KI. Olika människor säger olika saker när det kommer till som en att göra först, men integrerad sikt kommer att påskynda en undercorrection mot normvärdet medan derrivative termen kommer att sakta ner en overcorrection.
http://www.youtube.com/watch?v=_qlgWSP-kfk&feature=g-upl
Efter att ha spelat med koden för ett tag skulle det blivit uppenbart hur anpassningsbar styrenhet är att just ditt system. Kom ihåg att prova och framkoppling eftersom du vet hur man! När du är bekväm gå vidare och installera registeransvarige!