Turinys:

PID valdiklis VHDL: 10 žingsnių
PID valdiklis VHDL: 10 žingsnių

Video: PID valdiklis VHDL: 10 žingsnių

Video: PID valdiklis VHDL: 10 žingsnių
Video: Granulinio katilo Mocek 12kW užkūrimas su valdikliu Iryd - PID 2024, Lapkritis
Anonim
PID valdiklis VHDL
PID valdiklis VHDL
PID valdiklis VHDL
PID valdiklis VHDL

Šis projektas buvo mano paskutinis projektas, skirtas baigti garbės bakalauro laipsnį Korko technologijos institute. Ši pamoka suskirstyta į dvi dalis, pirmoji apims pagrindinį PID kodo turinį, kuris yra pagrindinis projekto tikslas, o antrasis skyrius apima sąsają su kodu, kuris buvo įdiegtas „Basys 3“kūrimo lentoje, o po to sujungtas su stalo teniso kamuoliu levitacijos įrenginys. Teorinis ir pastatytas įrenginys parodytas pridedamuose paveikslėliuose.

Prekės

Modeliavimas

„Vivado“dizaino liukso numeris

Įgyvendinimas (skliaustuose yra tai, kas buvo naudojama mano projektui)

  • FPGA plokštė, galinti įvesti ir išvesti skaitmeninius/analoginius signalus (3 bazė)
  • sistema, valdoma vienu grįžtamojo ryšio šaltiniu („Ping Pong Ball Levitation Rig“)

Įrenginys

  • Polikarbonato vamzdis
  • 5V ventiliatorius
  • IR jutiklis
  • 3D spausdinta bazė (šioje pamokoje dokumentuojama įrenginio konstrukcija, kad jutiklis būtų pridėtas siekiant pateikti grįžtamąjį ryšį, tačiau įrenginys paprastai buvo tas pats)
  • 1k rezistoriai
  • Duonos lenta su 5V ir GND bėgeliu

1 žingsnis: pagrindinė valdymo teorija

Pagrindinė valdymo teorija
Pagrindinė valdymo teorija

Maniau, kad pridėjus pagrindinę valdymo teoriją, visi norintys išbandyti ir įgyvendinti šį kodą suteiks gerą pagrindą pradėti.

Pridedama schema yra vienos kilpos valdiklio išdėstymas.

r- Ar nuoroda. Tai nustato, kur norima eiti valdikliu.

e-klaida. Tai yra skirtumas tarp jutiklio vertės ir jūsų nuorodos. pvz. e = r- (d+jutiklio išėjimas).

K-Tai valdiklis. Valdiklį gali sudaryti trys terminai. Šie terminai yra P, I ir D. Visi trys terminai turi daugiklius, vadinamus Kp, Ki ir Kd. Šios vertės lemia valdiklio reakciją.

  • P-proporcingas. Griežtai P valdiklio išvestis bus proporcinga dabartinei klaidai. P valdiklį paprasta įdiegti ir jis veikia greitai, tačiau niekada nepasieks jūsų nustatytos vertės (nuoroda).
  • Aš-integralas. Griežtai integruotas valdiklis apibendrina ankstesnę klaidą, kuri galiausiai pasieks norimą nuorodą. Šis valdiklis paprastai yra per lėtas įgyvendinti. Įtraukus P terminą sutrumpės laikas, per kurį reikia pasiekti nuorodą. Turi būti atsižvelgiama į laiką, per kurį imamas mėginys iš įvesties duomenų.
  • D-darinys. Išvestinis terminas turės rezultatą, kuris priklauso nuo klaidos pasikeitimo greičio. Šis terminas paprastai vartojamas su P terminu arba su PI terminu. Kadangi tai yra proporcinga klaidų pasikeitimo greičiui, triukšmingas singlas padidins triukšmą, dėl kurio sistema gali būti nestabili. Taip pat reikia atsižvelgti į laiką, nes išvestinės sąlygos taip pat yra susijusios su laiku.

U- Tai valdymo signalas. Šis signalas yra įvestis į įrenginį. Šio projekto atveju u yra PWM signalo įvestis į ventiliatorių, norint pakeisti greitį.

G- Tai sistema, kuri yra valdoma. Ši sistema gali būti matematiškai modeliuojama S arba Z srityje. Sistemos gali būti n -tos eilės, bet tiems, kurie pradeda valdyti, greičiausiai turėtų būti laikoma pirmojo eilės sistema, nes tai daug lengviau apskaičiuoti. Informacijos apie modeliavimo sistemą galima rasti internete. Priklausomai nuo jutiklio mėginių ėmimo laiko, sistemos modelis yra diskretus arba nuolatinis. Tai drastiškai veikia valdiklį, todėl patariama ištirti abu.

d- Tai yra sutrikimas, kuris pridedamas prie sistemos. Sutrikimas yra išorinės jėgos, į kurias neatsižvelgiama sistemos modelyje. Paprastas to pavyzdys būtų dronas, kurį norėtumėte pakelti 5 metrų atstumu, kai ateina vėjo gūsis ir numeta droną 1 metrą, o valdytojas pakeis drono padėtį po to, kai įvyko sutrikimas. Tai vadinama trikdžiu, nes vėjas nėra pakartojamas, todėl to negalima modeliuoti.

Norėdami sureguliuoti valdiklį, yra per daug taisyklių, kurias reikia įvardyti, tačiau kai kurios geros, nuo kurių aš pradėjau, yra Cohenas Coonas ir Ziegeris Nicholsas.

Sistemos modeliavimas paprastai yra svarbiausia dalis be tikslaus modelio, kuris sukurtas valdiklis nereaguos taip, kaip norima.

Čia turėtų būti pakankamai informacijos, kad suprastumėte, kaip valdiklis veikia kartu su kai kuriais atskirais tyrimais, ir kodas, esantis žemiau valdiklio su bet kokiu trijų terminų deriniu, gali būti įdiegtas.

2 žingsnis: PID kodo rašymas

PID kodo rašymas
PID kodo rašymas

Pagrindinis kodo principas, rastas šioje nuorodoje, buvo paimtas ir pakeistas, nes šis kodas neveikė, tačiau turėjo daug principų, kurie davė gerą atspirties tašką. Originalus PID kodas turėjo keletą klaidų, tokių kaip

  • Nuolatinis veikimas - valdiklis yra paveldimas diskretiškas, todėl valdiklį reikėjo nustatyti taip, kad visi 3 terminai būtų apskaičiuojami tik tada, kai buvo prieinama nauja įvestis. Šio modeliavimo tikslas buvo patikrinti, ar įvestis pasikeitė nuo paskutinio karto. tai tik imituoja teisingą kodo veikimą.
  • Atrankos laikas neturėjo įtakos integraliam ir išvestiniam terminui. Valdytojas taip pat neatsižvelgė į laiką, per kurį mėginys buvo paimtas, todėl buvo pridėta vertė, vadinama laiko dalikliu, kad būtų užtikrinta, jog vientisosios ir išvestinės sąlygos veikia teisingai intervalas.
  • Klaida galėjo būti tik pozityvi - skaičiuojant klaidą taip pat kilo problema, nes klaida niekada negalėjo būti neigiama, kai grįžtamojo ryšio signalas viršijo pamatinę vertę, kad valdiklis ir toliau didins išvestį, kai ji turėtų mažėti.
  • 3 terminų prieaugio vertės buvo sveikieji skaičiai - pagal savo patirtį visada pastebėjau, kad valdiklio 3 terminų reikšmės visada yra slankiojo kablelio skaičiai, nes „Basys 3“neturi slankiojo kablelio skaičiaus, reikšmėms turėjo būti suteikta skaitiklis ir vardiklio vertę, kuri padėtų išspręsti šią problemą.

Kodas pridedamas žemiau, yra pagrindinis kodo elementas ir bandomasis stendas kodui imituoti. „ZIP“aplanke yra „Vivado“jau esantis kodas ir bandomoji stendas, kad jį būtų galima atidaryti, kad sutaupytumėte laiko. taip pat yra imituojamas kodo testas, kuris parodo išvesties sekimo nuorodą, kuri įrodo, kad kodas veikia taip, kaip numatyta.

3 veiksmas: kaip modifikuoti savo sistemą

Pirma, ne visos sistemos yra vienodos, reikia išanalizuoti sistemos įėjimus ir išėjimus. Mano atveju, mano įrenginio išėjimas, kuris man suteikė pozicijos vertę, buvo analoginis signalas, o sistemos įėjimas - PWM signalas. Tai reiškia, kad reikėjo ADC konversijos. Laimei, „Basys 3“turi įmontuotą ADC, todėl tai nebuvo problema, IR jutiklio išvestis turėjo būti sumažinta iki 0V-1V, nes tai yra didžiausias borto ADC diapazonas. Tai buvo padaryta naudojant įtampos skirstytuvo grandinę, kuri buvo pagaminta iš 1k rezistorių, nustatytų kaip 3k rezistorius nuosekliai su 1k rezistoriumi. Analoginis signalas dabar buvo ADC diapazone. PWM įvestis į ventiliatorių gali būti tiesiogiai valdoma naudojant „Basys 3“PMOD prievado išvestį.

4 žingsnis: pasinaudokite įvesties/išvesties pagrindu 3

„Basys 3“yra daugybė įvesties/išvesties jungčių, leidžiančių lengviau derinti kodą. įvestis/išvestis buvo nustatyta taip.

  • Septynių segmentų ekranas - tai buvo naudojama norint parodyti atskaitos ir ADC vertę voltais. Pirmieji du septynių segmentų ekrano skaitmenys rodo du skaitmenis po ADC reikšmės po kablelio, nes vertė yra nuo 0 iki 1 V. Trys ir keturi skaitmenys septynių segmentų ekrane rodo pamatinę vertę voltais, taip pat rodo pirmuosius du skaitmenis po kablelio, nes diapazonas taip pat yra nuo 0 iki 1 V.
  • 16 šviesos diodų - šviesos diodai buvo naudojami norint parodyti išvesties vertę, siekiant užtikrinti, kad išvestis būtų prisotinta ir išvestis keistųsi teisingai.

5 veiksmas: triukšmas IR jutiklio išvestyje

Jutiklio išvestyje buvo triukšmo, kad būtų išspręsta ši problema, buvo sumontuotas vidurkių keitimo blokas, nes to pakako ir reikėjo labai mažai darbo.

6 veiksmas: bendras kodo išdėstymas

Bendras kodo išdėstymas
Bendras kodo išdėstymas

Yra vienas kodas, apie kurį dar nebuvo kalbėta. Šis kodas yra laikrodžio daliklis, vadinamas trigeriu. šis kodo bitas paleidžia ADC kodą imti. ADC kodas užtrunka ne daugiau kaip 2 us, todėl dabartinė įvestis ir ankstesnė įvestis apskaičiuojamos vidutiniškai. 1us po šio vidurkio valdiklis apskaičiuoja P, I ir D sąlygas. visas kodo ir sąsajos išdėstymas parodytas laikino ryšio schemoje.

7 žingsnis: bandymas

Testavimas
Testavimas

Kodas buvo įdiegtas „Basys 3“ir užfiksuotas toks atsakymas. nuoroda pasikeitė tarp 2 verčių. kas yra pridėtame užbaigtame projekto kode. Pridedamame vaizdo įraše šis atsakymas rodomas realiuoju laiku. Virpesiai greičiau mažėja viršutinėje vamzdžio dalyje, nes valdiklis buvo suprojektuotas šiam regionui, tačiau valdiklis neveikia taip gerai toliau, nes sistema yra nelinijinė.

8 veiksmas: projekto patobulinimai

Projektas veikė taip, kaip numatyta, tačiau buvo keletas pakeitimų, kuriuos būčiau padaręs, jei projektą būtų galima pratęsti.

  • Įdiekite skaitmeninį filtrą, kad visiškai sumažintumėte triukšmą
  • nustatykite ADC kodą, vidutinį kodą ir integracijos kodą, kad jie suveiktų nuosekliai.
  • grįžtamojo ryšio naudokite kitą jutiklį, nes nelinijinis šio jutiklio atsakas sukėlė daug įvairių šio projekto problemų, tačiau tai daugiau yra valdymo, o ne kodavimo pusėje.

9 žingsnis: papildomas darbas

Per vasarą aš parašiau kaskadinio valdiklio kodą ir įgyvendinau pakeitimus, kuriuos rekomendavau vienos kilpos PID valdikliui.

Įprasto PID valdiklio pakeitimai

· FIR filtro šablone įdiegti koeficientai turi būti pakeisti, kad būtų pasiektas norimas išjungimo dažnis. Dabartinis įgyvendinimas yra penkių čiaupų eglės filtras.

· Kodo laikas nustatytas taip, kad filtras skleistų naują mėginį, o kai išvestis bus paruošta, bus suaktyvintas integralus terminas, o tai reiškia, kad kodą galima pakeisti taip, kad jis veiktų skirtingais laiko intervalais, mažiau pastangų norint jį pakeisti kodą.

· Taip pat buvo sumažintas pagrindinis ciklas, kuris varo programą, nes ciklui prireikė 7 ciklų, o tai sulėtino maksimalų valdiklio veikimo greitį, tačiau sumažinus ciklo t 4 būsenas tai reiškia, kad pagrindinis kodo blokas gali veikti per 4 laikrodžio ciklus.

Testavimas

Šis valdiklis buvo išbandytas ir atliktas pagal paskirtį, aš nefotografavau šio įrodymo, nes ši projekto dalis buvo skirta tik tam, kad protas būtų aktyvus. Testavimo ir bandomojo stalo kodą rasite čia, kad galėtumėte išbandyti programą prieš diegdami.

Kodėl verta naudoti kaskadinį valdiklį?

Kaskadinis valdiklis valdo dvi sistemos dalis. Šiuo atveju kaskadinis valdiklis turi išorinę kilpą, kuri yra valdiklis, turintis grįžtamąjį ryšį iš IR jutiklio. Vidinė kilpa turi grįžtamąjį ryšį tarp tachometro impulsų, kuris lemia ventiliatoriaus sukimosi greitį. Įdiegus kontrolę, galima geriau reaguoti į sistemą.

Kaip veikia kaskadinis valdiklis?

Valdiklio išorinė kilpa į vidinės kilpos valdiklį tiekia vertę tarp laiko tarpų. Tada šis valdiklis padidins arba sumažins darbo ciklą, kad būtų pasiektas norimas laikas tarp impulsų.

Įrenginio modifikacijų įgyvendinimas

Deja, aš negalėjau įgyvendinti šių modifikacijų įrenginyje, nes neturėjau prieigos prie jo. Aš išbandžiau pataisytą vienos kilpos valdiklį, kuris veikia taip, kaip numatyta. Kaskadinio valdiklio dar neišbandžiau. Esu įsitikinęs, kad valdiklis veiks, tačiau gali tekti atlikti nedidelius pakeitimus, kad jis veiktų taip, kaip numatyta.

Testavimas

Negalėjau išbandyti valdiklio, nes buvo sunku imituoti du įvesties šaltinius. Vienintelė problema, kurią matau su kaskadiniu valdikliu, yra ta, kad, kai išorinė kilpa bando padidinti vidinei kilpai tiekiamą nustatytąją vertę, didesnė nustatytoji vertė iš tikrųjų yra mažesnė ventiliatoriaus RPS, tačiau tai galima lengvai išspręsti. paimkite nustatytą tašką iš maksimalios nustatytos vertės signalo vertės (4095 - nustatytoji vertė - tacho_result).

10 žingsnis: Išvada

Apskritai projektas veikia taip, kaip norėjau, kai projektas prasidėjo, todėl esu patenkintas rezultatu. Dėkojame, kad skyrėte laiko perskaityti mano bandymą sukurti VIDL PID valdiklį. Jei kas nors bando įdiegti tam tikrą sistemos variantą ir reikalauja tam tikros pagalbos, kad suprastumėte kodą, susisiekite su manimi, kuo greičiau atsakysiu. Kiekvienas, kuris išbando papildomą darbą, kuris buvo atliktas, bet nebuvo atliktas, susisiekite su manimi dėl bet kokios rankos. Būčiau labai dėkingas, jei kas nors, kas tai įgyvendina, praneštų man, kaip tai vyksta.

Rekomenduojamas: