Hallo, ich hoffe ich bin hier nicht im falschen Unterforum gelandet. Ich suche einen Software PID-Temperatur-Controller der über eine Computerschnittstelle wie z.B. dem Druckeranschluss funktioniert. Am besten mit der Möglichkeit Temperaturrampen einzustellen. In meiner Vorstellung übernimmt ein PC die ganzen Rechenaufgaben und steuert über die Druckerschnittstelle -> Optokoppler -> SSR-Relais eine Herdplatte. Das einlesen eines Temperatursensors sollte ähnlich funktionieren. Hat jemand eine Idee wo ich fündig werden kann? Programmieren kann ich nicht sonderlich gut, allerdings habe ich mit C++ und AVR schon ein paar Projekte zusammengestümpert. Gruß Kauf
Kaufparkangucker schrieb: > In meiner Vorstellung übernimmt ein PC die ganzen Rechenaufgaben und > steuert über die Druckerschnittstelle Eine spezielle Druckerschnittstelle dürfte bei den meisten aktuellen PC zu den echten Raritäten zählen. Meinst du eine USB-Schnittstelle?
Zum Schluss wäre mir das egal welche Schnittstelle es ist. Mir dem Programmieren der Druckerschnittstelle unter Windows habe ich allerdings bereits Erfahrungen gesammelt. Ich dachte an folgenden Aufbau. Temperatursensor (One-Wire oder PT1000 inkl. AD-Wandler) | | Computer mit PID Software | | Optokoppler, SSR Relais | | Herdplatte Alternativ ginge auch so ein Chinesischer PID Controller, wie es sie zu Hauf bei ebay gibt. jedoch sind die alle nicht programmierbar oder besitzen keine RS232 Schnittstelle oder wenn doch dann sind sie teuer. Leider muss ich beim kauf auf mein Budget (armer Student am Rande des Existezminimums ;-)) achten.
Schau hier. Da kannst Du Dir sicher ein paar Scheiben von abschneiden. http://www.ospid.com/blog/ fchk
Kaufparkangucker schrieb: > Leider muss ich beim kauf auf mein Budget (armer Student am Rande des > Existezminimums ;-)) achten. Ich hoffe mal es ist nicht Elektrotechnik was du studierst?
Hallo, einen PID Controller zu schreiben ist eigentlich nicht schwer, weder auf dem PC noch auf dem Controller. Di brauchst ein I_Glied und damit läßt sich zuwohl das I-Glied als auch das D-Glied realisieren.
Du musst dir darüber klar werden, wie du die Schnittstellenfrage löst, aber z.B. Application Note 221 von Atmel beschreibt einen PID Regler in C, der eigentlich für die AVR MC gedacht ist. Da aber die Theorie ganz gut beschrieben wird, sollte es möglich sein, das auch in VC Express einzuklappern. Das interfacing zur Aussenwelt ist dabei die Herausforderung, der eigentliche Algorithmus ist easy
:
Bearbeitet durch User
Das komplett selbst zu entwickeln schaffe ich leider nicht, denn ich brauche es in meiner Bachelorarbeit, in der ich bereits mitten drin stecke. Das hätte nur was gebracht wenn es so etwas schon gäbe.
Kaufparkangucker schrieb: > Das komplett selbst zu entwickeln schaffe ich leider nicht, Ah geh. Der PID-Regler in C ist pipifax. Das sind 4 bis 8 Zeilen Code (je nach implementiertem Anti-Windup), die zb in Windows regelmässig von einem Timer aufgerufen werden. http://www.rn-wissen.de/index.php/Regelungstechnik Der eigentliche Knackpunkt ist die Anbindung der Sensoren bzw. Aktuatoren an die am PC vorhandenen Schnittstellen. > denn ich > brauche es in meiner Bachelorarbeit, in der ich bereits mitten drin > stecke. Warum machst du eine Bachelorarbeit, in der Programmieren vorkommt, wenn du nicht Programmieren kannst?
Ich würde das sicher hin bekommen, aber nicht in der Zeit in der ich es benötige. Ich habe schon mit inpout LED's und Schaltern an einem LPT Port was gemacht, und mit 3 Dallas DS18S20 eine Tempregelung (on/off) gebaut. Ganz unbedarft bin ich nicht, aber das dauert halt... Ich dachte echt das es längst so was gibt.
Aso, das Programmieren hat sich so ergeben, ich habe festgestellt das ich einen PID mit programmierbaren Rampenfunktionen benötige um ein System mit exakt 3 Kelvin pro Minute aufzuheizen.
Wie wir schon sagten ist der PID ein 6-zeiler, und die Kommunikation ist eh auf das Problem spezifisch. Wenn du nicht hier ueber tage rungeeiert waerst, waer's schon laengst fertig. Ich klopp sowas megatriviales in ein paar stunden zusammen.
Hab ich doch schon, mehrfach. Der PID laesst sich ebenso leicht im Netz finden wie ein Protokoll. Das Ganze laesst man nicht auf dem PC, sondern auf einem AVR laufen und bindet per Serieller Schnittstelle, resp USB an. Mach du mal.
Der Link wurde dir ja schon (unter anderem gegeben). Ja, das
1 | esum = esum + e |
2 | y = Kp * e + Ki * Ta * esum + Kd * (e – ealt)/Ta |
3 | ealt = e |
ist der PID Regler. D.h. das ist die 'Reglergleichung'. Was noch fehlt ist die bestimung des Regelfehlers. Die ist aber leicht, denn das ist nichts anderes als Istwert - Sollwert (oder anders rum). Also
1 | e = sollwert - istwert; |
2 | esum = esum + e |
3 | y = Kp * e + Ki * Ta * esum + Kd * (e – ealt)/Ta |
4 | ealt = e |
und y ist die Stellgröße, die aus dem System wieder rausgeht. Das ganze noch in eine Timer-Routine gepackt, so dass es in regelmässigen Zeitabständen (Ta) aufgerufen wird und im Prinzip wars das schon. OK, ein Antiwindup wird an manchen Stellen noch sinnvoll sein, aber auch das ist nichts anderes als ein Vergleich mit vorgegebenen Minimal-Maximal Werten und einem verhindern des Ausfsummierens von Werten (hauptsächlich der Fehlersumme esum) über 'alle Schranken'. Falls es dir noch nicht aufgefallen ist. Ein PID Regler ist softwareseitig trivial. Wie gut er funktioniert, hängt von den konkreten Werten für Kp, Ki und Kd ab. Die sind es, die den Unterschied von einem guten Regler zu einem schlechten ausmachen. Und die wiederrum hängen von der Hardware ab, die da drann hängt. Aber warrum kau ich dir das eigentlich vor?` Steht doch alles in den geposteten Links auch drinnen?
:
Bearbeitet durch User
gut, werde ich mal anfangen bissl was in C für einen Atmega zusammen zu tippen. Ich würde einen NTC Temp. Sensor am internen ADC auswerten und die Temp per UART an den PC übertragen. Dort sitzt dann der Pid, der zu dem Atmega meldet ob Platte an oder aus. Dann muss aber noch die Möglichkeit einer Rampenfunktion mit rein... Das übersteigt meine Möglichkeiten leider.
Ist aber eig. egal. Wäre nur sinnvoll gewesen wenns das schon gegeben hätte.
> Ich würde einen NTC Temp. Sensor am internen ADC auswerten und > die Temp per UART an den PC übertragen. Dort sitzt dann der Pid, > der zu dem Atmega meldet ob Platte an oder aus. Und wie verhinderst du, dass der Mega wegen chronischer Unterbeschäftigung Suizid begeht? Du könntest noch einen Supercomputer in den USA anheuern, dem du die Messwerte über Internet schickst, der die Reglergleichung auswertet und das Ergebnis zurückschickt. Mit etwas Geschick und genug Infantilität schaffst du es, dass deine NTC Werte mindestens 3 mal rund um den Erdball geschickt werden, für etwas was der Mega auch problemlos alleine rechnen könnte ... und sich dabei auch noch langweilt.
Für die Zukunft: Du willst ums verrecken nicht 2 Computer für etwas einsetzen, was einer alleine auch noch bewältigt. Ums verrecken nicht. Wenns knapp hergeht, dann willst du die Aufgebenstellung ein bißchen zu deinen Gunsten abändern, so dass du wieder mit 1 Computer über die Runden kommst. Erst wenn völlig klar ist, dass du mit 1 Computer nicht über die Runden kommst UND die Verwendung einer stärkeren Maschine nicht möglich ist (zb weil es keine gibt), erst DANN denkst du über die Verwendung mehrerer Prozessoren nach. Denn: Du lagerst zwar einen Teil deiner Aufgabenstellung auf den anderen Computer aus, dafür holst du dir aber zwei neue Probleme mit ins Boot hinein, die du vorher nicht hattest. Und dieses Probleme lauten: * zuverlässige und fehlerfreie Kommunikation der beteiligten Komponenten ... und zwar unter allen nur denkbaren Umständen. * Synchronisierung der beteiligten Komponenten Wobei Problem 2 mit Problem 1 des öfteren, aber nicht immer, zusammenhängt. Mehrprozessorsysteme sind nicht einfacher als Einprozessorsysteme. Ganz im Gegenteil. Ganz im Gegenteil.
:
Bearbeitet durch User
Der am Boden liegt und stampft... ich wuerd's erst mal mit einem konstanten vorgabewert beginnen, un wenn dasGanze dann durchschaut ist, sich ueberlegen wie man nun mit einer Rampe kommt.
Kaufparkangucker schrieb: > Dann muss aber noch die Möglichkeit einer Rampenfunktion mit rein... > Das übersteigt meine Möglichkeiten leider. Dann ist die Lage wirklich ernst! wendelsberg
Kaufparkangucker schrieb: > Das komplett selbst zu entwickeln schaffe ich leider nicht, denn ich > brauche es in meiner Bachelorarbeit, in der ich bereits mitten drin > stecke. Das hätte nur was gebracht wenn es so etwas schon gäbe. Schau hier: http://brettbeauregard.com/blog/2011/04/improving-the-beginners-pid-introduction/ Arbeite ALLE Folgen durch, dann lernst Du auch noch was dabei. fchk
Kaufparkangucker schrieb: > Dann muss aber noch die Möglichkeit einer Rampenfunktion mit rein... Aber das ist doch die Grundidee des PID-Reglers. Sonst reicht ein simpelst Zweipunkt Dingens, wie in jeder Lötstation. Ein gut dimensionierter PID wird den Ist-Wert gerade so sanft an den Sollwert heranfahren, das es nicht überschwingt und bei Erreichen des Sollwertes nicht zittert. Das steht aber auch alles in AVR221. Mein Vorschlag wäre, den Regler komplett in den AVR zu implementieren und die PID Faktoren per PC einstellbar zu machen, neben dem Sollwert.
Ich schätze, dass mit 'Rampenfunktion', die geforderte Eigenschaft meint, dass er mit (Zitat) 'exakt 3K pro Minute' aufheizen muss. Nun, nichts und niemand hindert dich daran, das Programm so aufzubauen, dass es dem PID Regler jede Minute einen neuen Sollwert vorgibt, der um 3K höher als der vorhergehende liegt. Tip: Das kann man auch noch runterbrechen: anstelle von 3K alle 1 Minute erreicht man mit 1.5K alle 30 Sekunden eine etwas stetigere Aufheizung. Oder 0.75K alle 15 Sekunden. Oder ... Wenn der PID Regler erst mal soweit läuft, dass er eine vorgegebene Temperatur sauber und ohne Überschwinger 'anfährt', dann steht einem darauf aufbauend Tür und Tor offen. Ja, ich weiß. Die Reglerprofis machen sowas mit kaskadierten Reglern. Für mich würde es so eine sukzessive Erhöhung auch tun.
:
Bearbeitet durch User
Kaufparkangucker schrieb: > gut, werde ich mal anfangen bissl was in C für einen Atmega zusammen zu > tippen. > Ich würde einen NTC Temp. Sensor am internen ADC auswerten und die Temp > per UART an den PC übertragen. > Dort sitzt dann der Pid, der zu dem Atmega meldet ob Platte an oder aus. > Dann muss aber noch die Möglichkeit einer Rampenfunktion mit rein... > Das übersteigt meine Möglichkeiten leider. NTC Temp. ist nicht die beste Wahl. Die Kennlinie ist nicht linear. Das ist ein KTY besser. Machst Du die Übertragung über UART dann geht es auch, aber Du must überwachen ob die Kopplung steht und ob das PC Programm läuft. Wenn nicht, ist der sichere Zustand zu erreichen, also Platten aus. Was mir noch aufgefallen ist. Du redest von einem PID Controller und sprichst von Platten ein aus... Ein PID liefert ein Analogsignal und Platten einaus ist ein Digitalsignal... Wie schaltest Du die Platten? Die Rampe ist ja eigentlich kein Problem. Du nimmst einen Zeitinterrupt und dann rechnest Du alle x Sekunden einen neuen Sollwert aus. Ohne die Aufgabe genauerer zu kennen, währe mein Ansatz so: Der AT regelt die Temperatur, Über den UART wird der Sollwert und der Temperaturgradient ggf. Regelparameter zum AT übertragen. Der AT sendet seinerseits die Temperatur und Statusinformationen zum PC (Hier könnte für die Regeloptimierung ggf. die einzelnen Anteile der Stellgröße hilfreich sein, also wieviel macht der P-, I- und D- Anteil aus ). Der PC bereitet die Daten grafisch auf. Es hat sich einfach bewährt die Steuerung, Regelung und Überwachung auf ein System laufen zu haben, das dicht am Prozess ist. Alles andere führt nur zu Problemen und erschwert die Fehlersuche. Aus den anderen Beiträge vermute ich, dass es sich um Herdplatten handelt. Diese haben eine regelungstechnisch sehr schlechte Eigenschaft. Durch die Aufheizzeit der Platte wirkt es quasi wie eine Totzeit. Um nun genau die Rampe zu fahren, würde ich die Regelparameter in Nähe des aperiodischen Grenzfalls ermitteln, wobei hier ein gut dimensionierter D-Anteil helfen könnte.
Karl Heinz schrieb: > Ich schätze, dass mit 'Rampenfunktion', die geforderte Eigenschaft > meint, dass er mit (Zitat) 'exakt 3K pro Minute' aufheizen muss. > Nun, nichts und niemand hindert dich daran, das Programm so aufzubauen, > dass es dem PID Regler jede Minute einen neuen Sollwert vorgibt, der um > 3K höher als der vorhergehende liegt. Tip: Das kann man auch noch > runterbrechen: anstelle von 3K alle 1 Minute erreicht man mit 1.5K alle > 30 Sekunden eine etwas stetigere Aufheizung. Oder 0.75K alle 15 > Sekunden. Oder ... > > Wenn der PID Regler erst mal soweit läuft, dass er eine vorgegebene > Temperatur sauber und ohne Überschwinger 'anfährt', dann steht einem > darauf aufbauend Tür und Tor offen. > Ja, ich weiß. Die Reglerprofis machen sowas mit kaskadierten Reglern. > Für mich würde es so eine sukzessive Erhöhung auch tun. Es gibt für den Ansatz mehrere Möglichkeiten. Kaskadierte Regler sind nicht immer das Allheilmittel für alle reglungstechnischen Aufgaben. Ein gut eingestellter Einzelregler kann deutlich besser arbeiten als eine grob eingestellte Kaskade. Es hängt eben von den Randbedingungen ab. Was ich in der Industrie schon oft gesehen und selber verwenden sind Sollwertrampen. Die verhindern, z.B. bei hohem P-Anteil, das der Regler schlagartig die Stellgröße ändert. Durch die Rampe bekommt der Regler Zeit nachzuregeln und so kann eine anlagenschonende Fahrweise entstehen. Wie gesagt, es hängt von Rahmenbedingungen und der Aufgabenstellung ab. Bevor ich zur Kaskade greife, prüfe ich ob andere einfachere Verfahren Sollwertrampe, Störgrößenaufschaltung auch zielführend sein können. Die Regelungstechnik bietet viele Ansätze, man muss nur den richtigen finden. Dazu muss man die Regelstrecke kennen.
Regeln möchte ich ein PTC Heizelement, wie ich es bei Conrad gefunden habe: 532894 - 62 Dazu wollte ich an den Atmega ein SSR Relais hängen. Zur Zeit sieht mein Ziel so aus das ich irgendwie auf 100°C kommen muss und von da an mit 1-3 K / min wieder auf Raumtemperatur. Später müssen auch mal 200°C möglich sein. Der Ganze Aufbau besteht aus einer Bodenfliese, auf dem das Heizelement ist.Auf das Heizelement wollte ich eine dünne Metallplatte (100 x 20 x 1 mm) legen um die Wärme besser zu verteilen. Auf die Metallplatte kommt die zu untersuchende Kunststoffprobe, bei der es sich um eine Folie von etwa 100 µm Höhe handelt. Da drauf soll wiederrum ein Stück Fliese liegen damit die Folie plan auf der Metallplatte liegt. Mit Hilfe der beiden geposteten Links will ich die Tage erst mal was zusammentippen, wenn ich dann ins Stocken gerade sag ich Bescheid.
Kaufparkangucker schrieb: > Auf das Heizelement wollte ich eine dünne Metallplatte (100 x 20 x 1 > mm) > legen um die Wärme besser zu verteilen. Probier, eine Kupferplatte zu bekommen, das leitet die Wärme noch besser. Die Frage ist halt, wo du am besten den Sensor unterbringst, denn du willst ja die Wärme an der Folie messen. > Mit Hilfe der beiden geposteten Links will ich die Tage erst mal was > zusammentippen, wenn ich dann ins Stocken gerade sag ich Bescheid. Klingt doch gut - viel Erfolg.
Matthias Sch. schrieb: > Probier, eine Kupferplatte zu bekommen, das leitet die Wärme noch > besser. Ob's der Faktor 2 gegenüber Alu rausreißt? Projekte zur Regelung von Temperaturrampen gibt's zu genüge für Reflow-Öfen Kaufparkangucker schrieb: > Ich habe schon ... mit 3 Dallas DS18S20 eine Tempregelung (on/off) > gebaut. Kaufparkangucker schrieb: > Ich würde einen NTC Temp. Sensor am internen ADC auswerten und die Temp > per UART an den PC übertragen. Wenn du mit dem DS18S20 schon gearbeitet hast, warum willst du den nicht verwenden?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.