Sadržaj:

PID kontroler VHDL: 10 koraka
PID kontroler VHDL: 10 koraka

Video: PID kontroler VHDL: 10 koraka

Video: PID kontroler VHDL: 10 koraka
Video: «Развлечение с музыкой и программированием», Коннор Харрис и Стивен Крюсон 2024, Juli
Anonim
PID kontroler VHDL
PID kontroler VHDL
PID kontroler VHDL
PID kontroler VHDL

Ovaj projekt je bio moj posljednji projekt za završetak diplomskog studija s odlikovanjem na Tehnološkom institutu Cork. Ovaj vodič je podijeljen u dva odjeljka, prvi će pokriti glavni dio PID koda koji je glavna svrha projekta, a drugi odjeljak pokriva povezivanje koda koji je implementiran na razvojnoj ploči Basys 3, a zatim povezan s ping pong loptom levitation rig. Teoretska i izgrađena oprema prikazane su na priloženim slikama.

Supplies

Simulacija

Vivado Design Suite

Implementacija (u zagradama je ono što je korišteno za moj projekat)

  • FPGA ploča koja može ulaziti i izlaziti digitalne/analogne signale (Basys 3)
  • sistem kojim se može upravljati s jednim izvorom povratnih informacija (Ping Pong Ball Levitation Rig)

Rig

  • Polikarbonatna cijev
  • 5V ventilator
  • IC senzor
  • 3D štampana baza (Ovaj vodič dokumentuje konstrukciju platforme koju je senzor dodao radi pružanja povratnih informacija, ali je platforma uglavnom bila ista)
  • 1k otpornici
  • Oglasna ploča sa 5V i GND šinom

Korak 1: Osnovna teorija upravljanja

Osnovna teorija upravljanja
Osnovna teorija upravljanja

Mislio sam da bi dodavanjem neke osnovne teorije kontrole svakome ko bi želio isprobati ovaj kod dao dobru osnovu za početak.

Dijagram u prilogu predstavlja izgled kontrolera sa jednom petljom.

r- Je referenca. Ovo određuje gdje se regulator želi postaviti.

e-Je li greška. Ovo je razlika između vrijednosti vašeg senzora i vaše reference. npr. e = r- (d+izlaz senzora).

K-Ovo je kontroler. Kontroler se može sastojati od tri pojma. Ovi izrazi su P, I i D. Sva tri pojma imaju množitelje koji se nazivaju Kp, Ki i Kd. Ove vrijednosti određuju odziv regulatora.

  • P-proporcionalno. Strogo P kontroler će imati izlaz proporcionalan trenutnoj grešci. P kontroler je jednostavan za implementaciju i radi brzo, ali nikada neće dostići vrijednost koju ste postavili (referenca).
  • I-Integral. Strogo integralni regulator će sažeti prethodnu grešku koja će na kraju dostići željenu referencu. Ovaj kontroler je općenito prespor za implementaciju. Dodavanjem termina P smanjit će se vrijeme potrebno za postizanje reference. Vrijeme uzorkovanja ulaza mora se uzeti u obzir integralni izraz je integriran s obzirom na vrijeme.
  • D-Derivat. Izvedeni pojam će imati izlaz koji zavisi od brzine promjene greške. Ovaj izraz se općenito koristi sa terminom P ili sa terminom PI. Budući da je to proporcionalno brzini promjene greške, tada će bučni singl imati pojačanu buku što može uzrokovati nestabilnost sistema. Vrijeme se također mora uzeti u obzir jer je termin izvedenice također s obzirom na vrijeme.

U- Ovo je kontrolni signal. Ovaj signal je ulaz u platformu. U slučaju ovog projekta u je ulaz PWM signala u ventilator za promjenu brzine.

G- Ovo je sistem koji se kontroliše. Ovaj sistem se može matematički modelirati u S ili Z domenu. Sistemi mogu biti n -tog reda, ali za nekoga ko počinje sa kontrolom vjerovatno bi trebalo pretpostaviti sistem prvog reda jer je to mnogo lakše izračunati. Ovo je mnoštvo informacija o sistemu modeliranja koje se mogu pronaći na internetu. U zavisnosti od vremena uzorkovanja senzora, model sistema je diskretan ili kontinuiran. Ovo ima drastičan učinak na kontroler pa se preporučuje oba istraživanja.

d- Ovo je smetnja koja se dodaje sistemu. Smetnje su vanjske sile koje model sistema ne uzima u obzir. Lak primjer za to bio bi bespilotna letjelica koju biste htjeli lebdjeti na 5 metara, nalet vjetra dolazi i spusti bespilotnu letjelicu na 1 metar, kontrolor će premjestiti bespilotnu letjelicu nakon što se poremećaj dogodio. Ovo je poznato kao smetnja jer se vjetar ne može ponoviti pa se to ne može modelirati.

Za podešavanje kontrolera postoji previše pravila za imenovanje, ali neka dobra s kojima sam počeo su Cohen Coon i Zieger Nichols.

Modeliranje sistema općenito je najvažniji dio bez preciznog modela koji dizajnirani kontroler neće reagirati po želji.

Ovdje bi trebalo biti dovoljno informacija da bi se razumjelo kako kontroler radi, zajedno s nekim pojedinačnim istraživanjem i da se kôd ispod kontrolera može primijeniti s bilo kojom kombinacijom tri pojma.

Korak 2: Pisanje PID koda

Pisanje PID koda
Pisanje PID koda

Osnovni princip koda koji se nalazi na sljedećoj poveznici preuzet je i izmijenjen jer ovaj kôd nije funkcionirao, ali je imao mnogo principa koji su dali dobro polazište. Originalni PID Kod je imao nekoliko grešaka, kao npr

  • Kontinuirani rad - kontroler je nasljedno diskretan, pa je kontroler morao biti postavljen tako da izračunava samo 3 termina kada je novi ulaz bio dostupan. Za ovu simulaciju je bilo potrebno provjeriti je li se unos promijenio od posljednjeg puta. ovo radi samo za simulaciju ispravnog rada koda.
  • Vrijeme uzorkovanja nije imalo utjecaja na integralni i derivativni pojam - Kontrolor također nije uzeo u obzir vrijeme u kojem je uzorak preuzet, pa je dodana vrijednost koja se naziva djelitelj za vrijeme kako bi se osiguralo da integralni i derivativni izrazi rade ispravno interval.
  • Greška je mogla biti samo pozitivna - pri izračunavanju greške također je postojao problem jer greška nikada nije mogla biti negativna, što znači da je povratni signal premašio referentnu vrijednost da će kontroler nastaviti povećavati izlaz kada bi se trebao smanjivati.
  • Dobitne vrijednosti za 3 izraza bili su cijeli brojevi - po mom iskustvu uvijek sam nalazio da vrijednosti za 3 izraza u kontroleru uvijek budu brojevi s pomičnim zarezom zbog toga što Basys 3 nema broj s pomičnim zarezom, vrijednostima je trebalo dati brojnu vrijednost i vrijednost nazivnika koja bi poslužila kao rad oko prevazilaženja ovog problema.

Kôd je priložen ispod, nalazi se glavni dio koda i ispitna klupa za simulaciju koda. Zip mapa sadrži kôd i testbench koji se već nalaze u Vivadu tako da se mogu otvoriti radi uštede vremena. postoji i simulirani test koda koji prikazuje izlaz za praćenje reference koja dokazuje da kod funkcionira kako je predviđeno.

Korak 3: Kako izmijeniti svoj sistem

Prvo nisu svi sistemi isti, potrebno je analizirati ulaze i izlaze sistema. U mom slučaju izlaz moje platforme koji mi je dao vrijednost za poziciju bio je analogni signal, a ulaz iz sistema je bio PWM signal. Što znači da je bila potrebna ADC konverzija. Srećom, Basys 3 ima ugrađen ADC pa to nije bio problem izlaz IC senzora je morao biti smanjen na 0V-1V jer je to maksimalni raspon ugrađenog ADC-a. To je učinjeno pomoću kruga razdjelnika napona koji je napravljen od 1k otpornika postavljenih kao 3k otpornik u seriji sa 1k otpornikom. Analogni signal je sada bio u dometu ADC -a. PWM ulaz u ventilator može direktno upravljati izlazom PMOD priključka na Basys 3.

Korak 4: Iskorištavanje I/O na bazama 3

Postoji niz U/I na Basys 3 koji su omogućili lakše otklanjanje grešaka dok je kod bio u izvođenju. U/I je podešen na sledeći način.

  • Prikaz sa sedam segmenata - Ovo se koristilo za prikaz vrijednosti reference i vrijednosti na ADC -u u voltima. Prve dvije znamenke prikaza sa sedam segmenata prikazuju dvije znamenke nakon decimalnog mjesta ADC vrijednosti jer je vrijednost između 0-1V. Cifre tri i četiri na ekranu sa sedam segmenata prikazuju referentnu vrijednost u voltima. Ovo također prikazuje prve dvije znamenke nakon decimalnog mjesta jer je raspon također između 0-1V.
  • 16 LED dioda - LED diode su korištene za prikazivanje vrijednosti izlaza kako bi se osiguralo da je izlaz zasićen i da se izlaz ispravno mijenja.

Korak 5: Šum na izlazu IC senzora

Na izlazu senzora pojavila se buka kako bi se riješio ovaj problem, postavljen je blok za izračunavanje prosjeka jer je to bilo dovoljno i zahtijevalo je vrlo malo posla da se dovrši.

Korak 6: Opšti raspored koda

Opšti raspored koda
Opšti raspored koda

Postoji jedan dio koda o kojem se još nije govorilo. Ovaj kod je razdjelnik sata koji se naziva okidač. ovaj bit koda pokreće ADC kod za uzorkovanje. ADC kodu je potrebno najviše 2us da se dovrši, tako da se tada prosječni unos trenutnog i prethodnog ulaza. 1us nakon ovog prosjeka kontroler izračunava P, I i D pojmove. cjelokupni raspored koda i povezivanje prikazani su u improviziranom dijagramu povezivanja.

Korak 7: Testiranje

Testiranje
Testiranje

Kod je raspoređen na Basys 3 i zabilježen je sljedeći odgovor. referenca se promijenila između 2 vrijednosti. što je slučaj u priloženoj završenoj šifri projekta. Priloženi video prikazuje ovaj odgovor u stvarnom vremenu. Oscilacije brže opadaju u gornjem dijelu cijevi jer je kontroler dizajniran za ovu regiju, ali regulator ne radi tako dobro niz cijev jer je sistem nelinearan.

Korak 8: Izmjene za poboljšanje projekta

Projekt je radio kako je predviđeno, ali bilo bi nekoliko izmjena koje bih napravio da se projekt mogao produžiti.

  • Implementirajte digitalni filter za potpuno umanjivanje buke
  • podesite ADC kôd, kôd prosjeka i kôd integracije za sekvencijalno pokretanje.
  • koristite drugi senzor za povratnu informaciju jer je nelinearni odziv ovog senzora uzrokovao veliki broj problema s ovim projektom, ali to je više na strani kontrole, a ne na strani kodiranja.

Korak 9: Dodatni rad

Tijekom ljeta napisao sam kod za kaskadni kontroler i implementirao izmjene koje sam preporučio za PID kontroler s jednom petljom.

Izmene su izvršene na običnom PID kontroleru

· Implementiran predložak FIR filtera koeficijenti se moraju promijeniti kako bi se postigla željena granična frekvencija. Trenutna implementacija je filtar od jele sa 5 dodira.

· Vrijeme koda je postavljeno tako da će filter širiti novi uzorak, a kada je izlaz spreman, aktivirat će se integralni pojam, što će značiti da se kôd može promijeniti u različitim vremenskim intervalima uz manje napora za promjenu kod.

· Glavna for petlja koja pokreće program je također smanjena jer je ova for petlja ranije trajala 7 ciklusa, što je usporilo maksimalnu radnu brzinu kontrolera, ali smanjenjem for petlje t 4 stanja to znači da glavni blok koda može raditi unutar 4 takta.

Testiranje

Ovaj kontroler je testiran i izveden kako je predviđeno. Nisam snimio ovaj dokaz jer je ovaj dio projekta bio samo za održavanje uma aktivnim. Kod za testiranje, kao i testbench, bit će ovdje dostupan, tako da možete testirati program prije implementacije.

Zašto koristiti kaskadni kontroler

Kaskadni kontroler kontrolira dva dijela sistema. U ovom slučaju kaskadni kontroler bi imao vanjsku petlju koja je kontroler koji ima povratnu informaciju od IC senzora. Unutarnja petlja ima povratnu informaciju u obliku vremena između impulsa iz tahometra koji određuje brzinu rotacije ventilatora. Implementacijom kontrole može se postići bolji odgovor izvan sistema.

Kako funkcioniše kaskadni kontroler?

Vanjska petlja regulatora će unijeti vrijednost za vrijeme između pula u regulator unutrašnje petlje. Ovaj regulator će tada povećati ili smanjiti radni ciklus kako bi postigao željeno vrijeme između impulsa.

Implementacija modifikacija na platformi

Nažalost, nisam mogao primijeniti ove izmjene na platformi jer im nisam imao pristup. Testirao sam revidirani kontroler sa jednom petljom koji radi kako je predviđeno. Još nisam testirao kaskadni kontroler. Uvjeren sam da će kontroler raditi, ali će možda trebati neke male izmjene za rad kako je predviđeno.

Testiranje

Nisam mogao testirati kontroler jer je bilo teško simulirati dva ulazna izvora. Jedini problem koji vidim kod kaskadnog kontrolera je taj što dok vanjska petlja pokušava povećati zadanu vrijednost koja se isporučuje unutarnjoj petlji, veća postavljena vrijednost je zapravo niži RPS za ventilator, ali to se može lako popraviti. uzmite zadanu vrijednost iz maksimalne vrijednosti signala zadane vrijednosti (4095 - zadana vrijednost - tacho_result).

Korak 10: Zaključak

Sve u svemu, projekt funkcionira onako kako sam namjeravao kada je projekt počeo, tako da sam zadovoljan rezultatom. Hvala vam što ste odvojili vrijeme da pročitate moj pokušaj razvoja PID kontrolera u VHDL -u. Ako neko pokušava implementirati neke varijacije ovoga u sistem i treba mu malo razumijevanja za razumijevanje koda, javite mi se što je prije moguće. Svako ko pokuša dodatni posao koji je kompiliran, ali nije implementiran, neka me kontaktira za bilo koju ruku. Bio bih veoma zahvalan ako mi neko ko to sprovede javi kako to ide.

Preporučuje se: