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.
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
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.