Innehållsförteckning:

PID -temperaturregulator: 7 steg
PID -temperaturregulator: 7 steg

Video: PID -temperaturregulator: 7 steg

Video: PID -temperaturregulator: 7 steg
Video: Ваня Усович "ЕЩЕ ОДИН ДЕНЬ" 2020 2024, November
Anonim
PID -temperaturregulator
PID -temperaturregulator

Min vän bygger en extruder av plast för plaståtervinning (https://preciousplastic.com). Han måste kontrollera extruderingstemperaturen. För detta ändamål använder han ett munstycksvärmeband. I detta munstycke finns ett termoelement och en värmeenhet som gör att vi kan mäta temperaturen och slutligen nå önskad temperatur (gör en retroaktionsslinga).

När jag hörde att han behövde flera PID -styrenheter för att styra alla dessa munstycksvärmeband, gav det mig omedelbart önskan att försöka göra vårt eget.

Steg 1: Verktyg och material

Verktyg

  • lödkolv, lödtråd och flussmedel
  • pincett
  • fräsmaskin (kemisk etsning är också möjlig för PCB -prototyper) (du kan också beställa kretskortet med min örnfil)
  • termometer (för kalibrering)
  • arduino (vilken typ som helst) eller en AVR -programmerare
  • FTDI seriell TTL-232 USB-kabel
  • laserskärare (tillval)
  • multimeter (ohmmeter och voltmeter)

Material

  • Bakelit enkel sida kopparplatta (60*35 mm minimum) (jag förstörde min såg när jag köpte glasfiber så var försiktig: Bakelit)
  • Attiny45 mikrokontroller
  • LM2940IMP-5 spänningsregulator
  • AD8605 operationsförstärkare
  • NDS356AP transistor
  • ett gäng motstånd och kondensatorer (jag har SMT 0603 adafruit -boken)
  • 230V-9V AC-DC transformator
  • 1N4004 -dioder
  • solid state relä
  • nagellack (valfritt)

Steg 2: Etsa kretskortet

Etsa kretskortet
Etsa kretskortet
Etsa kretskortet
Etsa kretskortet
Etsa kretskortet
Etsa kretskortet

Jag använde min Proxxon MF70 CNC -transformerad och en konisk slutbit för att fräsa kretskortet. Jag tror att någon graveringsändbit skulle fungera. Gcode-filen genererades direkt av eagle och pcb-gcode plugin. Endast tre passeringar gjordes för att säkerställa en bra ruttavskiljning men utan att spendera timmar på att fräsa allt koppar. När kretskortet gick ur CNC -maskinen rengjorde jag rutterna med en skärare och testade dem med en multimeter.

Parametrar: matningshastighet 150 mm/min, djup 0,2 mm, rotationshastighet 20 000 t/min

Steg 3: Lödda komponenterna

Lödda komponenterna
Lödda komponenterna

Placera komponenterna på rätt plats med pincetten och lödkolven och löd den med hjälp av flussmedel (det hjälper) och börja med de minsta komponenterna. Återigen, kontrollera med en multimeter att du inte har några kortslutningar eller icke anslutna element.

Du kan välja förstärkarförstärkning genom att välja det motstånd du vill ha (förstärkning = (R3+R4)/R4). Jag tog 1M och 2.7k så i mitt fall är vinsten lika med ungefär 371. Jag kan inte veta det exakta värdet eftersom jag använder 5% toleransmotstånd.

Mitt termoelement är av J -typ. Det betyder att det ger 0,05 mV för varje grad. Med förstärkningen 371 får jag 18,5 mV per grad från förstärkarutgången (0,05*371). Jag vill mäta runt 200 ° C så att förstärkarutgången ska vara runt 3,7V (0,0185*200). Resultatet ska inte överstiga 5V eftersom jag använder 5V referensspänning (extern).

Bilden motsvarar den första (fungerar inte) versionen jag gjorde men principen är densamma. I den här första versionen använde jag ett relä och lade det mitt i brädan. Så snart jag bytte med högspänning hade jag spikar som fick kontrollen att starta om.

Steg 4: Programmera mikrokontrollern

Programmera mikrokontrollern
Programmera mikrokontrollern

Med hjälp av en arduino som i denna instruktioner: https://www.instructables.com/id/How-to-Program-a… kan du ladda koden.

Jag använde en proffs med en FTDI-USB-kabel för att programmera Attiny 45 men denna metod är likvärdig. Jag kopplade sedan in stiften PB1 och GDN direkt i RX och GND på FTDI-USB-kabeln för att ta emot seriell data och kunna felsöka.

Du bör sätta alla parametrar till noll (P = 0, I = 0, D = 0, K = 0) i arduinoskissen. De kommer att ställas in under inställningssteget.

Om du inte ser rök eller lukt brinner kan du hoppa till nästa steg!

Steg 5: Montering och kalibrering

Montering och kalibrering
Montering och kalibrering
Montering och kalibrering
Montering och kalibrering

Varning: Anslut aldrig strömförsörjningen och 5V från programmeraren samtidigt! Annars kommer du att se röken jag höll på med i föregående steg. Om du inte är säker på att kunna respektera det kan du helt enkelt ta bort 5v -stiftet för programmeraren. Jag lät det eftersom det var mer bekvämt för mig att programmera regulatorn utan strömförsörjning och testa regulatorn utan att värmaren värmde som en galning framför mitt ansikte.

Nu kan du förgrena termoelementet på förstärkaren och se om du mäter något (respektera polariteten). Om ditt värmesystem har rumstemperatur bör du mäta noll. Att värma den med handen borde redan leda till några små värden.

Hur läser man dessa värden? Anslut bara stiften PB1 och GDN direkt till RX och GND på FTDI-USB-kabeln och öppna den arduino seriella bildskärmen.

När regulatorn startar skickar den värdet rött av chipets interna termometer. Så här kompenserar jag temperaturen (utan att använda ett dedikerat chip). Det betyder att om temperaturen ändras under operationen kommer det inte att beaktas. Detta värde skiljer sig mycket från ett chip till ett annat så det måste anges manuellt i REFTEMPERATUR -definitionen i början av skissen.

Innan du ansluter solid state -reläet, kontrollera att spänningsutgången ligger inom det intervall som stöds av ditt relä (3V till 25V i mitt fall, kretsen genererar cirka 11V). (respektera polariteten)

Dessa värden är inte temperaturer i grader eller Fahrenheit utan resultatet av den analoga till digitala omvandlingen så de varierar mellan 0 och 1024. Jag använder 5V referensspänning alltså när förstärkarutgången är nära 5V, är konverteringsresultatet nära 1024.

Steg 6: PID -inställning

PID Tuning
PID Tuning

Jag måste nämna att jag inte är en kontrollexpert, så jag hittade några parametrar som fungerar för mig men jag garanterar inte att det fungerar för alla.

Först och främst måste jag förklara vad programmet gör. Jag implementerade ett slags programvara PWM: en räknare ökas vid varje iteration tills den når 20'000 (i så fall återställs till 0). En fördröjning saktar ner slingan till en millisekund. De mest kräsna av oss kommer att märka att kontrollperioden är cirka 20 sekunder. Varje slinga börjar med en jämförelse mellan räknaren och en tröskel. Om räknaren är lägre än tröskeln stänger jag av reläet. Om den är större slår jag på den. Så jag reglerar kraften genom att ställa in tröskeln. Tröskelberäkningen sker varje sekund.

Vad är en PID -styrenhet?

När du vill styra en process har du det värde du mäter (analogData), det värde du vill nå (tempCommand) och ett sätt att ändra tillståndet för den processen (seuil). I mitt fall görs det med tröskeln ("seuil" på franska men mycket lättare att skriva och uttala (uttala "sey")) som avgör hur länge omkopplaren kommer att vara på och av (arbetscykeln) och därmed energimängden sätta i systemet.

Alla är överens om att om du är långt från den punkt du vill nå kan du göra en stor korrigering och om du är nära behövs en liten korrigering. Det betyder att korrigeringen är en funktion av felet (fel = analogData-tempComand). Ja men hur mycket? Låt oss säga att vi multiplicerar felet med en faktor (P). Detta är en proportionell controller. Mekaniskt gör en fjäder en proportionell korrigering eftersom fjäderkraften är proportionell mot fjäderkompressionen.

Du vet säkert att dina bilupphängningar består av en fjäder och ett spjäll (stötdämpare). Rollen för denna spjäll är att undvika att din bil retar som en studsmatta. Detta är exakt vad den härledda termen gör. Som spjäll genererar den en reaktion som är proportionell mot felvariationen. Om felet snabbt ändras sänks korrigeringen. Det minskar svängningar och överskott.

Integrator termen är här för att undvika permanenta fel (det integrerar felet). Konkret är det en räknare som ökar eller minskar om felet är positivt eller negativt. Därefter ökas eller sänks korrigeringen enligt denna räknare. Det har ingen mekanisk likvärdighet (eller har du en idé?). Kanske finns det en liknande effekt när du tar din bil till servicen och mekanikern märker att stöten är systematiskt för låga och bestämmer sig för att lägga till lite mer förspänning.

Allt detta sammanfattas i formeln: korrigering = P*e (t)+I*(de (t)/dt)+D*integral (e (t) dt), P, I och D är tre parametrar som har att ställas in.

I min version lade jag till en fjärde term som är kommandot "a priori" (feed forward) som behövs för att upprätthålla en viss temperatur. Jag valde ett proportionellt kommando till temperaturen (det är en bra approximation av värmeförlusterna. Det är sant om vi struntar i strålningsförlusterna (T^4)). Med denna term blir integratorn lättare.

Hur hittar man dessa parametrar?

Jag försökte en konventionell metod som du kan hitta genom att googla "pid tuning temperature controller" men jag tyckte att det var svårt att applicera och slutade med min egen metod.

Min metod

Sätt först P, I, D till noll och sätt "K" och "tempCommand" till små värden (till exempel K = 1 och tempCommand = 100). Slå på systemet och vänta, vänta, vänta … tills temperaturen har stabiliserats. Vid denna tidpunkt vet du att med en "seuil" på 1*100 = 100 tenderar temperaturen till X. Så du vet att med ett kommando på 100/20000 = 5% kan du nå X. Men målet är att nå 100 eftersom det är "tempCommand". Med en proportion kan du beräkna K för att nå 100 (tempCommand). Av försiktighetsåtgärd använde jag ett mindre värde än det beräknade. Det är faktiskt lättare att värma mer än att svalna. Så äntligen

Kfinal = K*tempCommand*0,9/X

Nu när du startar regulatorn bör den naturligtvis tenderar till den temperatur du vill ha men det är en riktigt långsam process eftersom du bara kompenserar värmeförlusterna. Om du vill gå från en temperatur till en annan måste en mängd termisk energi läggas till i systemet. P avgör i vilken takt du lägger energin i systemet. Ställ in P till ett litet värde (till exempel P = 10). Prova en (nästan) kallstart. Om du inte har en stor överskridning, försök med det dubbla (P = 20) om du nu har ett försök något däremellan. Om du har 5% överskridande är det bra.

Öka nu D tills du inte har någon överskridning. (alltid prövningar, jag vet att detta inte är vetenskap) (jag tog D = 100)

Lägg sedan till I = P^2/(4*D) (Det är baserat på Ziegler-Nicholts-metoden, det borde garantera stabilitet) (för mig I = 1)

Varför alla dessa prövningar, varför inte vetenskap?

Jag vet jag vet! Det finns en enorm teori och du kan beräkna överföringsfunktionen och Z -transformen och blablabla. Jag ville generera ett enhetligt hopp och sedan spela in reaktionen i 10 minuter och skriva överföringsfunktionen och vad sedan? Jag vill inte räkna med 200 termer. Så om någon har en idé skulle jag gärna lära mig hur man gör det på rätt sätt.

Jag tänkte också till mina bästa vänner Ziegler och Nichols. De sa till mig att hitta en P som genererar svängningar och sedan tillämpa deras metod. Jag har aldrig hittat dessa svängningar. Det enda jag hittade var en oooooooovershoot till himlen.

Och hur ska man modellera det faktum att uppvärmning inte är samma process som kylning?

Jag kommer att fortsätta min forskning men låt oss nu paketera din handkontroll om du är nöjd med prestandan du får.

Steg 7: Packa den

Packa den
Packa den
Packa den
Packa den
Packa den
Packa den
Packa den
Packa den

Jag hade tillgång till Moskva fablab (fablab77.ru) och deras laserskärare och jag är tacksam. Denna möjlighet tillät mig att göra ett trevligt paket som genererades med ett klick av ett plugin som gör lådor med önskade dimensioner (h = 69 l = 66 d = 42 mm). Det finns två hål (diam = 5 mm) på ovansidan för lysdioden och omkopplaren och en slits på sidan för programmeringsstiften. Jag säkrade transformatorn med två träbitar och kretskortet med två skruvar. Jag lödde kopplingsplinten till ledningar och till kretskortet, lade till omkopplaren mellan transformatorn och kretskortets ingång, kopplade ledningen till PBO med ett motstånd (300 ohm) i serie. Jag använde också nagellack för elektrisk isolering. Efter det sista testet limmade jag lådan. Det är allt.

Rekommenderad: