Stap 6: De vaste bedragen!
Dus hoe het evenwicht? Negatieve feedback wordt gebruikt door het creëren van een fout tussen de gewenste hoek van de helling en de gemeten waarde van het gyro. Als de twee verschillen wordt een stuurspanning toegepast op beide motoren tegelijk wilt rijden de kar naar voren of achteruit wilt corrigeren van deze hoek. Een dergelijke aanpak staat bekend als proportionele controle en lijdt aan het feit dat dit een grote fout die is gemaakt kan worden. Theorie vertelt ons dat door het verhogen van het bedrag van de winst naar het pad van de fout dat deze fout vermindert. Helaas maken de fout kleine genoeg vergt dergelijke een grote winst dat de lus instabiel wordt en de kar omvalt. We zaken kunnen verbeteren door de toevoeging van een tweede termijn, die evenredig is aan het differentieel van de fout signaal tijd krijgen een tweede termijn. Dit staat bekend als differentiële controle en wanneer toegevoegd aan de proportionele term staat bekend als PD of evenredige plus afgeleide controle. De D-termijn stabiliseert het systeem en vermindert de instabiliteit. Dat zou het antwoord zijn, behalve dat de fout niet altijd gaan naar nul en er een eindige verschil overblijft is. De kar zal flop terug en vooruit en niet blijven rechtop. We kunnen een derde termijn die is een integrator die de fout wegneemt toevoegen. Helaas leidt dit derde zogenaamde dat ik termijn indien in te grote hoeveelheden gegeven tot verdere instabiliteit. Daarom moet een compromis tussen de drie termen in wat bekend als een PID-regelaar staat worden voldaan. Afstemmen van PID controllers is een beetje een kunst en er zijn tuning regels, maar ze zijn niet zo goed als er een inherent onstabiel systeem zoals we doen. Echter, PID werkt en andere instructibles hebben het gebruikt.
De aanpak die we hier gebruiken is de benadering die veel voor de Segway gebruikt en houdt geen zeggenschap in PID. PID is vaak bekend als klassieke regeltheorie overwegende dat wat we hier gebruiken is bekend als moderne regeltechniek. In feite is de klassieke aanpak niet die oude en de moderne benadering niet dat moderne! De moderne benadering die we gebruiken is bekend als de Pole-positie staat-Feedback. In het we feedback verhoudingen van hoekige positie, snelheid en versnelling. De Segway indestructibles gebruiken alleen positie en snelheid terugkoppeling naar het beste van mijn kennis. Ik voegde een derde staat van versnelling en een vierde staat die integratie of integraal actie. Dit soort dingen is goed ingeburgerd in de studieboeken in feite maar zelden gezien in de demonstraties. Wij zouden doorgaans alleen een wiskundig model dwz de differentiaalvergelijkingen met een beschrijving van het volledige dynamische systeem. Hier gebruik ik een eenvoudiger aanpak en afstemmen van het als een PID. Er is een gelijkenis tussen de PD-controle en staat feedback die alleen feedback van de positie en snelheid gebruikt. De snelheid-feedback is bekend als tarief feedback en is gewoon een differentiële beschermingstermijn die is gelezen uit een sensor in plaats van wezen expliciet berekend. Het verschil hier is dat differentiatie in het Feedback-pad in plaats van de voorwaartse pad zoals het geval met PID. Dit geeft een beetje meer demping ten koste van een beetje langzamer systeem - maar kan gemakkelijk worden gecompenseerd door verhoging van de totale winst. Dus hier meten we direct hoekige fout met de Gyro en de hoeksnelheid van de versnellingsmeter.
Het derde land is versnelling die we berekenen (er zijn betere manieren maar voor nu ik deze methode gebruiken) rechtstreeks door te differentiëren van de snelheid. Door het beheersen van versnelling te kunnen bepalen van de huidige getrokken van de motoren en verbeteren van verstoring afwijzing. Als u niet kunt versnelling met een transducer meten (dat is meestal het geval) moet dan u het door differentiatie of met behulp van een staat-waarnemer of Kalman-filter.
Dus de controle-signaal is
u (k) =-K * [Kp * y (k) + Kd * y (k) _dot + Ka * y (k) _double_dot]
waar K is totale winst van de potentiometer aangepast en Kp, Kd en Ka de proportionele winst zijn, krijgen afgeleide winst en versnelling respectievelijk. Hier y(k) vertegenwoordigt de huidige lezing van de Gyro-sensor (hoek) en y (k) _dot is de huidige lezing van hoeksnelheid y (k) _double_dot is de huidige lezing van versnelling allemaal op instant k van de tijd. In het diagram is Ki integraal winst.
Digitaal onderscheiden kunnen we gebruik maken van een eenvoudige benadering van Euler. Een bemonstering interval dT seconden (hier is dT = 0,01 voor een sampling-frequentie van 100 Hz) Wij kunnen differentiëren snelheid omega versnelling accel als het geven
angular versnelling van de hoeksnelheid berekenen
omega_old = omega; opslaan van de laatste waarde van de versnelling
Omega =.. .Lees snelheid van versnellingsmeter hier
differentiëren
accel =(omega-omega_old) /dT;
Meestal weglaten van dT (dwz instellen dT = 1) wordt het als een winst-term die we afzonderlijk kunt aanpassen.
Dit is vrij een ruw differentiator en in feite elke vorm van pure differentiator is een slecht idee voor een besturingselement lus omdat het hoogfrequent geluid versterkt en structurele resonantie opwekt. Dus wij low-pass filter de gedifferentieerde output. We gebruiken een eerste orde-laagdoorlaatfilter - zou duren om alle van de theorie hier te leggen. Dit filter wordt niet in het bovenstaande diagram weergegeven. (alleen het ideale geval).
Te integreren we gebruiken een eenvoudige integratie van Euler. bijvoorbeeld aan het integreren van een fout
Integratie van fout
Setpoint = 0 voor nul graden verticaal
fout = setpoint-output_value;
y_out_past = y_out; / winkel/voorbij de waarde van de productie van de integrator
y-out = y_out_past + dT * fout;
Ja u kunt de y += type notatie in code maar het verbergt wat er gebeurt en het begrip
y_out is waar de geïntegreerde output. meestal we dT weglaten en schalen later dwz dT = 1. In principe kunt u een opsomming te maken van integratie, maar bovenstaand werkwijze zit een betere - recursieve methode monster door monster en alleen vereist minimale opslag. Sommatie zou verplichten ons om een aantal afgelopen waarden te slaan. U kunt ook integratie via z-transformaties uitvoeren en krijgen een iets meer nauwkeurige versie een trapeziumvormige Integrator genoemd. Geen behoefte aan dat complicatie hier, maar ik heb het gebruik van z-transformaties voor onze eenvoudige low-pass filter.
De bemonsteringsfrequentie: ik bovenstaande code van Segway gewend de samplingfrequentie ingesteld op 100Hz en kon niet krijgen om te gaan sneller. Ik controleerde met een oscilloscoop dat dit het ware sampling-frequentie was door het spiegelen van een vlag van de logica op en neer - true en false zeer uitvoering van de lus. Ik stuur dit naar een digital out en kreeg een vierkante manier. Ik heb de helft-periode gemeten en het was ter plaatse op 0.01secs = dT. Het blokdiagram wordt weergegeven met de volledige staat-feedback en integraal actie.
Ik gebruikte ook de speciale zogenaamde aanvullende filters te combineren van de versnellingsmeter en de gyro lezing. Dit is omdat de versnellingsmeter goed bij lage frequenties, is terwijl de gyro goed bij hoge frequenties, is terwijl het tegenovergestelde het geval voor slechte prestaties is. Dit geprobeerd te verminderen van het effect van gyro drift. Een andere benadering is een Kalman-filter te gebruiken maar dit is hier niet getoond. Gegevens over aanvullende filter wordt weergegeven in de onderstaande link.
http://www.chrismarion.net/index.php?option=com_co...
Het belangrijkste idee wordt weergegeven in het diagram (zie hieronder het diagram staat-feedback) ontleend aan deze link.