Stap 8: PID controle (optioneel)
In het geval dat u wilt springen van dit deel, is het OK. U kunt blijven met de proportionele controle uitgelegd op de laatste stap, of branden sommige hersenen ter uitvoering van een meer complexe controlesysteem in uw Robot, het is jouw keuze. We gaan.
PID (evenredige, afgeleide en integraal) is één van de meest voorkomende controle regelingen rond. De meeste industriële controlelussen gebruiken sommige smaak van PID controle. Er zijn vele manieren om af te stemmen op een PID lus, met inbegrip van de handmatige techniek die gebruikt wordt in dit voorbeeld.
Denk aan PID als een eenvoudige veer. Een veer heeft een originele lengte, die toen gestoord, door uitzetting of inkrimping, de neiging om het weer zijn oorspronkelijke lengte in de kortst mogelijke tijd. Ook een PID-algoritme in een systeem heeft een set-waarde van een bepaalde natuurkundige grootheid te worden gecontroleerd, genoemd een 'set point', die toen gewijzigd als gevolg van één of andere reden het systeem controles andere noodzakelijke functies uit het, om terug te gaan naar de oorspronkelijke set punt in de kortste tijd mogelijk. PID-controllers worden gebruikt wanneer er een behoefte om controle van een natuurkundige grootheid en om er gelijk is aan een opgegeven waarde. In het volgende voorbeeld, Cruise controller in auto's, Robots, temperatuurregelaars, spanningsstabilisatoren, enz.
Hoe werkt de PID?
Het systeem berekent de 'fout' of 'afwijking' van de fysieke hoeveelheid van de set-punt, door het meten van de huidige waarde van die fysieke hoeveelheid met behulp van een sensor (s). Als u wilt terugkeren naar de set-punt, deze 'fout' moet worden geminimaliseerd, en idealiter gelijk is aan nul moet worden gemaakt. Ook, zou dit proces zo snel mogelijk gebeuren. In het ideale geval moet er nul vertraging in het antwoord van het systeem tot de verandering van haar instelpunt.
Meer informatie vindt u in vele boeken en website ook hier:
http://en.wikipedia.org/wiki/PID_controller
Uitvoering van PID
i) fout Term (e):
Dit is gelijk aan het verschil tussen het instelpunt en de huidige waarde van de hoeveelheid die wordt gecontroleerd.
fout = set_point-current_value (in ons geval is de fout variabele krijgen van de positie van de Robot over de lijn
II) evenredig Term (P):
Deze term is evenredig met de fout.
P = fout
Deze waarde is verantwoordelijk voor de omvang van de verandering die nodig in de natuurkundige grootheid te bereiken de instelpunt. De term deel is wat bepaalt de stijgtijd van het controle-lus of hoe snel het zal bereiken de instelpunt.
III) integraal Term (I):
Deze term is de som van alle vorige foutwaarden.
I = I + fout
Deze waarde is verantwoordelijk voor de snelheid van de reactie van het systeem tot de verandering van de set-punt. De integraal term wordt gebruikt de eliminate de steady-state fout de proportionele termijn voorgeschreven. Meestal kleine Robots gebruikt niet de integraal term want we zijn niet bezorgd over de steady-state fout en het kan bemoeilijken de lus tuning.
IV) differentiële of daarvan afgeleide Term (D):
Deze termijn is het verschil tussen de momentane fout van de set-punt, en de fout van de vorige instant.
D = fout - previousError
Deze waarde is verantwoordelijk voor het vertragen van de snelheid van de veranderingen van de fysieke hoeveelheid qua dicht bij het punt van de reeks. De afgeleide term wordt gebruikt de verminderen de overschrijding of hoe veel het systeem over corrigeert.
Vergelijking:
PIDvalue = (Kp * P) + (Ki * ik) + (Kd * D)
Waar:
KP is de constante, waarmee de omvang van de verandering die nodig is om de instelpunt variëren.
Ki is de de constante, die wordt gebruikt om het tarief waartegen de verandering moet worden gebracht in de natuurkundige grootheid te bereiken de instelpunt variëren.
KD is de constante, waarmee de stabiliteit van het systeem variëren.
Een benadering is om de Kd-variabele instellen op 0 en de Kp term alleen eerst afstemmen. KP van 25 is een goede plaats om te beginnen in ons geval hier. Bij de laatste stap gebruikten we een Kp van 50 die zeer goed met mijn Robot werkt. Als de robot te traag reageert, verhogen de waarde. Als de robot lijkt te reageren om snel en instabiel, verlaagt u de waarde. Zodra de antwoorden van de robot tune redelijk, de afgeleide gedeelte van de controle-lus. Eerst de Kp en Kd waarde op de 1/2 van de Kp-waarde instellen. Bijvoorbeeld, als de robot reacties redelijk met een Kp = 50, dan stel Kp = 25 en Kd = 25 te starten. Verhoging van de winst van de Kd (afgeleide) verlagen de overschrijding te verminderen als de robot instabiel.
Een andere component van de lus te overwegen is de snelheid van de werkelijke monster/loop. Dit versnellen of het vertragen van dit kan maken een significant verschil in de prestaties van de robot. Dit is ingesteld door de verklaringen van de vertraging die u in uw code hebt. Het is een voorzichtige metod van proberen-fout om het optimale resultaat te krijgen
Op basis van de hoger genoemde benadering, was de balg-functie geïmplementeerd:
VOID calculatePID()
{
P = fout;
I = I + fout;
D = fout-previousError;
PIDvalue = (Kp * P) + (Ki * ik) + (Kd * D);
previousError = fout;
}
De eenvoudige Kp constante gebruikt in de laatste stap zal worden vervangen voor dit vollediger PIDvalue:
VOID motorPIDcontrol()
{
int leftMotorSpeed = 1500 - iniMotorPower - PIDvalue;
int rightMotorSpeed = 1500 + iniMotorPower - PIDvalue;
leftServo.writeMicroseconds(leftMotorSpeed);
rightServo.writeMicroseconds(rightMotorSpeed);
}
Maar merk op dat als u Kd en Ki hebt = 0, PIDvalue is alleen Kp * fout zoals in de laatste stap