Turinys:
- Prekės
- 1 žingsnis: pagrindinė valdymo teorija
- 2 žingsnis: PID kodo rašymas
- 3 veiksmas: kaip modifikuoti savo sistemą
- 4 žingsnis: pasinaudokite įvesties/išvesties pagrindu 3
- 5 veiksmas: triukšmas IR jutiklio išvestyje
- 6 veiksmas: bendras kodo išdėstymas
- 7 žingsnis: bandymas
- 8 veiksmas: projekto patobulinimai
- 9 žingsnis: papildomas darbas
- 10 žingsnis: Išvada
Video: PID valdiklis VHDL: 10 žingsnių
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:46
Š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
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
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
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
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:
(ATNAUJINIMAS - TURI TIKRĄ KLAUSIMĄ) USB ŽAIDIMŲ VALDIKLIS PC: 10 žingsnių (su paveikslėliais)
(ATNAUJINIMAS - TURI TIKRAI IŠDUOTI) USB ŽAIDIMŲ VALDYTOJAS, skirtas PC: ŽAIDIMŲ KONTROLIUOTAS BET KOKIAMS ŽAIDIMAMS (Beveik)
„Alexa IoT“televizoriaus valdiklis ESP8266: 10 žingsnių (su paveikslėliais)
„Alexa IoT“televizoriaus valdiklis ESP8266: Neseniai per „Amazon Prime“dieną nusipirkau „Amazon Echo Dot“už ~ 20 €. Šie maži balso asistentai yra pigūs ir puikiai tinka „pasidaryk pats“namų automatizavimui, jei žinai, kas įmanoma ir kaip kurti išmaniuosius įrenginius. Turiu „Samsung Smart TV“, bet norėjau
„Pasidaryk pats“„MIDI“valdiklis „USB Plug & Play“(UPGRADE NEOPIXEL RING): 12 žingsnių
„Pasidaryk pats“„MIDI“valdiklis „USB Plug & Play“(UPGRADE NEOPIXEL RING): aistringas MAO ir elektroninė muzika, tačiau taip pat matant, kad buvo įmanoma sukurti asmeninę „Midi“sąsają, kurią padariau „mine6“potenciometrai ir 12 mygtukų (įjungta / išjungta), bet dar labiau apsunkino vietą kad jau norėjau pridėti vaizdinių nuorodų
„Arduino“pagrindu sukurtas „pasidaryk pats“žaidimų valdiklis - „Arduino PS2“žaidimų valdiklis - Žaidimas „Tekken“naudojant „pasidaryk pats“„Arduino“žaidimų pultą: 7 žingsniai
„Arduino“pagrindu sukurtas „pasidaryk pats“žaidimų valdiklis | „Arduino PS2“žaidimų valdiklis | Žaidimas „Tekken“naudojant „pasidaryk pats“„Arduino Gamepad“: Sveiki, vaikinai, žaisti žaidimus visada smagu, tačiau žaisti su savo „pasidaryk pats“žaidimo valdikliu yra smagiau. Taigi, mes padarysime žaidimų valdiklį naudodami „arduino pro micro“šioje instrukcijoje
YABC - dar vienas „Blynk“valdiklis - „IoT“debesų temperatūros ir drėgmės valdiklis, ESP8266: 4 žingsniai
YABC - Dar vienas „Blynk“valdiklis - „IoT“debesų temperatūros ir drėgmės valdiklis, ESP8266: Sveiki, kūrėjai, neseniai pradėjau auginti grybus namuose, austrių grybus, bet jau turiu 3 kartus šių valdiklių namuose, kad galėčiau kontroliuoti savo namų alaus fermentacijos temperatūrą, žmona dabar taip pat daro šį „Kombucha“dalyką ir yra šilumos termostatas