-
        

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 25

Thema: Testaufbau für Positionsregelung von DC-Getriebemotoren

  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von Geistesblitz
    Registriert seit
    16.03.2011
    Ort
    Dresden
    Alter
    30
    Beiträge
    1.937

    Testaufbau für Positionsregelung von DC-Getriebemotoren

    Anzeige

    Ich würde mir gerne mal eine taugliche Elektronik zur präzisen Positionsregelung von DC-Motoren aufbauen. Um damit erstmal ein wenig herumtesten zu können, habe ich mir einen kleinen Testaufbau gebastelt:





    Das Ganze besteht also hauptsächlich aus einem Atmega32, den ich eigentlich häufiger mal benutze, einem L6205 als H-Brücke, einem AS5048A Magnetencoder (SPI-Schnittstelle, 14 Bit Auflösung), einem passenden diametral magnetisierten Neodym-Scheibenmagneten, einem RB35-Getriebemotor von Pollin und einem umgebauten ATX-Netzteil als Spannungsversorgung (5V Logik, 12V für den Motor). Kommunikation mit dem PC erfolgt über einen USB-UART-Wandler.

    In der Software auf dem Controller hab ich im Prinzip einen PID-Regler realisiert, den ich allerdings wegen diversen Nichtlinearitäten im System anpassen musste. Durch die Versorgungsspannung ist die maximale Geschwindigkeit des Motors nämlich nach oben begrenzt. Das führt dazu, dass die PWM bei einer sprungförmigen Änderung des Sollwerts anfangs voll an den Anschlag geht, bis der Motor so langsam in die Nähe der Sollposition gekommen ist. Leider hat der Integratoranteil bis dahin meist schon so viel aufintegriert, dass die Variable übergelaufen ist. Das ließ sich lösen, indem der Integrator immer dann abgeschaltet wird, wenn die PWM auf Maximum steht. Ein anderes Problem ist die Anlaufspannung des Motors, unter welcher er sich gar nicht bewegt. Das lässt sich damit lösen, dass man auf die Stellgröße einen Versatz raufrechnet, sodass die Motorspannung immer irgendwo in der Nähe der Anlaufspannung bleibt. Ansonsten habe ich den Differentialanteil begrenzt, da so der Überschwinger ein wenig kleiner wird. Die Istwerte vom Sensor hab ich mittels einer laufenden gewichteten Mittelwertbildung geglättet.

    Für das Senden der Sollwerte und das Empfangen und Darstellen der Istwerte habe ich mir ein kleines Programm in Labview erstellt, wo ich das Ganze ganz gut live verfolgen kann. Übertragen werden die Werte als Hexadezimalstring. Hier ist dazu mal ein Bild von einer Sprungantwort (ein Zeitschritt=4ms, ein Schritt auf der Y-Achse entspricht 0,022°):



    Blau: Sollwert
    Weiß: Istwert
    Rot: Istgeschwindigkeit
    Grün: Istbeschleunigung

    Dabei sieht man leider auch das schwierigste ungelöste Problem, mit dem ich zu kämpfen habe: Das Getriebespiel. Die Sprungantwort sieht ja an sich richtig hübsch aus, allerdings sieht man danach, wie der Regler mit dem Getriebespiel kämpft und um die Sollposition wackelt. Lustigerweise wird es besser, wenn man den Abtrieb mit den Fingern festhält, denn dann kann es ja nicht mehr frei wackeln

    Ansonsten ist zukünftig noch geplant, eine Vorsteuerung einzubauen, um die Dynamik noch ein wenig zu verbessern. So eine Vorsteuerung würde vorher berechnen, welche Spannung auf den Motor gegeben werden müsste, um die Sollbahn ohne Regelung abzufahren. Der Regler braucht sich dann nur noch um die Abweichungen zu kümmern. Allerdings muss man dafür die Zeitkonstanten des Motors möglichst genau bestimmen. Eine Stromregelung würde ich eigentlich auch noch gerne einbauen, bin dazu bisher aber noch nicht gekommen. Ansonsten kann man sicherlich auch die Kommunikation mit dem Controller ausbauen, zB. mit Addressierung, einstellen der Reglerparameter über den Bus und einiges mehr.

    Ansonsten gibt es ja auch die Möglichkeit, den Motor aktiv zu bremsen, indem man beide Halbbrücken gleich schaltet. Ich könnte wetten, dass sich das gegen das Getriebespiel einsetzen ließe, allerdings weiß ich noch nicht so recht, wie.
    AI - Artificial Idiocy

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    59
    Beiträge
    2.435
    Hallo Geistesblitz,

    Zitat Zitat von Geistesblitz Beitrag anzeigen
    Durch die Versorgungsspannung ist die maximale Geschwindigkeit des Motors nämlich nach oben begrenzt. Das führt dazu, dass die PWM bei einer sprungförmigen Änderung des Sollwerts anfangs voll an den Anschlag geht, bis der Motor so langsam in die Nähe der Sollposition gekommen ist. Leider hat der Integratoranteil bis dahin meist schon so viel aufintegriert, dass die Variable übergelaufen ist. Das ließ sich lösen, indem der Integrator immer dann abgeschaltet wird, wenn die PWM auf Maximum steht.
    Das Überlaufen kann man leicht verhindern, indem man zuerst den Wert der Variablen testet und nur inkrementiert, wenn die einen gewissen Wert nicht überschreitet.
    Zitat Zitat von Geistesblitz Beitrag anzeigen
    Ein anderes Problem ist die Anlaufspannung des Motors, unter welcher er sich gar nicht bewegt. Das lässt sich damit lösen, dass man auf die Stellgröße einen Versatz raufrechnet, sodass die Motorspannung immer irgendwo in der Nähe der Anlaufspannung bleibt.
    Hier ist der Standard-Trick beim Anlauf einen kurzen Impuls auf den Motor zu geben. Der Motor bekommt z.B. für ein paar MS die volle Betriebsspannung, danach wird der Stell ausgegeben,


    Zitat Zitat von Geistesblitz Beitrag anzeigen
    Ansonsten habe ich den Differentialanteil begrenzt, da so der Überschwinger ein wenig kleiner wird. Die Istwerte vom Sensor hab ich mittels einer laufenden gewichteten Mittelwertbildung geglättet.
    Ist normal.


    Zitat Zitat von Geistesblitz Beitrag anzeigen
    Dabei sieht man leider auch das schwierigste ungelöste Problem, mit dem ich zu kämpfen habe: Das Getriebespiel. Die Sprungantwort sieht ja an sich richtig hübsch aus, allerdings sieht man danach, wie der Regler mit dem Getriebespiel kämpft und um die Sollposition wackelt. Lustigerweise wird es besser, wenn man den Abtrieb mit den Fingern festhält, denn dann kann es ja nicht mehr frei wackeln
    Das ist normal, mit dem Finger dämpfst du das System.
    Eine mechanische Möglichkeit wäre es, auf die Abtriebsachse einen dickwandigen Gummischlauch zu schieben, welcher auf der Achse leicht klemmt und aussen festgehalten wird.

    Zitat Zitat von Geistesblitz Beitrag anzeigen
    Ansonsten ist zukünftig noch geplant, eine Vorsteuerung einzubauen, um die Dynamik noch ein wenig zu verbessern. So eine Vorsteuerung würde vorher berechnen, welche Spannung auf den Motor gegeben werden müsste, um die Sollbahn ohne Regelung abzufahren. Der Regler braucht sich dann nur noch um die Abweichungen zu kümmern.
    Das ist dann ein zweiter P-Anteil, aber bezogen auf den Stellwert und nicht die Regelabweichung.

    Zitat Zitat von Geistesblitz Beitrag anzeigen
    Allerdings muss man dafür die Zeitkonstanten des Motors möglichst genau bestimmen. Eine Stromregelung würde ich eigentlich auch noch gerne einbauen, bin dazu bisher aber noch nicht gekommen.
    Die Alternative ist ein adaptiver Regler.
    Das Regelverhalten der Regelstrecke wird gemessen und der PID-Regler entsprechend konfiguriert. Das Ganze macht man dann dynamisch. Damit können Laständerungen kompensiert werden. Die Zeitkonstanten verändern sich bei einem Motor mit der Last.


    Zitat Zitat von Geistesblitz Beitrag anzeigen
    Ansonsten gibt es ja auch die Möglichkeit, den Motor aktiv zu bremsen, indem man beide Halbbrücken gleich schaltet. Ich könnte wetten, dass sich das gegen das Getriebespiel einsetzen ließe, allerdings weiß ich noch nicht so recht, wie.
    Kurzschliessen, dürfte den Motor etwas zu abrupt bremsen.

    Das Problem sind die unterschiedlichen Totzeiten.
    Bei gebremstem Abtrieb und einem Halt des Motors, kommt es darauf an, wie es weiter geht:
    Dreht man in der selben Richtung weiter, bewegt sich der Abtrieb sofort.
    Dreht man in die entgegensetzte Richtung, passiert am Abtrieb zuerst einmal nichts, bis sich der Motor soweit gedreht hat, dass das Spiel wieder aufgehoben ist.

    Bei ungebremstem Abtrieb, bzw. mit Schwungmasse:
    Wenn der Motor schon steht, dreht sich er Abtrieb noch weiter, bis das Spiel aufgehoben ist.
    Dies kann man verhindern, indem man mit dem Motor bremst. Man hat dann aber immer noch das Problem, wenn man in die entgegengesetzte Richtung anläuft.

    Dieses Problem ist auch die Hauptursache für das Wackeln.

    MfG Peter(TOO)
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Geistesblitz
    Registriert seit
    16.03.2011
    Ort
    Dresden
    Alter
    30
    Beiträge
    1.937
    Das Prinzip mit dem Abschalten des Integratoranteils ist eigentlich ein einfacher Anti-Windup-Effekt, den ich getestet hatte, nachdem ich mir ein paar Formen von Anti-Windup-Strukturen angesehen hatte. Da lässt sich wahrscheinlich auch noch ein wenig was verbessern.

    Hier ist der Standard-Trick beim Anlauf einen kurzen Impuls auf den Motor zu geben. Der Motor bekommt z.B. für ein paar MS die volle Betriebsspannung, danach wird der Stell ausgegeben,
    Hmm, wie wird das denn realisiert? Und die Drehzahl ist auch nicht genau linear abhängig zur Spannung, soweit ich messen konnte. Ich hab das so bemerkt, dass bei einer bestimmten Spannung der Motor sich anfängt zu drehen, wenn man dann mit der Spannung runtergeht dreht sich der Motor langsamer und bleibt dann irgendwann stehen, aber an dieser Stelle ist die Spannung auch nicht 0V. Man hätte also eine Losbrechspannung und eine etwas niedrigere Stopspannung, also so ein leichtes Hystereseverhalten.

    Was mir auch aufgefallen ist: betreibe ich den Motor am Labornetzteil, fängt er schon bei 0,5V an sich ganz langsam zu drehen, betreibe ich ihn allerdings bei 12V mit einer PWM bis zu 40% dreht er sich immer noch nicht. Ich hab da irgendwie keine Erklärung für. Wahrscheinlich muss ich da mal mit dem Oszi ran.

    Ich hoffe auf jeden Fall, später mit einer weitern Untersetzung über Zahnriemen das Spiel noch ein wenig vermindern zu können. Außerdem scheint ja eine gewisse Dämpfung für die Regelung sogar förderlich zu sein.
    AI - Artificial Idiocy

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von malthy
    Registriert seit
    19.04.2004
    Ort
    Oldenburg
    Beiträge
    1.379
    Wie ist denn Dein Regler überhaupt aufgebaut? Hast Du eine innere Drehzahlregelung oder ist der Stellwert der Positionsregelung direkt die Motor-PWM?

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    59
    Beiträge
    2.435
    Zitat Zitat von Geistesblitz Beitrag anzeigen
    Hmm, wie wird das denn realisiert?
    Nun, die Regelung weiss ja, ob der Motor gerade steht oder nicht.
    Steht der Motor gerade, gibt man kurz mehr Leistung auf den Motor, als für die geforderte Drehzahl nötig wäre.
    Du musst den Drehzahlbereich in 3 Bereiche unterteilen:
    1. minimal mögliche Drehzahl, darunter bewegt sich nichts.
    2. Möglicher Bereich, welcher aber nicht selbst anläuft.
    3. normaler Bereich, in welchem der Motor problemlos startet.

    Im 1. Bereich geht nun mal nix, den kannst du vergessen.

    Im 2. Bereich braucht der Motor Starthilfe. Also entweder startet man mit einer höheren Drehzahl und regelt dann runter oder man fügt en Hilfsimpuls hinzu. So ein Motor ist ja eigentlich ein träges Wesen. Man kann dem z.B. die volle Spannung verpassen und diese dann zurückregeln, wenn die Nenndrehzahl knapp erreicht ist. Man kann auch einfach den Impuls so berechnen, dass die Massenträgheit sicher überwunden wird.

    Zitat Zitat von Geistesblitz Beitrag anzeigen
    Und die Drehzahl ist auch nicht genau linear abhängig zur Spannung, soweit ich messen konnte. Ich hab das so bemerkt, dass bei einer bestimmten Spannung der Motor sich anfängt zu drehen, wenn man dann mit der Spannung runtergeht dreht sich der Motor langsamer und bleibt dann irgendwann stehen, aber an dieser Stelle ist die Spannung auch nicht 0V. Man hätte also eine Losbrechspannung und eine etwas niedrigere Stopspannung, also so ein leichtes Hystereseverhalten.

    Was mir auch aufgefallen ist: betreibe ich den Motor am Labornetzteil, fängt er schon bei 0,5V an sich ganz langsam zu drehen, betreibe ich ihn allerdings bei 12V mit einer PWM bis zu 40% dreht er sich immer noch nicht. Ich hab da irgendwie keine Erklärung für. Wahrscheinlich muss ich da mal mit dem Oszi ran.
    Ist Alles physikalisch ganz normal.

    Du hast Haftreibung und Gleitreibung. Die Haftreibung ist immer grösser als die Gleitreibung.
    Im Stillstand muss du die Haftreibung überwinden, bis sich was dreht.
    Wenn es dreht hast du nur noch die Gleitreibung, weshalb du mit der Motorleistung weiter runter gehen kannst, bis der Motor wieder steht.

    Bei Gleitlagern ist der Unterschied grösser, als bei Kugellagern.
    Theoretisch haben Kugellager sowieso nur Rollreibung, es sollte also keinen Unterschied geben. Praktisch gibt es dennoch einen, da z.B. anfangs Öl oder Fett verdrängt werden muss, welches sich wie ein Kein unter die Kugeln schiebt.

    Und zu guter Letzt ist das Ganze noch sehr temperaturabhängig. Einerseits verändern Fett und Öle ihre Viskosität mit der Temperatur und andererseits ändert sich durch die Temperatur auch das Lagerspiel, was beides einen Einfluss auf die Reibung hat.

    MfG Peter(TOO)
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von Geistesblitz
    Registriert seit
    16.03.2011
    Ort
    Dresden
    Alter
    30
    Beiträge
    1.937
    @Malthy: genau, der Stellwert geht direkt auf den Motor, ohne weitere Geschwindigkeitsregelung.

    Der grobe Ablauf der Reglerschleife sieht so aus:
    -Sollposition wird empfangen
    -Istposition wird gemessen
    -Istposition wird geglättet
    -Abweichung wird berechnet (Differenz aus Soll- und Istwert) -> E
    -Differenz aus Abweichung des letzten Rechenschritts und der aktuellen Abweichung wird berechnet -> dE
    -ist dE betragsmäßig größer als ein bestimmter Wert, wird es auf diesen Wert beschränkt
    -Integral wird berechnet (E wird auf E_int addiert, wenn PWM<1023) -> E_int
    -Tastverhältnis = k_p*E + k_d*dE + k_i*E_int + Versatz
    -je nachdem, ob Tastverhältnis positiv oder negativ ist, wird die H-Brücke auf Linkslauf oder Rechtslauf geschaltet
    -Betrag von Tastverhältnis bilden und auf max. 1023 begrenzen (10-bit-PWM)
    -Tastverhältnis an den PWM-Port übergeben
    -Istwert an PC senden

    Derzeit ist es leider so, dass der Regler im Interrupt der UART läuft, da ich nicht weiß, wie ich das Ganze sonst synchron zum Rechner halten soll. Eigentlich wäre es besser, wenn der Regler mit einem eigenen Timer läuft und den Rechner nach neuen Werten fragt anstatt umgekehrt. Was passiert dann aber, wenn der Rechner dann nix von sich hören lässt?

    Ansonsten ist es sicher auch nicht verkehrt, eine kaskadierte Regelung aufzubauen (on innen nach außen Stromregler, Geschwindigkeitsregler und Positionsregler). Das soll auch ganz gut zu implementieren gehen, da man sich von innen nach außen vorarbeiten kann. Dann kann man jeden einzelnen Regler so einstellen, dass er das gewünschte Verhalten zeigt und er dann mit der zugehörigen Strecke als Blackbox behandelt werden kann.
    AI - Artificial Idiocy

  7. #7
    Erfahrener Benutzer Roboter Genie Avatar von malthy
    Registriert seit
    19.04.2004
    Ort
    Oldenburg
    Beiträge
    1.379
    Hi,

    Derzeit ist es leider so, dass der Regler im Interrupt der UART läuft, da ich nicht weiß, wie ich das Ganze sonst synchron zum Rechner halten soll. Eigentlich wäre es besser, wenn der Regler mit einem eigenen Timer läuft und den Rechner nach neuen Werten fragt anstatt umgekehrt. Was passiert dann aber, wenn der Rechner dann nix von sich hören lässt?
    Das verstehe ich nicht ganz. Wieso hältst Du nicht einfach in einer Variable die Position vor, auf die das System einregeln soll. Das System kümmert sich dann darum, dass es gegen äußere Störungen auf der Position bleibt. Neue Sollpositionen kannst Du dann asynchron, d. h. zu beliebigen Zeitpunkten an das System übergeben. Oder übersehe ich da etwas?

    Ansonsten ist es sicher auch nicht verkehrt, eine kaskadierte Regelung aufzubauen (on innen nach außen Stromregler, Geschwindigkeitsregler und Positionsregler). Das soll auch ganz gut zu implementieren gehen, da man sich von innen nach außen vorarbeiten kann. Dann kann man jeden einzelnen Regler so einstellen, dass er das gewünschte Verhalten zeigt und er dann mit der zugehörigen Strecke als Blackbox behandelt werden kann.
    Ich habe das alles ja nie systematisch gelernt. Bei meinen robolink Armen kamen Schrittmotoren zum Einsatz. Die kann man ja leicht open loop auf Drehzahl halten. Insofern habe ich das System so aufgebaut, dass innen quasi eine Drehzahlsteuerung (keine Regelung) war, die sich auch um Anfahrrampen u.ä. gekümmert hat. Die übergeordnete Positionsregelung hat dann als Stellwert die Drehzahl für den entprechenden DOF ausgegeben. Die Positionsregelung wurde dadurch sehr einfach, im Prinzip funktionierte schon ein reiner P-Regler ganz ordentlich (hier zu sehen). Natürlich kann man einen Schrittmotor nicht mit einem DC Motor vergleichen, aus der Erfahrung würde ich aber auf jeden Fall dazu neigen, zuerst eine Drehzahlregelung aufzubauen und dann die Positionsregelung obendrauf zu setzen.

    Gruß
    Malte

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    59
    Beiträge
    2.435
    Hallo,

    [QUOTE=Geistesblitz;612287Derzeit ist es leider so, dass der Regler im Interrupt der UART läuft, da ich nicht weiß, wie ich das Ganze sonst synchron zum Rechner halten soll. Eigentlich wäre es besser, wenn der Regler mit einem eigenen Timer läuft und den Rechner nach neuen Werten fragt anstatt umgekehrt. Was passiert dann aber, wenn der Rechner dann nix von sich hören lässt?[/QUOTE]

    Im UART-Interrupt nimmst du den Sollwert entgegen und legst den in einer globalen Variablen ab, zudem setzt du noch ein Flag.

    Der Regler, eigentlich wie jetzt, läuft im Timerinterrupt.
    Einzige Änderung ist, dass der Regler sich das Flag anschaut. Wenn es gesetzt ist, wird der neuen Sollwert übernommen und das Flag zurückgesetzt.

    Der Regler kann dann noch ein Flag setzen, welches anzeigt, dass die Soll-Position erreicht wurde.
    Mit einem weiteren Flag kannst du den Regler auch noch abschalten.

    MfG Peter(TOO)

    ---------------------------- 17.2.2015 01:18 ----------------------------------------------

    Eine Kleinigkeit habe ich übersehen:
    Der Regler sollte in den Interrupt der PWM, evtl. kannst du per Software untersetzen, also nur bei jedem 10ten PWM-Zyklus einen neuen Stellwert berechnen. Hängt aber von den Zeitkonstanten ab (PWM, Motorträgheit).
    Andernfalls kannst du Schwebungen bekommen, zwischen PWM- und Abtastfrequenz, wenn die beiden Frequenzen nahe beieinander liegen.

    MfG Peter(TOO)
    Geändert von Peter(TOO) (17.02.2015 um 01:18 Uhr)
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

  9. #9
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.03.2011
    Beiträge
    1.397
    Zitat Zitat von Geistesblitz Beitrag anzeigen
    Durch die Versorgungsspannung ist die maximale Geschwindigkeit des Motors nämlich nach oben begrenzt. Das führt dazu, dass die PWM bei einer sprungförmigen Änderung des Sollwerts anfangs voll an den Anschlag geht, bis der Motor so langsam in die Nähe der Sollposition gekommen ist.
    Das liegt nicht an der Versorgungsspannung sondern ist prinzipiell so. Ich bin kein Regelungstechniker, also erkläre ich das mal verbal:

    Die Sollposition soll ja möglichst schnell erreicht werden, also muß der Motor am Anfang so schnell laufen wie möglich. Und da gibst es Grenzen, wenn nicht beim Netzteil dann beim Motor selbst. In diesem Bereich sehe ich eigentlich nichts von Regelung, PWM 100%, mehr geht nicht. Abbremsen tut man so spät wie möglich, so gehts am schnellsten. Das ist der Punkt, wo dann überhaupt die Regelung einsetzt. Der wird von der Trägheit des Gesamtsystems abhängen, die du in deinem Aufbau jetzt noch gar nicht siehst. Und wenn die Sollposition erreicht ist, Vollbremsung.

    Leider hat der Integratoranteil bis dahin meist schon so viel aufintegriert, dass die Variable übergelaufen ist. Das ließ sich lösen, indem der Integrator immer dann abgeschaltet wird, wenn die PWM auf Maximum steht.
    Also eigentlich (fast) immer. Wird das System eigentlich schlechter, wenn man ihn überhaupt wegläßt?

    Ein anderes Problem ist die Anlaufspannung des Motors, unter welcher er sich gar nicht bewegt. Das lässt sich damit lösen, dass man auf die Stellgröße einen Versatz raufrechnet, sodass die Motorspannung immer irgendwo in der Nähe der Anlaufspannung bleibt.
    Die eigentliche Stellgröße ist ja auch nicht die PWM sondern der Motorstrom. Und da der Motor eine Induktivität (eigentlich ein RL-Glied) ist, hängt der Strom etwas komplexer vom Dutycycle und auch von der PWM-Frequenz ab. Ohne jetzt eine Fourier-Analyse des PWM-Signals gemacht zu haben würde ich behaupten, daß bei kleinem Dutycycle die Energie in den hohen Frequenzen steckt, die wiederum schlecht durch die Induktivität wollen. Eine langsamere PWM Frequenz würde da Besserung bringen.

    Ansonsten habe ich den Differentialanteil begrenzt, da so der Überschwinger ein wenig kleiner wird. Die Istwerte vom Sensor hab ich mittels einer laufenden gewichteten Mittelwertbildung geglättet.
    Warum Mittelwert? Der Sensor ist doch digital, da klappert das letzte Bit, und er ist viel zu genau für das Getriebespiel. Wenn das z.B. so 1° bis 2° beträgt, bleiben etwa 8 Bit. Die letzten zwei oder vier Bit (von den 14 Bit) weglassen bringt das gleiche Ergebniss und ist einfacher. Außerdem verzögert die Mittelwertbildung, ein Tiefpass, die Istwertmessung und macht den Regler langsamer, erhöht also das Überschwingen. So ein Mittelwert würde nur etwas bringen, wenn die Istwertmessung ständig und um ein vielfaches schneller erfolgt, als der Stellwert geändert werden kann (also als die PWM Frequenz).

    Für das Senden der Sollwerte und das Empfangen und Darstellen der Istwerte habe ich mir ein kleines Programm in Labview erstellt, wo ich das Ganze ganz gut live verfolgen kann. Übertragen werden die Werte als Hexadezimalstring. Hier ist dazu mal ein Bild von einer Sprungantwort (ein Zeitschritt=4ms, ein Schritt auf der Y-Achse entspricht 0,022°):
    Schöne Auswertung. Was mich aber interessieren würde, ist die Stellgröße, der Dutycycle. Und die Horizontalauflösung ist eigentlich zu grob um das Arbeiten der Regelung zu erkennen. Die Sollposition ist eine Senkrechte, das liegt an der Vorgabe, klar. Aber die Istposition sieht auch fast wie eine Senkrechte aus, das kann eigentlich nicht sein (Beschleunigung gegen Unendlich). Die wirkliche Beschleunigung wird also durch die zu grobe Auflösung nicht angezeigt. Die anderen Kurven kann ich leider nicht wirklich erkennen.

    Dabei sieht man leider auch das schwierigste ungelöste Problem, mit dem ich zu kämpfen habe: Das Getriebespiel. Die Sprungantwort sieht ja an sich richtig hübsch aus, allerdings sieht man danach, wie der Regler mit dem Getriebespiel kämpft und um die Sollposition wackelt. Lustigerweise wird es besser, wenn man den Abtrieb mit den Fingern festhält, denn dann kann es ja nicht mehr frei wackeln
    Ansonsten ist zukünftig noch geplant, eine Vorsteuerung einzubauen, um die Dynamik noch ein wenig zu verbessern. So eine Vorsteuerung würde vorher berechnen, welche Spannung auf den Motor gegeben werden müsste, um die Sollbahn ohne Regelung abzufahren. Der Regler braucht sich dann nur noch um die Abweichungen zu kümmern.
    Der Regler arbeitet ja jetzt schon mit Höchstgeschwindigkeit, fast immer 100% PWM (oder 0% wenn nicht gerade das Getriebe wackelt). Was soll da noch dynamischer werden?

    Eine Stromregelung würde ich eigentlich auch noch gerne einbauen, bin dazu bisher aber noch nicht gekommen
    Die würde den Regler nur langsamer machen. Das macht höchstens Sinn, Überlastfälle zu beherschen.

    Ansonsten gibt es ja auch die Möglichkeit, den Motor aktiv zu bremsen, indem man beide Halbbrücken gleich schaltet. Ich könnte wetten, dass sich das gegen das Getriebespiel einsetzen ließe, allerdings weiß ich noch nicht so recht, wie.
    Das solltest du auf jeden Fall machen machen. Wahrscheinlich kannst du dann den D-Term zu Null machen.

    Nur gegen das Spiel hilft das nicht. Selbst wenn du den Motor mechanisch blockierst, wackelt dein Abtrieb abhängig von der Last genau so weit, wie es das Spiel zuläßt. Ich wüßte auch nicht, wie man elektronisch das Spiel wegbekommt, außer der Motor schwingt ständig um den Sollwert.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  10. #10
    Erfahrener Benutzer Robotik Einstein Avatar von Geistesblitz
    Registriert seit
    16.03.2011
    Ort
    Dresden
    Alter
    30
    Beiträge
    1.937
    @Klebwax: Danke für deine ausführliche Kritik

    Das mit der Spannungsbegrenzung hättest nicht nochmal erklären brauchen, das ist mir ja bereits klar.

    Den Integratoranteil hab ich deswegen drin, damit statische Fehler ausgeregelt werden. Wenn der Motor also nicht ganz in der Nullposition stehen bleibt, wirkt der Integratoranteil so, dass er sich nach und nach dochn noch dorthin arbeitet. Ein reiner P-Anteil würde bei konstanter Last immer einen Versatz von der Sollposition übriglassen.

    Das Diagramm ist wirklich noch ein wenig suboptimal, das muss ich nochmal ein wenig anpassen. Hier hätte ich noch ein Diagramm mir einer gröberen Aufteilung (zu meinst wahrscheinlich, dass sie im anderen Diagramm zu fein war):
    Klicke auf die Grafik für eine größere Ansicht

Name:	Sprungantwort1_zps574bcb8b.jpg
Hits:	9
Größe:	32,1 KB
ID:	29846

    Wegen der Mittelwertbildung muss ich nochmal nachgucken, ob die den Regler wirklich viel langsamer macht, auf jeden Fall arbeitet er dadurch aber wesentlich ruhiger. Vorher hat man richtig gehört, wie er das Messrauschen verstärkt. Ich denk auch mal, dass man trotz des Getriebespiels eine gute Genauigkeit bekommen kann, komt eben auch alles ein wenig auf das System an. Wenn man dann nachher eine konstante Last hat, die in eine Richtung wirkt, dürfte sich das Getriebespiel nicht mehr wirklich bemerkbar machen.

    Die Vorsteuerung soll hauptsächlich den Nutzen haben, einen Schleppfehler während des Verfahrens zu minimieren. Ich werd mal testen, was der Regler zu einem trapezförmigen Geschwindigkeitsverlauf sagt, also ein Verfahren mit begrenzter Geschwindigkeit und begrenzter Beschleunigung. Hatte sowas auch schonmal woanders in Labview implementiert gehabt, muss das nur nochmal ein wenig anpassen.
    AI - Artificial Idiocy

Seite 1 von 3 123 LetzteLetzte

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 21.03.2012, 19:43
  2. Grafik LCD Testaufbau
    Von darwin.nuernberg im Forum Eigene fertige Schaltungen und Bauanleitungen
    Antworten: 8
    Letzter Beitrag: 28.10.2007, 14:54
  3. ansteuerung von getriebemotoren
    Von RedEagle667 im Forum Motoren
    Antworten: 6
    Letzter Beitrag: 04.05.2006, 13:01
  4. Ansteuerung von 8 Getriebemotoren
    Von j_volkers im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 6
    Letzter Beitrag: 30.09.2005, 21:18
  5. Antworten: 3
    Letzter Beitrag: 18.11.2004, 19:50

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •