Sisällysluettelo:

PID -ohjain VHDL: 10 vaihetta
PID -ohjain VHDL: 10 vaihetta

Video: PID -ohjain VHDL: 10 vaihetta

Video: PID -ohjain VHDL: 10 vaihetta
Video: VHDL & FPGA Project: Music Player 2024, Marraskuu
Anonim
PID -ohjain VHDL
PID -ohjain VHDL
PID -ohjain VHDL
PID -ohjain VHDL

Tämä projekti oli viimeinen projektini, jolla suoritin kunnia -alemman korkeakoulututkinnon Cork Institute of Technologysta. Tämä opetusohjelma on jaettu kahteen osaan, joista ensimmäinen kattaa PID -koodin pääosan, joka on projektin päätarkoitus, ja toinen osa käsittää Basys 3 -kehityskortilla toteutetun koodin liittämisen ja sen jälkeen pingpongin levitaatiolaite. Teoreettinen ja rakennettu lautta näkyy liitteenä olevissa kuvissa.

Tarvikkeet

Simulointi

Vivado Design -sviitti

Toteutus (suluissa käytetään projektiani)

  • FPGA -kortti, joka voi syöttää ja lähettää digitaalisia/analogisia signaaleja (Basys 3)
  • järjestelmä, jota voidaan ohjata yhdellä takaisinkytkentälähteellä (Ping Pong Ball Levitation Rig)

Rig

  • Polykarbonaatti putki
  • 5V tuuletin
  • IR -anturi
  • 3D -tulostettu pohja (tämä opetusohjelma dokumentoi laitoksen rakenteen, anturi lisättiin palautteen antamiseksi, mutta lautta oli yleensä sama)
  • 1k vastukset
  • Leipälauta 5V ja GND -kiskolla

Vaihe 1: Perusohjausteoria

Perusohjausteoria
Perusohjausteoria

Ajattelin, että jonkin perustason ohjausteorian lisääminen antaisi kaikille, jotka haluavat kokeilla ja toteuttaa tämän koodin, hyvän pohjan aloittaa.

Liitteenä oleva kaavio on yhden silmukan ohjaimen asettelu.

r- Onko viite. Tämä määrittää minne ohjain halutaan mennä.

e-Onko virhe. Tämä on ero anturisi arvon ja viitearvon välillä. esim. e = r- (d+anturin lähtö).

K-Tämä on ohjain. Ohjain voi koostua kolmesta termistä. Nämä termit ovat P, I ja D. Kaikilla kolmella termillä on kertoimet Kp, Ki ja Kd. Nämä arvot määräävät ohjaimen vasteen.

  • P-Suhteellinen. Tarkasti P -ohjaimessa on lähtö, joka on verrannollinen nykyiseen virheeseen. P -ohjain on helppo toteuttaa ja se toimii nopeasti, mutta se ei koskaan saavuta asettamaasi arvoa (viite).
  • I-integraali. Ehdottomasti kiinteä ohjain summaa edellisen virheen, joka lopulta saavuttaa halutun viitteen. Tämä ohjain on yleensä liian hidas toteuttaa. P -termin lisääminen lyhentää viitteen saavuttamiseen kuluvaa aikaa. Aika, jona syötteestä otetaan näytteitä, on otettava huomioon, koska kiinteä termi on integroitu ajan suhteen.
  • D-johdannainen. Johdannaistermillä on tulos, joka riippuu virheen muutosnopeudesta. Tätä termiä käytetään yleensä P -termillä tai PI -termillä. Koska tämä on verrannollinen virheen muutosnopeuteen, meluisan singlen kohina vahvistetaan, mikä voi aiheuttaa järjestelmän epävakauden. Aika on myös otettava huomioon, koska johdannaissopimus koskee myös aikaa.

U- Tämä on ohjaussignaali. Tämä signaali on syöttölaite. Tässä projektissa u on PWM -signaalin tulo puhaltimelle nopeuden muuttamiseksi.

G- Tämä on järjestelmä, jota ohjataan. Tämä järjestelmä voidaan mallintaa matemaattisesti S- tai Z -alueella. Järjestelmät voivat olla n: nnessä järjestyksessä, mutta jonkun aloittavan ohjauksen pitäisi todennäköisesti olettaa ensimmäisen kertaluvun järjestelmä, koska tämä on paljon helpompi laskea. Tämä on lukuisia tietoja mallinnusjärjestelmästä, jotka löytyvät verkosta. Anturin näytteenottoajasta riippuen järjestelmän malli on joko erillinen tai jatkuva. Tällä on raju vaikutus ohjaimeen, joten molempien tutkiminen on suositeltavaa.

d- Tämä on häiriö, joka lisätään järjestelmään. Häiriö on ulkopuolisia voimia, joita järjestelmän malli ei ota huomioon. Helppo esimerkki tästä olisi drone, jonka haluat leijua 5 metrin etäisyydellä, kun tuulenpuuska tulee ja pudottaa droonin 1 metrin, jolloin ohjain muuttaa dronin sijaintia häiriön tapahtuessa. Tätä kutsutaan häiriöksi, koska tuuli ei ole toistettavissa, joten sitä ei voida mallintaa.

Ohjaimen virittämiseksi on liikaa sääntöjä nimetäkseni, mutta joitakin hyviä, joita aloitin, ovat Cohen Coon ja Zieger Nichols.

Järjestelmän mallinnus on yleensä tärkein osa ilman tarkkaa mallia, jonka suunniteltu ohjain ei reagoi toivotulla tavalla.

Tässä pitäisi olla riittävästi tietoa ymmärtääkseen, miten ohjain toimii, sekä yksittäisiä tutkimuksia ja ohjaimen alla oleva koodi, jolla voidaan yhdistää kaikki kolme termiä.

Vaihe 2: PID -koodin kirjoittaminen

PID -koodin kirjoittaminen
PID -koodin kirjoittaminen

Seuraavasta linkistä löytyvän koodin perusperiaate otettiin ja sitä muutettiin, koska tämä koodi ei toiminut, mutta sillä oli monia periaatteita oikein, mikä antoi hyvän lähtökohdan. Alkuperäinen PID Koodissa oli useita virheitä, kuten

  • Jatkuva käyttö - ohjain on perinnöllisesti erillinen, joten ohjain oli asetettava laskemaan kaikki kolme termiä vain, kun uusi tulo oli käytettävissä. Tämän simulaation tavoitteena oli tarkistaa, onko syöttö muuttunut viimeisen kerran jälkeen. tämä vain simuloi koodin toimivuutta oikein.
  • Näytteenottoaika ei vaikuttanut integraali- ja johdannaistermiin. väli.
  • Virhe voi olla vain positiivinen - virheen laskemisessa oli myös ongelma, koska virhe ei voi koskaan olla negatiivinen merkitys, kun takaisinkytkentäsignaali oli ylittänyt viitearvon, jonka mukaan ohjain jatkaa tuotoksen lisäämistä, kun sen pitäisi pienentyä.
  • Vahvistusarvot kolmelle termille olivat kokonaislukuja - kokemukseni mukaan olen aina huomannut, että ohjaimen kolmen termin arvot ovat aina liukulukuja, koska Basys 3: lla ei ole liukuluku, arvoille on annettava osoittimen arvo ja nimittäjän arvo, joka toimisi tämän ongelman ylittämisenä.

Koodi on liitteenä alla on koodin pääkappale ja testipenkki koodin simuloimiseksi. Zip -kansio sisältää Vivadossa jo olevan koodin ja testipenkin, joten ne voidaan avata ajan säästämiseksi. on myös koodin simuloitu testi, joka näyttää lähdön seurannan, joka osoittaa, että koodi toimii aiotulla tavalla.

Vaihe 3: Järjestelmän muokkaaminen

Ensinnäkin kaikki järjestelmät eivät ole samanlaisia, järjestelmän tulot ja lähdöt on analysoitava. Minun tapauksessani laitteeni lähtö, joka antoi minulle arvon sijainnille, oli analoginen signaali ja järjestelmän tulo oli PWM -signaali. Tämä tarkoittaa, että ADC -muunnos oli tarpeen. Onneksi Basys 3: ssa on sisäänrakennettu ADC, joten tämä ei ollut ongelma IR-anturin lähtö oli pienennettävä 0V-1V: ksi, koska tämä on sisäisen ADC: n suurin kantama. Tämä tehtiin käyttämällä jännitteenjakajapiiriä, joka tehtiin 1k vastuksista, jotka oli asetettu 3k vastuksiksi sarjaan 1k vastuksen kanssa. Analoginen signaali oli nyt ADC: n kantaman sisällä. Tuulettimen PWM -tulo voi ohjata suoraan Basys 3: n PMOD -portin lähdöstä.

Vaihe 4: I/O: n hyödyntäminen Basysissa 3

Basys 3: ssa on useita I/O -toimintoja, jotka helpottivat virheenkorjausta koodin ollessa käynnissä. I/O määritettiin seuraavasti.

  • Seitsemän segmentin näyttö - Tätä käytettiin osoittamaan viitearvo ja arvo ADC: ssä voltteina. Seitsemän segmentin näytön kaksi ensimmäistä numeroa osoittavat kaksi numeroa ADC-arvon desimaalin jälkeen, koska arvo on välillä 0-1V. Seitsemän segmentin näytön numerot kolme ja neljä osoittavat viitearvon voltteina, tämä näyttää myös kaksi ensimmäistä numeroa desimaalin jälkeen, koska alue on myös välillä 0-1V.
  • 16 LEDiä - LEDeillä näytettiin lähdön arvo sen varmistamiseksi, että lähtö oli kylläinen ja lähtö muuttui oikein.

Vaihe 5: Ääntä IR -anturin lähdössä

Anturin ulostulossa oli kohinaa tämän ongelman korjaamiseksi. Keskiarvoistettu lohko otettiin käyttöön, koska se riitti ja vaati hyvin vähän työtä.

Vaihe 6: Koodin yleinen asettelu

Koodin yleinen asettelu
Koodin yleinen asettelu

On yksi koodi, josta ei ole vielä puhuttu. Tämä koodi on kellonjakaja, jota kutsutaan liipaisimeksi. tämä koodibitti laukaisee ADC -koodin näytteeksi. ADC -koodi kestää enintään 2US, joten nykyinen tulo ja edellinen tulo lasketaan keskiarvoksi. 1us tämän keskiarvon laskemisen jälkeen ohjain laskee P-, I- ja D -ehdot. koodin ja liitäntöjen kaikki asettelut on esitetty väliaikaisessa kytkentäkaaviossa.

Vaihe 7: Testaus

Testaus
Testaus

Koodi otettiin käyttöön Basys 3: ssa ja seuraava vastaus tallennettiin. viite muuttui kahden arvon välillä. kuten liitteenä olevassa valmiissa projektikoodissa. Oheinen video näyttää tämän vastauksen reaaliajassa. Värähtelyt hajoavat nopeammin putken yläosassa, koska ohjain on suunniteltu tälle alueelle, mutta ohjain ei toimi yhtä hyvin putken alapuolella, koska järjestelmä on epälineaarinen.

Vaihe 8: Muutokset projektin parantamiseksi

Projekti toimi suunnitellusti, mutta muutamia muutoksia olisin tehnyt, jos projektia olisi voitu jatkaa.

  • Käytä digitaalista suodatinta vaimentaaksesi melun kokonaan
  • määritä ADC -koodi, keskimääräinen koodi ja integrointikoodi käynnistymään peräkkäin.
  • käytä palautetta varten toista anturia, koska tämän anturin epälineaarinen vaste aiheutti monenlaisia ongelmia tässä projektissa, mutta se on enemmän ohjauspuolella kuin koodauspuolella.

Vaihe 9: Lisätyö

Kirjoitin kesän aikana koodin kaskadiohjaimelle ja toteutin yhden silmukan PID -säätimelle suositellut muutokset.

Muutokset tavalliseen PID -säätimeen

· FIR-suodatinmallissa toteutetut kertoimet on muutettava halutun rajataajuuden saavuttamiseksi. Nykyinen toteutus on 5-napainen kuusisuodatin.

· Koodin ajoitus on asetettu siten, että suodatin levittää uutta näytettä läpi ja kun ulostulo on valmis, integraalitermi laukeaa, mikä tarkoittaa, että koodia voidaan muuttaa toimimaan eri aikaväleillä pienemmällä vaivalla koodi.

· Ohjelmaa ohjaavan silmukan pääväliä on myös vähennetty, koska silmukan kesto oli 7 sykliä aiemmin, mikä hidasti säätimen enimmäiskäyttönopeutta, mutta silmukan t 4 tilojen pienentäminen tarkoittaa, että koodin päälohko voi toimia 4 kellosyklin sisällä.

Testaus

Tämä ohjain testattiin ja käytettiin tarkoituksenmukaisesti. En ottanut kuvia tästä todisteesta, koska tämä osa projektia oli vain mielen pitämiseksi aktiivisena. Testauskoodi ja testipenkki ovat saatavilla täältä, jotta voit testata ohjelman ennen käyttöönottoa.

Miksi käyttää kaskadiohjainta?

Kaskadiohjain ohjaa kahta järjestelmän osaa. Tässä tapauksessa kaskadiohjaimessa olisi ulompi silmukka, joka on ohjain, joka palauttaa infrapuna -anturin. Sisäpiirissä on kierroslukumittarista tulevien pulssien välinen takaisinkytkentä, joka määrittää puhaltimen pyörimisnopeuden. Valvonnan avulla järjestelmästä voidaan saada parempi vastaus.

Miten kaskadiohjain toimii?

Säätimen ulompi silmukka syöttää arvoa paalujen välisen ajan sisäsilmukkaohjaimelle. Tämä säädin lisää tai vähentää käyttöjaksoa halutun ajan saavuttamiseksi pulssien välillä.

Laitteiden muutosten toteuttaminen

Valitettavasti en voinut tehdä näitä muutoksia laitteeseen, koska minulla ei ollut siihen pääsyä. Testasin tarkistettua yhden silmukan ohjainta, joka toimii tarkoitetulla tavalla. En ole vielä testannut kaskadiohjainta. Olen varma, että ohjain toimii, mutta saattaa vaatia pieniä muutoksia toimiakseen aiotulla tavalla.

Testaus

En voinut testata ohjainta, koska kahden tulolähteen simulointi oli vaikeaa. Ainoa ongelma, jonka näen kaskadiohjaimessa, on se, että kun ulompi silmukka yrittää lisätä sisäpiiriin syötettyä asetuspistettä, suurempi asetuspiste on itse asiassa pienempi RPS puhaltimelle, mutta tämä voidaan korjata helposti. ota asetusarvo asetusarvosignaalin maksimiarvosta (4095 - asetuspiste - tacho_result).

Vaihe 10: Johtopäätös

Kaiken kaikkiaan projekti toimii kuten halusin projektin alkaessa, joten olen tyytyväinen tulokseen. Kiitos ajastasi lukea yritykseni kehittää PHD -ohjain VHDL: ssä. Jos joku yrittää toteuttaa jonkin muunnelman tästä järjestelmästä ja vaatii jonkin verran apua koodin ymmärtämiseen, ota yhteyttä minuun. Kaikki, jotka kokeilevat lisätyötä, joka on suoritettu, mutta jota ei ole toteutettu, ottakaa yhteyttä minuun. Olisin erittäin kiitollinen, jos joku, joka toteuttaa sen, kertoisi minulle, miten se tapahtuu.

Suositeltava: