INHOUDSOPGAWE:

PID -beheerder VHDL: 10 stappe
PID -beheerder VHDL: 10 stappe

Video: PID -beheerder VHDL: 10 stappe

Video: PID -beheerder VHDL: 10 stappe
Video: Lecture 73: Digital PID Control Implementation using Verilog HDL Programming 2024, Julie
Anonim
PID -beheerder VHDL
PID -beheerder VHDL
PID -beheerder VHDL
PID -beheerder VHDL

Hierdie projek was my laaste projek om my Honneurs Baccalaureusgraad van Cork Institute of Technology te voltooi. Hierdie handleiding is in twee afdelings verdeel, die eerste sal die hoof PID -kode dek, wat die hoofdoel van die projek is, en die tweede afdeling dek die koppelvlak van die kode wat op 'n Basys 3 -ontwikkelingsbord geïmplementeer is en dan met 'n tafeltennisbal gekoppel is. levitasie tuig. Die teoretiese en ingeboude toerusting word in die aangehegte beelde getoon.

Voorrade

Simulasie

Vivado Design Suite

Implementering (tussen hakies is dit wat vir my projek gebruik is)

  • FPGA -bord wat digitale/analoog seine kan invoer en uitvoer (Basys 3)
  • 'n stelsel wat beheer kan word met 'n enkele terugvoerbron (Ping Pong Ball Levitation Rig)

Rig

  • Polikarbonaat buis
  • 5V waaier
  • IR sensor
  • 3D -gedrukte basis (hierdie tutoriaal dokumenteer die konstruksie van die tuig, die sensor is bygevoeg om terugvoer te gee, maar die tuig was oor die algemeen dieselfde)
  • 1k weerstande
  • Broodbord met 5V en GND Rail

Stap 1: Basiese beheerteorie

Basiese beheerteorie
Basiese beheerteorie

Ek het gedink dat die toevoeging van 'n basiese beheerteorie 'n goeie basis sou wees vir almal wat hierdie kode wil implementeer.

Die aangehegte diagram is die uitleg van 'n enkellusbeheerder.

r- Is die verwysing. Dit bepaal waarheen die beheerder wil gaan.

e-Is die fout. Dit is die verskil tussen die waarde op u sensor en u verwysing. bv. e = r- (d+uitset van sensor).

K-Dit is die beheerder. 'N Beheerder kan uit drie terme bestaan. Hierdie terme is P, I en D. Al drie terme het vermenigvuldigers wat Kp, Ki en Kd genoem word. Hierdie waardes bepaal die reaksie van die beheerder.

  • P-proporsioneel. 'N Streng P -kontroleerder sal 'n uitset hê wat eweredig is aan die huidige fout. 'N P -beheerder is eenvoudig om te implementeer en werk vinnig, maar sal nooit die waarde bereik wat u stel nie (verwysing).
  • Ek-integraal. 'N Streng integrale beheerder sal die vorige fout opsom, wat uiteindelik die gewenste verwysing sal bereik. Hierdie beheerder is oor die algemeen te traag om te implementeer. As u 'n P -term byvoeg, verminder dit die tyd wat dit neem om die verwysing te bereik. Daar moet in ag geneem word dat die tyd wat die insette geneem word, geïntegreer word met betrekking tot tyd.
  • D-afgeleide. Die afgeleide term sal 'n uitset hê wat afhanklik is van die tempo van foutverandering. Hierdie term word gewoonlik gebruik met 'n P -term of met 'n PI -term. Aangesien dit proporsioneel is met die tempo van foutverandering, word die geraas van 'n raserige enkelspel versterk, wat kan veroorsaak dat 'n stelsel onstabiel is. Tyd moet ook in ag geneem word, soos die afgeleide term ook met betrekking tot tyd is.

U- Dit is die beheersignaal. Hierdie sein is 'n invoer van die tuig. In die geval van hierdie projek is die u 'n PWM -seininvoer na die waaier om die spoed te verander.

G- Dit is die stelsel wat beheer word. Hierdie stelsel kan wiskundig in die S- of Z -domein gemodelleer word. Die stelsels kan in die nde orde wees, maar vir iemand wat met beheer begin, moet 'n eerste -orde stelsel waarskynlik aanvaar word, aangesien dit baie makliker is om te bereken. Dit is 'n oorvloed inligting oor modelleringstelsels wat aanlyn gevind kan word. Afhangende van die monstertyd van die sensor, is die model van die stelsel diskreet of deurlopend. Dit het 'n drastiese uitwerking op die beheerder, dus word navorsing oor albei aangeraai.

d- Dit is 'n versteuring wat by die stelsel gevoeg word. Versteuring is kragte van buite wat die model van die stelsel nie in ag neem nie. 'N Eenvoudige voorbeeld hiervan is 'n hommeltuig wat u op 5 meter wil hou, 'n stormwind kom en laat die hommeltuig 1 meter val, die beheerder sal die hommeltuig herposisioneer nadat die steuring plaasgevind het. Dit staan bekend as versteuring, aangesien wind nie herhaalbaar is nie, dus dit kan nie gemodelleer word nie.

Om die kontroleerder in te stel, is daar te veel reëls om op te noem, maar 'n paar goeie reëls waarmee ek begin het, is Cohen Coon en Zieger Nichols.

Die modellering van 'n stelsel is oor die algemeen die belangrikste deel sonder 'n akkurate model, wat die ontwerpte kontroleerder nie na wens sal reageer nie.

Daar moet genoeg inligting hier wees om te verstaan hoe die beheerder werk, sowel as individuele navorsing, en die kode hieronder kan 'n kontroleerder met 'n kombinasie van die drie terme geïmplementeer word.

Stap 2: Skryf PID -kode

Skryf PID -kode
Skryf PID -kode

Die basiese beginsel van die kode wat op die volgende skakel gevind is, is geneem en aangepas, aangesien hierdie kode nie werk nie, maar baie van die beginsels reg was, wat 'n goeie beginpunt was. Oorspronklike PID Die kode bevat verskeie foute, soos

  • Deurlopende werking - die beheerder is inherent diskreet, dus moes die beheerder ingestel word om slegs al drie terme te bereken wanneer 'n nuwe insette beskikbaar was. Die werk vir hierdie simulasie was om te kyk of die insette sedert die laaste keer verander het. dit werk slegs om die kode wat korrek werk, te simuleer.
  • Monstertyd het geen uitwerking op die integraal- en afgeleide term nie - die beheerder het ook nie die tyd waarin die steekproef oorgeneem is, in ag geneem nie, dus is 'n waarde genaamd verdeler vir tyd bygevoeg om te verseker dat die integrale en afgeleide terme oor die korrekte werk interval.
  • Fout kan slegs postief wees - by die berekening van die fout was daar ook 'n probleem, aangesien die fout nooit 'n negatiewe betekenis kon hê nie, aangesien die terugvoersignaal die verwysingswaarde oortref het dat die kontroleerder sou voortgaan om die uitset te verhoog wanneer dit moes afneem.
  • Verdien waardes vir die 3 terme was heelgetalle - in my ervaring het ek altyd gevind dat die waardes vir die 3 terme in die kontroleerder altyd swaaipuntgetalle moet wees as gevolg van Basys 3 wat nie 'n dryfpuntnommer het nie, die waardes moes 'n tellerwaarde en 'n noemer waarde wat as 'n werk sou dien om hierdie probleem te oortref.

Die kode is hieronder aangeheg, daar is die belangrikste kode en 'n toetsbank om die kode te simuleer. Die zip -gids bevat die kode en toetsbank wat reeds in Vivado is, sodat u dit kan oopmaak om tyd te bespaar. daar is ook 'n gesimuleerde toets van die kode wat die uitsetopsporing van die verwysing toon, wat bewys dat die kode funksioneer soos bedoel.

Stap 3: Hoe om aan te pas vir u stelsel

Eerstens is nie alle stelsels dieselfde nie; die insette en uitsette van die stelsel moet ontleed word. In my geval was die uitset van my tuig wat my 'n waarde vir die posisie gegee het, 'n analoog sein en die inset van die stelsel was 'n PWM -sein. Dit beteken dat 'n ADC -omskakeling nodig was. Gelukkig het die Basys 3 'n ingeboude ADC, so dit was geen probleem nie; die uitset van die IR-sensor moes afgeskaal word tot 0V-1V, aangesien dit die maksimum bereik van die ingeboude ADC is. Dit is gedoen met behulp van 'n spanningsverdelerkring wat bestaan uit 1k -weerstande wat as 'n 3k -weerstand in serie met 'n 1k -weerstand opgestel is. Die analoog sein was nou binne die bereik van die ADC. Die PWM -ingang na die waaier kan direk aangedryf word deur die uitset van 'n PMOD -poort op die Basys 3.

Stap 4: Maak gebruik van I/O op Basys 3

Daar is 'n aantal I/O op die Basys 3 wat makliker ontfouting moontlik gemaak het toe die kode uitgevoer is. die I/O is soos volg opgestel.

  • Sewe segmentweergawe - dit is gebruik om die waarde van die verwysing en die waarde op die ADC in volt aan te toon. Die eerste twee syfers van die sewe segment vertoon die twee syfers na die desimale plek van die ADC waarde, aangesien die waarde tussen 0-1V is. Die syfers drie en vier op die sewe segment vertoon die verwysingswaarde in volt, dit toon ook die eerste twee syfers na die desimale plek, aangesien die reeks ook tussen 0-1V is.
  • 16 LED's - Die LED's is gebruik om die waarde van die uitset aan te toon om te verseker dat die uitset versadig is en die uitset korrek verander.

Stap 5: Geraas op die IR -sensoruitgang

Daar was geraas op die sensoruitgang om hierdie probleem op te los. 'N Gemiddelde blok is aangebring, aangesien dit voldoende was en baie min werk nodig was.

Stap 6: Algehele kode -uitleg

Algehele kode -uitleg
Algehele kode -uitleg

Daar is een stuk kode waaroor nog nie gepraat is nie. Hierdie kode is 'n klokverdeler wat sneller genoem word. hierdie stukkie kode laat die ADC -kode na 'n voorbeeld kyk. die ADC -kode neem 'n maksimum van 2us om te voltooi, dan word die huidige invoer en die vorige inset gemiddeld. 1us na hierdie gemiddelde bereken die beheerder P, I en D terme. die algemene uitleg van die kode en koppelvlak word in die tydelike verbindingsdiagram getoon.

Stap 7: Toets

Toets
Toets

Die kode is op die Basys 3 ontplooi en die volgende reaksie is aangeteken. die verwysing het tussen 2 waardes verander. wat die geval is in die aangehegte projekkode. Die aangehegte video toon hierdie reaksie intyds. Die ossillasies verval vinniger in die boonste deel van die buis, aangesien die kontroleerder vir hierdie gebied ontwerp is, maar die beheerder werk nie so goed in die buis nie, aangesien die stelsel nie-lineêr is.

Stap 8: Aanpassings om die projek te verbeter

Die projek het volgens die bedoeling gewerk, maar ek sou 'n paar aanpassings gemaak het as die projek uitgebrei kon word.

  • Implementeer digitale filter om geraas heeltemal te demp
  • stel die ADC -kode, gemiddelde kode en integrasiekode in om opeenvolgend te aktiveer.
  • gebruik 'n ander sensor vir terugvoer, aangesien die nie-lineêre reaksie van hierdie sensor 'n wye verskeidenheid probleme met hierdie projek veroorsaak het, maar dit is meer aan die kontrolekant, nie aan die koderingskant nie.

Stap 9: ekstra werk

In die somer het ek kode vir 'n kaskade -kontroleerder geskryf en die aanpassings wat ek aanbeveel het vir die enkellus PID -beheerder geïmplementeer.

Wysigings aan die gewone PID -beheerder aangebring

· FIR filter sjabloon geïmplementeer die koëffisiënte moet verander word om die verlangde afsnyfrekwensie te bereik. Die huidige implementering is 'n 5-kraanfilter.

· Die tydsberekening van die kode is so opgestel dat die filter die nuwe monster sal versprei en wanneer die uitset gereed is, word die integrale term geaktiveer, wat beteken dat die kode aangepas kan word om op verskillende tydsintervalle te werk, met minder moeite om te verander kode.

· Die hoof vir lus wat die program dryf, is ook verminder, aangesien hierdie vir lus 7 siklusse geneem het voordat dit die maksimum werksnelheid van die beheerder vertraag het, maar deur die for lus t 4 toestande te verminder, beteken dit dat die hoofblok kode kan werk binne 4 kloksiklusse.

Toets

Hierdie kontroleerder is getoets en uitgevoer soos bedoel. Ek het nie hierdie bewys geneem nie, aangesien hierdie deel van die projek net was om die gedagtes aktief te hou. Die kode vir die toets sowel as die toetsbank sal hier beskikbaar wees, sodat u die program kan toets voordat dit geïmplementeer word.

Waarom 'n kaskade -kontroleerder gebruik?

'N Kaskade -beheerder beheer twee dele van die stelsel. In hierdie geval sou 'n kaskade -kontroleerder 'n buitenste lus hê, 'n kontroleerder wat terugvoer het van die IR -sensor. Die binnekring het terugvoer in die vorm van tyd tussen die pulse van die toerenteller wat die rotasiesnelheid van die waaier bepaal. Deur beheer te implementeer, kan 'n beter reaksie uit die stelsel verkry word.

Hoe werk die kaskade -kontroleerder?

Die buitenste lus van die beheerder sal 'n waarde voer vir die tyd tussen die pulsies na die binnekring -beheerder. Hierdie kontroleerder sal dan die werksiklus verhoog of verlaag om die verlangde tyd tussen pulse te bereik.

Implementering van wysigings op tuig

Ongelukkig kon ek nie hierdie wysigings op die tuig implementeer nie, aangesien ek nie toegang daartoe gehad het nie. Ek het die hersiene enkellus -kontroleerder getoets wat werk soos bedoel. Ek het die kaskade -kontroleerder nog nie getoets nie. Ek is vol vertroue dat die kontroleerder sal werk, maar dit kan 'n paar klein aanpassings vereis om te werk soos bedoel.

Toets

Ek kon nie die kontroleerder toets nie, aangesien dit moeilik was om twee invoerbronne na te boots. Die enigste probleem wat ek met die kaskade-kontroleerder kan sien, is dat terwyl die buitenste lus probeer om die setpoint wat aan die binnekring verskaf word, te verhoog, is 'n groter stelpunt eintlik 'n laer RPS vir die waaier, maar dit kan maklik opgelos word. neem die setpunt van die maksimum waarde van die setpoint sein (4095 - setpoint - tacho_result).

Stap 10: Gevolgtrekking

Oor die algemeen funksioneer die projek soos ek bedoel het toe die projek begin het, so ek is tevrede met die resultaat. Dankie dat u die tyd geneem het om my poging om 'n PID -beheerder in VHDL te ontwikkel, te lees. As iemand probeer om 'n variasie hiervan op 'n stelsel te implementeer en hulp nodig het om die kode te verstaan, kontak my. Almal wat die ekstra werk probeer, wat uitgevoer is, maar nie geïmplementeer is nie, kontak my gerus vir enige hand. Ek sal dit baie waardeer as iemand wat dit implementeer my laat weet hoe dit gaan.

Aanbeveel: