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


von Michael Denissen (Gast)


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.

von Weihnachtsmann (Gast)


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

von Christian Luther (Gast)


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.

von Christof Krüger (Gast)


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.

von Thomas_v2.1 (Gast)


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.

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.