Kazalo:

PID krmilnik VHDL: 10 korakov
PID krmilnik VHDL: 10 korakov

Video: PID krmilnik VHDL: 10 korakov

Video: PID krmilnik VHDL: 10 korakov
Video: Чем отличается ПИД регулятор от термоконтроллера? 2024, Julij
Anonim
PID krmilnik VHDL
PID krmilnik VHDL
PID krmilnik VHDL
PID krmilnik VHDL

Ta projekt je bil moj zadnji projekt za dokončanje diplome z odliko na Tehnološkem inštitutu Cork. Ta vadnica je razdeljena na dva dela, prvi bo zajemal glavni del kode PID, ki je glavni namen projekta, drugi del pa zajema povezovanje kode, ki je bila izvedena na razvojni plošči Basys 3 in nato povezana z žogo za namizni tenis levitacijska ploščad. Teoretična in zgrajena ploščad sta prikazani na priloženih slikah.

Zaloge

Simulacija

Vivado Design Suite

Izvajanje (v oklepajih je tisto, kar je bilo uporabljeno za moj projekt)

  • FPGA plošča za vhod in izhod digitalnih/analognih signalov (Basys 3)
  • sistem, ki ga je mogoče upravljati z enim samim virom povratnih informacij (plošča za levitacijo žoge za namizni tenis)

Rig

  • Polikarbonatna cev
  • 5V ventilator
  • IR senzor
  • 3D Printed Base (Ta vadnica dokumentira konstrukcijo ploščadi, ki ji je bil senzor dodan za zagotavljanje povratnih informacij, vendar je bila naprava na splošno enaka)
  • 1k upori
  • Ogledna plošča s 5V in GND tirnico

1. korak: Osnovna teorija nadzora

Osnovna teorija nadzora
Osnovna teorija nadzora

Mislil sem, da bi dodajanje osnovne teorije nadzora vsem, ki bi radi poskusili implementirati to kodo, dalo dobro izhodišče.

Priloženi diagram je postavitev krmilnika z eno zanko.

r- Je referenca. To določa, kamor naj gre krmilnik.

e-Je napaka. To je razlika med vrednostjo vašega senzorja in referenco. npr. e = r- (d+izhod senzorja).

K-To je krmilnik. Krmilnik je lahko sestavljen iz treh izrazov. Ti izrazi so P, I in D. Vsi trije izrazi imajo množitelje, imenovane Kp, Ki in Kd. Te vrednosti določajo odziv krmilnika.

  • P-sorazmerno. Krmilnik strogo P bo imel izhod, sorazmeren s trenutno napako. Krmilnik P je enostaven za izvajanje in deluje hitro, vendar nikoli ne bo dosegel vrednosti, ki ste jo nastavili (referenca).
  • I-Integral. Strogo integralni krmilnik bo povzel prejšnjo napako, ki bo sčasoma dosegla želeno referenco. Ta krmilnik je na splošno prepočasen za izvajanje. Če dodate izraz P, se bo skrajšal čas, potreben za dosego sklica. Čas vzorčenja vhodnih podatkov je treba upoštevati, ker je integralni člen integriran glede na čas.
  • D-Derivat. Izvedeni izraz bo imel rezultat, ki je odvisen od stopnje spremembe napake. Ta izraz se običajno uporablja z izrazom P ali z izrazom PI. Ker je to sorazmerno s hitrostjo spremembe napake, bo hrupni singel okrepil svoj hrup, kar lahko povzroči nestabilnost sistema. Upoštevati je treba tudi čas, saj je izraz izpeljan tudi glede na čas.

U- To je kontrolni signal. Ta signal je vhod v ploščad. V primeru tega projekta je u vhod PWM signala v ventilator za spremembo hitrosti.

G- To je sistem, ki se nadzira. Ta sistem je mogoče matematično modelirati v domeni S ali Z. Sistemi so lahko n -ega reda, toda za nekoga, ki začne z upravljanjem, je verjetno treba predvideti sistem prvega reda, saj je to veliko lažje izračunati. To je zbirka informacij o modelarnem sistemu, ki jih lahko najdete na spletu. Odvisno od časa vzorčenja senzorja je model sistema diskreten ali neprekinjen. To ima drastičen vpliv na krmilnik, zato je priporočljivo raziskati oboje.

d- To je motnja, ki je dodana sistemu. Motnje so zunanje sile, ki jih model sistema ne upošteva. Preprost primer tega bi bil brezpilotni letnik, ki bi ga želeli lebdeti na 5 metrih, prileti veter in spusti brezpilotnega zrakoplova 1 meter, ki ga bo krmilnik prestavil po motenju. To je znano kot motnja, saj se veter ne ponavlja, zato tega ni mogoče modelirati.

Za nastavitev krmilnika je preveč pravil za poimenovanje, a nekaj dobrih, s katerimi sem začel, sta Cohen Coon in Zieger Nichols.

Modeliranje sistema je na splošno najpomembnejši del brez natančnega modela, ki ga načrtovani krmilnik ne bo odzval po želji.

Tukaj bi moralo biti dovolj informacij, da bi razumeli, kako deluje krmilnik, skupaj z nekaterimi posameznimi raziskavami in kodo pod krmilnikom s katero koli kombinacijo treh izrazov.

2. korak: Pisanje kode PID

Pisanje kode PID
Pisanje kode PID

Osnovno načelo kode, ki ga najdemo na naslednji povezavi, je bilo sprejeto in spremenjeno, ker ta koda ni delovala, vendar je imela številna načela prav, kar je dalo dobro izhodišče. Izvirni PID Koda je imela več napak, npr

  • Neprekinjeno delovanje - krmilnik je dedno diskreten, zato je bilo treba krmilnik nastaviti tako, da izračuna vse tri izraze le, ko je na voljo nov vhod. Pri tej simulaciji je bilo treba preveriti, ali se je vnos od zadnjega spreminjal. to deluje le za simulacijo pravilnega delovanja kode.
  • Vzorčni čas ni vplival na integralni in izvedeni termin - Upravljavec tudi ni upošteval časa, v katerem je bil vzorec prevzet, zato je bila dodana vrednost, imenovana delilec za čas, da se zagotovi, da integralni in izvedeni izrazi delujejo pravilno interval.
  • Napaka bi lahko bila le pozitivna - pri izračunu napake je prišlo tudi do težave, saj napaka nikoli ne bi mogla biti negativna, če je povratni signal presegel referenčno vrednost, da bo krmilnik še naprej povečeval izhod, ko bi se moral zmanjševati.
  • Pridobljene vrednosti za tri izraze so bila cela števila - po mojih izkušnjah sem vedno ugotovil, da so vrednosti za tri izraze v krmilniku vedno s številom s plavajočo vejico, ker Basys 3 nima številke s plavajočo vejico, je bilo treba vrednosti dati števcu in imenovalca, ki bi služil kot rešitev za preseganje tega problema.

Koda je priložena spodaj, kjer je glavni del kode in testna miza za simulacijo kode. Mapa zip vsebuje kodo in testbench, ki sta že v Vivadu, tako da ju lahko odprete, da prihranite čas. obstaja tudi simuliran test kode, ki prikazuje izhodno sledenje referenci, ki dokazuje, da koda deluje, kot je predvideno.

3. korak: Kako spremeniti svoj sistem

Najprej niso vsi sistemi enaki, treba je analizirati vhode in izhode sistema. V mojem primeru je bil izhod moje ploščadi, ki mi je dal vrednost za položaj, analogni signal, vhod iz sistema pa signal PWM. To pomeni, da je bila potrebna pretvorba ADC. Na srečo ima Basys 3 vgrajen ADC, zato to ni bil problem, zato je bilo treba izhod IR senzorja zmanjšati na 0V-1V, saj je to največji doseg vgrajenega ADC-ja. To je bilo storjeno z vezjem delilnika napetosti, ki je bilo narejeno iz 1k uporov, ki so bili zaporedno nastavljeni kot 3k upori z 1k uporom. Analogni signal je bil zdaj v dosegu ADC -ja. PWM vhod v ventilator lahko neposredno poganja izhod vrat PMOD na Basys 3.

4. korak: Izkoristite V/I na Basys 3

Na Basysu 3 je več V/I, ki omogočajo lažje odpravljanje napak med izvajanjem kode. V/I je bil nastavljen na naslednji način.

  • Zaslon s sedmimi segmenti - To je bilo uporabljeno za prikaz referenčne vrednosti in vrednosti ADC v voltih. Prvi dve števki na prikazovalniku sedmih segmentov prikazujeta dve števki za decimalnim mestom vrednosti ADC, saj je vrednost med 0-1V. Številke tri in štiri na prikazovalniku sedmih segmentov prikazujejo referenčno vrednost v voltih, to pa kaže tudi prvi dve števki po decimalnem mestu, saj je tudi območje med 0-1V.
  • 16 LED - LED so bile uporabljene za prikaz vrednosti izhoda za zagotovitev, da je bil izhod nasičen in da se je izhod pravilno spreminjal.

5. korak: Hrup na izhodu IR senzorja

Na izhodu senzorja je prišlo do hrupa, da bi odpravili to težavo, postavljen je bil blok povprečenja, saj je to zadostovalo in je za dokončanje zahtevalo zelo malo dela.

6. korak: Splošna postavitev kode

Splošna postavitev kode
Splošna postavitev kode

Obstaja en del kode, o katerem še ni bilo govora. Ta koda je delilnik ure, imenovan sprožilec. ta del kode sproži vzorčenje kode ADC. koda ADC potrebuje največ 2us, da se dokonča, zato se povpreči trenutni vhod in prejšnji vhod. 1us po tem povprečenju regulator izračuna izraze P, I in D. celotna postavitev kode in vmesnik je prikazan v začasnem diagramu povezave.

7. korak: Testiranje

Testiranje
Testiranje

Koda je bila razporejena na Basys 3 in zabeležen je bil naslednji odziv. referenca se je spremenila med dvema vrednostma. kar velja v priloženi izpolnjeni kodi projekta. Priloženi video prikazuje ta odziv v realnem času. Nihanja v zgornjem delu cevi hitreje upadajo, saj je bil krmilnik zasnovan za to območje, vendar krmilnik ne deluje tako dobro navzdol po cevi, saj je sistem nelinearen.

8. korak: Spremembe za izboljšanje projekta

Projekt je deloval po načrtih, vendar bi naredil nekaj sprememb, če bi projekt lahko podaljšali.

  • Za popolno zmanjšanje hrupa uporabite digitalni filter
  • nastavite kodo ADC, povprečno kodo in integracijsko kodo, da se sprožijo zaporedno.
  • za povratne informacije uporabite drug senzor, saj je nelinearni odziv tega senzorja povzročil številne težave pri tem projektu, vendar je to bolj na strani nadzora, ne na strani kodiranja.

9. korak: Dodatno delo

Poleti sem napisal kodo za kaskadni krmilnik in uvedel spremembe, ki sem jih priporočil za PID krmilnik z eno zanko.

Spremembe na običajnem PID krmilniku

· Izvedena predloga FIR filtra je treba koeficiente spremeniti, da se doseže želena mejna frekvenca. Trenutna izvedba je jelkin filter s 5 pipami.

· Čas kode je bil nastavljen tako, da bo filter razširjal nov vzorec in ko bo izhod pripravljen, se bo sprožil integralni izraz, kar bo pomenilo, da se lahko koda spremeni v različne časovne intervale z manj napora za spremembo Koda.

· Zmanjšana je tudi glavna zanka for, ki poganja program, saj je zanka for trajala 7 ciklov, kar je upočasnilo največjo hitrost delovanja krmilnika, vendar z zmanjšanjem for zanke t 4 stanja to pomeni, da lahko glavni blok kode deluje v 4 ciklih ure.

Testiranje

Ta krmilnik je bil preizkušen in izveden, kot je bilo predvideno. Tega dokaza nisem fotografiral, saj je bil ta del projekta samo zato, da je um ostal aktiven. Koda za testiranje in testna miza bodo na voljo tukaj, tako da lahko program preizkusite pred izvedbo.

Zakaj uporabljati kaskadni krmilnik

Kaskadni krmilnik upravlja dva dela sistema. V tem primeru bi imel kaskadni krmilnik zunanjo zanko, ki je krmilnik, ki ima povratne informacije od IR senzorja. Notranja zanka ima povratne informacije v obliki časa med impulzi iz tahometra, ki določa hitrost vrtenja ventilatorja. Z izvajanjem nadzora je mogoče doseči boljši odziv iz sistema.

Kako deluje kaskadni krmilnik?

Zunanja zanka krmilnika bo do krmilnika notranje zanke podala vrednost za čas med pulami. Ta krmilnik bo nato povečal ali zmanjšal obratovalni cikel, da doseže želeni čas med impulzi.

Izvedba sprememb na ploščadi

Na žalost teh sprememb nisem mogel izvesti na ploščadi, saj do nje nisem imel dostopa. Preizkusil sem revidiran krmilnik z eno zanko, ki deluje po predvidevanjih. Kaskadnega krmilnika še nisem preizkusil. Prepričan sem, da bo krmilnik deloval, vendar bo morda deloval po načrtih.

Testiranje

Krmilnika nisem mogel preizkusiti, saj je bilo težko simulirati dva vhodna vira. Edini problem, ki ga vidim pri kaskadnem krmilniku, je, da ko zunanja zanka poskuša povečati nastavljeno vrednost, ki je vnesena v notranjo zanko, je večja nastavljena vrednost dejansko nižji RPS za ventilator, vendar je to mogoče enostavno popraviti. vzemite nastavljeno vrednost iz največje vrednosti signala nastavljene vrednosti (4095 - nastavljena vrednost - tacho_result).

10. korak: Zaključek

Na splošno projekt deluje tako, kot sem nameraval ob začetku projekta, zato sem zadovoljen z rezultatom. Hvala, ker ste si vzeli čas in prebrali moj poskus razvoja PID krmilnika v VHDL. Če kdo poskuša implementirati to različico v sistem in potrebuje nekaj pomoči za razumevanje kode, se mi obrnite, odgovoril bom čim prej. Kdor poskusi z dodatnim delom, ki je bilo sestavljeno, vendar ni izvedeno, me prosim kontaktirajte. Zelo bi bil hvaležen, če bi mi kdo, ki ga izvaja, sporočil, kako gre.

Priporočena: