Forum: Mikrocontroller und Digitale Elektronik PI-Regelung mit Atmega8 Assembler


von T. M. (elmerphudd)


Lesenswert?

Hallo!

Mein Problem ist, dass ich eine Regelung mit einem ATMega8 realisieren 
soll, aber nicht genau weiß wie ich dies realisieren soll. Ich habe auch 
schon gegoogelt, aber eine Regelung in Assembler hab ich nicht gefunden. 
Ich will konkret ein analoges Signal einlesen, dass mir von einer 
Lambdasonde geliefert wird, und muss über eine Regelung ein Ventil per 
PWM ansteuern. Was ich nicht verstehe, wenn ich mit mehreren 8bit- 
Zahlen ein paar mathematische Operationen ausführe 
(Reglerimplementierung), hab ich doch dann insgesamt mehr als 8bit, 
oder? Vielen Dank für eure Mühe!!!!!

von anderer Gast (Gast)


Lesenswert?

>Was ich nicht verstehe, wenn ich mit mehreren 8bit-Zahlen ein paar >mathematische 
Operationen ausführe (Reglerimplementierung), hab ich doch >dann insgesamt mehr 
als 8bit
Jaein
-,/ = nein
+,* = ja


hast du schon die Übertragungsfunktion aufgestellt??

muss das in Assembler sein? Ich denke nicht das dein System so schnell 
ist das die optimierung in Assembler nötig ist...

von T. M. (elmerphudd)


Lesenswert?

ja, Assembler wäre schon besser, da ich mit Assembler schon öfter 
gearbeitet habe.

 Übertragungsfunktion:

// Regelabweichung e_k berechnen:
      e_k = v_soll - v_ist;  Spannung von der Lambdasonde

      // Stellgröße u_k berechnen:
      u_k = u_k_alt + k_p*(e_k*(1+t_0/t_i)-e_k_alt);

      // Stellgrößenbegrenzung:
      if (u_k > 5.0) u_k = 5.0;
      else if (u_k < 0.0) u_k = 0.0;

Das ist aber in Assembler ganz schön umfangreich, oder? Ich muss ja jede 
Rechenoperation einzeln ausführen, und nicht wie in c in einer Formel.

von anderer Gast (Gast)


Lesenswert?

> Ich muss ja jede Rechenoperation einzeln ausführen, und nicht wie in c in > 
einer Formel.

Richtig. C macht das auch so

Eine alternative ist es vielleicht für dich die Funktion in C zu 
schreiben und nachher den erzeugten Assembler code zu übernehmen. Viel 
besser als ein guter Compieler das macht wird es eh nicht.

und du musst die Funktion so bauen das sie mit Fixkomma auskommt, sonst 
wird es sowieso langsam :)

solche Konstanten vorher berechnen t_0/t_i, das spart massig Zeit.

von T. M. (elmerphudd)


Lesenswert?

Danke erstmal für die schnelle Antwort. Wie mache ich das denn genau, 
den Code in Assembler auslesen den mir der Compiler liefert?

von anderer Gast (Gast)


Lesenswert?

Du kannst dir ein Listfile erzeugen lassen, da steht der Code dann 
drinn.
Auserdem ist es sinnvoll die Variablen als register anzulegen. Dann lädt 
der Compiler diese nicht aus/in den Ram, sondern legt sie in Registern 
an.
z.B.:

register uint8_t v_soll,v_ist;
register int16_t e_k;
usw...

aber besser ist es alles in C oder Assembler zu machen. Oder die 
Funktion als lib zu erstellen.

von Igor M. (bastel-wastel)


Lesenswert?

Wenn du noch Infos über die Regelung (digital oder analog) brauchst, 
dann wäre dieser Link vielleicht was für dich:
http://www.roboternetz.de/wissen/index.php/Regelungstechnik

Da wird das ganze relativ verständlich erklärt. So ein PI-Regler ist 
Software-mäßig relativ schnell programmiert. Ich würde mit 
C-programmieren. Für das bisschen brauchst du keine großen C-Kenntnisse 
- die Gleichungen sind mit C ratz fatz programmiert. Der GCC Compiler 
sollte daraus einen recht kopakten Code machen.

von Matthias L. (Gast)


Lesenswert?

>So ein PI-Regler ist Software-mäßig relativ schnell programmiert.
>...
>die Gleichungen sind mit C ratz fatz programmiert.

Trotzdem sollte man wissen was man tut.

von Igor M. (bastel-wastel)


Lesenswert?

Natürlich, aber ich denke, dass man bei der Formel in Assembler 
wesentlich mehr Fehler machen kann als in C. Wer einen Taschenrechner 
richtig bedienen kann, der sollte auch die Formel in C richtig schreiben 
können.

Wollte mit meinem Post nicht signalisieren, das C idiotensicher ist.

von Matthias L. (Gast)


Lesenswert?

>dass man bei der Formel in Assembler...

Ich meinte das aus regelungstechnischer Sicht!

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.