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, Srpanj
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 obuhvatiti 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.

Pribor

Simulacija

Vivado Design Suite

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

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

Opremiti

  • Polikarbonatna cijev
  • 5V ventilator
  • IR senzor
  • 3D Printed Base (Ovaj vodič dokumentira konstrukciju platforme koju je senzor dodao radi pružanja povratnih informacija, ali je platforma općenito bila ista)
  • 1k otpornici
  • Oglasna ploča s 5V i GND šinom

Korak 1: Osnovna teorija upravljanja

Osnovna teorija upravljanja
Osnovna teorija upravljanja

Mislio sam da bi dodavanjem neke osnovne teorije upravljanja svakome tko bi želio isprobati ovaj kôd dala dobru osnovu za početak.

Dijagram u prilogu prikazuje izgled kontrolera s jednom petljom.

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

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

K-Ovo je kontroler. Regulator se može sastojati od tri pojma. Ti su izrazi 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 kontroler P imat će izlaz proporcionalan trenutnoj pogrešci. P regulator je jednostavan za implementaciju i radi brzo, ali nikada neće doseći vrijednost koju ste postavili (referenca).
  • I-Integral. Strogo integralni regulator zbraja prethodnu pogrešku koja će na kraju doseći željenu referencu. Ovaj regulator je općenito prespor za implementaciju. Dodavanjem P pojma smanjit će se vrijeme potrebno za postizanje reference. Vrijeme uzorkovanja ulaznih podataka mora se uzeti u obzir da je integralni izraz integriran s obzirom na vrijeme.
  • D-izvedenica. Izvedeni pojam imat će izlaz koji ovisi o brzini promjene greške. Ovaj se izraz općenito koristi s pojmom P ili s izrazom PI. Budući da je to proporcionalno brzini promjene pogreške, tada će bučni singl imati pojačanu buku što može uzrokovati nestabilnost sustava. Vrijeme se također mora uzeti u obzir jer je izvedenica također s obzirom na vrijeme.

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

G- Ovo je sustav koji se kontrolira. Ovaj se sustav može matematički modelirati u S ili Z domeni. Sustavi mogu biti n -tog reda, ali za nekoga tko započinje s kontrolom vjerojatno bi trebalo pretpostaviti sustav prvog reda jer je to mnogo lakše izračunati. To je mnoštvo informacija o sustavu modeliranja koje se mogu pronaći na internetu. Ovisno o vremenu uzorkovanja senzora, model sustava je diskretan ili kontinuiran. To ima drastičan učinak na upravljač pa se preporučuje oba istraživanja.

d- Ovo je smetnja koja se dodaje sustavu. Smetnje su vanjske sile koje model sustava 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. To 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 sustava općenito je najvažniji dio bez točnog modela koji dizajnirani kontroler neće reagirati po želji.

Ovdje bi trebalo biti dovoljno informacija da bi se razumjelo kako upravljač radi, zajedno s nekim pojedinačnim istraživanjem i da se može primijeniti kôd ispod kontrolera 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 kod nije radio, ali je imao mnogo načela koja su dala dobro polazište. Izvorni PID Kod je imao nekoliko pogrešaka, kao npr

  • Kontinuirani rad - kontroler je nasljedno diskretan pa je kontroler morao biti postavljen tako da izračunava samo 3 pojma kada je dostupan novi ulaz. Za simulaciju je 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 izvedeni pojam - Kontrolor također nije uzeo u obzir vrijeme u kojem je uzorak preuzet, pa je dodana vrijednost koja se naziva djelitelj vremena radi kako bi se osiguralo da integralni i derivativni izrazi rade ispravno interval.
  • Pogreška je mogla biti samo pozitivna - pri izračunavanju pogreške također je postojao problem jer pogreš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 vrijednost brojnika i vrijednost nazivnika koja bi poslužila kao rad oko zaobilaž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. tu je 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 sustav

Prvo, nisu svi sustavi isti, potrebno je analizirati ulaze i izlaze sustava. U mom slučaju izlaz moje opreme koja mi je dala vrijednost za poziciju bio je analogni signal, a ulaz iz sustava bio je 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 s 1k otpornikom. Analogni signal sada je bio unutar dometa ADC -a. PWM ulaz u ventilator može se izravno pokretati izlazom PMOD priključka na Basys 3.

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

Na Basysu 3 postoji niz U/I koji su omogućili lakše otklanjanje pogrešaka dok je kôd bio u izvođenju. U/I je postavljen na sljedeć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 iza decimalnog mjesta ADC vrijednosti jer je vrijednost između 0-1V. Brojke tri i četiri na zaslonu sa sedam segmenata prikazuju referentnu vrijednost u voltima. To 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 prikaz vrijednosti izlaza kako bi se osiguralo da se izlaz zasićuje i da se izlaz ispravno mijenja.

Korak 5: Šum na izlazu IC osjetnika

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 za dovršetak.

Korak 6: Opći raspored koda

Opći izgled koda
Opći izgled koda

Postoji jedan dio koda o kojem se još nije govorilo. Ovaj kôd 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, pa se tada prosječni unos struje i prethodni ulaz. 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

Kôd 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ženom dovršenom kodu projekta. Priloženi video prikazuje ovaj odgovor u stvarnom vremenu. Oscilacije brže opadaju u gornjem dijelu cijevi jer je regulator dizajniran za ovo područje, ali regulator ne radi tako dobro niz cijev jer je sustav 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.

  • Uvedite digitalni filter za potpuno prigušivanje buke
  • postaviti ADC kôd, kôd prosjeka i kôd integracije za pokretanje uzastopno.
  • koristiti drugi senzor za povratne informacije jer je nelinearni odziv ovog senzora uzrokovao niz problema s ovim projektom, ali to je više na upravljačkoj strani, a ne na kodirajućoj strani.

Korak 9: Dodatni rad

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

Izmjene na redovnom PID kontroleru

· Implementiran predložak FIR filtra 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 kodirati.

· Glavna for petlja koja pokreće program također je 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 fotografirao ovaj dokaz jer je ovaj dio projekta bio samo za održavanje uma aktivnim. Kôd za testiranje, kao i testbench, bit će dostupan ovdje kako biste mogli testirati program prije implementacije.

Zašto koristiti kaskadni regulator

Kaskadni regulator kontrolira dva dijela sustava. U ovom slučaju kaskadni regulator imao bi 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 koja određuje brzinu vrtnje ventilatora. Provođenjem kontrole može se postići bolji odgovor izvan sustava.

Kako funkcionira kaskadni regulator?

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

Implementacija izmjena na platformi

Nažalost, nisam uspio primijeniti ove izmjene na platformi jer im nisam imao pristup. Testirao sam revidirani kontroler s jednom petljom koji radi kako je predviđeno. Kaskadni regulator još nisam testirao. Uvjeren sam da će kontroler raditi, ali će možda trebati neke male izmjene kako bi radio kako je predviđeno.

Testiranje

Nisam uspio testirati regulator jer je bilo teško simulirati dva ulazna izvora. Jedini problem koji mogu vidjeti kod kaskadnog kontrolera je taj što dok vanjska petlja pokušava povećati zadanu vrijednost isporučenu unutarnjoj petlji, veća je zadana vrijednost 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

Općenito, projekt funkcionira kako sam i namjeravao kada je projekt započeo, pa sam zadovoljan rezultatom. Hvala vam što ste odvojili vrijeme da pročitate moj pokušaj razvoja PID kontrolera u VHDL -u. Ako netko pokušava implementirati neke varijacije ovoga u sustav i treba mu malo razumijevanja za razumijevanje koda, javite mi se što je prije moguće. Svatko tko pokuša dodatni rad koji je sastavljen, ali nije proveden, neka mi se javi za bilo koju ruku. Bio bih jako zahvalan ako mi netko tko ga implementira javi kako to ide.

Preporučeni: