Sisukord:

PID -kontroller VHDL: 10 sammu
PID -kontroller VHDL: 10 sammu

Video: PID -kontroller VHDL: 10 sammu

Video: PID -kontroller VHDL: 10 sammu
Video: Оконный интегратор на ПЛИС 2024, November
Anonim
PID -kontroller VHDL
PID -kontroller VHDL
PID -kontroller VHDL
PID -kontroller VHDL

See projekt oli minu viimane projekt, millega lõpetasin oma kiitusega bakalaureusekraadi Corki tehnoloogiainstituudist. See õpetus on jagatud kaheks osaks, millest esimene hõlmab PID -koodi põhiosa, mis on projekti peamine eesmärk, ja teine jaotis hõlmab Basys 3 arendusplaadil rakendatud ja seejärel pingpongi palliga liidetud koodi liidestamist. levitatsiooniseade. Teoreetiline ja ehitatud rig on näidatud lisatud piltidel.

Tarvikud

Simulatsioon

Vivado Design Suite

Rakendamine (sulgudes on see, mida minu projekti jaoks kasutati)

  • FPGA -plaat, mis saab digitaalseid/analoogsignaale sisestada ja väljastada (põhi 3)
  • süsteem, mida saab juhtida ühe tagasisideallikaga (Ping Pong Ball Levitation Rig)

Rig

  • Polükarbonaadist toru
  • 5 V ventilaator
  • IR andur
  • 3D -trükitud alus (see õpetus dokumenteerib seadme ehituse, andur lisati tagasiside saamiseks, kuid seade oli üldiselt sama)
  • 1k takistid
  • Leivaplaat 5V ja GND rööpaga

Samm: põhiline juhtimisteooria

Põhiline juhtimisteooria
Põhiline juhtimisteooria

Arvasin, et mõne põhilise juhtimisteooria lisamine annab alustamiseks hea aluse kõigile, kes soovivad seda koodi rakendada.

Lisatud skeem on üheahelalise kontrolleri paigutus.

r- Kas viide. See määrab, kuhu kontroller soovib minna.

e-Kas viga. See on erinevus anduri väärtuse ja viite vahel. nt. e = r- (d+anduri väljund).

K-See on kontroller. Kontroller võib koosneda kolmest terminist. Need terminid on P, I ja D. Kõigil kolmel terminil on kordajad Kp, Ki ja Kd. Need väärtused määravad kontrolleri reaktsiooni.

  • P-proportsionaalne. Rangelt P -kontrolleri väljund on proportsionaalne praeguse veaga. P -kontrollerit on lihtne rakendada ja see töötab kiiresti, kuid ei saavuta kunagi teie määratud väärtust (viide).
  • I-integraal. Rangelt lahutamatu kontroller võtab kokku eelmise vea, mis lõpuks jõuab soovitud viiteni. See kontroller on üldiselt liiga aeglane rakendamiseks. P -tähe lisamine vähendab viite saavutamiseks kuluvat aega. Sisendi proovivõtmise aega tuleb arvesse võtta, kui lahutamatu mõiste on aja suhtes integreeritud.
  • D-tuletis. Tuletisinstrumendil on väljund, mis sõltub vea muutumise määrast. Seda terminit kasutatakse tavaliselt koos P -terminiga või PI -terminiga. Kuna see on proportsionaalne vea muutumise määraga, suurendatakse mürarikka singli müra, mis võib põhjustada süsteemi ebastabiilsuse. Samuti tuleb arvesse võtta aega, kuna tuletisinstrument on samuti aja suhtes.

U- See on juhtsignaal. See signaal on seadme sisend. Selle projekti puhul on u PWM -signaali sisend ventilaatorile kiiruse muutmiseks.

G- See on süsteem, mida kontrollitakse. Seda süsteemi saab S või Z domeenis matemaatiliselt modelleerida. Süsteemid võivad olla n -ndas järjekorras, kuid kellegi kontrolliga alustamise puhul tuleks tõenäoliselt eeldada esimese järjekorra süsteemi, kuna seda on palju lihtsam arvutada. Internetis on palju teavet modelleerimissüsteemi kohta. Sõltuvalt anduri proovivõtuajast on süsteemi mudel kas diskreetne või pidev. Sellel on kontrollerile drastiline mõju, seega on soovitatav uurida mõlemat.

d- See on häire, mis lisatakse süsteemile. Häirimine on väljastpoolt jõud, mida süsteemi mudel ei arvesta. Lihtne näide sellest oleks droon, mille tahaksite hõljuda 5 meetri kõrgusel, kui tuulehoog tuleb ja kukub drooni 1 meetri kaugusele, siis hakkab kontroller pärast häire tekkimist drooni ümber paigutama. Seda nimetatakse häireks, kuna tuul ei ole korratav, nii et seda ei saa modelleerida.

Kontrolleri häälestamiseks on liiga palju reegleid nimetada, kuid mõned head, millega ma alustasin, on Cohen Coon ja Zieger Nichols.

Süsteemi modelleerimine on üldiselt kõige olulisem osa ilma täpse mudelita, mille kavandatud kontroller ei reageeri soovitud viisil.

Siin peaks olema piisavalt teavet, et mõista, kuidas kontroller töötab, koos mõningate individuaalsete uuringutega ja kontrolleri all olevat koodi saab rakendada mis tahes kolme termini kombinatsiooniga.

2. samm: PID -koodi kirjutamine

PID -koodi kirjutamine
PID -koodi kirjutamine

Järgmisel lingil leitud koodi aluspõhimõte võeti ja muudeti, kuna see kood ei töötanud, kuid sellel oli palju põhimõtteid, mis andsid hea lähtepunkti. Algne PID Koodil oli mitu viga, näiteks

  • Pidev töö - kontroller on pärilikult diskreetne, nii et kontroller tuli seadistada nii, et see arvutaks kõik kolm tingimust ainult siis, kui uus sisend oli saadaval. Selle simulatsiooni eesmärk oli kontrollida, kas sisend on pärast viimast korda muutunud. see toimib ainult selleks, et simuleerida koodi õiget töötamist.
  • Prooviaeg ei mõjutanud integraali- ja tuletisinstrumenti. Samuti ei võtnud kontroller arvesse valimi ülevõtmise aega, seega lisati väärtus, mida nimetatakse aja jagajaks, et tagada integraali- ja tuletisinstrumentide õige toimimine intervall.
  • Viga võib olla ainult positiivne - vea arvutamisel tekkis ka probleem, kuna viga ei saanud kunagi olla negatiivne, kui tagasisidesignaal oli ületanud kontrollväärtuse, et kontroller jätkaks väljundi suurendamist, kui see peaks vähenema.
  • Kolme termini võimendusväärtused olid täisarvud - oma kogemuste põhjal leidsin alati, et kontrolleri kolme termini väärtused on alati ujukomaarvud, kuna Basys 3 -l ei ole ujukomaarvu, tuleb väärtustele anda lugeja väärtus ja nimetaja väärtus, mis teostuks selle probleemi ületamiseks.

Kood on lisatud allpool, seal on koodi põhiosa ja testpink koodi simuleerimiseks. Zip -kaust sisaldab juba Vivados asuvat koodi ja testpinki, et seda saaks aja säästmiseks avada. on ka koodi simuleeritud test, mis näitab väljundit, mis jälgib viidet, mis tõestab, et kood toimib ettenähtud viisil.

Samm: kuidas oma süsteemi muuta

Esiteks ei ole kõik süsteemid ühesugused, tuleb analüüsida süsteemi sisendeid ja väljundeid. Minu puhul oli minu seadme väljund, mis andis mulle positsiooni väärtuse, analoogsignaal ja süsteemi sisend PWM -signaal. See tähendab, et oli vaja ADC konversiooni. Õnneks on Basys 3-l sisseehitatud ADC, nii et see ei olnud probleem, tuli IR-anduri väljund vähendada 0V-1V-ni, kuna see on pardal oleva ADC maksimaalne vahemik. Selleks kasutati pingejagaja vooluahelat, mis oli valmistatud 1k takistitest, mis olid seatud 3k takisti järjestikku koos 1k takistiga. Analoogsignaal oli nüüd ADC levialas. Ventilaatori PWM -sisendit saab otse juhtida Basys 3 PMOD -pordi väljundist.

4. samm: sisend-/väljundvõimaluste kasutamine basys 3

Basys 3 -l on mitmeid I/O -sid, mis võimaldasid koodi töötamise ajal lihtsamat silumist. I/O seadistati järgmiselt.

  • Seitsme segmendi kuva - seda kasutati võrdlusväärtuse ja väärtuse näitamiseks ADC -s voltides. Seitsme segmendi kuva kaks esimest numbrit näitavad kahte numbrit pärast ADC väärtust pärast koma, kuna väärtus on vahemikus 0–1 V. Seitsme segmendi ekraanil olevad numbrid kolm ja neli näitavad võrdlusväärtust voltides. See näitab ka kahte esimest numbrit pärast koma, kuna vahemik on samuti vahemikus 0–1 V.
  • 16 LED -i - LED -e kasutati väljundi väärtuse näitamiseks, et tagada väljundi küllastumine ja väljundi õige muutumine.

Samm: müra IR -anduri väljundis

Selle probleemi lahendamiseks oli anduri väljundis müra, paika pandi keskmistamisplokk, kuna see oli piisav ja nõudis väga vähe tööd.

6. samm: üldine koodipaigutus

Koodi üldine paigutus
Koodi üldine paigutus

On üks kood, millest pole veel räägitud. See kood on kellajagur, mida nimetatakse päästikuks. see koodibitt käivitab proovimiseks ADC -koodi. ADC -koodi täitmiseks kulub maksimaalselt 2 ussi, nii et praegune ja eelmine sisend keskmistatakse. 1us pärast seda keskmistamist arvutab kontroller P, I ja D tingimused. koodi kogu paigutus ja liidesed on näidatud ajutises ühendusskeemis.

7. samm: testimine

Testimine
Testimine

Kood kasutati Basys 3 -s ja registreeriti järgmine vastus. viide muutus 2 väärtuse vahel. mis on lisatud projekti koodis. Lisatud video näitab seda vastust reaalajas. Võnkumised lagunevad toru ülemises osas kiiremini, kuna kontroller on selle piirkonna jaoks mõeldud, kuid kontroller ei tööta nii hästi toru all, kuna süsteem on mittelineaarne.

8. samm: muudatused projekti täiustamiseks

Projekt töötas nagu ette nähtud, kuid seal oleks tehtud mõned muudatused, mida oleksin teinud, kui projekti oleks saanud pikendada.

  • Müra täielikuks summutamiseks rakendage digitaalne filter
  • seadistage järjestikku käivitamiseks ADC -kood, keskmine kood ja integreerimiskood.
  • kasutage tagasiside jaoks teist andurit, kuna selle anduri mittelineaarne reaktsioon põhjustas selle projektiga mitmesuguseid probleeme, kuid see on rohkem juhtimisel, mitte kodeerimisel.

9. samm: lisatöö

Suve jooksul kirjutasin kaskaadkontrolleri koodi ja rakendasin üheahelalise PID -regulaatori jaoks soovitatud muudatused.

Tavalises PID -kontrolleris tehtud muudatused

· FIR-filtrimall rakendas koefitsiente soovitud piirisageduse saavutamiseks. Praegune rakendus on viie puudutusega kuusefilter.

· Koodi ajastamine on seadistatud nii, et filter levitab uut proovi ja kui väljund on valmis, käivitatakse integraaltermin, mis tähendab, et koodi saab muuta erinevate ajavahemike järel töötamiseks, muutmata seda vähem koodi.

· Programmi juhtiva tsükli peamine on samuti vähenenud, kuna see tsükkel võttis 7 tsüklit, mis aeglustas kontrolleri maksimaalset töökiirust, kuid tsükli t 4 oleku vähendamine tähendab, et peamine koodiplokk saab töötada 4 kellatsükli jooksul.

Testimine

Seda kontrollerit testiti ja teostati ettenähtud viisil. Ma ei pildistanud seda tõestust, kuna see osa projektist oli mõeldud ainult meele aktiivseks hoidmiseks. Testimise kood ja testpink on siin saadaval, nii et saate programmi enne selle rakendamist testida.

Miks kasutada kaskaadkontrollerit?

Kaskaadkontroller juhib kahte süsteemi osa. Sellisel juhul oleks kaskaadkontrolleril välimine silmus, mis on kontroller, millel on IR -andurilt tagasiside. Sisemisel ringil on tahhomeetri impulsside vahel ajaliselt tagasisidet, mis määrab ventilaatori pöörlemiskiiruse. Juhtimise rakendamisega saab süsteemist paremini reageerida.

Kuidas kaskaadikontroller töötab?

Kontrolleri välimine silmus sisestab väärtuse nuppude vahel sisemise silmuse kontrollerile. See kontroller suurendab või vähendab töötsüklit, et saavutada soovitud aeg impulsside vahel.

Muudatuste rakendamine rigil

Kahjuks ei suutnud ma neid muudatusi seadmel rakendada, kuna mul polnud sellele juurdepääsu. Testisin muudetud üheahelalist kontrollerit, mis töötab ettenähtud viisil. Ma pole veel kaskaadi kontrollerit testinud. Olen kindel, et kontroller töötab, kuid võib nõuda mõningaid kergeid muudatusi, et töötada ettenähtud viisil.

Testimine

Ma ei saanud kontrollerit testida, kuna kahte sisendallikat oli raske simuleerida. Ainus probleem, mida ma näen kaskaadkontrolleri puhul, on see, et kuna välimine ahel üritab suurendada siseringile edastatud seadeväärtust, on suurem seadistuspunkt tegelikult ventilaatori madalam RPS, kuid seda saab hõlpsasti parandada. võtke seadeväärtus etteantud signaali maksimaalsest väärtusest (4095 - seadeväärtus - tacho_result).

10. samm: järeldus

Üldiselt toimib projekt nii, nagu projekti alguses kavatsesin, nii et olen tulemusega rahul. Täname, et leidsite aega, et lugeda minu katset arendada VHDL -is PID -kontrollerit. Kui keegi üritab süsteemi mõnda varianti rakendada ja nõuab koodi mõistmiseks abi, võtke minuga ühendust. Igaüks, kes proovib täiendavat tööd, mis on täidetud, kuid ei ole rakendatud, võtke minuga ühendust. Oleksin väga tänulik, kui keegi, kes seda rakendab, annaks mulle teada, kuidas see läheb.

Soovitan: