Turinys:

PID temperatūros reguliatorius: 7 žingsniai
PID temperatūros reguliatorius: 7 žingsniai

Video: PID temperatūros reguliatorius: 7 žingsniai

Video: PID temperatūros reguliatorius: 7 žingsniai
Video: Как подключить термостат на циркуляционный насос? 2024, Liepa
Anonim
PID temperatūros reguliatorius
PID temperatūros reguliatorius

Mano draugas kuria plastikinį ekstruderį plastiko perdirbimui (https://preciousplastic.com). Jam reikia kontroliuoti ekstruzijos temperatūrą. Tuo tikslu jis naudoja purkštukų šildytuvo juostą. Šiame purkštuke yra termoelementas ir šildymo įrenginys, leidžiantis išmatuoti temperatūrą ir galiausiai pasiekti norimą temperatūrą (sukurti atgalinio veikimo kilpą).

Kai išgirdau, kad keli PID valdikliai turi valdyti visas šias purkštukų šildytuvo juostas, iš karto kilo noras pabandyti pasigaminti savo.

1 žingsnis: įrankiai ir medžiagos

Įrankiai

  • lituoklis, litavimo viela ir srautas
  • pincetas
  • frezavimo staklės (cheminis ėsdinimas taip pat galimas PCB prototipams kurti) (taip pat galite užsisakyti PCB su mano erelio failu)
  • termometras (kalibravimui)
  • arduino (bet kokio tipo) arba AVR programuotojas
  • FTDI serijinis TTL-232 USB kabelis
  • lazerinis pjoviklis (neprivaloma)
  • multimetras (ommetras ir voltmetras)

Medžiaga

  • Bakelito vienos pusės varinė plokštė (mažiausiai 60*35 mm) (aš sugadinau savo pjūklą, pirkdamas stiklo pluoštą, todėl būkite atsargūs: bakelitas)
  • „Attiny45“mikrovaldiklis
  • LM2940IMP-5 įtampos reguliatorius
  • AD8605 operacinis stiprintuvas
  • NDS356AP tranzistorius
  • krūva rezistorių ir kondensatorių (turiu knygą SMT 0603 adafruit)
  • 230V-9V kintamosios srovės transformatorius
  • 1N4004 diodai
  • kietojo kūno relė
  • nagų lakas (neprivaloma)

2 žingsnis: išgraviruokite PCB

Išgraviruokite PCB
Išgraviruokite PCB
Išgraviruokite PCB
Išgraviruokite PCB
Išgraviruokite PCB
Išgraviruokite PCB

PCB frezavimui naudojau transformuotą „Proxxon MF70 CNC“ir kūginį galą. Manau, kad bet koks graviravimo pabaigos galas tiktų. „Gcode“failą tiesiogiai sukūrė „Eagle“ir „pcb-gcode“papildinys. Tik trys praėjimai buvo atlikti siekiant užtikrinti gerą maršruto atskyrimą, bet nepraleidžiant valandų vario malimui. Kai PCB išėjo iš CNC staklių, maršrutą išvaliau pjaustytuvu ir išbandžiau multimetru.

Parametrai: padavimo greitis 150 mm/min., Gylis 0,2 mm, sukimosi greitis 20 000 t/min

3 žingsnis: lituokite komponentus

Lituokite komponentus
Lituokite komponentus

Naudodami pincetą ir lituoklį, sudėkite komponentus į reikiamas vietas ir lituokite naudodami srautą (tai padeda) ir pradėkite nuo mažiausių komponentų. Dar kartą patikrinkite multimetru, ar nėra trumpojo jungimo ar nesujungtų elementų.

Stiprintuvo stiprinimą galite pasirinkti pasirinkdami norimą rezistorių (stiprinimas = (R3+R4)/R4). Aš paėmiau 1M ir 2.7k, taigi mano atveju pelnas yra maždaug 371. Aš negaliu žinoti tikslios vertės, nes naudoju 5% tolerancijos rezistorių.

Mano termopora yra J tipo. Tai reiškia, kad jis suteikia 0,05 mV kiekvienam laipsniui. Su padidėjimu 371, aš gaunu 18,5 mV vienam laipsniui iš stiprintuvo išvesties (0,05*371). Noriu išmatuoti apie 200 ° C, todėl stiprintuvo išėjimas turėtų būti apie 3,7 V (0,0185*200). Rezultatas neturėtų viršyti 5 V, nes naudoju 5 V etaloninę įtampą (išorinė).

Vaizdas atitinka pirmąją (neveikiančią) mano sukurtą versiją, tačiau principas yra tas pats. Šioje pirmoje versijoje aš panaudojau relę ir įdėjau ją tiesiai į lentos vidurį. Kai tik perjungiau aukštą įtampą, turėjau šuolių, dėl kurių valdiklis buvo paleistas iš naujo.

4 žingsnis: užprogramuokite mikrovaldiklį

Užprogramuokite mikrovaldiklį
Užprogramuokite mikrovaldiklį

Naudodami arduino, kaip nurodyta šioje instrukcijoje: https://www.instructables.com/id/How-to-Program-a… galite įkelti kodą.

„Attiny 45“programavimui naudojau profesionalų niekučių su FTDI-USB kabeliu, tačiau šis metodas yra lygiavertis. Tada aš prijungiau kaištį PB1 ir GDN tiesiai į FTDI-USB kabelio RX ir GND, kad gaučiau serijos duomenis ir galėčiau derinti.

Arduino eskize visus parametrus turėtumėte nustatyti iki nulio (P = 0, I = 0, D = 0, K = 0). Jie bus nustatyti derinant.

Jei nematote dūmų ar deginamo kvapo, galite pereiti prie kito žingsnio!

5 žingsnis: Surinkimas ir kalibravimas

Surinkimas ir kalibravimas
Surinkimas ir kalibravimas
Surinkimas ir kalibravimas
Surinkimas ir kalibravimas

Įspėjimas: niekada nejunkite maitinimo šaltinio ir 5 V iš programuotojo vienu metu! Priešingu atveju pamatysite dūmus, kuriuos ėmiau ankstesniame žingsnyje. Jei nesate tikri, kad sugebėsite to laikytis, galite tiesiog nuimti programuotojo 5V kaištį. Leidau, nes man buvo patogiau programuoti valdiklį be maitinimo šaltinio ir išbandyti valdiklį, kol šildytuvas nešildo kaip pašėlęs prieš mano veidą.

Dabar galite susieti stiprintuvo termoporą ir pamatyti, ar ką nors matuojate (laikykitės poliškumo). Jei jūsų šildymo sistema yra kambario temperatūros, turėtumėte išmatuoti nulį. Šildant rankomis jau turėtų atsirasti keletas mažų vertybių.

Kaip skaityti šias vertybes? Tiesiog prijunkite kaiščius PB1 ir GDN tiesiai prie FTDI-USB kabelio RX ir GND ir atidarykite arduino nuoseklųjį monitorių.

Kai valdiklis paleidžiamas, jis siunčia raudoną reikšmę vidiniu lusto termometru. Taip aš kompensuoju temperatūrą (nenaudodamas tam skirto lusto). Tai reiškia, kad jei operacijos metu temperatūra pasikeis, į ją nebus atsižvelgiama. Ši vertė labai skiriasi nuo vieno lusto iki kito, todėl eskizo pradžioje ji turi būti įvesta rankiniu būdu į REFTEMPERATURE apibrėžimą.

Prieš prijungdami kietojo kūno relę, patikrinkite, ar išėjimo įtampa yra jūsų relės palaikomame diapazone (mano atveju nuo 3V iki 25V, grandinė sukuria apie 11V). (gerbti poliškumą)

Šios vertės yra ne temperatūra laipsniais arba Farenheitu, bet analoginio skaitmeninio konvertavimo rezultatas, todėl jos svyruoja nuo 0 iki 1024. Aš naudoju 5 V etaloninę įtampą, taigi, kai stiprintuvo išėjimas yra arti 5 V, konversijos rezultatas yra beveik 1024.

6 žingsnis: PID derinimas

PID derinimas
PID derinimas

Turiu paminėti, kad nesu kontrolės ekspertas, todėl radau keletą man tinkančių parametrų, tačiau negarantuoju, kad tai tinka visiems.

Pirmiausia turiu paaiškinti, ką programa daro. Įdiegiau tam tikrą programinės įrangos PWM: skaitiklis didinamas kiekvienos iteracijos metu, kol pasiekia 20'000 (tokiu atveju atstatomas į 0). Delsimas ciklą sulėtina iki milisekundės. Išrankiausi iš mūsų pastebės, kad kontrolinis laikotarpis yra apie 20 sekundžių. Kiekviena kilpa prasideda nuo skaitiklio ir slenksčio palyginimo. Jei skaitiklis yra žemesnis už slenkstį, aš išjungiu relę. Jei jis didesnis, įjungiu. Taigi aš reguliuoju galią nustatydamas slenkstį. Slenksčio skaičiavimas atliekamas kas sekundę.

Kas yra PID valdiklis?

Kai norite valdyti procesą, turite matuojamą vertę (analogData), norimą pasiekti vertę (tempCommand) ir būdą, kaip pakeisti to proceso būseną (seuil). Mano atveju tai daroma naudojant slenkstį („seuil“prancūziškai, bet daug lengviau parašyti ir ištarti (ištarti „sey“)), kuris nustato, kiek laiko jungiklis bus įjungtas ir išjungtas (darbo ciklas), taigi ir energijos kiekis įdėti į sistemą.

Visi sutinka, kad jei esate toli nuo norimo pasiekti taško, galite padaryti didelę korekciją, o jei esate arti, reikia nedidelės korekcijos. Tai reiškia, kad taisymas yra klaidos funkcija (error = analogData-tempComand). Taip, bet kiek? Tarkime, kad klaidą padauginame iš koeficiento (P). Tai yra proporcingas valdiklis. Mechaniškai spyruoklė daro proporcingą korekciją, nes spyruoklės jėga yra proporcinga spyruoklės suspaudimui.

Jūs tikriausiai žinote, kad jūsų automobilio pakabos susideda iš spyruoklės ir amortizatoriaus (amortizatoriaus). Šio amortizatoriaus vaidmuo yra išvengti jūsų automobilio atšokimo kaip batutas. Išvestinis terminas būtent tai ir daro. Kaip slopintuvas jis sukuria reakciją, proporcingą klaidos kitimui. Jei klaida greitai keičiasi, korekcija sumažinama. Tai sumažina svyravimus ir viršijimus.

Integratoriaus terminas yra čia, kad būtų išvengta nuolatinės klaidos (ji integruoja klaidą). Konkrečiai, tai skaitiklis, kuris padidinamas arba sumažinamas, jei klaida yra teigiama arba neigiama. Tada korekcija padidinama arba sumažinama pagal šį skaitiklį. Jis neturi jokio mechaninio atitikmens (ar turite idėją?). Galbūt yra panašus efektas, kai atvedate automobilį į servisą, o mechanikas pastebi, kad amortizatoriai sistemingai per maži, ir nusprendžia pridėti dar šiek tiek išankstinio įkrovimo.

Visa tai apibendrinta formule: korekcija = P*e (t)+I*(de (t)/dt)+D*integralas (e (t) dt), P, I ir D yra trys parametrai, turintys būti sureguliuotas.

Savo versijoje pridėjau ketvirtą terminą, kuris yra „a priori“(tiekimo į priekį) komanda, reikalinga tam tikrai temperatūrai palaikyti. Aš pasirinkau proporcingą komandą temperatūrai (tai geras apytikslis šildymo nuostolių įvertinimas. Tiesa, jei nepaisysime radiacijos nuostolių (T^4)). Naudojant šį terminą, integratorius tampa lengvesnis.

Kaip rasti šiuos parametrus?

Aš išbandžiau įprastą metodą, kurį galite rasti „google“„pid tuning Temperature Controller“, bet man buvo sunku jį pritaikyti ir galiausiai pasirinkau savo metodą.

Mano metodas

Pirmiausia nustatykite P, I, D į nulį, o „K“ir „tempCommand“- į mažas reikšmes (pavyzdžiui, K = 1 ir tempCommand = 100). Įjunkite sistemą ir palaukite, palaukite, palaukite… kol temperatūra stabilizuosis. Šiuo metu jūs žinote, kad esant „seuil“1*100 = 100, temperatūra linkusi į X. Taigi jūs žinote, kad komandą 100/20000 = 5% galite pasiekti X. Tačiau tikslas yra pasiekti 100 nes tai yra „tempCommand“. Naudodami proporciją galite apskaičiuoti K, kad pasiektumėte 100 (tempCommand). Atsargumo dėlei naudojau mažesnę vertę nei apskaičiuota. Tiesą sakant, lengviau šildyti nei atvėsti. Taigi pagaliau

Kfinalas = K*tempCommand*0.9/X

Dabar, kai paleidžiate valdiklį, jis natūraliai turėtų būti linkęs į norimą temperatūrą, tačiau tai tikrai lėtas procesas, nes kompensuojate tik šildymo nuostolius. Jei norite pereiti nuo vienos temperatūros prie kitos, sistemoje reikia pridėti tam tikros šilumos energijos. P nustato, kokiu greičiu į sistemą įvedate energiją. Nustatykite P mažą reikšmę (pvz., P = 10). Išbandykite (beveik) šaltą paleidimą. Jei neturite didelio perviršio, pabandykite su dviguba (P = 20), jei dabar turite vieną bandyti kažką tarp. Jei viršijote 5%, tai gerai.

Dabar padidinkite D, kol nebus viršijimo. (visada bandymai, aš žinau, kad tai nėra mokslas) (aš paėmiau D = 100)

Tada pridėkite I = P^2/(4*D) (Jis pagrįstas Ziegler-Nicholts metodu, jis turėtų garantuoti stabilumą) (man I = 1)

Kodėl visi šie išbandymai, kodėl ne mokslas?

Aš žinau, aš žinau! Yra didžiulė teorija, ir jūs galite apskaičiuoti perdavimo funkciją ir Z transformaciją bei blablabla. Norėjau sukurti vieningą šuolį, tada 10 minučių įrašyti reakciją ir parašyti perdavimo funkciją, o kas tada? Nenoriu daryti aritmetikos su 200 terminų. Taigi, jei kas nors turi idėją, aš mielai išmoksiu, kaip tai padaryti tinkamai.

Taip pat pagalvojau apie savo geriausius draugus Zieglerį ir Nicholsą. Jie man liepė rasti P, kurie generuoja svyravimus, ir tada taikyti savo metodą. Niekada neradau šių svyravimų. Vienintelis dalykas, kurį radau, buvo oooooooovershot į dangų.

Ir kaip modeliuoti tai, kad šildymas nėra tas pats procesas kaip vėsinimas?

Aš tęsiu savo tyrimus, bet dabar supakuokime jūsų valdiklį, jei esate patenkinti pasiektu našumu.

7 žingsnis: supakuokite

Supakuokite
Supakuokite
Supakuokite
Supakuokite
Supakuokite
Supakuokite
Supakuokite
Supakuokite

Turėjau prieigą prie Maskvos fablab (fablab77.ru) ir jų lazerinio pjaustytuvo ir esu dėkingas. Ši galimybė leido man sukurti gražų paketą, kurį vienu paspaudimu sugeneravo įskiepis, gaminantis norimų matmenų dėžutes (h = 69 l = 66 d = 42 mm). Viršuje yra dvi skylės (skersmuo = 5 mm), skirtos šviesos diodui ir jungikliui, ir viena skylė šone, skirta programavimo kaiščiams. Transformatorių pritvirtinau dviem medžio gabalėliais, o PCB - dviem varžtais. Gnybtų bloką litavau prie laidų ir prie PCB, pridėjau jungiklį tarp transformatoriaus ir PCB maitinimo įvado, nuosekliai prijungiau laidą prie PBO su rezistoriumi (300 omų). Aš taip pat naudojau nagų laką elektros izoliacijai. Po paskutinio bandymo priklijavau dėžutę. Viskas.

Rekomenduojamas: