Satura rādītājs:

PID kontrolieris VHDL: 10 soļi
PID kontrolieris VHDL: 10 soļi

Video: PID kontrolieris VHDL: 10 soļi

Video: PID kontrolieris VHDL: 10 soļi
Video: Fuzzy type 1 PID control of two area system 2024, Jūlijs
Anonim
PID kontrolieris VHDL
PID kontrolieris VHDL
PID kontrolieris VHDL
PID kontrolieris VHDL

Šis projekts bija mans pēdējais projekts, lai pabeigtu goda bakalaura grādu Korkas Tehnoloģiju institūtā. Šī apmācība ir sadalīta divās sadaļās, pirmā aptvers PID koda galveno daļu, kas ir projekta galvenais mērķis, un otrā sadaļa aptver saskarni ar kodu, kas tika ieviests Basys 3 izstrādes panelī un pēc tam sasaistīts ar galda tenisa bumbu levitācijas iekārta. Teorētiskā un uzbūvētā iekārta ir parādīta pievienotajos attēlos.

Piegādes

Simulācija

Vivado dizaina "suite" numurs

Īstenošana (iekavās ir tas, kas tika izmantots manam projektam)

  • FPGA plate, kas var ievadīt un izvadīt digitālos/analogos signālus (3. pamatinformācija)
  • sistēma, kuru var kontrolēt ar vienu atgriezeniskās saites avotu (Ping Pong Ball Levitation Rig)

Rig

  • Polikarbonāta caurule
  • 5V ventilators
  • IR sensors
  • 3D drukātā bāze (šī apmācība dokumentē iekārtas konstrukciju, lai pievienotu atgriezenisko saiti, tika pievienots sensors, bet iekārta parasti bija tāda pati)
  • 1k rezistori
  • Maizes dēlis ar 5V un GND sliedi

1. solis: Pamata kontroles teorija

Pamata kontroles teorija
Pamata kontroles teorija

Es domāju, ka, pievienojot kādu pamata kontroles teoriju, ikviens, kas vēlas izmēģināt un ieviest šo kodu, dos labu pamatu, lai sāktu.

Pievienotā diagramma ir vienas cilpas kontroliera izkārtojums.

r- Vai atsauce. Tas nosaka, kur kontrolieris vēlas nokļūt.

e-Vai kļūda. Šī ir atšķirība starp sensoru un atsauces vērtību. piem. e = r- (d+sensora izeja).

K-Tas ir kontrolieris. Kontrolieris var sastāvēt no trim terminiem. Šie termini ir P, I un D. Visiem trim terminiem ir reizinātāji Kp, Ki un Kd. Šīs vērtības nosaka kontroliera reakciju.

  • P-proporcionāls. Stingri P kontrolierim būs izeja, kas ir proporcionāla pašreizējai kļūdai. P kontrolieri ir viegli ieviest un tas darbojas ātri, taču nekad nesasniegs jūsu iestatīto vērtību (atsauce).
  • Es-integrālis. Stingri integrēts kontrolieris apkopos iepriekšējo kļūdu, kas galu galā sasniegs vēlamo atsauci. Šis kontrolieris parasti ir pārāk lēns, lai to ieviestu. Pievienojot P terminu, tiks samazināts laiks, kas vajadzīgs, lai sasniegtu atsauci. Laiks, kurā tiek ņemta ievade, ir jāņem vērā, integrālais termins ir integrēts attiecībā uz laiku.
  • D-atvasinājums. Atvasinātajam terminam būs rezultāts, kas ir atkarīgs no kļūdu maiņas ātruma. Šo terminu parasti lieto kopā ar P terminu vai ar PI terminu. Tā kā tas ir proporcionāls kļūdu maiņas ātrumam, tad trokšņainam singlam tiks pastiprināts troksnis, kas var izraisīt sistēmas nestabilitāti. Jāņem vērā arī laiks, jo atvasinātais termins attiecas arī uz laiku.

U- Tas ir vadības signāls. Šis signāls ir ieeja platformā. Šī projekta gadījumā u ir PWM signāla ievade ventilatoram, lai mainītu ātrumu.

G- Šī sistēma tiek kontrolēta. Šo sistēmu var matemātiski modelēt S vai Z domēnā. Sistēmas var būt n -tajā kārtā, bet kādam, kas sāk darbu ar kontroli, iespējams, būtu jāpieņem pirmās kārtas sistēma, jo to ir daudz vieglāk aprēķināt. Tiešsaistē ir daudz informācijas par modelēšanas sistēmu. Atkarībā no sensora paraugu ņemšanas laika sistēmas modelis ir diskrēts vai nepārtraukts. Tam ir krasa ietekme uz kontrolieri, tāpēc ieteicams izpētīt abus.

d- Tas ir traucējums, kas tiek pievienots sistēmai. Traucējumi ir ārēji spēki, kurus sistēmas modelis neņem vērā. Vienkāršs piemērs tam būtu bezpilota lidaparāts, ar kuru vēlaties lidināties pie 5 metriem, kad atnāk vēja brāzma un nokrīt drons 1 metru attālumā, un kontrolieris pēc trauksmes iestāšanās pārvietos dronu. To sauc par traucējumiem, jo vējš nav atkārtojams, tāpēc to nevar modelēt.

Lai noregulētu kontrolieri, ir pārāk daudz noteikumu, kurus nosaukt, bet daži labi, ar kuriem es sāku, ir Koens Kūns un Zīgers Nikolss.

Sistēmas modelēšana parasti ir vissvarīgākā daļa bez precīza modeļa, un izstrādātais kontrolieris nereaģēs, kā gribēts.

Šeit vajadzētu būt pietiekami daudz informācijas, lai saprastu, kā kontrolieris darbojas, kopā ar atsevišķiem pētījumiem, un zem kontroliera esošais kods var tikt ieviests, izmantojot jebkuru trīs terminu kombināciju.

2. darbība. PID koda rakstīšana

PID koda rakstīšana
PID koda rakstīšana

Turpmāk norādītajā saitē atrastā koda pamatprincips tika ņemts un mainīts, jo šis kods nedarbojās, taču daudziem principiem bija tiesības, kas deva labu sākumpunktu. Oriģinālais PID Kodam bija vairākas kļūdas, piemēram

  • Nepārtraukta darbība - kontrolieris ir mantots diskrēts, tāpēc kontrolieris bija jāiestata tā, lai aprēķinātu visus 3 vienumus tikai tad, kad bija pieejama jauna ievade. Šīs simulācijas mērķis bija pārbaudīt, vai ievade nav mainījusies kopš pēdējās reizes. tas darbojas tikai, lai simulētu pareizu koda darbību.
  • Izlases laiks neietekmēja integrālo un atvasināto terminu - Pārzinis arī neņēma vērā laiku, kurā paraugs tika pārņemts, tāpēc tika pievienota vērtība, ko sauc par laika dalītāju, lai nodrošinātu, ka integrālie un atvasinātie nosacījumi darbojas pareizi intervāls.
  • Kļūda varēja būt tikai pozitīva - aprēķinot kļūdu, radās arī problēma, jo kļūda nekad nevarēja būt negatīva, ja atgriezeniskās saites signāls bija pārsniedzis atsauces vērtību, ka kontrolieris turpinās palielināt izvadi, kad tam vajadzētu samazināties.
  • Trīs terminu ieguves vērtības bija veseli skaitļi - pēc savas pieredzes es vienmēr atklāju, ka kontroliera 3 terminu vērtības vienmēr ir peldošā komata skaitļi, jo Basys 3 nav peldošā komata skaitļa, vērtībām bija jāpiešķir skaitītāja vērtība un saucēja vērtību, kas kalpotu kā darbs, lai pārsniegtu šo problēmu.

Kods ir pievienots zemāk, tur ir koda galvenais pamatteksts un testa pults koda simulēšanai. ZIP mapē ir kods un testa galds, kas jau atrodas Vivado, lai to varētu atvērt, lai ietaupītu laiku. ir arī simulēts koda tests, kas parāda izvades izsekošanu atsaucei, kas pierāda, ka kods darbojas kā paredzēts.

3. darbība. Kā modificēt sistēmu

Pirmkārt, ne visas sistēmas ir vienādas, ir jāanalizē sistēmas ieejas un izejas. Manā gadījumā manas iekārtas izeja, kas man deva pozīcijas vērtību, bija analogs signāls, un sistēmas ievade bija PWM signāls. Tas nozīmē, ka bija nepieciešama ADC konversija. Par laimi Basys 3 ir iebūvēts ADC, tāpēc tas nebija problēma, IR sensora izeja bija jāsamazina līdz 0V-1V, jo tas ir maksimālais borta ADC diapazons. Tas tika darīts, izmantojot sprieguma dalītāja ķēdi, kas tika izgatavota no 1k rezistoriem, kas sērijveidā uzstādīti kā 3k rezistori ar 1k rezistoru. Analogais signāls tagad bija ADC diapazonā. Ventilatora PWM ieeju var tieši vadīt, izmantojot Basys 3 PMOD porta izeju.

4. solis: I/O priekšrocību izmantošana Basys 3

Basys 3 ir vairāki I/O, kas ļāva vieglāk atkļūdot, kad kods darbojās. I/O tika iestatīts šādi.

  • Septiņu segmentu displejs - tas tika izmantots, lai parādītu atsauces vērtību un vērtību ADC voltos. Septiņu segmentu displeja pirmie divi cipari parāda divus ciparus aiz ADC vērtības aiz komata, jo vērtība ir starp 0-1V. Trīs un četri cipari septiņu segmentu displejā parāda atsauces vērtību voltos, tas parāda arī pirmos divus ciparus aiz komata, jo diapazons ir arī starp 0-1V.
  • 16 gaismas diodes - gaismas diodes tika izmantotas, lai parādītu izvades vērtību, lai nodrošinātu, ka izvade ir piesātināta un izeja mainās pareizi.

5. darbība: troksnis IS sensora izejā

Sensora izejā bija troksnis, lai atrisinātu šo problēmu, tika ievietots vidējais bloks, jo tas bija pietiekami, un tas prasīja ļoti maz darba.

6. darbība. Kopējais koda izkārtojums

Kopējais koda izkārtojums
Kopējais koda izkārtojums

Ir viens koda gabals, par kuru vēl nav runāts. Šis kods ir pulksteņa dalītājs, ko sauc par sprūdu. šis koda bits aktivizē ADC koda paraugu. ADC koda aizpildīšanai nepieciešami ne vairāk kā 2 us, tāpēc tiek aprēķināta vidējā vērtība pašreizējai un iepriekšējai ievadei. 1us pēc šīs vidējās vērtības kontrolieris aprēķina P, I un D nosacījumus. koda izkārtojums un saskarne ir parādīta pagaidu savienojuma shēmā.

7. darbība: pārbaude

Testēšana
Testēšana

Kods tika ievietots Basys 3, un tika reģistrēta šāda atbilde. atsauce mainījās starp 2 vērtībām. kā tas ir pievienotajā pabeigta projekta kodā. Pievienotais video parāda šo atbildi reāllaikā. Svārstības samazinās ātrāk caurules augšējā daļā, jo kontrolieris bija paredzēts šim reģionam, bet kontrolieris nedarbojas tik labi tālāk pa cauruli, jo sistēma ir nelineāra.

8. darbība: izmaiņas projekta uzlabošanai

Projekts strādāja, kā paredzēts, bet ir dažas izmaiņas, kuras es būtu izdarījis, ja projektu būtu iespējams pagarināt.

  • Ieviesiet digitālo filtru, lai pilnībā samazinātu troksni
  • pēc kārtas iestatiet ADC kodu, vidējo kodu un integrācijas kodu.
  • atgriezeniskajai saitei izmantojiet citu sensoru, jo šī sensora nelineārā reakcija radīja visdažādākās problēmas ar šo projektu, bet tas vairāk attiecas uz vadības, nevis kodēšanas pusi.

9. solis: papildu darbs

Vasaras laikā es uzrakstīju kodu kaskādes kontrolierim un ieviesu modifikācijas, kuras es ieteicu vienas cilpas PID kontrolierim.

Veiktas izmaiņas parastajā PID kontrollerī

· FIR filtra veidnē ir ieviesti koeficienti, lai sasniegtu vēlamo robežvērtību. Pašreizējais risinājums ir egles filtrs ar 5 pieskārieniem.

· Koda laiks ir iestatīts tā, lai filtrs izplatītu jauno paraugu, un, kad izvade būs gatava, tiks aktivizēts integrālais termins, kas nozīmēs, ka kodu var mainīt, lai tas darbotos dažādos laika intervālos ar mazākām pūlēm mainīt kods.

· Galvenais cilpa, kas vada programmu, ir arī samazināta, jo ciklam bija nepieciešami 7 cikli, un tas palēnināja kontroliera maksimālo darbības ātrumu, bet, samazinot cikla t 4 stāvokli, tas nozīmē, ka galvenais koda bloks var darboties 4 pulksteņa ciklu laikā.

Testēšana

Šis kontrolieris tika pārbaudīts un veikts, kā paredzēts, es neuzņēmu šī pierādījuma attēlus, jo šī projekta daļa bija paredzēta, lai saglabātu prāta darbību. Testēšanas kods, kā arī testa galds būs pieejams šeit, lai jūs varētu pārbaudīt programmu pirms ieviešanas.

Kāpēc izmantot kaskādes kontrolieri?

Kaskādes kontrolieris kontrolē divas sistēmas daļas. Šajā gadījumā kaskādes kontrolierim būtu ārējā cilpa, kas ir kontrolieris, kam ir atgriezeniskā saite no IR sensora. Iekšējā cilpā ir atgriezeniskā saite laika veidā starp tahometra impulsiem, kas nosaka ventilatora rotācijas ātrumu. Ieviešot kontroli, no sistēmas var panākt labāku reakciju.

Kā darbojas kaskādes kontrolieris?

Kontrollera ārējā cilpa ievadīs vērtību starp pūlēm iekšējās cilpas kontrolierim. Šis regulators palielinās vai samazinās darba ciklu, lai sasniegtu vēlamo laiku starp impulsiem.

Struktūras modifikāciju ieviešana

Diemžēl es nevarēju ieviest šīs modifikācijas platformā, jo man nebija tam piekļuves. Es pārbaudīju pārskatīto vienas cilpas kontrolieri, kas darbojas kā paredzēts. Es vēl neesmu pārbaudījis kaskādes kontrolieri. Esmu pārliecināts, ka kontrolieris darbosies, taču var būt vajadzīgas nelielas izmaiņas, lai tas darbotos kā paredzēts.

Testēšana

Es nevarēju pārbaudīt kontrolieri, jo bija grūti simulēt divus ievades avotus. Vienīgā problēma, ko es redzu ar kaskādes kontrolieri, ir tā, ka ārējā cilpa mēģina palielināt iekšējai cilpai piegādāto uzdoto vērtību, ka lielāka iestatītā vērtība faktiski ir zemāka ventilatora RPS, taču to var viegli salabot. ņem iestatīto punktu no iestatītās vērtības signāla maksimālās vērtības (4095 - uzdotā vērtība - tacho_result).

10. solis: Secinājums

Kopumā projekts darbojas tā, kā es biju iecerējis projekta sākumā, tāpēc esmu apmierināts ar rezultātu. Paldies, ka veltījāt laiku, lai izlasītu manu mēģinājumu izstrādāt PID kontrolieri VHDL. Ja kāds mēģina ieviest kādas šīs sistēmas variācijas un prasa zināmu palīdzību, lai saprastu kodu, sazinieties ar mani, es atbildēšu ASAP. Ikviens, kurš izmēģina papildu darbu, kas tika pabeigts, bet netika īstenots, lūdzu, sazinieties ar mani, lai saņemtu palīdzību. Es būtu ļoti pateicīgs, ja kāds, kas to īsteno, pastāstītu man, kā tas notiek.

Ieteicams: