Inhaltsverzeichnis:
- Schritt 1: Werkzeuge und Material
- Schritt 2: Ätzen Sie die Platine
- Schritt 3: Löten Sie die Komponenten
- Schritt 4: Programmieren Sie den Mikrocontroller
- Schritt 5: Zusammenbauen und Kalibrieren
- Schritt 6: PID-Tuning
- Schritt 7: Packen Sie es ein
Video: PID-Temperaturregler - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:20
Mein Freund baut einen Kunststoffextruder für das Kunststoffrecycling (https://preciousplastic.com). Er muss die Extrusionstemperatur kontrollieren. Dazu verwendet er ein Düsenheizband. In dieser Düse befindet sich ein Thermoelement und eine Heizeinheit, die es uns ermöglichen, die Temperatur zu messen und schließlich die gewünschte Temperatur zu erreichen (machen Sie eine Rückwirkungsschleife).
Als ich hörte, dass er mehrere PID-Regler benötigt, um all diese Düsenheizbänder zu steuern, weckte es in mir sofort den Wunsch, es selbst zu versuchen.
Schritt 1: Werkzeuge und Material
Werkzeuge
- Lötkolben, Lötdraht und Flussmittel
- Pinzette
- Fräsmaschine (chemisches Ätzen ist auch für PCB-Prototyping möglich) (Sie können die Leiterplatte auch mit meiner Adlerdatei bestellen)
- Thermometer (zur Kalibrierung)
- Arduino (jeder Typ) oder ein AVR-Programmierer
- Serielles FTDI-TTL-232-USB-Kabel
- Laserschneider (optional)
- Multimeter (Ohmmeter und Voltmeter)
Material
- Bakelit einseitige Kupferplatte (mindestens 60 * 35 mm) (Ich habe meine Säge ruiniert, als ich die Glasfaser gekauft habe, also sei vorsichtig: Bakelit)
- Attiny45 Mikrocontroller
- LM2940IMP-5 Spannungsregler
- Operationsverstärker AD8605
- NDS356AP-Transistor
- ein paar Widerstände und Kondensatoren (ich habe das SMT 0603 Adafruit-Buch)
- 230V-9V AC-DC-Transformator
- 1N4004 Dioden
- Halbleiterrelais
- Nagellack (optional)
Schritt 2: Ätzen Sie die Platine
Ich habe meine Proxxon MF70 CNC-transformiert und einen konischen Endbohrer verwendet, um die Leiterplatte zu fräsen. Ich denke, dass jedes Gravierendbit funktionieren würde. Die Gcode-Datei wurde direkt von eagle und dem pcb-gcode-Plugin generiert. Es wurden nur drei Durchgänge durchgeführt, um eine gute Streckentrennung zu gewährleisten, ohne jedoch stundenlang das gesamte Kupfer zu fräsen. Als die Platine aus der CNC-Maschine ging, habe ich die Routen mit einem Cutter gereinigt und mit einem Multimeter getestet.
Parameter: Vorschub 150mm/min, Tiefe 0.2mm, Drehzahl 20'000 t/min
Schritt 3: Löten Sie die Komponenten
Mit der Pinzette und dem Lötkolben die Bauteile an den richtigen Stellen platzieren und mit Flussmittel (es hilft) verlöten und mit den kleinsten Bauteilen beginnen. Überprüfen Sie erneut mit einem Multimeter, dass Sie keine Kurzschlüsse oder nicht angeschlossenen Elemente haben.
Sie können die Verstärkung des Verstärkers auswählen, indem Sie den gewünschten Widerstand auswählen (Verstärkung = (R3 + R4) / R4). Ich habe 1M und 2,7k genommen, also beträgt die Verstärkung in meinem Fall ungefähr 371. Ich kann den genauen Wert nicht kennen, da ich einen Widerstand von 5% verwende.
Mein Thermoelement ist ein J-Typ. Das bedeutet, dass für jeden Grad 0,05 mV ausgegeben werden. Mit der Verstärkung von 371 erhalte ich 18,5 mV pro Grad vom Verstärkerausgang (0,05 * 371). Ich möchte etwa 200 ° C messen, daher sollte der Verstärkerausgang etwa 3,7 V (0,0185 * 200) betragen. Das Ergebnis sollte 5V nicht überschreiten, da ich die 5V Referenzspannung (extern) verwende.
Das Bild entspricht der ersten (nicht funktionierenden) Version, die ich gemacht habe, aber das Prinzip ist das gleiche. In dieser ersten Version habe ich ein Relais verwendet und es direkt in die Mitte der Platine gelegt. Sobald ich mit Hochspannung schaltete, hatte ich Spikes, die den Controller neu starteten.
Schritt 4: Programmieren Sie den Mikrocontroller
Mit einem Arduino wie in diesem instructables: https://www.instructables.com/id/How-to-Program-a… können Sie den Code laden.
Ich habe ein professionelles Schmuckstück mit einem FTDI-USB-Kabel verwendet, um den Attiny 45 zu programmieren, aber diese Methode ist gleichwertig. Ich habe dann den Pin PB1 und GDN direkt in den RX und GND des FTDI-USB-Kabels gesteckt, um die seriellen Daten zu empfangen und debuggen zu können.
Sie sollten alle Parameter in der Arduino-Skizze auf Null setzen (P = 0, I = 0, D = 0, K = 0). Sie werden während des Abstimmschritts eingestellt.
Wenn Sie keinen verbrannten Rauch oder Geruch sehen, können Sie zum nächsten Schritt springen!
Schritt 5: Zusammenbauen und Kalibrieren
Achtung: Niemals das Netzteil und die 5V vom Programmiergerät gleichzeitig einstecken! Andernfalls sehen Sie den Rauch, den ich im vorherigen Schritt aufgenommen habe. Wenn Sie sich nicht sicher sind, ob Sie das respektieren können, entfernen Sie einfach den 5V-Pin für den Programmierer. Ich habe es gelassen, weil es für mich bequemer war, den Controller ohne Netzteil zu programmieren und den Controller zu testen, ohne dass die Heizung wie verrückt vor dem Gesicht heizt.
Jetzt können Sie das Thermoelement am Verstärker abzweigen und sehen, ob Sie etwas messen (Polarität beachten). Wenn Ihr Heizsystem Raumtemperatur hat, sollten Sie Null messen. Erhitzen mit der Hand sollte schon zu kleinen Werten führen.
Wie liest man diese Werte? Stecken Sie einfach die Pins PB1 und GDN direkt in den RX und GND des FTDI-USB-Kabels und öffnen Sie den seriellen Arduino-Monitor.
Wenn der Controller startet, sendet er den Wert rot vom internen Thermometer des Chips. So kompensiere ich die Temperatur (ohne einen dedizierten Chip zu verwenden). Das bedeutet, dass eine Temperaturänderung während des Betriebs nicht berücksichtigt wird. Dieser Wert ist von Chip zu Chip sehr unterschiedlich und muss daher am Anfang der Skizze manuell in die REFTEMPERATURE-Definition eingegeben werden.
Stellen Sie vor dem Anschließen des Halbleiterrelais sicher, dass der Spannungsausgang in dem von Ihrem Relais unterstützten Bereich liegt (3 V bis 25 V in meinem Fall, die Schaltung erzeugt etwa 11 V). (achten Sie auf die Polarität)
Diese Werte sind keine Temperaturen in Grad oder Fahrenheit, sondern das Ergebnis der Analog-Digital-Wandlung, sie variieren also zwischen 0 und 1024. Ich verwende die 5-V-Referenzspannung. Wenn der Verstärkerausgang also nahe 5 V liegt, liegt das Umwandlungsergebnis nahe 1024.
Schritt 6: PID-Tuning
Ich muss erwähnen, dass ich kein Steuerungsexperte bin, also habe ich einige Parameter gefunden, die für mich funktionieren, aber ich kann nicht garantieren, dass es für alle funktioniert.
Zuerst muss ich erklären, was das Programm macht. Ich habe eine Art Software-PWM implementiert: Ein Zähler wird bei jeder Iteration inkrementiert, bis er 20'000 erreicht (in diesem Fall wird er auf 0 zurückgesetzt). Eine Verzögerung verlangsamt die Schleife auf eine Millisekunde. Die anspruchsvollsten von uns werden feststellen, dass die Kontrollperiode etwa 20 Sekunden beträgt. Jede Schleife beginnt mit einem Vergleich zwischen dem Zähler und einem Schwellenwert. Wenn der Zähler niedriger als der Schwellenwert ist, schalte ich das Relais aus. Wenn es größer ist, schalte ich es ein. Also reguliere ich die Leistung, indem ich die Schwelle setze. Die Schwellenwertberechnung erfolgt jede Sekunde.
Was ist ein PID-Regler?
Wenn Sie einen Prozess steuern möchten, haben Sie den Wert, den Sie messen (analogData), den Wert, den Sie erreichen möchten (tempCommand) und eine Möglichkeit, den Status dieses Prozesses zu ändern (seuil). In meinem Fall geschieht dies mit dem Schwellenwert ("seuil" auf Französisch, aber viel einfacher zu schreiben und auszusprechen (sprich "sey")), der bestimmt, wie lange der Schalter ein- und ausgeschaltet wird (das Tastverhältnis), also die Energiemenge ins System stecken.
Alle sind sich einig, dass Sie eine große Korrektur vornehmen können, wenn Sie weit von dem Punkt entfernt sind, den Sie erreichen möchten, und wenn Sie nahe sind, ist eine kleine Korrektur erforderlich. Dies bedeutet, dass die Korrektur eine Funktion des Fehlers ist (error=analogData-tempComand). Ja, aber wie viel? Nehmen wir an, wir multiplizieren den Fehler mit einem Faktor (P). Dies ist ein proportionaler Controller. Mechanisch führt eine Feder eine proportionale Korrektur durch, da die Federkraft proportional zur Federkompression ist.
Sie wissen wahrscheinlich, dass Ihre Autoaufhängungen aus einer Feder und einem Dämpfer (Stoßdämpfer) bestehen. Die Rolle dieses Dämpfers besteht darin, zu verhindern, dass Ihr Auto wie ein Trampolin zurückprallt. Genau das macht der Ableitungsterm. Als Dämpfer erzeugt er eine der Fehlervariation proportionale Reaktion. Wenn sich der Fehler schnell ändert, wird die Korrektur verringert. Es reduziert Schwingungen und Überschwinger.
Der Integratorterm ist hier, um permanente Fehler zu vermeiden (er integriert den Fehler). Konkret handelt es sich um einen Zähler, der erhöht oder verringert wird, wenn der Fehler positiv oder negativ ist. Dann wird die Korrektur entsprechend diesem Zähler erhöht oder erniedrigt. Es hat keine mechanische Äquivalenz (oder Sie haben eine Idee?). Vielleicht gibt es einen ähnlichen Effekt, wenn Sie Ihr Auto zum Service bringen und der Mechaniker bemerkt, dass die Stoßdämpfer systematisch zu niedrig sind und beschließt, etwas mehr Vorspannung hinzuzufügen.
All dies ist in der Formel zusammengefasst: Korrektur=P*e(t)+I*(de(t)/dt)+D*Integral(e(t)dt), wobei P, I und D drei Parameter sind, die abgestimmt werden.
In meiner Version habe ich einen vierten Begriff hinzugefügt, der der "a priori" (Feed Forward) Befehl ist, der benötigt wird, um eine bestimmte Temperatur aufrechtzuerhalten. Ich habe einen proportionalen Befehl zur Temperatur gewählt (es ist eine gute Annäherung an die Wärmeverluste. Es stimmt, wenn wir die Strahlungsverluste (T^4) vernachlässigen). Mit diesem Term wird der Integrator aufgelockert.
Wie finde ich diese Parameter?
Ich habe eine konventionelle Methode ausprobiert, die Sie finden können, indem Sie "pid tuning temperature controller" googeln, aber ich fand es schwierig, sie anzuwenden und bin bei meiner eigenen Methode gelandet.
Meine Methode
Setzen Sie zuerst P, I, D auf Null und setzen Sie "K" und "tempCommand" auf kleine Werte (zB K=1 und tempCommand=100). Schalten Sie das System ein und warten, warten, warten… bis sich die Temperatur stabilisiert hat. An dieser Stelle wissen Sie, dass bei einem "Seuil" von 1*100=100 die Temperatur gegen X tendiert. Sie wissen also, dass Sie mit einem Befehl von 100/20000=5% X erreichen können. Aber das Ziel ist es, 100. zu erreichen weil es "tempCommand" ist. Mit einem Anteil können Sie K berechnen, um 100 zu erreichen (tempCommand). Vorsichtshalber habe ich einen kleineren Wert als den berechneten verwendet. Tatsächlich ist es einfacher, mehr zu erwärmen als abzukühlen. So endlich
Kfinal=K*tempCommand*0.9/X
Wenn Sie den Regler jetzt starten, sollte er natürlich auf die gewünschte Temperatur tendieren, aber es ist ein wirklich langsamer Prozess, da Sie nur die Wärmeverluste kompensieren. Wenn Sie von einer Temperatur zur anderen wechseln möchten, muss dem System eine Menge Wärmeenergie zugeführt werden. P bestimmt, mit welcher Rate Sie die Energie in das System einbringen. Setzen Sie P auf einen kleinen Wert (zum Beispiel P=10). Versuchen Sie es mit einem (fast) Kaltstart. Wenn Sie kein großes Überschwingen haben, versuchen Sie es mit dem Doppelten (P=20), wenn Sie jetzt eins haben, versuchen Sie etwas dazwischen. Wenn Sie 5% Überschwingen haben, ist es gut.
Erhöhen Sie nun D, bis Sie kein Überschwingen mehr haben. (immer Versuche, ich weiß, das ist keine Wissenschaft) (ich habe D=100 genommen)
Dann addiere I=P^2/(4*D) (Es basiert auf der Ziegler-Nicholts-Methode, es sollte Stabilität garantieren)(für mich I=1)
Warum all diese Versuche, warum nicht Wissenschaft?
Ich weiß, ich weiß! Es gibt eine riesige Theorie und Sie können die Übertragungsfunktion und die Z-Transformation und blablabla berechnen. Ich wollte einen einheitlichen Sprung erzeugen und dann für 10 Minuten die Reaktion aufzeichnen und die Übertragungsfunktion schreiben und was dann? Ich möchte nicht mit 200 Termen rechnen. Wenn also jemand eine Idee hat, würde ich mich freuen, zu lernen, wie man das richtig macht.
Ich dachte auch an meine besten Freunde Ziegler und Nichols. Sie sagten mir, ich solle ein P finden, das Schwingungen erzeugt, und dann ihre Methode anwenden. Ich habe diese Schwingungen nie gefunden. Das einzige, was ich fand, war ein oooooooovershoot in den Himmel.
Und wie lässt sich die Tatsache modellieren, dass Heizen nicht gleich Kühlen ist?
Ich werde meine Nachforschungen fortsetzen, aber jetzt packen wir Ihren Controller ein, wenn Sie mit der Leistung, die Sie erhalten, zufrieden sind.
Schritt 7: Packen Sie es ein
Ich hatte Zugang zum Moskauer Fablab (fablab77.ru) und ihrem Laserschneider und bin dankbar. Diese Gelegenheit ermöglichte es mir, mit einem Klick ein schönes Paket zu erstellen, das von einem Plugin erstellt wurde, das Schachteln mit den gewünschten Abmessungen (h = 69 l = 66 d = 42 mm) herstellt. Es gibt zwei Löcher (Durchmesser = 5 mm) auf der Oberseite für die LED und den Schalter und einen Schlitz an der Seite für die Programmierstifte. Den Transformator habe ich mit zwei Holzstücken und die Platine mit zwei Schrauben befestigt. Ich lötete den Klemmenblock an Drähte und an die Platine, fügte den Schalter zwischen dem Transformator und dem PCB-Stromeingang hinzu, schloss die LED mit einem Widerstand (300 Ohm) in Reihe an PBO an. Ich habe auch Nagellack zur elektrischen Isolierung verwendet. Nach dem letzten Test habe ich die Box verklebt. Das ist es.