PI-Regelung mit Atmega8 Assembler

OP #973637
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!!!!!
Gast #973686
>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...
OP #973694
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.
Gast #973783
> 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.
Gast #973882
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.
#974073
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.
Gast #974077
>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.
#974091
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.