Cuprins:

Controler de temperatură PID: 7 pași
Controler de temperatură PID: 7 pași

Video: Controler de temperatură PID: 7 pași

Video: Controler de temperatură PID: 7 pași
Video: Control de Temperatura Usando PID: Controlador Proporcional-Integral. 2024, Septembrie
Anonim
Controler de temperatură PID
Controler de temperatură PID

Prietenul meu construiește un extruder de plastic pentru reciclarea plasticului (https://preciousplastic.com). El trebuie să controleze temperatura de extrudare. În acest scop, el folosește o bandă de încălzire a duzelor. În această duză, există un termocuplu și o unitate de încălzire care ne permit să măsurăm temperatura și să ajungem în cele din urmă la temperatura dorită (faceți o buclă de retroacțiune).

Când am auzit că are nevoie de mai multe controlere PID pentru a controla toate aceste benzi de încălzire a duzelor, mi-a dat imediat dorința de a încerca să ne facem propriile noastre.

Pasul 1: Instrumente și material

Instrumente

  • fier de lipit, sârmă de lipit și flux
  • penseta
  • mașină de frezat (gravarea chimică este posibilă și pentru prototiparea PCB-urilor) (puteți comanda PCB-ul cu fișierul meu vultur)
  • termometru (pentru calibrare)
  • arduino (orice tip) sau un programator AVR
  • Cablu USB serial FTDI TTL-232
  • tăietor cu laser (opțional)
  • multimetru (ohmmetru și voltmetru)

Material

  • Placă de cupru cu o singură parte din bakelită (minimum 60 * 35 mm) (mi-am distrus ferăstrăul cumpărând unul din fibră de sticlă, așa că fii atent: Bakelita)
  • Microcontroler Attiny45
  • LM2940IMP-5 regulator de tensiune
  • Amplificator operațional AD8605
  • Tranzistor NDS356AP
  • o grămadă de rezistențe și condensatoare (am cartea SMT 0603 adafruit)
  • Transformator AC-DC de 230V-9V
  • 1N4004 diode
  • releu de stare solidă
  • oja (opțional)

Pasul 2: Gravați PCB-ul

Gravați PCB-ul
Gravați PCB-ul
Gravați PCB-ul
Gravați PCB-ul
Gravați PCB-ul
Gravați PCB-ul

Am folosit transformatorul CNC Proxxon MF70 transformat și un bit final conic pentru a măcina PCB-ul. Cred că orice bit final de gravură ar funcționa. Fișierul Gcode a fost generat direct de eagle și de pluginul pcb-gcode. Doar trei treceri au fost făcute pentru a asigura o bună separare a traseului, dar fără a petrece ore întregi măcinând tot cuprul. Când PCB-ul a ieșit din mașina CNC, am curățat traseele cu un tăietor și le-am testat cu un multimetru.

Parametri: viteză de alimentare 150mm / min, adâncime 0,2mm, viteză de rotație 20'000 t / min

Pasul 3: lipiți componentele

Lipiți componentele
Lipiți componentele

Cu penseta și fierul de lipit, așezați componentele în locurile potrivite și lipiți-le folosind flux (ajută) și începând cu cele mai mici componente. Din nou, verificați cu un multimetru dacă nu aveți niciun scurtcircuit sau elemente neconectate.

Puteți alege câștigul amplificatorului alegând rezistența dorită (câștig = (R3 + R4) / R4). Am luat 1M și 2.7k, deci în cazul meu câștigul este de aproximativ 371. Nu știu exact valoarea, deoarece folosesc rezistență de toleranță de 5%.

Termocuplul meu este de tip J. Înseamnă că dă 0,05mV pentru fiecare grad. Cu câștigul de 371, obțin 18,5mV pe grad de la ieșirea amplificatorului (0,05 * 371). Vreau să măsoară în jur de 200 ° C, astfel încât ieșirea amplificatorului să fie de aproximativ 3,7 V (0,0185 * 200). Rezultatul nu trebuie să depășească 5V deoarece folosesc tensiunea de referință 5V (externă).

Imaginea corespunde primei versiuni (care nu funcționează) pe care am făcut-o, dar principiul este același. În această primă versiune, am folosit un releu și l-am pus chiar în mijlocul plăcii. De îndată ce am trecut cu tensiune înaltă, am avut vârfuri care au făcut ca controlerul să repornească.

Pasul 4: Programați microcontrolerul

Programați microcontrolerul
Programați microcontrolerul

Folosind un arduino ca în acest instructables: https://www.instructables.com/id/How-to-Program-a… puteți încărca codul.

Am folosit un bibelou profesional cu un cablu FTDI-USB pentru a programa Attiny 45, dar această metodă este echivalentă. Am conectat apoi pinul PB1 și GDN direct în RX și GND ale cablului FTDI-USB pentru a primi datele seriale și pentru a putea depana.

Ar trebui să puneți toți parametrii la zero (P = 0, I = 0, D = 0, K = 0) în schița arduino. Acestea vor fi setate în timpul etapei de reglare.

Dacă nu vedeți fum sau miros ars, puteți să treceți la pasul următor!

Pasul 5: Asamblarea și calibrarea

Asamblarea și calibrarea
Asamblarea și calibrarea
Asamblarea și calibrarea
Asamblarea și calibrarea

Atenție: Nu conectați niciodată sursa de alimentare și 5V de la programator în același timp! Altfel veți vedea fumul pe care îl luam în pasul anterior. Dacă nu sunteți sigur că veți putea respecta acest lucru, puteți elimina pur și simplu pinul de 5v pentru programator. L-am lăsat pentru că mi-a fost mai convenabil să programez controlerul fără sursă de alimentare și să testez controlerul fără a avea încălzitorul să se încălzească ca nebun în fața mea.

Acum puteți ramifica termocuplul pe amplificator și puteți vedea dacă măsurați ceva (respectați polaritatea). Dacă sistemul dvs. de încălzire este la temperatura camerei, ar trebui să măsurați zero. Încălzirea cu mâna ar trebui să ducă deja la valori mici.

Cum să citiți aceste valori? Pur și simplu conectați pinii PB1 și GDN direct la RX și GND ale cablului FTDI-USB și deschideți monitorul serial arduino.

Când pornește controlerul, acesta trimite valoarea roșie de către termometrul intern al cipului. Astfel compensez temperatura (fără a folosi un cip dedicat). Înseamnă că, dacă temperatura se schimbă în timpul operației, nu va fi luată în considerare. Această valoare este foarte diferită de la un cip la altul, deci trebuie introdusă manual în definiția REFTEMPERATURĂ la începutul schiței.

Înainte de a conecta releul în stare solidă, verificați dacă tensiunea de ieșire este în intervalul acceptat de releul dvs. (3V la 25V în cazul meu, circuitul generează în jur de 11V). (respectă polaritatea)

Aceste valori nu sunt temperaturi în grade sau Fahrenheit, ci rezultatul conversiei analogice în digitale, astfel încât acestea variază între 0 și 1024. Folosesc tensiunea de referință de 5V astfel, atunci când ieșirea amplificatorului este aproape de 5V, rezultatul conversiei este aproape de 1024.

Pasul 6: Reglare PID

Reglare PID
Reglare PID

Trebuie să menționez că nu sunt expert în control, așa că am găsit câțiva parametri care funcționează pentru mine, dar nu garantez că funcționează pentru toată lumea.

În primul rând, trebuie să explic ce face programul. Am implementat un fel de software PWM: un contor este incrementat la fiecare iterație până când ajunge la 20'000 (caz în care este resetat la 0). O întârziere încetinește bucla la o milisecundă. Cei mai inteligenți dintre noi vor observa că perioada de control este de aproximativ 20 de secunde. Fiecare buclă începe cu o comparație între contor și un prag. Dacă contorul este mai mic decât pragul, atunci opresc releul. Dacă este mai mare, îl pornesc. Așa că reglez puterea stabilind pragul. Calculul pragului are loc în fiecare secundă.

Ce este un controler PID?

Când doriți să controlați un proces, aveți valoarea pe care o măsurați (analogData), valoarea pe care doriți să o atingeți (tempCommand) și o modalitate de a modifica starea acelui proces (seuil). În cazul meu se face cu pragul („seuil” în franceză, dar mult mai ușor de scris și pronunțat (pronunța „sey”)) care determină cât timp va fi pornit și oprit comutatorul (ciclul de funcționare), astfel cantitatea de energie pus în sistem.

Toată lumea este de acord că, dacă ești departe de punctul în care vrei să ajungi, poți face o mare corecție și dacă ești aproape, este nevoie de o mică corecție. Înseamnă că corectarea este o funcție a erorii (error = analogData-tempComand). Da, dar cât? Să presupunem că înmulțim eroarea cu un factor (P). Acesta este un controlor proporțional. Mecanic, un arc face o corecție proporțională, deoarece forța arcului este proporțională cu compresia arcului.

Probabil știți că suspensiile mașinii dvs. constau dintr-un arc și un amortizor (amortizor). Rolul acestui amortizor este de a evita mașina să revină ca o trambulină. Exact asta face termenul derivat. Ca amortizor, generează o reacție care este proporțională cu variația erorii. Dacă eroarea se schimbă rapid, corecția este redusă. Reduce oscilațiile și depășirile.

Termenul integrator este aici pentru a evita erorile permanente (integrează eroarea). Concret, este un contor care este incrementat sau decrementat dacă eroarea este pozitivă sau negativă. Apoi corecția este mărită sau coborâtă în funcție de acest contor. Nu are echivalență mecanică (sau aveți o idee?). Poate că există un efect similar atunci când vă aduceți mașina în service și mecanicul observă că șocurile sunt sistematic prea mici și decideți să adăugați încă o preîncărcare.

Toate acestea sunt rezumate în formula: corecție = P * e (t) + I * (de (t) / dt) + D * integral (e (t) dt), P, I și D fiind trei parametri care au să fie acordat.

În versiunea mea am adăugat un al patrulea termen care este comanda „a priori” (feed forward) necesară pentru a menține o anumită temperatură. Am ales o comandă proporțională cu temperatura (este o bună aproximare a pierderilor de încălzire. Este adevărat dacă neglijăm pierderile de radiații (T ^ 4)). Cu acest termen, integratorul este mai ușor.

Cum se găsesc acești parametri?

Am încercat o metodă convențională pe care o puteți găsi prin googling „regulator de temperatură pid tuning”, dar mi s-a părut dificil de aplicat și am ajuns cu propria metodă.

Metoda mea

Mai întâi puneți P, I, D la zero și puneți "K" și "tempCommand" la valori mici (de exemplu K = 1 și tempCommand = 100). Porniți sistemul și așteptați, așteptați, așteptați … până când temperatura se stabilizează. În acest moment știți că, cu un "seuil" de 1 * 100 = 100, temperatura tinde la X. Deci, știți că, cu o comandă de 100/20000 = 5% puteți ajunge la X. Dar obiectivul este de a ajunge la 100 deoarece este „tempCommand”. Folosind o proporție puteți calcula K pentru a ajunge la 100 (tempCommand). Prin precauție am folosit o valoare mai mică decât cea calculată. Într-adevăr, este mai ușor să se încălzească mai mult decât să se răcească. Deci, în sfârșit

Kfinal = K * tempCommand * 0.9 / X

Acum, când porniți controlerul, acesta ar trebui să tindă în mod natural la temperatura dorită, dar este un proces foarte lent, deoarece compensați doar pierderile de încălzire. Dacă doriți să treceți de la o temperatură la alta, trebuie adăugată o cantitate de energie termică în sistem. P determină cu ce rată introduceți energia în sistem. Setați P la o valoare mică (de exemplu P = 10). Încercați un început (aproape) rece. Dacă nu aveți o depășire mare, încercați cu dublul (P = 20) dacă acum aveți una, încercați ceva între ele. Dacă aveți o depășire de 5%, este bine.

Acum creșteți D până nu aveți depășire. (întotdeauna încercări, știu că asta nu este știință) (am luat D = 100)

Apoi adăugați I = P ^ 2 / (4 * D) (Se bazează pe metoda Ziegler-Nicholts, ar trebui să garanteze stabilitatea) (pentru mine I = 1)

De ce toate aceste încercări, de ce nu știința?

Știu, știu! Există o teorie uriașă și puteți calcula funcția de transfer și transformarea Z și blablabla. Am vrut să generez un salt unitar și apoi să înregistrez timp de 10 minute reacția și să scriu funcția de transfer și apoi ce? Nu vreau să fac aritmetică cu 200 de termeni. Deci, dacă cineva are o idee, aș fi fericit să învăț cum să fac asta corect.

M-am gândit și la cei mai buni prieteni ai mei, Ziegler și Nichols. Mi-au spus să găsesc un P care să genereze oscilații și apoi să le aplic metoda. Nu am găsit niciodată aceste oscilații. Singurul lucru pe care l-am găsit a fost o ooooooooverhoot către cer.

Și cum să modelăm faptul că încălzirea nu este același proces cu răcirea?

Voi continua cercetările mele, dar acum să ne împachetăm controlerul dacă sunteți mulțumit de performanța pe care o obțineți.

Pasul 7: împachetați-l

Împachetează-l
Împachetează-l
Împachetează-l
Împachetează-l
Împachetează-l
Împachetează-l
Împachetează-l
Împachetează-l

Am avut acces la fablab-ul din Moscova (fablab77.ru) și tăietorul laser al acestora și sunt recunoscător. Această oportunitate mi-a permis să fac un pachet frumos generat într-un singur clic de un plugin care realizează cutii cu dimensiunile dorite (h = 69 l = 66 d = 42 mm). Există două găuri (diam = 5mm) în partea superioară pentru led și comutator și o fantă pe lateral pentru știfturile de programare. Am asigurat transformatorul cu două bucăți de lemn și PCB-ul cu două șuruburi. Am lipit blocul terminal la fire și la PCB, am adăugat comutatorul între transformator și intrarea de alimentare a PCB-ului, am conectat ledul la PBO cu un rezistor (300 Ohmi) în serie. De asemenea, am folosit oja pentru izolarea electrică. După ultimul test, am lipit cutia. Asta e.

Recomandat: