www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Wie programmiert man eine stetige Reglung in ANSI C?


Autor: Michael Denissen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie programmiert man eine stetige Reglung in ANSI C? Der Microcontroller
ist ein 80C535
Folgendes Problem ich habe über einen Analogeingang eine Spannung von
6,75V, diese soll konstant über ein PWM Signal gehalten werden. Sobald
die Spannung über oder unter 6,75 V ist soll das PWM Signal die
Spannung wieder auf 6,75 V bringen. Das Programm für die PWM Ausgabe
habe ich schon nur das für die Regelung noch nicht. Über jeden Tipp bin
ich dankbar.

Autor: Weihnachtsmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich kann zwar kein ANSI C  abre vielleicht kann ich dir Helfen.

Ich würde dies so machen


if (Spannung > 6.75)
{
  PWM = PWM -1
}

if (Spannung < 6.75)
{
  PWM = PWM +1
}

Gruss

Weihnachtsmann

Autor: Christian Luther (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Je nach Anwendung kannst du auch noch die Abweichung ausrechnen und
diese dann als Faktor für die Stärke der Korrektur nehmen.

So:
Abweichung = Spannung - 6.75;
PWM = PWM - (Abweichung * 1);

Wenn die Abweichung negativ ist, ist der Wert zu gering, ergo wird in
der zweiten Anweisung was dazuaddiert. Entsprechend umgekehrt. Die 1
kannst du durch einen ausprobierten/ausgerechneten/geschätzten Faktor
ersetzen. So hast du die Änderung immer abhängig von der Abweichung.
Die beiden Befehle kannst du dann als Loop durchlaufen lassen.

Autor: Christof Krüger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da muss man allerdings aufpassen, dass man da keine Schwinung
reinbekommt.
Das Gegenteil zu Christians Vorschlag wäre es einen Mittelwert zu
speichern, in den der neue Wert immer mit einem kleinen Gewicht
eingeht. So würde z.B. eine leicht erhöhte Spannung, die vielleicht nur
paar Mikrosekunden andauert, keine Nachregelung auslösen, wenn sie
danach wieder auf den Sollwert fällt.
Ansonsten könnte es sein, dass man sich dumm und dämlich regelt.

Autor: Thomas_v2.1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also einen einfachen P-Regler hab ich mal so geschrieben:

int kp = 4;         // Verstärkungsfaktor
int yo = 116;       //
w = Wandlung(0);    // A/D-Wandlung Sollwertgeber (Poti)
x = Wandlung(1);    // A/D-Wandlung Motortacho

/*** P-Regler ****/
a = kp * (w - x) + yo;
      if (a < 0) y = 0;
  else if (a > 255) y = 255;
  else y = a;
  CCL2 = y;    // PWM-Wert laden

Die Regeldifferenz bleibt natürlich nur 0, wenn der Motor sich auf der
Kennlinie für den Wert y9 befindet.
Ein PI-Regler ist aber auch nicht schwerer, wird nur ein Timerinterrupt
benötigt und die Formel entsprechend ändern.

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.