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.
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
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?
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.
> 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.
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:> 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.
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?