Hallo Zusammen, ich hab ein Problem mit einer digitalen Regelung. Ich will einen DC-Motor auf eine konstante Geschwindigkeit mit einem Mikrocontroller regeln. Sollwert byte (0-255) Istwert über IGR (0-5V) Stellgröße PWM 8bit Nun lese ich den aktuellen Wert über den AD-Wandler des Controller ein. Starte Timer und zähle die externen Interrupt in der Zeit -> normiere ich es auf 255. mit stellwert = (istwert*faktor+sollwert)/(faktor+1) will ich nun regeln!! geht leider nicht so wie ich will. Muss ich hier noch eine Totzeit bedenken oder gehe ich das komplett falsch an? Was mach ich eig wenn ich 255 als Sollwert habe und von außen jetzt eine Störung kommt. Wie kann ich denn da noch gegenregeln, ich kann doch nur bis Stellgröße 255?! Gruß Carsten
Hallo Carsten, ich bin mir nicht sicher, ob ich alles ganz richttig verstanden habe und das mit der Regelungstechnik ist auch schon ein Weilchen her, aber ich will es trotzdem mal versuchen. ... Vielleicht hilft es Dir ja. Also wenn der Wert 255 deiner maximal erreichbaren Drehzahl entspricht, dann kannst Du nicht darüber hinaus. Dir fehlt dann ganz einfach die Regelreserve. Bei Deiner Berechnung des Stellwertes bin ich mir auch nicht ganz sicher, ob das so sein kann. Wenn Du Regelst brauchst Du ja eigentlich eine negative Rückkopplung. Der Stellwert sollte sich also aus der Differenz von Sollwert und Istwert ergeben. Stellwert = Sollwert - Istwert Ansonsten würde sich das ganze beliebig aufschwingen ... bei Dir natürlich nur bis zum Maximalwert von 255. Welchen Reglertyp möchtest Du denn verwenden? Einen einfachen P-Regler, der einen bleibenden Regelfehler hat oder den auch nicht sehr viel komplizierteren PI-Regler? Gruß Jakob
Hallo JaKob, mit der Regelreserve hast du recht, jetzt wo du es sagst hab ich das auch schon mal gehört ;) Ich dachte auch immer das ich eine differenz brauche. Da kann ich mir leider gleich garnicht erklären wie das dann geregelt werden soll?? Ein PI-Regler sollte es schon sein aber wie gesagt ich habe keinen Ansatz um das zu realisieren. Wenn mir jemand mal ein Beispiel für eine einfache (oder auch komplizierte) Regelung posten würde könnte ich es mir vielleicht da abschauen. Gruß Carsten
Hallo Carsten Bin auch auf der Suche nach einem Beispielregler. Mit welcher Sprache möchtest du Programmieren? Gruss
Schau Dir mal das an: http://www.roboternetz.de/wissen/index.php/Regelungstechnik Dort gibt es auch Programmbeispiele für PI-Regler. Gruß Stefan
In C oder Assembler ist mir eig gleich, @Stefan: ja die Seite kenn ich bereits hat mich aber nicht zum Ziel gebracht. Da es irgendwie so nicht funktionieren will... Ich bräuchte ein erprobtes Beispiel da ich denke das mein größtes Problem die Totzeit ist?! Gruß Carsten
Hallo Carsten, versuch doch erstmal einen einfachen P-Regler. Stellwert = Verstärkung * (Sollwert - Istwert)
Leider ist meine Zeit gerade sehr knapp bemessen. Deshalb mal nur ein paar schlaue Sprüche und Stichworte. ;) Such mal unter Kaskadenregelung. Das ist so eine Standardregelung für Gleichstrommotoren. Ich finde an der kann man einiges lernen. Dann hätte ich noch zwei Buchtipps: 1. Elektrische Antriebe (der Autor war glaue ich Föllinger oder Schröder) gibt es in jeder Uni-Bibliothek aber auch ganz günstig im Netz. Da wird in einem der Bände die Regelung von Gleichstrommaschinen ausführlich und sehr gut (auch für schnelle Umsetzung) erläutert. 2. Taschenbuch der Regelungstechnik von Lutz Wendt. Das ist ein sehr gutes Buch zum Nachschlagen und für die Grundlagen der Regelungstechnik. Egal ob analoge oder digitale Regelungen ... wird alles darin behandelt. Uni-Bibliotheken kann ich übrigens nur empfehlen ... auch denen die wie ich nicht mehr zur Uni gehen. SIe haben oft gute Öffnungszeiten und verleihen in der Regel auch an nicht Studenten. Vielleicht hilft DIr ja etwas davon. Viel Erfolg noch. Gruß Jakob
Kurzer Zwischenstand: der Regler läuft soweit als PI. Jedoch schwingt er ganz schön über :( Was muss ich da runter oder hochsetzen das er dies nicht mehr tut? Ich habe zur Verfügung Kp und Ki Aktuell Kp=0.3 und Ki=0.6. Alles über eins treibt den Regler gnadenlos in die Ecke?! Ist eine Totzeit von 400ms vom stellen bis zum stabilen Istwert normal? Gruß Carsten
Hi Carsten, schalt mal den I-Anteil aus, solange der der Istwert ausserhalb des Proportionalbandes ist. Der I-Anteil ist eine Aufsummierung der Regelabweichung über die Zeit, die ist am Anfang ziemlich groß und wird solange aufaddiert, bis der Istwert das erste mal über den Sollwert steigt, erst danach findet eine Vorzeichenumkehr statt und der I-Anteil wird wieder kleiner. Deshalb schwingt der Regler beim Anfahren weit über. Gruß Stefan
Ich habe zwar bisher nur mit analogen Regelschaltungen gearbeitet, aber in einem Laborversuch mussten wir auch einmal eine Drehzahlregelung eines DC-Motors mit P-I-Regler aufbauen und einstellen. Die Einstellprozedur war (insofern ich mich recht erinnere) folgende: Ki auf null, Kp von null langsam erhöhen, bis der Regler zu schwingen beginnt. Diesen Wert dann halbieren und beibehalten. Nun Ki langsam erhöhen, bis der Regler wiederum zu schwingen beginnt, Ki halbieren. Dann sollte der Regler auf einen guten Kompromiss zwischen Schnelligkeit und einem stabilen Regelverhalten eingestellt sein. Ich hoffe, ich konnte helfen.
wie wird die Drehzahl gemessen? Habt ihr ausrechend Impulse pro Umdrehung zur Verfügung, damit man öfters nachregeln kann(Überschwinger verhindern)? Ändert sich die Last oder ist die immer gleich?
Also die Last ist von der Umgebung abhängig da es sich hier um ein Fahrzeug handelt. Wenn es bergauf geht mehr und andersrum weniger. Wir messen mittels IGR mit 16 Impulsen/Umdrehung. Ich glaube da liegt auch das Problem, da wir so nicht schnell genug sind?! Ich ermittele die Drehzahl mittels einem externen Interrupt und eines Timers, vielleicht gibt es da auch eine andere Lösung?
schalt den i anteil aus, stell den p regeler möglichst gut ein... dann i anteil dazutun und optimieren... die etwas brutalere methode wäre über die sprungantwort (naja hier in der realität ein trapez...) den regler einfach so einstellen das er den sprung des motors mitmacht (nen sprung (trapez) kanste natürlich nicht auf voller pullle machen, aber funktioniert tipptop....)
@Carsten: Du sprichst immer von Totzeit, was du aber eher berücksichtigen solltest ist die Nachstellzeit! Das ist die Zeit mit der der Integrator seinen Wert erhöht. Die Totzeit ist die Zeit die zwischen Stellgliedänderung und Istwertänderung liegt.
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.