Själv balansera upp och ned pendel (6 / 9 steg)
Steg 6: De hårda belopp!
Så hur går det ihop? Negativ feedback används genom att skapa ett fel mellan önskad meta av böjelse och det uppmätta värdet från gyrot. Om två skiljer sig sedan tillämpas en styrspänningen på båda motorerna samtidigt för att köra vagnen framåt eller bakåt för att korrigera denna vinkel. Ett sådant tillvägagångssätt kallas proportionell reglering och lider av det faktum att detta kan vara ganska stora fel som skapas. Teorin säger att genom att öka mängden vinst till felväg som detta fel minskar. Tyvärr för att göra felet litet nog kräver sådan en stor vinst att slingan blir instabil och vagnen faller. Vi kan förbättra situationen genom att lägga till en andra mandatperiod som står i proportion till skillnaden av fel signal tiden få en andra mandatperiod. Detta kallas differentiell kontroll och när läggas till proportionell termen är känd som PD eller proportionella plus derivat kontroll. Termen D stabiliserar systemet och minskar instabiliteten. Det skulle vara svaret förutom att felet inte alltid gå till noll och det är ett finita differens kvar. Vagnen kommer att floppa tillbaka och framåt och inte bo rakt upp. Vi kan lägga till en tredje mandatperiod som är en integratör som tar bort felet. Tyvärr leder detta tredje så kallade jag kalla om ges i för stor mängd det till ytterligare instabilitet. Därav måste en kompromiss uppfyllas mellan de tre i vad som kallas en PID-regulator. Trimma PID styrenheter är lite av en konst och det finns trim regler, men de är inte riktigt så bra när du har en inneboende instabilt system som vi gör. Men PID fungerar och andra instructibles har använt den.
Metoden vi använder här är den strategi som många använder för Segway och är inte PID control. PID är ofta känd som klassisk kontrollera teorin medan vad vi använder här är känd som Modern reglerteknik. I själva verket den klassisk syn är inte den gamla och den moderna uppfattningen är inte så modern! Det moderna sättet vi använder är känd som Pole-placering stat-Feedback. I det vi feedback proportioner av kantiga position, hastighet och acceleration. Segway indestructibles endast använda position och hastighet feedback till min kännedom. Jag la en tredje stat acceleration och en fjärde stat som är integration eller integrerad del action. Sådant är väl etablerade i textböcker faktiskt men sällan sett i demonstrationer. Vi kräver normalt en matematisk modell, dvs differentialekvationer som beskriver hela dynamiska systemet. Här använder jag en enklare tillvägagångssätt och finjustera det som ett PID. Det finns en likhet mellan PD kontroll och staten feedback som endast använder feedback position och hastighet. Velocity feedback som kallas Betygsätt feedback och beräknas bara en differentiell term som läses från en sensor i stället för att vara uttryckligen. Skillnaden här är att differentiering är i den Feedback väg snarare än framåt vägen som är fallet med PID. Detta ger lite mer dämpning på bekostnad av en något långsammare system - men lätt kan kompenseras genom att öka den totala vinsten. Så här mäter vi direkt vinkelfel med Gyro och vinkelformig hastighet från accelerometern.
Det tredje statligt är acceleration som vi beräknar (det finns bättre sätt men för nu jag använda den här metoden) direkt genom att skilja hastighet. Genom att styra acceleration kan vi kontrollera strömmen från motorerna och förbättra störning avvisande. Om du inte kan mäta acceleration med en givare (som i vanliga fall) måste sedan du skapa det genom differentiering eller använda en staten observatör eller Kalman-filter.
Så styrsignalen är
u (k) =-K * [Kp * y (k) + Kd * y (k) _dot + Ka * y (k) _double_dot]
där K är totala vinst justeras från potentiometer och Kp, Kd och Ka är proportionella förstärkningen, vinna härledda vinst och acceleration respektive. Y(k) representerar här den nuvarande behandlingen från Gyro-sensor (vinkel), y (k) _dot är närvarande behandlingen av vinkelhastighet och y (k) _double_dot är den nuvarande behandlingen av acceleration på tid instant k. I diagrammet är Ki integrerad vinst.
Att skilja digitalt kan vi använda en enkel Euler metod. För en provtagning intervall dT sekunder (här är det dT = 0,01 för en 100 Hz samplingsfrekvens) vi kan skilja hastighet omega för att ge acceleration accel som
beräkna vinkelformig acceleration från vinkelformig hastighet
omega_old = omega. lagra sista värdet av acceleration
Omega =.. .read hastighet från accelerometer här
differentiera
Accel =(omega-omega_old)/dt;
Vi lämnar oftast dT (dvs ange dT = 1) eftersom det blir en vinst term som vi kan justera separat.
Detta är ganska rå differentiator och faktiskt någon typ av ren differentiator är en dålig idé för en kontrollerar kretsar eftersom det förstärker högfrekvent brus och retar strukturella resonans. Därför vi låg-pass filter differentierade produktionen. Vi använder en första order lågpassfilter - skulle ta ett tag att förklara alla teorin här. Detta filter visas inte i diagrammet ovan. (bara det ideala fallet).
Att integrera vi använda en enkel Euler integration. t.ex att integrera ett fel
Integration av fel
SetPoint = 0 för noll grader vertikal
fel = setpoint-output_value;
y_out_past = y_out; / store/förbi integrator produktionsvärdet
y-ut = y_out_past + dT * fel;
Ja du kan använda y += typ notationen i koden men det döljer vad som händer och förståelsen
där y_out är den integrerade produktionen. vanligtvis vi lämnar ut dT och skala senare dvs dT = 1. Du kan i princip använda en summering för integration, men ovanstående metod är en bättre - rekursiva metod urvalet av prov och bara kräver minimal lagring. Summering skulle kräva oss att lagra ett antal tidigare värden. Du kan också utföra integration via z-transformeringar och få en något mer exakt version som kallas en Trapezoidal Integrator. Inget behov av att komplikation här, även om jag använder z-transformeringar för våra enkla lågpassfilter.
Provtagningsfrekvensen: Jag använde tidigare Segway kod Ange samplingsfrekvensen till 100Hz och kunde inte få det att gå fortare. Jag kollade med ett oscilloskop att detta var sant samplingsfrekvensen genom att bläddra en logik flagga upp och ner - sanna och falska själva utförandet av slingan. Jag skicka detta till en digital ut och fick en fyrkantig sätt. Jag mätte halv-perioden och det var fläck på 0.01secs = avskiljare. Blockdiagram visas med full stat-feedback och integrerad åtgärd.
Jag använde även de särskilda så kallade kompletterande filter för att kombinera den accelerometer och gyro behandlingen. Detta beror på att accelerometern är bra på låga frekvenser medan gyrot är bra vid höga frekvenser medan motsatsen är fallet för dåliga resultat. Detta försök att minska effekten av gyro drift. En annan metod är att använda en Kalmanfilter men detta visas inte här. Detaljer för metoden kompletterande filter visas i länken nedan.
http://www.chrismarion.net/index.php?option=com_co...
Huvudidén är visas i diagrammet (visas nedan i staten-feedback diagram) tas från denna länk.