www.mikrocontroller.net

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


Autor: T. M. (elmerphudd)
Datum:

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

Autor: anderer Gast (Gast)
Datum:

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

Autor: T. M. (elmerphudd)
Datum:

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

Autor: anderer Gast (Gast)
Datum:

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

Autor: T. M. (elmerphudd)
Datum:

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

Autor: anderer Gast (Gast)
Datum:

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

Autor: Igor Metwet (bastel-wastel)
Datum:

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

Autor: Matthias Lipinsky (lippy)
Datum:

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

Autor: Igor Metwet (bastel-wastel)
Datum:

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

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>dass man bei der Formel in Assembler...

Ich meinte das aus regelungstechnischer Sicht!

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.