Inhoudsopgave:

PID-temperatuurregelaar: 7 stappen
PID-temperatuurregelaar: 7 stappen

Video: PID-temperatuurregelaar: 7 stappen

Video: PID-temperatuurregelaar: 7 stappen
Video: 7 stappen voor het bijvullen van de ketel 2024, November
Anonim
PID-temperatuurregelaar
PID-temperatuurregelaar

Mijn vriend bouwt een plastic extruder voor plastic recycling (https://preciousplastic.com). Hij moet de extrusietemperatuur regelen. Hiervoor gebruikt hij een nozzle heater band. In dit mondstuk zit een thermokoppel en een verwarmingseenheid waarmee we de temperatuur kunnen meten en uiteindelijk de gewenste temperatuur kunnen bereiken (maak een terugwerkende lus).

Toen ik hoorde dat hij meerdere PID-controllers nodig had om al deze straalpijpverwarmingsbanden te regelen, kreeg ik meteen het verlangen om te proberen er zelf een te maken.

Stap 1: Gereedschap en materiaal

Gereedschap

  • soldeerbout, soldeerdraad en flux
  • pincet
  • freesmachine (chemisch etsen is ook mogelijk voor PCB-prototyping) (u kunt de PCB ook bestellen met mijn arendsbestand)
  • thermometer (voor kalibratie)
  • arduino (elk type) of een AVR-programmeur
  • FTDI seriële TTL-232 USB-kabel
  • lasersnijder (optioneel)
  • multimeter (ohmmeter en voltmeter)

Materiaal

  • Bakeliet enkelzijdige koperen plaat (minimaal 60 * 35 mm) (ik heb mijn zaag verpest door de glasvezel te kopen, dus wees voorzichtig: bakeliet)
  • Attiny45-microcontroller
  • LM2940IMP-5 spanningsregelaar
  • AD8605 operationele versterker
  • NDS356AP-transistor
  • een heleboel weerstanden en condensatoren (ik heb het SMT 0603 adafruit-boek)
  • 230V-9V ac-dc transformator
  • 1N4004 diodes
  • Solid state relais
  • nagellak (optioneel)

Stap 2: Ets de PCB

Ets de PCB
Ets de PCB
Ets de PCB
Ets de PCB
Ets de PCB
Ets de PCB

Ik heb mijn Proxxon MF70 CNC getransformeerd en een conische eindbit gebruikt om de PCB te frezen. Ik denk dat elke gravure eindbit zou werken. Het Gcode-bestand is rechtstreeks gegenereerd door eagle en de pcb-gcode-plug-in. Er werden slechts drie passen gedaan om een goede routescheiding te garanderen, maar zonder urenlang al het koper te frezen. Toen de printplaat uit de CNC-machine ging, heb ik de routes schoongemaakt met een snijplotter en getest met een multimeter.

Parameters: voedingssnelheid 150 mm/min, diepte 0,2 mm, rotatiesnelheid 20.000 t/min

Stap 3: Soldeer de componenten

Soldeer de componenten
Soldeer de componenten

Plaats met de pincet en de soldeerbout de componenten op de juiste plaatsen en soldeer deze met flux (het helpt) en begin met de kleinste componenten. Controleer nogmaals met een multimeter of u geen kortsluiting of niet-aangesloten elementen heeft.

U kunt de versterking van de versterker kiezen door de gewenste weerstand te kiezen (versterking=(R3+R4)/R4). Ik nam 1M en 2,7k, dus in mijn geval is de winst gelijk aan ongeveer 371. Ik kan de exacte waarde niet weten omdat ik 5% tolerantieweerstand gebruik.

Mijn thermokoppel is van het J-type. Het betekent dat het 0,05mV geeft voor elke graad. Met de versterking van 371 haal ik 18.5mV per graad uit de versterkeruitgang (0.05*371). Ik wil ongeveer 200°C meten, dus het uitgangsvermogen van de versterker moet rond de 3,7 V (0,0185*200) zijn. Het resultaat mag niet hoger zijn dan 5V omdat ik de 5V-referentiespanning (extern) gebruik.

De afbeelding komt overeen met de eerste (niet werkende) versie die ik heb gemaakt, maar het principe is hetzelfde. In deze eerste versie heb ik een relais gebruikt en deze precies in het midden van het bord geplaatst. Zodra ik met hoogspanning schakelde, had ik pieken die de controller opnieuw deden opstarten.

Stap 4: Programmeer de microcontroller

Programmeer de microcontroller
Programmeer de microcontroller

Met behulp van een Arduino zoals in deze instructables: https://www.instructables.com/id/How-to-Program-a… kun je de code laden.

Ik heb een pro-snuisterij met een FTDI-USB-kabel gebruikt om de Attiny 45 te programmeren, maar deze methode is gelijkwaardig. Ik stopte toen de pin PB1 en GDN rechtstreeks in de RX en GND van de FTDI-USB-kabel om de seriële gegevens te ontvangen en te kunnen debuggen.

Je moet alle parameters op nul zetten (P=0, I=0, D=0, K=0) in de Arduino-schets. Ze worden ingesteld tijdens de afstemstap.

Als je geen rook of verbrande geur ziet, kun je naar de volgende stap springen!

Stap 5: Assembleren en kalibreren

Assembleren en kalibreren
Assembleren en kalibreren
Assembleren en kalibreren
Assembleren en kalibreren

Let op: Sluit nooit tegelijkertijd de voeding en de 5V van de programmer aan! Anders zie je de rook waar ik het over had in de vorige stap. Als u niet zeker weet of u dat kunt respecteren, kunt u eenvoudig de 5v-pin voor de programmeur verwijderen. Ik liet het toe omdat het voor mij handiger was om de controller te programmeren zonder voeding en om de controller te testen zonder dat de kachel als een gek voor mijn gezicht opwarmde.

Nu kun je het thermokoppel op de versterker aftakken en kijken of je iets meet (respecteer de polariteit). Als uw verwarmingssysteem op kamertemperatuur is, moet u nul meten. Met de hand verwarmen zou al tot enkele kleine waarden moeten leiden.

Hoe deze waarden te lezen? Sluit eenvoudig de pinnen PB1 en GDN rechtstreeks aan op de RX en GND van de FTDI-USB-kabel en open de arduino seriële monitor.

Wanneer de controller start, stuurt deze de waarde rood door de interne thermometer van de chip. Zo compenseer ik de temperatuur (zonder een speciale chip te gebruiken). Dit betekent dat als de temperatuur tijdens de operatie verandert, er geen rekening mee wordt gehouden. Deze waarde verschilt sterk van de ene chip tot de andere, dus het moet handmatig worden ingevoerd in de REFTEMPERATUUR-definitie aan het begin van de schets.

Voordat u het solid-state relais aansluit, moet u controleren of de uitgangsspanning in het bereik ligt dat door uw relais wordt ondersteund (3V tot 25V in mijn geval, het circuit genereert ongeveer 11V). (respecteer de polariteit)

Deze waarden zijn geen temperaturen in graden of Fahrenheit, maar het resultaat van de analoog naar digitaal conversie, dus ze variëren tussen 0 en 1024. Ik gebruik de 5V-referentiespanning, dus wanneer de versterkeruitgang bijna 5V is, is het conversieresultaat bijna 1024.

Stap 6: PID-afstemming

PID-afstemming
PID-afstemming

Ik moet vermelden dat ik geen controle-expert ben, dus ik heb een aantal parameters gevonden die voor mij werken, maar ik kan niet garanderen dat het voor iedereen werkt.

Allereerst moet ik uitleggen wat het programma doet. Ik heb een soort software PWM geïmplementeerd: een teller wordt bij elke iteratie verhoogd totdat deze 20.000 bereikt (in welk geval wordt teruggezet naar 0). Een vertraging vertraagt de lus tot een milliseconde. De meest kritische van ons zal opmerken dat de controleperiode ongeveer 20 seconden is. Elke lus begint met een vergelijking tussen de teller en een drempel. Als de teller lager is dan de drempel, dan zet ik het relais uit. Als het groter is, zet ik het aan. Dus regel ik het vermogen door de drempel in te stellen. De drempelberekening gebeurt elke seconde.

Wat is een PID-regelaar?

Als je een proces wilt besturen, heb je de waarde die je meet (analogData), de waarde die je wilt bereiken (tempCommand) en een manier om de status van dat proces te wijzigen (seuil). In mijn geval is het gedaan met de drempel ("seuil" in het frans maar veel gemakkelijker te schrijven en uit te spreken (spreek uit "sey")) die bepalen hoe lang de schakelaar aan en uit zal zijn (de duty cycle) dus de hoeveelheid energie in het systeem zetten.

Iedereen is het erover eens dat als je ver verwijderd bent van het punt dat je wilt bereiken, je een grote correctie kunt aanbrengen en als je dichtbij bent, is een kleine correctie nodig. Het betekent dat de correctie een functie is van de fout (error=analogData-tempCommand). Ja maar hoeveel? Laten we zeggen dat we de fout vermenigvuldigen met een factor (P). Dit is een proportionele regelaar. Mechanisch maakt een veer een proportionele correctie omdat de veerkracht evenredig is met de veerdruk.

U weet waarschijnlijk dat de ophanging van uw auto bestaat uit een veer en een demper (schokdemper). De rol van deze demper is om te voorkomen dat je auto terugkaatst als een trampoline. Dit is precies wat de afgeleide term doet. Als demper genereert het een reactie die evenredig is met de foutvariatie. Als de fout snel verandert, wordt de correctie verlaagd. Het vermindert oscillaties en overshoots.

De integratorterm is hier om permanente fouten te voorkomen (het integreert de fout). Concreet is het een teller die wordt verhoogd of verlaagd als de fout positief of negatief is. Vervolgens wordt de correctie verhoogd of verlaagd volgens deze teller. Het heeft geen mechanische equivalentie (of heb je een idee?). Misschien is er een soortgelijk effect wanneer u uw auto naar de service brengt en de monteur merkt dat de schokken systematisch te laag zijn en besluit om wat meer voorbelasting toe te voegen.

Dit alles is samengevat in de formule: correction=P*e(t)+I*(de(t)/dt)+D*integral(e(t)dt), waarbij P, I en D drie parameters zijn die getuned worden.

In mijn versie heb ik een vierde term toegevoegd, namelijk het "a priori" (feed forward) commando dat nodig is om een bepaalde temperatuur te handhaven. Ik heb gekozen voor een proportioneel commando aan de temperatuur (het is een goede benadering van de warmteverliezen. Het is waar als we de stralingsverliezen verwaarlozen (T^4)). Met deze term is de integrator lichter.

Hoe deze parameters te vinden?

Ik heb een conventionele methode geprobeerd die je kunt vinden door te googlen op "pid tuning temperatuurregelaar", maar ik vond het moeilijk om toe te passen en eindigde met mijn eigen methode.

Mijn methode

Zet eerst P, I, D op nul en zet "K" en "tempCommand" op kleine waarden (bijvoorbeeld K=1 en tempCommand=100). Zet het systeem aan en wacht, wacht, wacht… tot de temperatuur gestabiliseerd is. Op dit punt weet je dat met een "seuil" van 1*100=100, de temperatuur neigt naar X. Dus je weet dat je met een commando van 100/20000=5% X kunt bereiken. Maar het doel is om 100 te bereiken omdat het "tempCommand" is. Met behulp van een verhouding kun je K berekenen om 100 te bereiken (tempCommand). Uit voorzorg heb ik een kleinere waarde gebruikt dan de berekende. Het is inderdaad gemakkelijker om meer te verwarmen dan af te koelen. Dus eindelijk

Kfinal=K*tempCommand*0.9/X

Wanneer u nu de regelaar start, moet deze natuurlijk de gewenste temperatuur hebben, maar het is een heel langzaam proces omdat u alleen de warmteverliezen compenseert. Als je van de ene temperatuur naar de andere wilt gaan, moet er een hoeveelheid thermische energie in het systeem worden toegevoegd. P bepaalt met welke snelheid je de energie in het systeem stopt. Stel P in op een kleine waarde (bijvoorbeeld P=10). Probeer een (bijna) koude start. Als je geen grote overshoot hebt, probeer dan met de dubbele (P=20) als je er nu een hebt, probeer dan iets ertussenin. Als je 5% overschrijding hebt, is het goed.

Meerder nu D totdat je geen overshoot hebt. (altijd proeven, ik weet dat dit geen wetenschap is) (ik nam D = 100)

Voeg vervolgens I=P^2/(4*D) toe (Het is gebaseerd op de Ziegler-Nicholts-methode, het zou stabiliteit moeten garanderen) (voor mij I=1)

Waarom al deze beproevingen, waarom geen wetenschap?

Ik weet het! Er is een enorme theorie en je kunt de overdrachtsfunctie en de Z-transformatie en blablabla berekenen. Ik wilde een unitaire sprong genereren en vervolgens gedurende 10 minuten de reactie opnemen en de overdrachtsfunctie schrijven en wat dan? Ik wil geen rekenkunde maken met 200 termen. Dus als iemand een idee heeft, hoor ik het graag.

Ik dacht ook aan mijn beste vrienden Ziegler en Nichols. Ze vertelden me een P te vinden die oscillaties genereert en vervolgens hun methode toe te passen. Ik heb deze trillingen nooit gevonden. Het enige wat ik vond was een oooooooooovershoot naar de lucht.

En hoe modelleer je dat verwarmen niet hetzelfde proces is als koelen?

Ik zal mijn onderzoek voortzetten, maar laten we nu je controller inpakken als je tevreden bent met de prestaties die je krijgt.

Stap 7: Pak het in

Verpakken
Verpakken
Verpakken
Verpakken
Verpakken
Verpakken
Verpakken
Verpakken

Ik had toegang tot het Moskouse fablab (fablab77.ru) en hun lasersnijder en ik ben dankbaar. Door deze kans kon ik een mooi pakket maken dat in één klik werd gegenereerd door een plug-in die dozen van de gewenste afmetingen (h=69 l=66 d=42 mm) maakt. Er zijn twee gaten (diam = 5 mm) aan de bovenkant voor de led en de schakelaar en een gleuf aan de zijkant voor de programmeerpinnen. Ik heb de transformator vastgezet met twee stukken hout en de print met twee schroeven. Ik soldeerde het aansluitblok aan draden en aan de PCB, voegde de schakelaar toe tussen de transformator en de PCB-voedingsingang, verbond de led met PBO met een weerstand (300 Ohm) in serie. Ik gebruikte ook nagellak voor elektrische isolatie. Na de laatste test heb ik de doos gelijmd. Dat is het.

Aanbevolen: