Forum: Mikrocontroller und Digitale Elektronik Software-PID-Controller


von Kaufparkangucker (Gast)


Lesenswert?

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

von Bastler (Gast)


Lesenswert?

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?

von Kaufparkangucker (Gast)


Lesenswert?

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.

von Frank K. (fchk)


Lesenswert?

Schau hier. Da kannst Du Dir sicher ein paar Scheiben von abschneiden.

http://www.ospid.com/blog/

fchk

von Claus M. (energy)


Lesenswert?

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?

von Kaufparkangucker (Gast)


Lesenswert?

Nein, die andere Brotlose Kunst Physik XD

von Heinz W. (harryhirsch_4711)


Lesenswert?

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.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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
von Kaufparkangucker (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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?

von Kaufparkangucker (Gast)


Lesenswert?

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.

von Kaufparkangucker (Gast)


Lesenswert?

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.

von мальеикий тролл (Gast)


Lesenswert?

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.

von Kaufparkangucker (Gast)


Lesenswert?

na mach mal...

von мальеикий тролл (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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
von Kaufparkangucker (Gast)


Lesenswert?

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.

von Kaufparkangucker (Gast)


Lesenswert?

Ist aber eig. egal. Wäre nur sinnvoll gewesen wenns das schon gegeben 
hätte.

von Karl H. (kbuchegg)


Lesenswert?

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

von Kaufparkangucker (Gast)


Lesenswert?

:D Da hast Du sicher recht.

von Karl H. (kbuchegg)


Lesenswert?

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
von stock (Gast)


Lesenswert?

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.

von wendelsberg (Gast)


Lesenswert?

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

von Frank K. (fchk)


Lesenswert?

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

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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
von Heinz W. (harryhirsch_4711)


Lesenswert?

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.

von Heinz W. (harryhirsch_4711)


Lesenswert?

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.

von Kaufparkangucker (Gast)


Lesenswert?

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.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von chris_ (Gast)


Lesenswert?


von Wolfgang (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.