Indholdsfortegnelse:

PID -temperaturregulator: 7 trin
PID -temperaturregulator: 7 trin

Video: PID -temperaturregulator: 7 trin

Video: PID -temperaturregulator: 7 trin
Video: PID demo 2024, November
Anonim
PID -temperaturregulator
PID -temperaturregulator

Min ven bygger en plastekstruder til genbrug af plast (https://preciousplastic.com). Han skal kontrollere ekstruderingstemperaturen. Til dette formål bruger han et dysevarmerbånd. I denne dyse er der et termoelement og en varmeenhed, som giver os mulighed for at måle temperaturen og endelig nå den ønskede temperatur (lav en retroaktionssløjfe).

Da jeg hørte, at han havde brug for flere PID -controllere for at styre alle disse dysevarmerbånd, gav det mig straks ønsket om at prøve at lave vores egne.

Trin 1: Værktøjer og materiale

Værktøjer

  • loddejern, loddetråd og flux
  • pincet
  • fræsemaskine (kemisk ætsning er også mulig til PCB -prototyper) (du kan også bestille printkortet med min ørnfil)
  • termometer (til kalibrering)
  • arduino (enhver type) eller en AVR -programmør
  • FTDI serielt TTL-232 USB-kabel
  • laserskærer (valgfrit)
  • multimeter (ohmmeter og voltmeter)

Materiale

  • Bakelit enkeltsidet kobberplade (60*35 mm minimum) (jeg ødelagde min sav ved at købe glasfiber, så pas på: Bakelit)
  • Attiny45 mikrokontroller
  • LM2940IMP-5 spændingsregulator
  • AD8605 operationsforstærker
  • NDS356AP transistor
  • en flok modstande og kondensatorer (jeg har SMT 0603 adafruit -bogen)
  • 230V-9V ac-dc transformer
  • 1N4004 dioder
  • solid state relæ
  • neglelak (valgfrit)

Trin 2: Æts PCB'en

Æts PCB'en
Æts PCB'en
Æts PCB'en
Æts PCB'en
Æts PCB'en
Æts PCB'en

Jeg brugte min Proxxon MF70 CNC transformeret og en konisk endebit til at fræse printet. Jeg tror, at enhver gravering endebit ville fungere. Gcode-filen blev direkte genereret af eagle og pcb-gcode plugin. Kun tre passager blev udført for at sikre en god ruteseparation, men uden at bruge timer på at fræse alt kobber. Da printkortet gik ud af CNC -maskinen, rensede jeg ruterne med en fræser og testede dem med et multimeter.

Parametre: fremføringshastighed 150 mm/min, dybde 0,2 mm, rotationshastighed 20'000 t/min

Trin 3: Lodd komponenterne

Lodde komponenterne
Lodde komponenterne

Med pincetten og loddejernet placeres komponenterne de rigtige steder og loddes ved hjælp af flux (det hjælper) og begynder med de mindste komponenter. Igen skal du kontrollere med et multimeter, at du ikke har nogen kortslutninger eller ikke -tilsluttede elementer.

Du kan vælge forstærkerforstærkningen ved at vælge den modstand, du ønsker (gain = (R3+R4)/R4). Jeg tog 1M og 2.7k, så i mit tilfælde var gevinsten lig med cirka 371. Jeg kan ikke kende den nøjagtige værdi, fordi jeg bruger 5% toleransemodstand.

Mit termoelement er en J -type. Det betyder, at det giver 0,05mV for hver grad. Med forstærkningen på 371 opnår jeg 18,5mV pr. Grad fra forstærkerens output (0,05*371). Jeg vil måle omkring 200 ° C, så forstærkerens output skal være omkring 3,7V (0,0185*200). Resultatet bør ikke overstige 5V, fordi jeg bruger 5V referencespændingen (ekstern).

Billedet svarer til den første (ikke fungerende) version, jeg lavede, men princippet er det samme. I denne første version brugte jeg et relæ og lagde det lige midt på brættet. Så snart jeg skiftede med højspænding, havde jeg pigge, der fik controlleren til at genstarte.

Trin 4: Programmer mikrokontrolleren

Programmer mikrokontrolleren
Programmer mikrokontrolleren

Ved hjælp af en arduino som i denne instruktionsartikler: https://www.instructables.com/id/How-to-Program-a… kan du indlæse koden.

Jeg brugte en pro-ting med et FTDI-USB-kabel til at programmere Attiny 45, men denne metode er ækvivalent. Jeg sluttede derefter stiften PB1 og GDN direkte til RX og GND på FTDI-USB-kablet for at modtage de serielle data og kunne fejlsøge.

Du skal sætte alle parametre til nul (P = 0, I = 0, D = 0, K = 0) i arduino -skitsen. De indstilles under tuningstrinnet.

Hvis du ikke ser røg eller lugter brændt, kan du springe til næste trin!

Trin 5: Samling og kalibrering

Montering og kalibrering
Montering og kalibrering
Montering og kalibrering
Montering og kalibrering

Forsigtig: Tilslut aldrig strømforsyningen og 5V fra programmereren på samme tid! Ellers vil du se den røg, jeg tog om i det foregående trin. Hvis du ikke er sikker på at kunne respektere det, kan du blot fjerne 5v -stiften til programmereren. Jeg lod det være, fordi det var mere bekvemt for mig at programmere controlleren uden strømforsyning og teste controlleren uden at have varmelegemet opvarmet som en galning foran mit ansigt.

Nu kan du forgrene termoelementet på forstærkeren og se, om du måler noget (respekter polariteten). Hvis dit varmesystem er ved stuetemperatur, skal du måle nul. Opvarmning med hånden burde allerede føre til nogle små værdier.

Hvordan læser man disse værdier? Du skal blot tilslutte stifterne PB1 og GDN direkte til RX og GND på FTDI-USB-kablet og åbne den arduino serielle skærm.

Når controlleren starter, sender den værdien rød af det interne termometer i chippen. Sådan kompenserer jeg temperaturen (uden at bruge en dedikeret chip). Det betyder, at hvis temperaturen ændres under operationen, vil det ikke blive taget i betragtning. Denne værdi er meget forskellig fra en chip til en anden, så den skal indtastes manuelt i REFTEMPERATURE -definitionen i begyndelsen af skitsen.

Inden solid state -relæet tilsluttes, skal du kontrollere, at spændingsudgangen er inden for det område, der understøttes af dit relæ (3V til 25V i mit tilfælde, kredsløbet genererer omkring 11V). (respekter polariteten)

Disse værdier er ikke temperaturer i grader eller Fahrenheit, men resultatet af den analoge til digitale konvertering, så de varierer mellem 0 og 1024. Jeg bruger 5V referencespændingen, så når forstærkerens udgang er nær 5V, er konverteringsresultatet nær 1024.

Trin 6: PID Tuning

PID Tuning
PID Tuning

Jeg skal nævne, at jeg ikke er en kontrolekspert, så jeg fandt nogle parametre, der fungerer for mig, men jeg garanterer ikke, at det fungerer for alle.

Først og fremmest skal jeg forklare, hvad programmet gør. Jeg implementerede en slags software PWM: en tæller øges ved hver iteration, indtil den når 20'000 (i så fald nulstilles til 0). En forsinkelse bremser sløjfen ned til et millisekund. De mest kræsne af os vil bemærke, at kontrolperioden er omkring 20 sekunder. Hver sløjfe begynder med en sammenligning mellem tælleren og en tærskel. Hvis tælleren er lavere end tærsklen, slukker jeg relæet. Hvis den er større, tænder jeg den. Så jeg regulerer strømmen ved at indstille tærsklen. Tærskelberegningen sker hvert sekund.

Hvad er en PID -controller?

Når du vil styre en proces, har du den værdi, du måler (analogData), den værdi, du vil nå (tempCommand) og en måde at ændre tilstanden for den proces (seuil). I mit tilfælde gøres det med tærsklen ("seuil" på fransk, men meget lettere at skrive og udtale (udtale "sey")), som bestemmer, hvor lang tid kontakten vil være til og fra (driftscyklussen) og dermed mængden af energi sat i systemet.

Alle er enige om, at hvis du er langt fra det punkt, du vil nå, kan du foretage en stor korrektion, og hvis du er tæt på, er der brug for en lille korrektion. Det betyder, at korrektionen er en funktion af fejlen (fejl = analogData-tempComand). Ja, men hvor meget? Lad os sige, at vi gange fejlen med en faktor (P). Dette er en proportional controller. Mekanisk foretager en fjeder en proportionel korrektion, fordi fjederkraften er proportional med fjederkomprimeringen.

Du ved sikkert, at dine bilophæng består af en fjeder og et spjæld (støddæmper). Denne spjælds rolle er at undgå, at din bil rebounder som en trampolin. Det er præcis, hvad det afledte udtryk gør. Som spjældet genererer det en reaktion, der er proportional med fejlvariationen. Hvis fejlen ændres hurtigt, sænkes korrektionen. Det reducerer svingninger og overskridelser.

Integratorbetegnelsen er her for at undgå permanent fejl (den integrerer fejlen). Konkret er det en tæller, der øges eller reduceres, hvis fejlen er positiv eller negativ. Derefter øges eller sænkes korrektionen ifølge denne tæller. Det har ingen mekanisk ækvivalens (eller har du en idé?). Måske er der en lignende effekt, når du bringer din bil til servicen, og mekanikeren bemærker, at stødene systematisk er for lave og beslutter at tilføje noget mere forudbelastning.

Alt dette er opsummeret i formlen: korrektion = P*e (t)+I*(de (t)/dt)+D*integral (e (t) dt), P, I og D er tre parametre, der har at blive indstillet.

I min version tilføjede jeg et fjerde udtryk, som er kommandoen "a priori" (feed forward), der er nødvendig for at opretholde en bestemt temperatur. Jeg valgte en proportional kommando til temperaturen (det er en god tilnærmelse til varmetabet. Det er rigtigt, hvis vi forsømmer strålingstabet (T^4)). Med dette udtryk bliver integratoren lettere.

Hvordan finder man disse parametre?

Jeg prøvede en konventionel metode, som du kan finde ved at google "pid tuning temperature controller", men jeg fandt det svært at anvende og endte med min egen metode.

Min metode

Sæt først P, I, D til nul og sæt "K" og "tempCommand" til små værdier (f.eks. K = 1 og tempCommand = 100). Tænd for systemet, og vent, vent, vent … indtil temperaturen er stabiliseret. På dette tidspunkt ved du, at med en "seuil" på 1*100 = 100 har temperaturen en tendens til X. Så du ved, at med en kommando på 100/20000 = 5% kan du nå X. Men målet er at nå 100 fordi det er "tempCommand". Ved hjælp af en andel kan du beregne K for at nå 100 (tempCommand). For en sikkerheds skyld brugte jeg en mindre værdi end den beregnede. Det er faktisk lettere at varme mere end at køle ned. Så endelig

Kfinal = K*tempCommand*0,9/X

Når du nu starter controlleren, skal den naturligvis have den temperatur, du ønsker, men det er en virkelig langsom proces, fordi du kun kompenserer for varmetabet. Hvis du vil gå fra en temperatur til en anden, skal der tilføjes en mængde termisk energi i systemet. P bestemmer med hvilken hastighed du lægger energien i systemet. Indstil P til en lille værdi (for eksempel P = 10). Prøv en (næsten) kold start. Hvis du ikke har et stort overskridelse, kan du prøve med det dobbelte (P = 20), hvis du nu har en prøve noget imellem. Hvis du har 5% overskridelse, er det godt.

Nu øges D, indtil du ikke har overskridelse. (altid forsøg, jeg ved, at dette ikke er videnskab) (jeg tog D = 100)

Tilføj derefter I = P^2/(4*D) (Den er baseret på Ziegler-Nicholts-metoden, den skal garantere stabilitet) (for mig I = 1)

Hvorfor alle disse forsøg, hvorfor ikke videnskab?

Jeg ved … jeg ved! Der er en enorm teori, og du kan beregne overførselsfunktionen og Z -transformationen og blablabla. Jeg ville generere et enhedshop og derefter registrere reaktionen i 10 minutter og skrive overførselsfunktionen og hvad så? Jeg vil ikke lave regning med 200 udtryk. Så hvis nogen har en idé, ville jeg med glæde lære at gøre det korrekt.

Jeg tænkte også over for mine bedste venner Ziegler og Nichols. De fortalte mig at finde et P, der genererer svingninger og derefter anvende deres metode. Jeg har aldrig fundet disse svingninger. Det eneste, jeg fandt, var et oooooooovershoot til himlen.

Og hvordan modelleres det, at opvarmning ikke er den samme proces som køling?

Jeg vil fortsætte min forskning, men lad os nu pakke din controller, hvis du er tilfreds med den ydelse, du opnår.

Trin 7: Pak det

Pak det
Pak det
Pak det
Pak det
Pak det
Pak det
Pak det
Pak det

Jeg havde adgang til Moskva fablab (fablab77.ru) og deres laserskærer, og jeg er taknemmelig. Denne mulighed gav mig mulighed for at lave en god pakke genereret med et klik af et plugin, der laver kasser med de ønskede dimensioner (h = 69 l = 66 d = 42 mm). Der er to huller (diam = 5 mm) på toppen til LED'en og kontakten og en slids på siden til programmeringsstifterne. Jeg sikrede transformatoren med to stykker træ og printkortet med to skruer. Jeg lodde terminalblokken til ledninger og til printkortet, tilføjede kontakten mellem transformeren og printkortets strømindgang, tilsluttede ledningen til PBO med en modstand (300 Ohm) i serie. Jeg brugte også neglelak til elektrisk isolering. Efter den sidste test limede jeg kassen. Det er det.

Anbefalede: