Jedinica 5 / 9

Algoritmi upravljanja: PID i AI podržano podešavanje

Dobici:

  • Sposobnost da se objasne i primene P, I, D termini i efekti PID kontrolera na AI sa pravim kontekstom
  • Sposobnost izvođenja Ziegler-Nichols i eksperimentalnih metoda podešavanja korak po korak uz pomoć AI
  • Sposobnost prepoznavanja i eliminacije PID zamki kao što su integralni namotavanje, izvedeni šum u AI preporukama

Održavanje konstantne temperature pećnice, pokretanje brzine motora na željenoj vrijednosti, balansiranje ugla drona; U srcu svih njih je kontrolni algoritam. Najčešći od njih je PID kontroler, koji je okosnica industrije. PID; Jednostavan je, robustan i radi na širokom spektru problema. Ali "jednostavno" ne znači "jednostavno za podešavanje": pogrešno podešen PID će oscilirati, premašiti, kasniti ili postati potpuno nestabilan. Umjetna inteligencija je ovdje vrijedan pomoćnik: objašnjava PID pojmove, vodi kroz metode podešavanja, dijagnosticira tipične zamke i piše kod za podešavanje. Međutim, konačno podešavanje se vrši gledanjem fizičkog ponašanja vašeg sistema i odluka o stabilnosti pripada inženjeru. U ovoj jedinici pokrivamo kako instalirati, podesiti i provjeriti PID zamke pomoću AI.

Tri termina PID-a

PID odgovara na signal greške (e = cilj − mjereno) na tri načina:

termin

Šta on gleda?

Efekat

u ekstremu

P (proporcionalno)

trenutna greška

brz odgovor

Oscilacija, trajna greška

ja (integralni)

Akumulirana prošla greška

Resetuje trajnu grešku

prekoračenje, navijanje, oscilacija

D (derivacija)

Stopa promjene greške

Prigušenje smanjuje prekoračenje

Pojačajte buku

Verbalni sažetak: P odgovara na pitanja "koliko sam sada daleko", ja "koliko dugo me nije bilo", D "koliko brzo se približavam". Dobar kontroler balansira sva tri.

klasa PID: def __init__(self, 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. izmjereno, dt): greška = cilj - mjereno # P p = self.Kp * greška # I -- self.integral sa zaštitom od navijanja += greška * dt i = self.Ki * self.integral # D -- derivacija osjetljiva na šum d = self.Kd * (greška - self.previous_error) / dt self.previous_previous_error) / dt self.previous_previous_error) / dt self.previous_error + output = p wind_errte + output self.output_max: izlaz = self.out_max self.integral -= greška * dt # anti-windup: poništi integralni elif output < self.output_min: output = self.output_min self.integral -= greška * dt return output

Ovaj kod nije "PID za obuku", već kostur blizak proizvodnoj logici: uključuje zasićenje izlaza i anti-windup. Mnogi jednostavni PID-ovi koje daje AI zaobilaze ove dvije zaštite; Bez njih, kada aktuator dostigne svoju granicu, integral će nabubriti i sistem će neočekivano preskočiti.

Savjet: Kada pitate AI za PID, recite "dodajte zasićenje izlaza i anti-windup, primijenite derivaciju na mjerenju na izvodni termin". Ova tri dodatka konvertuju PID udžbenika u polje PID.

Integralni šum navijanja i derivata

Dvije klasične zamke su najčešći uzroci kvara PID-a:

Integralno navijanje: Kada se aktuator zasiti (npr. motor je već na punoj snazi) greška ostaje i integralni član nastavlja rasti. Ovaj naduvani integral dovodi do velikog prekoračenja kada sistem dostigne cilj. Rješenje: zaustavljanje ili vraćanje integrala kada je izlaz zasićen (anti-windup, demonstrirano u kodu iznad).

Derivativna buka: D termin uzima derivat greške; Derivat bučnog merenja je mnogo bučniji i vibriraće aktuator. Rješenja: uzimanje izvoda iz mjerenja (derivacija mjerenja umjesto greške), dodavanje niskopropusnog filtera terminu izvoda.

# Smanjenje šuma derivacije: mjerni derivat + filterd_raw = -(izmjereno - self.previous_measured) / dt umjesto greške

AI je dobar u identifikaciji ovih zamki; Ako kažete "Moj PID uveliko prelazi prekoračenje kada dostigne cilj", preporučuje se nadogradnja. Ali vi potvrđujete mjerenjem da li popravka funkcionira na vašem sistemu.

Postavka sa Ziegler-Nicholsom

Klasična metoda za pronalaženje dobitaka (Kp, Ki, Kd) od nule je Ziegler-Nichols. Njegova suština: počevši samo sa P i povećavajući Kp dok sistem ne pređe u trajnu oscilaciju; Izračunajte Kp, Ki, Kd iz tabele sa kritičnim pojačanjem Ku i periodom oscilovanja Tu u ovoj tački.

kontroler

kp

Ti

Td

P.

0,5·Ku

P.I.

0,45·Ku

Tu/1.2

PID

0,6·Ku

Tu/2

Tu/8

Ziegler-Nicholsovi koraci (plan će izraditi AI):1. Uzmimo Ki=0, Kd=0. Samo pokrenite P.2. POLAKO povećavajte Kp dok ne počne stabilna, trajna oscilacija.3. Ovaj Kp = Ku (kritični dobitak), period oscilovanja = Tu.4. Izračunajte Kp, Ti, Td iz tabele; Ki = Kp/Ti, Kd = Kp*Td.5. Počnite s ovim vrijednostima, a zatim napravite eksperimentalna podešavanja.

Oprez: Ziegler-Nichols namjerno dovodi sistem do njegove granice stabilnosti (trajna oscilacija). Postoji rizik od mehaničkog naprezanja, prekomjerne struje i opasnosti kada se ovo radi na stvarnom hardveru; Ako je moguće, prvo to učinite u simulaciji, a zatim radite s niskim ograničenjem snage i E-stopom u hardveru. Ku koji predlaže AI je početna tačka, mjeri se i provjerava u vašem sistemu.

Dijagnostika potpomognuta umjetnom inteligencijom

Možete dijagnosticirati ponašanje PID-a tako što ćete ga opisati AI. Simptom → mapiranje mogućeg uzroka:

simptom

mogući uzrok

Smjer koji će AI predložiti

sporo sedenje

Kp/Ki nizak

povećanje kp

Trajna greška

Ja sam odsutan ili veoma nizak

Ki dodati/povećati

Prekoračenje + oscilacija

Kp/Ki visok, nema D

Dodajte Kd, smanjite Ki

Aktuator se trese

derivativni šum

Filtriranje/smanjivanje D

Kada dostignete veliko prekoračenje

integralni windup

Dodajte anti-windup

Slaba prompt / jaka prompt

SLABO:"Dajte PID pojačanja."(Koji sistem? Kakvo je ponašanje? Ima li mjerenja? Dolaze nasumični brojevi.)JAK:"Podešavam PID za kontrolu brzine DC motora. Trenutno, Kp=2, Ki=0,5, Kd=0. Prekoračuje 35% na ulazu koraka i kada dođe do dugog vremena da se postigne cilj; potrebno je mnogo vremena da se postigne cilj. Uzorkovanje je 100 Hz. Navedite moguće razloge iz ovih simptoma, koji dobijaju "Predložite u kojem smjeru da ga promijenim i recite mi kako da testiram da li je prekoračenje integralno navijanje."

Mini Case

Kontrolni inženjer Kerem podešava kontrolu temperature ekstrudera. Uz dobitke koje predlaže AI, sistem brzo stiže do cilja, ali pri svakoj promjeni seta pravi veliko prekoračenje i polako se smiruje. Kerem objašnjava AI simptom; AI sumnja na integralno navijanje jer grijač ostaje na punoj snazi ​​(zasićen) neko vrijeme. Kerem dodaje anti-windup PID kodu i prekoračenje se značajno smanjuje. Ali sada postoji lagano treperenje na izlazu grijača; On to pripisuje terminu D koji pojačava šum temperaturnog senzora i derivatu dodaje niskopropusni filter. Konačno, grubo potvrđuje dobitke sa Ziegler-Nicholsom i izvodi eksperimentalno fino podešavanje. AI ima brzu dijagnozu; Ali Kerem je svaku ispravku potvrdio mjerenjem stvarnog odgovora na korak - da li je namotavanje ispravljeno ili je treperenje nestalo, moglo se vidjeti samo grafički.

Uobičajene greške

  • Neuspješno dodavanje zasićenja izlaza i anti-windup PID-u i doživljavanje velikog prekoračenja granice aktuatora.
  • Uzimanje derivacije od derivacije bučnog mjerenja i vibriranje aktuatora.
  • Uz pretpostavku da je dt konstantan, dok period uzorkovanja varira.
  • Izvođenje Ziegler-Nicholsovog testa oscilacije na hardveru bez sigurnosnih mjera opreza.
  • Prihvatanje zarade generisane veštačkom inteligencijom kao „konačne“ bez verifikacije specifične za sistem.
  • Promena jednog pojačanja sa veoma velikim koracima i guranje sistema u nestabilnost.

Ukratko

  • PID; Reaguje sa P (trenutna greška), I (akumulirana greška), D (stopa promene greške).
  • Polje PID treba da uključuje zasićenje izlaza, anti-windup i derivativni filter.
  • Integralni namotaj veliki prekoračenje, derivativna buka uzrokuje vibracije aktuatora.
  • Ziegler-Nichols počinje da dobija; Implementirano je uz mjere sigurnosti u hardveru.
  • AI je brz u dijagnozi od simptoma do uzroka; Korekcija se potvrđuje mjerenjem.
  • dt stvarno izmjereno; Promjene zarade se vrše malim koracima i posmatranjem.

Zadatak aplikacije

Odaberite sistem (pravi motor/grijač ili jednostavan model prvog/drugog reda u Pythonu) i neka AI generiše PID klasu sa zasićenjem + anti-windup. Zatim: (1) posmatrajte ponašanje oscilovanja počevši samo sa P i povećavajući Kp, (2) dodajte Ki da biste eliminisali trajnu grešku i videli kako se prekoračenje povećava, (3) uporedite efekat na veliko prekoračenje uključivanjem i isključivanjem anti-windup-a. Nacrtajte odgovor na korak na svakom koraku i zabilježite koji dobitak mijenja koje ponašanje. Uporedite dobitke od Ziegler-Nicholsa sa dobicima koje ste sami pronašli.