Innholdsfortegnelse:

PID -temperaturkontroller: 7 trinn
PID -temperaturkontroller: 7 trinn

Video: PID -temperaturkontroller: 7 trinn

Video: PID -temperaturkontroller: 7 trinn
Video: DIE ANTWOORD - PITBULL TERRIER 2024, Juli
Anonim
PID -temperaturkontroller
PID -temperaturkontroller

Vennen min bygger en ekstruder av plast for resirkulering av plast (https://preciousplastic.com). Han må kontrollere ekstruderingstemperaturen. For det formålet bruker han et dysevarmerbånd. I denne munnstykket er det et termoelement og en varmeenhet som lar oss måle temperaturen og til slutt nå ønsket temperatur (lag en tilbakeslagssløyfe).

Da jeg hørte at han trengte flere PID -kontrollere for å kontrollere alle disse dysevarmerbåndene, ga det meg umiddelbart et ønske om å prøve å lage vår egen.

Trinn 1: Verktøy og materiale

Verktøy

  • loddejern, loddetråd og flux
  • pinsett
  • fresemaskin (kjemisk etsing er også mulig for PCB -prototyping) (du kan også bestille kretskortet med ørnfilen min)
  • termometer (for kalibrering)
  • arduino (hvilken som helst type) eller en AVR -programmerer
  • FTDI seriell TTL-232 USB-kabel
  • laserskjærer (valgfritt)
  • multimeter (ohmmeter og voltmeter)

Materiale

  • Bakelitt enkeltsidig kobberplate (minimum 60*35 mm) (jeg ødela sagen min da jeg kjøpte glassfiber, så vær forsiktig: Bakelitt)
  • Attiny45 mikrokontroller
  • LM2940IMP-5 spenningsregulator
  • AD8605 operasjonsforsterker
  • NDS356AP transistor
  • en haug med motstander og kondensatorer (jeg har SMT 0603 adafruit -boken)
  • 230V-9V AC-DC transformator
  • 1N4004 dioder
  • solid state relé
  • neglelakk (valgfritt)

Trinn 2: Ets PCB

Ets PCB
Ets PCB
Ets PCB
Ets PCB
Ets PCB
Ets PCB

Jeg brukte min Proxxon MF70 CNC transformert og en konisk endebit for å frese kretskortet. Jeg tror at enhver gravering endebit ville fungere. Gcode-filen ble direkte generert av eagle og pcb-gcode plugin. Bare tre passeringer ble gjort for å sikre en god ruteseparasjon, men uten å bruke timer på å frese alt kobberet. Da PCB -en gikk ut av CNC -maskinen, renset jeg rutene med en kutter og testet dem med et multimeter.

Parametere: matehastighet 150 mm/min, 0,2 mm dybde, rotasjonshastighet 20 000 t/min

Trinn 3: Lodd komponentene

Lodd komponentene
Lodd komponentene

Med pinsetten og loddejernet plasserer du komponentene på de riktige stedene og lodder det ved hjelp av flux (det hjelper) og begynner med de minste komponentene. Igjen, sjekk med et multimeter at du ikke har noen kortslutning eller ikke -tilkoblede elementer.

Du kan velge forsterkers forsterkning ved å velge motstanden du ønsker (forsterkning = (R3+R4)/R4). Jeg tok 1M og 2.7k, så i mitt tilfelle var gevinsten lik 371. Jeg kan ikke vite den eksakte verdien fordi jeg bruker 5% toleransemotstand.

Termoelementet mitt er en J -type. Det betyr at det gir 0,05 mV for hver grad. Med forsterkningen på 371 får jeg 18,5mV per grad fra forsterkerens utgang (0,05*371). Jeg vil måle rundt 200 ° C, så forsterkerens utgang skal være rundt 3,7V (0,0185*200). Resultatet bør ikke overstige 5V fordi jeg bruker 5V referansespenning (ekstern).

Bildet tilsvarer den første (ikke fungerende) versjonen jeg laget, men prinsippet er det samme. I denne første versjonen brukte jeg et relé og la det midt på brettet. Så snart jeg byttet med høyspenning, hadde jeg pigger som fikk kontrolleren til å starte på nytt.

Trinn 4: Programmer mikrokontrolleren

Programmer mikrokontrolleren
Programmer mikrokontrolleren

Ved å bruke en arduino som i denne instruksen: https://www.instructables.com/id/How-to-Program-a… kan du laste inn koden.

Jeg brukte en pro-pynt med en FTDI-USB-kabel for å programmere Attiny 45, men denne metoden er ekvivalent. Jeg plugget deretter pinnen PB1 og GDN direkte inn i RX og GND på FTDI-USB-kabelen for å motta serielle data og kunne feilsøke.

Du bør sette alle parametrene til null (P = 0, I = 0, D = 0, K = 0) i arduino -skissen. De vil bli satt under tuningstrinnet.

Hvis du ikke ser røyk eller lukt brent, kan du hoppe til neste trinn!

Trinn 5: Montering og kalibrering

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

Forsiktig: Koble aldri strømforsyningen og 5V fra programmereren samtidig! Ellers vil du se røyken jeg tok om i forrige trinn. Hvis du ikke er sikker på å kunne respektere det, kan du ganske enkelt fjerne 5v -pinnen for programmereren. Jeg lot det være fordi det var mer praktisk for meg å programmere kontrolleren uten strømforsyning og å teste kontrolleren uten å ha varmeren oppvarmet som en galning foran ansiktet mitt.

Nå kan du forgrene termoelementet på forsterkeren og se om du måler noe (respekter polariteten). Hvis varmesystemet ditt har romtemperatur, bør du måle null. Oppvarming med hånden bør allerede føre til noen små verdier.

Hvordan lese disse verdiene? Bare plugg pinnene PB1 og GDN direkte inn i RX og GND på FTDI-USB-kabelen og åpne den arduino serielle skjermen.

Når kontrolleren starter, sender den verdien rød av det interne termometeret til brikken. Slik kompenserer jeg temperaturen (uten å bruke en dedikert chip). Det betyr at hvis temperaturen endres under operasjonen, vil det ikke bli tatt hensyn til. Denne verdien er veldig forskjellig fra en brikke til en annen, så den må skrives inn manuelt i REFTEMPERATUR -definisjonen i begynnelsen av skissen.

Før du kobler til solid state -reléet, må du kontrollere at spenningsutgangen er i området som støttes av reléet ditt (3V til 25V i mitt tilfelle, kretsen genererer rundt 11V). (respekter polariteten)

Disse verdiene er ikke temperaturer i grader eller Fahrenheit, men resultatet av den analoge til digitale konverteringen, så de varierer mellom 0 og 1024. Jeg bruker 5V referansespenning, så når forsterkerens utgang er nær 5V, er konverteringsresultatet nær 1024.

Trinn 6: PID Tuning

PID Tuning
PID Tuning

Jeg må nevne at jeg ikke er en kontrollekspert, så jeg fant noen parametere som fungerer for meg, men jeg garanterer ikke at det fungerer for alle.

Først av alt må jeg forklare hva programmet gjør. Jeg implementerte en slags programvare PWM: en teller økes ved hver iterasjon til den når 20'000 (i så fall tilbakestilles til 0). En forsinkelse bremser sløyfen ned til et millisekund. De mest kresne av oss vil legge merke til at kontrollperioden er rundt 20 sekunder. Hver sløyfe begynner med en sammenligning mellom telleren og en terskel. Hvis telleren er lavere enn terskelen, slår jeg av reléet. Hvis den er større, slår jeg den på. Så jeg regulerer kraften ved å sette terskelen. Terskelberegningen skjer hvert sekund.

Hva er en PID -kontroller?

Når du vil kontrollere en prosess, har du verdien du måler (analogData), verdien du vil nå (tempCommand) og en måte å endre tilstanden til den prosessen (seuil). I mitt tilfelle er det gjort med terskelen ("seuil" på fransk, men mye lettere å skrive og uttale (uttale "sey")) som bestemmer hvor lenge bryteren vil være på og av (driftssyklusen) og dermed energimengden settes inn i systemet.

Alle er enige om at hvis du er langt fra det punktet du vil nå, kan du gjøre en stor korreksjon, og hvis du er nær, er det nødvendig med en liten korreksjon. Det betyr at korreksjonen er en funksjon av feilen (feil = analogData-tempComand). Ja, men hvor mye? La oss si at vi ganger feilen med en faktor (P). Dette er en proporsjonal kontroller. Mekanisk gjør en fjær en proporsjonal korreksjon fordi fjærkraften er proporsjonal med fjærkompresjonen.

Du vet sikkert at bilopphengene består av en fjær og et demper (støtdemper). Rollen til denne demperen er å unngå at bilen rekker som en trampoline. Dette er nettopp det det avledede begrepet gjør. Som demper genererer den en reaksjon som er proporsjonal med feilvariasjonen. Hvis feilen endres raskt, senkes korreksjonen. Det reduserer svingninger og overskytinger.

Integratorbegrepet er her for å unngå permanent feil (det integrerer feilen). Konkret er det en teller som økes eller reduseres hvis feilen er positiv eller negativ. Deretter økes eller senkes korreksjonen i henhold til denne telleren. Den har ingen mekanisk ekvivalens (eller har du en idé?). Kanskje er det en lignende effekt når du tar bilen til servicen og mekanikeren merker at støtene er systematisk for lave og bestemmer seg for å legge til litt mer forhåndsbelastning.

Alt dette er oppsummert i formelen: korreksjon = P*e (t)+I*(de (t)/dt)+D*integral (e (t) dt), P, I og D er tre parametere som har å bli innstilt.

I min versjon la jeg til et fjerde begrep som er kommandoen "a priori" (feed forward) som trengs for å opprettholde en viss temperatur. Jeg valgte en proporsjonal kommando til temperaturen (det er en god tilnærming til varmetapene. Det er sant hvis vi forsømmer strålingstapene (T^4)). Med dette uttrykket blir integratoren lysere.

Hvordan finne disse parameterne?

Jeg prøvde en konvensjonell metode som du kan finne ved å google "pid tuning temperature controller", men jeg synes det var vanskelig å bruke og endte opp med min egen metode.

Min metode

Sett først P, I, D til null og sett "K" og "tempCommand" til små verdier (for eksempel K = 1 og tempCommand = 100). Slå på systemet og vent, vent, vent … til temperaturen har stabilisert seg. På dette tidspunktet vet du at med en "seuil" på 1*100 = 100 har temperaturen en tendens til X. Så du vet at med en kommando på 100/20000 = 5% kan du nå X. Men målet er å nå 100 fordi det er "tempCommand". Ved å bruke en andel kan du beregne K for å nå 100 (tempCommand). Av forsiktighet brukte jeg en mindre verdi enn den beregnede. Det er faktisk lettere å varme mer enn å kjøle seg ned. Så endelig

Kfinal = K*temp Kommando*0,9/X

Når du starter kontrolleren, bør den naturlig nok ha den temperaturen du vil ha, men det er en veldig treg prosess fordi du bare kompenserer for varmetapet. Hvis du vil gå fra en temperatur til en annen, må en mengde termisk energi legges til i systemet. P bestemmer med hvilken hastighet du legger energien inn i systemet. Sett P til en liten verdi (for eksempel P = 10). Prøv en (nesten) kald start. Hvis du ikke har et stort overskridelse, kan du prøve med dobbelten (P = 20) hvis du nå har en prøve noe i mellom. Hvis du har 5% overskridelse, er det bra.

Øk nå D til du ikke har noen overskridelse. (prøver alltid, jeg vet at dette ikke er vitenskap) (jeg tok D = 100)

Legg deretter til I = P^2/(4*D) (Den er basert på Ziegler-Nicholts-metoden, den skal garantere stabilitet) (for meg I = 1)

Hvorfor alle disse prøvelsene, hvorfor ikke vitenskapen?

Jeg vet jeg vet! Det er en enorm teori, og du kan beregne overføringsfunksjonen og Z -transformasjonen og blablabla. Jeg ønsket å generere et enhetlig hopp og deretter registrere reaksjonen i 10 minutter og skrive overføringsfunksjonen, og hva så? Jeg vil ikke lage regning med 200 termer. Så hvis noen har en ide, vil jeg gjerne lære å gjøre det riktig.

Jeg tenkte også til mine beste venner Ziegler og Nichols. De ba meg finne en P som genererer svingninger og deretter bruke metoden. Jeg har aldri funnet disse svingningene. Det eneste jeg fant var en oooooooovershoot til himmelen.

Og hvordan modellere det faktum at oppvarming ikke er den samme prosessen som kjøling?

Jeg vil fortsette min forskning, men la oss nå pakke kontrolleren din hvis du er fornøyd med ytelsen du oppnår.

Trinn 7: Pakk den

Pakk den
Pakk den
Pakk den
Pakk den
Pakk den
Pakk den
Pakk den
Pakk den

Jeg hadde tilgang til Moskva fablab (fablab77.ru) og deres laserskjærer, og jeg er takknemlig. Denne muligheten tillot meg å lage en fin pakke generert med ett klikk av en plugin som lager bokser med ønskede dimensjoner (h = 69 l = 66 d = 42 mm). Det er to hull (diam = 5 mm) på toppen for LED og bryter og en spalte på siden for programmeringspinnene. Jeg sikret transformatoren med to trestykker og kretskortet med to skruer. Jeg loddet rekkeklemmen til ledninger og til kretskortet, la til bryteren mellom transformatoren og kretskortinngangen, koblet ledningen til PBO med en motstand (300 ohm) i serie. Jeg brukte også neglelakk til elektrisk isolasjon. Etter den siste testen limte jeg esken. Det er det.

Anbefalt: