Forum: Mikrocontroller und Digitale Elektronik Stellgrößen Problem 8/24 Bit


von Kai K. (lekai)


Lesenswert?

Hallo

Ich soll einen Temperaturregler aufbauen. Die Genauigkeit der
Temperaturmessung soll mindestens 0,1 Grad sein. Deswegen verwende ich
einen PT1000 mit einem Konstantstrom von 1mA, den ich mit einem 24 Bit
AD-Wandler auswerte.
Als Stellgröße verwende ich ein PWM Signal mit dem ich eine Heizfolie
betreibe. Da ich einen ATmega16 verwende und der 16 Bit Timer belegt ist
bleibt mir nur noch ein 8 Bit Timer.
Als Regelalgorithmus habe ich den Software PI Regler aus
www.roboternetz.de verwendet.

e = w - x;        //Vergleich
esum = esum + e;      //Integration I-Anteil
if (esum < -400) {esum = -400;}          //Begrenzung I-Anteil
if (esum > 400) {esum = 400;}
y = Kp*e + Ki*Ta*esum;      //Reglergleichung
if (y < 0) {y = 0;}      //Begrenzung Stellgröße
if (y > 255) {y = 255;}
PWM = y;


So und das ist jetzt auch mein Problem ich habe eine Regelgröße mit 24
Bit und einen Stellgröße mit 8 Bit Auflösung.

Wie kann ich die Regelgröße y an die Stellgröße PWM anpassen? Die Werte
für Y sind sehr groß und durch die Begrenzung auf 255 entsteht kein
befriedigendes Regelverhalten.

vielen Dank für eure Hilfe

von Andy (Gast)


Lesenswert?

Hi,
Du bist doch bei den AVR`s nicht auf die 8 Bit beschränkt. Nimm ein 
register mehr und du hast 16 Bit verarbeitung.. noch eins mehr und du 
hast 24 Bit.. usw... Die beschränkung liegt lediglich darin dass diese 8 
bit Prozessoren 16... 32 ...64...bit operationen nicht mit einem Takt 
erledigen können...

von lkmiller (Gast)


Lesenswert?

>if (y < 0) {y = 0;}      //Begrenzung Stellgröße
>if (y > 255) {y = 255;}
>PWM = y;
Das ist zu einfach gestrickt,
das gibt ja fast nur einen 2-Punkt-Regler?

Das Stichwort heißt hier nicht Begrenzung, sondern Skalierung.
Wie groß wird denn dein y?
Welcher Skalierungsfaktor ist zwischen y und den Grenzen der 8-Bit-PWM?



BTW:
>PT1000
>Konstantstrom von 1mA

Du machst dir selbst deine Messung ungenau.
Stichwort Eigenerwärmung.

von Kai K. (lekai)


Lesenswert?

Hallo lkmiller

ja so etwas in der art habe ich mir auch vorgestellt, aber in welchem 
Verhältnis skaliere ich? es muss ja schon mit dem Verhältnis 24/8 zutun 
haben, da mein y ja auch von der Regeldifferents abhängt.

Eigenerwärmungs Effekte sollten minimal sein, das der PT1000 auf einem 
Kupferblock montiert ist, und die wärme direckt abgeleitet wird.

von Kai K. (lekai)


Lesenswert?

Hallo Andy

ich wusste nicht das das möglich ist. und habe im Datenbaltt auch nichts 
gefunden. Der Timer0 hat doch nur das OCR0 Compare Register.

von lkmiller (Gast)


Lesenswert?

1
e = w - x;         //Vergleich
2
esum = esum + e;      //Integration I-Anteil
3
if (esum < -400) {esum = -400;}          //Begrenzung I-Anteil
4
if (esum > 400) {esum = 400;}
5
y = Kp*e + Ki*Ta*esum;      //Reglergleichung

Was hast du denn für Wertebereiche?
e, w, x, y, esum, Kp, Ki, Ta
sind
char, short, long, float, double?

Also:
Wie groß wird dein y?

Diese Frage musst du beantworten.
Erst dann kannst du skalieren.

von Kai K. (lekai)


Lesenswert?

Hallo Ilkmiller

Die Variablen e,x,w und esum sind Variablen von typ long. Kp, Ki und Ta 
sind floats. Daher muss Y dann auch ein float sein.

wie groß mein Y ist weiß ich gerade leider nicht, da ich den aufbau 
leider gerade nicht vor mir habe. aber wie würde es denn funktionieren 
wenn ich den wert habe.

vielen dank für deine hilfe

von Andy (Gast)


Lesenswert?

Hi,

PWM ist nicht auf die Timer beschränkt, sondern lässt sich auch per 
software an jedem I/O Pin des AVR ausgeben. PWM per Timer hat nur den 
Vorteil, dass sie schneller ist, da sie zum grössten Teil per Hardware, 
unabhängig vom restlichen Programm erzeugt wird und den eigentlichen 
Programmablauf nicht beeinträchtigt.

von Falk B. (falk)


Lesenswert?

@ Karl Kunze (lekai)

>Ich soll einen Temperaturregler aufbauen. Die Genauigkeit der
>Temperaturmessung soll mindestens 0,1 Grad sein. Deswegen verwende ich

Wirklich? Oder meinst du nur die Auflösung von 0,1K?

Aufloesung und Genauigkeit

>einen PT1000 mit einem Konstantstrom von 1mA, den ich mit einem 24 Bit
>AD-Wandler auswerte.

Noebel geht die Welt zu GRunde. Wozu wird diese Temperaturmessung 
gebraucht?

>So und das ist jetzt auch mein Problem ich habe eine Regelgröße mit 24
>Bit und einen Stellgröße mit 8 Bit Auflösung.

>Wie kann ich die Regelgröße y an die Stellgröße PWM anpassen?

Einfach divivdieren bzw. rechtschschieben?
Womit aber bisweilen der Sinn der Regelung mit 24Bit ein wenig in Frage 
gestellt wird.

MFG
Falk

von lkmiller (Gast)


Lesenswert?

Lass doch den Regler mal ganz ohne I-Anteil rennen (Ki=0).
Regelt der überhaupt noch?

Welchen Wertebereich (min. Temp. bis max. temp.) hat dein Soll- und 
Ist-Wert?

Was macht deine Heizfolie mit PWM=0 und PWM=255?
Annahme:
PWM=0 --> kalt
PWM=255 --> heiß

Mehr als ausschalten kannst du nicht -->
Wenn y<=0 --> PWM = aus
wenn y> 0 --> PWM = y*255/maxy  // das ist die Skalierung auf maxy

Ein Dreisatz:
wenn y=maxy ist, dann ist die PWM=255 (voll heizen)
wenn y<=0 ist, dann ist die PWM=0 (aus)

von Matthias L. (Gast)


Lesenswert?

regelungstechnisches Erstzschaltbild?

von Kai K. (lekai)


Lesenswert?

Ok ich habe verstanden das ich die Stellgröße y skalieren muss, aber 
verändere ich da nicht mein Verstärkungsfaktor?

von Matthias L. (Gast)


Lesenswert?

Sage mal, du musst doch irgendein regelungstechnisches Ersatzschaltbild 
haben, welches du realisieren willst? Oder prgorammierst du einfach 
drauf los?

>Ok ich habe verstanden das ich die Stellgröße y skalieren muss, aber
>verändere ich da nicht mein Verstärkungsfaktor?
Ja.

von Kai K. (lekai)


Lesenswert?

@ ikmiller

Ok das habe ich verstanden, alles klar. Aus meiner maximal anzunehmenden 
Regeldifferenz errechne ich mein ymax. Und das skaliere ich dann auf 
255.
vielen Dank.

von Kai K. (lekai)


Lesenswert?

@lippy
Was verstehst du unter regelungstechnisches Ersatzschaltbild? eine 
Operationsverstärkerschaltung?

Ich möchte direkt einen software PI Regler realisieren und habe ihn mit 
den Einstellregeln nach Takahshi "berechnet". Zur Identifikation der 
Regelstrecke habe ich eine Sprungantwort aufgenommen.

von Falk B. (falk)


Lesenswert?

@ Karl Kunze (lekai)

>Was verstehst du unter regelungstechnisches Ersatzschaltbild?

Ein Blockschaltbild, wo der P/D/I Anteil als Block dargestellt sind, das 
Stellgleid sowie die Regelstrecke, Differenzierpunkt (Subtrahierer), 
idealerweise incl. Zeitkonstanten und Formel für jeden Block.

MFG
Falk

von Matthias L. (Gast)


Angehängte Dateien:

Lesenswert?

Ich hab mal eins gemalt.

Und alle Informationen aus deinem Post eingetragen, die ich entnehmen 
konnte.

Hier kannst du erstmal dran rum rechnen und sehen, was du wo für 
Variablen und Wertebereiche brauchst, usw...

Sowas bracust du zuerst, natürlcih komplett ausgefüllt und berechnet. 
(Evtl sogar simuliert).
Erst danach macht es doch Sinn, etwas (also das) zu programmieren.

Oder bevorzugst du den Entwicklungsalgorithmus TryAndError ?

von Kai K. (lekai)


Lesenswert?

OK

Eine Sprungantwort habe ich aufgenommen. Es ist ein PT1, mit einer 
Totzeit Tt=5 s. und Ts=725 s.

Bei dem Ks bin ich mir nicht ganz sicher. Meine Sprung verläuft von 23,5 
bis 35,6 Grad Celsius und die Stellgröße springt von 20 auf 115.

Ks=Istwertänderung/Stellgrößenänderung

Für die Istwertänderung habe ich die Spannungsänderung von 23,5 auf 35,6 
genommen. also U(23,5)=1,0915 V und U(35,6)=1,1384 V das macht klägliche 
0,047 V.
Und für die Stellgrößenänderung habe ich den Spannungsmittelwert durch 
das PWM Signal berechnet. Die Heizfolien hat 13,8 Ohm und wird mit 12 V 
betrieben. Also macht das PWM=20 => 0,94 V und PWM=115 => 5,41. macht 
4,47 V.

Für Ks ergibt sich dann 0,01. Das ist gefühlt sehr wenig.

Ist das so richtig? Es kommt mir sehr klein vor.

vielen dank für eure geduld

von Matthias L. (Gast)


Lesenswert?

>Es ist ein PT1, mit einer Totzeit Tt=5 s. und Ts=725 s.
Ein PT1 hat keine Totzeit. Wie hast du die Totzeit festgestellt?


>das macht klägliche 0,047 V.
Wenn dann 0,047V/12,1K = 3,88mV/K.


>indestens 0,1 Grad sein.
Bist du sicher, dass du 388µV messen kannst? Also nicht nur 
5V/2^24=300nV, sondern auch die Leiterbahnführung, Schaltungsmannse...?


>Die Heizfolien hat 13,8 W ...
>PWM=20 => 0,94 V und PWM=115 => 5,41.

Heizt du mit Spannung deine Strecke auf, oder mit Watt (=U*I)
=>Annahme Ohmsch: P = Ueff²/R = P0*WURZEL(d)
  P = 13,8W * (duty/256)²    duty=[0..255]


>23,5 bis 35,6 Grad Celsius
>Spannungsänderung von 23,5 auf 35,6 genommen.
???

Was ist denn das für ein Teil, was du dort erwärmst? Wie ist der Sensor 
angebracht?

von Kai K. (lekai)


Lesenswert?

> Ein PT1 hat keine Totzeit.
Ok es ist ein PT2 mit Totzeit Tt und Zeitkonstante Ts. Ich habe die 
Sprungantwort mit dem verwendeten PT1000 und AD-Wandler aufgenommen. 
Einmal pro sekunde habe ich dann über Uart einen Wert geschickt. Aus dem 
enstandenen Datensatz kann ich die Totzeit ablesen. also die Zeit von 
Sprungbeginn bis zur ersten Temperatur Änderung.

Zum Aufbau: Es wird eine Kupferschiene geheizt. Auf der Kupferschiene 
ist die Heizfolien ( 13,8 Ohm 12V ) aufgeklebt. Der Temperatursensor ist 
direkt neben der Heizfolie auf das Kupfer geklebt, und ist über 4 
leitertechnik an dem AD Wandler angeschlossen. Ich kann 388µV messen das 
geht!

>das macht klägliche 0,047 V.
>>Wenn dann 0,047V/12,1K = 3,88mV/K.

Ich heize mit P ( ich hatte mich verschrieben es sind 13,8 Ohm ), da 
hast du natürlich recht. Mein Gedanke dabei war - da ich ja einen Faktor 
haben will müssen sich ja auch die Einheiten wegkürzen.

Wie kann ich denn nun das Ks berechnen??

von 3365 (Gast)


Lesenswert?

Aaaaahhhhh, schmeiss Float in die Tonne. Das bringt nichts. Mach die 
Rechnung in 32bit signed, dh longinteger. Und am Schluss 
runterskalieren, zb nur das hoechstwertige byte verwenden. Musst dir die 
Zwischenergebnisse mal ausgeben lassen und dass etwas kreativ sein.

von Falk B. (falk)


Lesenswert?


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.