mikrocontroller.net

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


Autor: Kai Kiste (lekai)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: lkmiller (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Kai Kiste (lekai)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Kai Kiste (lekai)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: lkmiller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

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.

Autor: Kai Kiste (lekai)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: lkmiller (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
regelungstechnisches Erstzschaltbild?

Autor: Kai Kiste (lekai)
Datum:

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

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Kai Kiste (lekai)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Kai Kiste (lekai)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias Lipinsky (lippy)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Kai Kiste (lekai)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Kai Kiste (lekai)
Datum:

Bewertung
0 lesenswert
nicht 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??

Autor: 3365 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.