Enhed 5 / 9

Kontrolalgoritmer: PID- og AI-understøttet tuning

Gevinster:

  • Evne til at forklare og anvende P, I, D termer og effekter af PID-controlleren på AI med den rigtige kontekst
  • Evne til at udføre Ziegler-Nichols og eksperimentelle tuning metoder trin for trin ved hjælp af AI
  • Evne til at genkende og eliminere PID-fælder såsom integral windup, afledt støj i AI-anbefalinger

Holde temperaturen på en ovn konstant, køre hastigheden af ​​en motor til en ønsket værdi, afbalancere vinklen på en drone; I hjertet af dem alle er en kontrolalgoritme. Den mest almindelige af disse er PID-regulatoren, som er rygraden i branchen. PID; Den er enkel, robust og fungerer på en lang række problemer. Men "simpel" betyder ikke "let at tune": en forkert indstillet PID vil oscillere, overskride, sidde sent eller blive fuldstændig ustabil. Kunstig intelligens er en værdifuld assistent her: den forklarer PID-termer, guider gennem tuning-metoder, diagnosticerer typiske faldgruber og skriver tuning-koden. Den endelige justering foretages dog ved at se på dit systems fysiske opførsel, og stabilitetsbeslutningen tilhører ingeniøren. I denne enhed dækker vi, hvordan man installerer, tuner og verificerer PID-fælder med AI.

Tre vilkår for PID

PID'en reagerer på fejlsignalet (e = mål - målt) på tre måder:

sigt

Hvad ser han på?

Effekt

i ekstrem

P (proportional)

aktuelle fejl

hurtig respons

Oscillation, permanent fejl

I (integral)

Akkumuleret tidligere fejl

Nulstiller permanent fejl

overskridelse, afvikling, svingning

D (afledt)

Ændring af fejl

Dæmpning reducerer overskridelse

Forstærk støjen

Verbal opsummering: P svarer på spørgsmålene "hvor langt er jeg nu", jeg "hvor længe har jeg været væk", D "hvor hurtigt nærmer jeg mig". En god controller balancerer alle tre.

klasse PID: def __init__(selv, Kp, Ki, Kd, output_min=-100, output_max=100): self.Kp, self.Ki, self.Kd = Kp, Ki, Kd self.out_min, self.out_max = output_min, output_max self.integral = 0,0 self.previous.d. dt): fejl = mål - målt # P p = self.Kp * fejl # I -- selv.integral med vindup-beskyttelse += fejl * dt i = self.Ki * self.integral # D -- afledt støjfølsom d = self.Kd * (fejl - self.previous_error) / dt self.previous_error if output self.output_max: output = self.out_max self.integral -= fejl * dt # anti-windup: fortryd det integrale elif output < self.output_min: output = self.output_min self.integral -= fejl * dt returnere output

Denne kode er ikke en "trænings-PID", men et skelet tæt på produktionslogik: den inkluderer outputmætning og anti-windup. Mange simple PID'er givet af AI omgår disse to beskyttelser; Uden dem, når aktuatoren når sin grænse, vil integralen svulme, og systemet vil overskride uventet.

Tip: Når du beder AI om PID'en, skal du sige "tilføj outputmætning og anti-afvikling, anvend afledt ved måling til afledt term". Disse tre tilføjelser konverterer lærebogens PID til feltet PID.

Integral Windup og Derivative Noise

To klassiske faldgruber er de mest almindelige årsager til PID-svigt:

Integral windup: Når aktuatoren mættes (f.eks. er motoren allerede ved fuld effekt), fortsætter fejlen, og integralleddet fortsætter med at vokse. Dette oppustede integral fører til et stort overskridelse, når systemet når målet. Løsning: stop eller tilbagerulning af integralet, når outputtet er mættet (anti-windup, vist i koden ovenfor).

Afledt støj: D-leddet tager den afledede af fejlen; Afledten af ​​en støjende måling er meget mere støjende og vil vibrere aktuatoren. Løsninger: tage den afledede fra målingen (afledet af målingen i stedet for fejlen), tilføje et lavpasfilter til det afledte led.

# Reduktion af afledt støj: måleafledt + filterd_raw = -(målt - self.previous_measured) / dt i stedet for fejl

AI er god til at identificere disse faldgruber; Hvis du siger "Min PID overskrider meget, når den når målet", anbefaler det afvikling. Men du verificerer ved at måle, om rettelsen virker på dit system.

Opsætning med Ziegler-Nichols

En klassisk metode til at finde gevinster (Kp, Ki, Kd) fra bunden er Ziegler-Nichols. Dens essens: starter kun med P og øger Kp indtil systemet går i vedvarende oscillation; Beregn Kp, Ki, Kd fra tabellen med den kritiske forstærkning Ku og oscillationsperioden Tu på dette tidspunkt.

controller

kp

Ti

Td

P.

0,5·Ku

P.I.

0,45·Ku

Tu/1.2

PID

0,6·Ku

Tu/2

Tu/8

Ziegler-Nichols trin (plan til at blive lavet af AI):1. Tag Ki=0, Kd=0. Bare kør P.2. Øg LANGSOMT Kp indtil stabil, vedvarende svingning begynder.3. Denne Kp = Ku (kritisk forstærkning), oscillationsperiode = Tu.4. Beregn Kp, Ti, Td fra tabellen; Ki = Kp/Ti, Kd = Kp*Td.5. Start med disse værdier, og lav derefter eksperimentelle justeringer.

Forsigtig: Ziegler-Nichols bringer bevidst systemet til dets stabilitetsgrænse (vedvarende oscillation). Der er risiko for mekanisk belastning, overstrøm og fare, når du gør dette på ægte hardware; Hvis det er muligt, så gør det i simulering først, og arbejd derefter med lav effektgrænse og nødstop i hardware. Ku foreslået af AI er et udgangspunkt, det måles og verificeres i dit system.

AI-assisteret diagnostik

Du kan diagnosticere PID-adfærd ved at beskrive den til AI'en. Symptom → mulig årsagskortlægning:

symptom

mulig årsag

Den retning, AI vil foreslå

langsom siddende

Kp/Ki lav

øge kp

Permanent fejl

Jeg er fraværende eller meget lav

Ki tilføje/øge

Oversving + oscillation

Kp/Ki høj, ingen D

Tilføj Kd, formindsk Ki

Aktuatoren ryster

afledt støj

Filtrer/reducer D

Når du når det store overskridelse

integreret afvikling

Tilføj anti-windup

Svag prompt / stærk prompt

SVAG:"Giv PID-forstærkningerne."(Hvilket system? Hvordan er adfærden? Er der nogen målinger? Tilfældige tal kommer.)STERK:"Jeg justerer PID'en for en DC-motorhastighedskontrol. I øjeblikket er Kp=2, Ki=0,5, Kd=0. Den overskrider 35% på trin-inputtet, og når den når målet, tager den en lang anden overskridelsestid; 100 Hz List de mulige årsager fra disse symptomer, som får "Foreslå, hvilken retning jeg skal ændre det, og fortæl mig, hvordan jeg tester, om overskridelsen er en integreret afvikling."

Mini etui

Kontrolingeniør Kerem justerer temperaturstyringen af ​​en ekstruder. Med de gevinster, som AI'en foreslår, når systemet hurtigt målet, men ved hvert sætskift foretager det et stort overskridelse og sætter sig langsomt ned. Kerem forklarer symptomet til AI; AI har mistanke om integreret afvikling, fordi varmeren forbliver på fuld effekt (mættet) i et stykke tid. Kerem tilføjer anti-windup til PID-koden, og overskridelsen falder betydeligt. Men nu er der et lille flimmer ved varmeapparatets udgang; Han tilskriver dette D-udtrykket, der forstærker temperatursensorstøjen og tilføjer et lavpasfilter til derivatet. Endelig validerer den groft gevinsterne med Ziegler-Nichols og udfører eksperimentel finjustering. AI har hurtige diagnoser; Men Kerem bekræftede hver korrektion ved at måle den faktiske trinrespons - uanset om optrækket blev rettet eller flimren væk, kunne det kun ses grafisk.

Almindelige fejl

  • Manglende tilføjelse af outputmætning og anti-windup til PID og oplever et stort overskridelse af aktuatorgrænsen.
  • Tager derivatet fra derivatet af den støjende måling og vibrerer aktuatoren.
  • Forudsat at dt er konstant, hvorimod prøvetagningsperioden varierer.
  • Udførelse af Ziegler-Nichols oscillationstest på hardware uden sikkerhedsforanstaltninger.
  • Accept af AI-genereret indtjening som "endelig" uden systemspecifik verifikation.
  • Ændre en enkelt forstærkning med meget store trin og skubbe systemet til ustabilitet.

Sammenfattende

  • PID; Den reagerer med P (aktuel fejl), I (akkumuleret fejl), D (fejlændring).
  • Felt-PID bør inkludere outputmætning, anti-windup og afledt filter.
  • Integreret optræk, stort overskridelse, afledt støj forårsager aktuatorvibrationer.
  • Ziegler-Nichols giver start til gevinst; Det er implementeret med sikkerhedsforanstaltninger i hardwaren.
  • AI er hurtig i diagnosticering fra symptom til årsag; Korrektionen verificeres ved måling.
  • dt faktisk målt; Indtjeningsændringer foretages i små trin og observation.

Ansøgningsopgave

Vælg et system (rigtig motor/varmelegeme eller en simpel første/anden ordens model i Python), og få AI til at generere en PID-klasse med saturation + anti-windup. Derefter: (1) observer oscillationsadfærden ved kun at starte med P og øge Kp, (2) tilføj Ki for at eliminere den permanente fejl og se, hvordan overskydningen øges, (3) sammenlign effekten på det store overskridelse ved at slå anti-windup til og fra. Plot trinresponsen ved hvert trin og noter, hvilken gevinst der ændrer hvilken adfærd. Sammenlign gevinsterne fra Ziegler-Nichols med de gevinster, du selv fandt.