Talaan ng mga Nilalaman:

PID Controller VHDL: 10 Hakbang
PID Controller VHDL: 10 Hakbang

Video: PID Controller VHDL: 10 Hakbang

Video: PID Controller VHDL: 10 Hakbang
Video: Fun with Music and Programming by Connor Harris and Stephen Krewson 2024, Nobyembre
Anonim
PID Controller VHDL
PID Controller VHDL
PID Controller VHDL
PID Controller VHDL

Ang proyektong ito ang aking panghuling proyekto upang makumpleto ang aking Honors Bachelor Degree mula sa Cork Institute of Technology. Ang Tutorial na ito ay pinaghiwa-hiwalay sa dalawang mga seksyon ang una ay sasakupin ang pangunahing katawan ng PID code na kung saan ay ang pangunahing layunin ng proyekto at ang pangalawang seksyon ay sumasaklaw sa interfacing ng code na ipinatupad sa isang Basys 3 development board at pagkatapos ay interfaced sa isang ping pong ball levitation rig. Ang teoretikal at built rig ay ipinapakita sa mga imahe na nakakabit.

Mga gamit

Kunwa

Vivado Design Suite

Pagpapatupad (sa mga braket ay kung ano ang ginamit para sa aking proyekto)

  • FPGA Board na maaaring mag-input at maglabas ng mga signal ng Digital / Analog (Basys 3)
  • isang system na makokontrol na may isang solong mapagkukunan ng puna (Ping Pong Ball Levitation Rig)

Rig

  • Tube ng Polycarbonate
  • 5V Fan
  • IR Sensor
  • 3D Printed Base (Itinuturo ng tutorial na ito ang pagtatayo ng rig na idinagdag ang sensor upang magbigay ng feedback ngunit ang rig ay karaniwang pareho)
  • 1k Resistors
  • Breadboard na may 5V at GND Rail

Hakbang 1: Pangunahing Teoryang Control

Pangunahing Teoryang Pagkontrol
Pangunahing Teoryang Pagkontrol

Naisip ko na ang pagdaragdag sa ilang pangunahing teorya ng kontrol ay magbibigay sa sinumang nais na subukan at ipatupad ang code na ito ng isang magandang batayan upang magsimula.

Ang kalakip na diagram ay ang layout ng isang solong loop controller.

---------------- Ay ang sanggunian. Tinutukoy nito kung saan nais pumunta ang tagakontroler.

e-Ay ang error. Ito ang pagkakaiba sa pagitan ng halaga sa iyong sensor at iyong sanggunian. hal. e = ---------------- (d + output ng sensor).

K-Ito ang tagakontrol. Ang isang controller ay maaaring mabubuo ng tatlong mga termino. Ang mga term na ito ay P, I at D. Ang lahat ng tatlong mga termino ay may mga multiplier na tinatawag na Kp, Ki at Kd. Natutukoy ng mga halagang ito ang tugon ng controller.

  • P-Proportional. Ang isang mahigpit na P controller ay magkakaroon ng output na proporsyonal sa kasalukuyang error. Ang isang P controller ay simple upang ipatupad at gumana nang mabilis ngunit hindi maabot ang halagang itinakda mo (sanggunian).
  • I-Integral. Ang isang mahigpit na integral na magsusupil ay susuriin ang nakaraang error na sa paglaon ay maaabot ang nais na sanggunian. Ang tagakontrol na ito sa pangkalahatan ay masyadong mabagal upang ipatupad. Ang pagdaragdag sa isang P term ay magbabawas ng oras na kinuha upang maabot ang sanggunian. Ang oras kung saan nai-sample ang input ay dapat isaalang-alang ang integral na termino ay isinama patungkol sa oras.
  • D-Hango. Ang terminong Derivative ay magkakaroon ng isang output na nakasalalay sa rate ng pagbabago ng error. Ang term na ito ay karaniwang ginagamit gamit ang isang P term o may isang PI term. Dahil ito ay proporsyonal sa rate ng pagbabago ng error pagkatapos ang isang maingay na solong ay may amplified ang ingay nito na maaaring maging sanhi ng isang system na hindi matatag. Ang oras ay dapat ding isaalang-alang dahil ang derivative term ay para rin sa oras.

U- Ito ang control signal. Ang senyas na ito ay isang input sa rig. Sa kaso ng proyektong ito ang u ay isang input ng signal ng PWM sa fan upang baguhin ang bilis.

G- Ito ang system na kinokontrol. Ang system na ito ay maaaring ma-modelo sa matematika sa S o Z Domain. Ang mga system ay maaaring sa ika-n pagkakasunud-sunod ngunit para sa isang taong nagsisimula sa kontrol ng isang unang sistema ng pagkakasunud-sunod ay dapat na ipalagay na ito ay mas madali upang makalkula. Ang ay isang Plethora ng impormasyon sa pagmomodelo system na matatagpuan sa online. Depende sa oras ng pag-sample ng sensor ang modelo ng system ay alinman sa discrete o tuloy-tuloy. Ito ay may isang matinding epekto sa controller kaya pinayuhan ang pagsasaliksik sa pareho.

d- Ito ang kaguluhan na idinagdag sa system. Ang kaguluhan ay nasa labas ng mga puwersa na kung saan ang modelo ng system ay hindi isinasaalang-alang. Ang isang madaling halimbawa nito ay magiging isang drone kung saan nais mong mag-hover sa 5 metro isang pag-agos ng hangin ay dumating at patak ang drone na 1 metro ang controller ay muling iposisyon ang drone pagkatapos ng kaguluhan ay nangyari. Ito ay kilala bilang kaguluhan dahil ang hangin ay hindi mauulit kaya hindi ito maaaring i-modelo.

Upang ibagay ang kontroler mayroong maraming mga patakaran upang pangalanan ngunit ang ilang mga mahusay na kung saan ako nagsimula ay sina Cohen Coon at Zieger Nichols.

Ang pagmomodelo ng isang sistema sa pangkalahatan ay ang pinakamahalagang bahagi nang walang tumpak na modelo na ang controller na idinisenyo ay hindi tutugon ayon sa ninanais.

Dapat mayroong sapat na impormasyon dito upang maunawaan kung paano gumagana ang controller kasama ang ilang indibidwal na pagsasaliksik at ang code sa ibaba ng isang controller na may anumang kumbinasyon ng tatlong mga term na maaaring ipatupad.

Hakbang 2: Pagsulat ng PID Code

Pagsulat ng PID Code
Pagsulat ng PID Code

Ang pangunahing prinsipyo ng code na natagpuan sa sumusunod na link ay kinuha at binago dahil ang code na ito ay hindi gumana ngunit marami sa mga prinsipyong tama na nagbigay ng magandang panimulang punto. Orihinal na PID Ang code ay mayroong maraming mga error tulad ng

  • Patuloy na Pagpapatakbo - ang taga-kontrol ay nagmamana nang discrete kaya't dapat mai-set up ang controller upang makalkula lamang ang lahat ng 3 mga termino kapag magagamit ang isang bagong input. Ang gawain sa paligid para sa simulasi na ito ay upang suriin kung ang input ay nagbago mula noong huling oras. gumagana lamang ito upang gayahin ang code na gumagana nang tama.
  • Ang Sample Time ay walang epekto sa integral at derivative term - Hindi rin isinasaalang-alang ng controller ang oras kung saan kinuha ang sample, kaya't ang isang halagang tinatawag na divider para sa oras ay naidagdag upang matiyak na ang integral at derivative term ay tumatakbo sa tamang agwat
  • Ang error ay maaaring maging postive lamang - kapag kinakalkula ang error ay mayroon ding isang problema dahil ang error ay hindi maaaring maging negatibong kahulugan kapag ang signal ng feedback ay nalampasan ang halaga ng sanggunian na ang controller ay magpapatuloy na madagdagan ang output kapag dapat itong bumababa.
  • Makakuha ng mga halaga para sa 3 mga termino ay integer - sa aking karanasan palagi kong natagpuan na ang mga halaga para sa 3 mga termino sa controller na palaging magiging mga lumulutang na numero ng numero dahil sa Basys 3 na walang numero ng lumulutang na puntos ang mga halaga ay dapat bigyan ng isang numerong halaga at isang halaga ng denominator na magsisilbing isang gawain sa malampasan ang problemang ito.

Ang code ay naka-attach sa ibaba mayroong pangunahing katawan ng code at isang testbench upang gayahin ang code. Naglalaman ang zip folder ng code at testbench na nasa Vivado upang mabuksan ito upang makatipid ng oras. mayroon ding isang simulate na pagsubok ng code na nagpapakita ng output ng pagsubaybay sa sanggunian na nagpapatunay na ang code ay gumagana tulad ng inilaan.

Hakbang 3: Paano Magbabago para sa Iyong System

Una hindi lahat ng mga sistema ay pareho dapat isa-aralan ang mga input at output ng system. Sa aking kaso ang output ng aking kalesa na nagbigay sa akin ng isang halaga para sa posisyon ay isang analog signal at ang input mula sa system ay isang PWM signal. Ibig sabihin ay kinakailangan ng isang pag-convert ng ADC. Sa kasamaang palad ang Basys 3 ay may built in ADC kaya't wala itong problema ang output ng IR sensor ay dapat na mai-scale pababa sa 0V-1V dahil ito ang maximum na saklaw ng onboard ADC. Ginawa ito gamit ang isang boltahe divider circuit na ginawa mula sa 1k resistors na na-set up bilang isang 3k risistor sa serye na may 1k risistor. Ang analog signal ay nasa loob na ng saklaw ng ADC. Ang input ng PWM sa fan ay direktang hinihimok ng output ng isang PMOD port sa Basys 3.

Hakbang 4: Pagkuha ng kalamangan ng I / O sa Basys 3

Mayroong isang bilang ng I / O sa Basys 3 na pinapayagan para sa mas madaling pag-debug kapag tumatakbo ang code. ang I / O ay na-set up bilang mga sumusunod.

  • Pitong Segment Display - Ginamit ito upang ipakita ang halaga ng sanggunian at halaga sa ADC sa volts. Ang unang dalawang digit ng pitong segment na pagpapakita ay nagpapakita ng dalawang digit pagkatapos ng decimal na lugar ng halaga ng ADC dahil ang halaga ay nasa pagitan ng 0-1V. Ang mga digit na tatlo at apat sa pitong pagpapakita ng segment ay ipinapakita ang halaga ng sanggunian sa volts ipinapakita rin nito ang unang dalawang digit pagkatapos ng decimal na lugar dahil ang saklaw ay nasa pagitan din ng 0-1V.
  • 16 LEDs - Ginamit ang mga LED upang ipakita ang halaga ng output upang matiyak na ang output ay saturating at ang output ay nagbabago nang tama.

Hakbang 5: Ingay sa Output ng IR Sensor

Mayroong ingay sa output ng sensor upang ayusin ang problemang ito ng isang pag-average ng bloke na inilagay dahil sapat na ito at nangangailangan ng napakakaunting trabaho upang makumpleto.

Hakbang 6: Pangkalahatang Layout ng Code

Pangkalahatang Layout ng Code
Pangkalahatang Layout ng Code

Mayroong isang piraso ng code na hindi pa napaguusapan. Ang code na ito ay isang divider ng orasan na tinatawag na gatilyo. ang kaunting code na ito ay nagpapalitaw ng sample ng ADC code. ang ADC code ay tumatagal ng maximum na 2us upang makumpleto sa gayon pagkatapos ay ang kasalukuyang input at ang dating input ay na-average. 1us pagkatapos ng average na ito, kinakalkula ng controller ang mga term ng P, I at D. ang higit sa lahat ng layout ng code at interface ay ipinapakita sa pansamantala diagram ng koneksyon.

Hakbang 7: Pagsubok

Pagsubok
Pagsubok

Ang code ay na-deploy sa Basys 3 at naitala ang sumusunod na tugon. ang sanggunian ay nagbago sa pagitan ng 2 halaga. alin ang kaso sa nakumpletong code ng proyekto na naka-attach. Ipinapakita ng naka-attach na video ang tugon na ito sa real-time. Ang mga oscillation ay mas mabilis na mabulok sa itaas na bahagi ng tubo dahil ang controller ay idinisenyo para sa rehiyon na ito ngunit ang controller ay hindi gagana pati na rin pababa sa tubo dahil ang sistema ay hindi linear.

Hakbang 8: Mga Pagbabago upang Mapabuti ang Project

Ang proyekto ay nagtrabaho tulad ng inilaan ngunit may ilang mga pagbabago na kung saan ay nais kong gawin kung ang proyekto ay maaaring pinalawig.

  • Ipatupad ang digital filter upang ganap na makapagpahina ng ingay
  • i-set up ang ADC code, Average code at Integration code upang magsunud-sunod nang sunud-sunod.
  • gumamit ng ibang sensor para sa feedback dahil ang di-linear na tugon ng sensor na ito ay sanhi ng iba't ibang mga problema sa proyektong ito ngunit higit pa sa control side at hindi sa coding side.

Hakbang 9: Dagdag na Trabaho

Sa kurso ng tag-init nagsulat ako ng code para sa isang cascade controller at ipinatupad ang mga pagbabago na inirerekumenda ko para sa solong loop PID controller.

Ang mga pagbabago na ginawa sa regular na PID controller

· Ang template ng filter ng FIR na ipinatupad ang mga coefficients ay dapat mabago upang makamit ang nais na dalas ng cut-off. Ang kasalukuyang pagpapatupad ay isang 5-tap fir filter.

· Ang oras ng code ay na-setup upang ang filter ay magpalaganap ng bagong sample sa pamamagitan at kapag handa na ang output ang integral na term ay ma-trigger na nangangahulugang ang code ay maaaring mabago upang gumana sa iba't ibang mga agwat ng oras na may mas kaunting pagsisikap na baguhin code

· Ang pangunahing para sa loop kung saan hinihimok ang programa ay nabawasan din dahil ito para sa loop ay tumagal ng 7 cycle dati ay pinabagal nito ang maximum na bilis ng operating ng Controller ngunit sa pamamagitan ng pagbawas ng para sa loop t 4 na estado ay nangangahulugan ito na ang pangunahing bloke ng code ay maaaring gumana sa loob ng 4 na cycle ng orasan.

Pagsubok

Ang tagakontrol na ito ay nasubok at naisagawa tulad ng inilaan na hindi ako kumuha ng mga larawan ng patunay na ito dahil ang bahaging ito ng proyekto ay upang mapanatiling aktibo ang isip. Ang code para sa pagsubok pati na rin ang testbench ay magagamit dito upang masubukan mo ang programa bago ipatupad.

Bakit gumagamit ng isang cascade controller

Kinokontrol ng isang cascade controller ang dalawang bahagi ng system. Sa kasong ito ang isang cascade controller ay magkakaroon ng isang panlabas na loop na kung saan ay isang tagakontrol na mayroong feedback mula sa IR sensor. Ang panloob na loop ay may feedback sa anyo ng oras sa pagitan ng mga pulso mula sa tachometer na tumutukoy sa bilis ng pag-ikot ng fan. Sa pamamagitan ng pagpapatupad ng kontrol, ang isang mas mahusay na tugon ay maaaring makamit sa labas ng system.

Paano gumagana ang cascade controller?

Ang panlabas na loop ng controller ay magpapakain ng isang halaga para sa oras sa pagitan ng mga pulso sa panloob na loop controller. Ang tagakontrol na ito ay magpapataas o magbabawas ng cycle ng tungkulin upang makamit ang nais na oras sa pagitan ng mga pulso.

Pagpapatupad ng mga pagbabago sa rig

Sa kasamaang palad, hindi ko maipatupad ang mga pagbabagong ito sa rig dahil wala akong access dito. Sinubukan ko ang binagong solong loop controller na gumagana tulad ng inilaan. Hindi ko pa nasubok ang cascade controller. Sigurado ako na gagana ang controller ngunit maaaring mangailangan ng kaunting pagbabago upang gumana tulad ng nilalayon.

Pagsubok

Hindi ko masubukan ang controller dahil mahirap na gayahin ang dalawang mapagkukunan ng pag-input. Ang tanging problema na nakikita ko sa cascade controller ay na habang ang panlabas na loop ay sumusubok na dagdagan ang setpoint na ibinigay sa panloob na loop na ang isang mas malaking set point ay talagang isang mas mababang RPS para sa fan ngunit madali itong maaayos. kunin ang set point mula sa max na halaga ng setpoint signal (4095 - setpoint - tacho_result).

Hakbang 10: Konklusyon

Sa pangkalahatan ang mga pagpapaandar ng proyekto tulad ng nilalayon ko nang magsimula ang proyekto kaya't nasisiyahan ako sa resulta. Salamat sa paglalaan ng oras upang basahin ang aking pagtatangka sa pagbuo ng isang PID controller sa VHDL. Kung sinumang nagtangkang magpatupad ng ilang pagkakaiba-iba nito sa isang system at nangangailangan ng kaunting pagtitiwala para maunawaan ang code makipag-ugnay sa akin ay tutugon ako sa lalong madaling panahon. Sinumang sumubok ng labis na gawain na kung saan ay nai-reklamo ngunit hindi ipinatupad mangyaring makipag-ugnay sa akin para sa anumang kamay. Lubos kong pahalagahan kung ang sinumang nagpapatupad nito ay ipaalam sa akin kung paano ito pupunta.

Inirerekumendang: