Hallo Gemeinde, ich habe mal wieder ein Problem oder besser gesagt fehlt mir ein Lösungsansatz. Ausgangssituation: Eine Steuerung mit AVR steuert über PID einen PWM Signal an die Leistungstreiber eines DC-Motors. Dabei soll der Motor anhand einer Beschleunigungsrampe und Maximalgeschwindigkeit eine exakte Position anfahren. Das funktioniert auch soweit. Der Rampengenerator erzeugt das Bewegungsprofil. Die Position des Bewegungsprofil geht in ein PID und dort wird anhand der Soll-Istposition die PWM berechnet. Problem: Ich will erkennen wenn der Motor blockiert, um den Strom so zu reduzieren, das es keine mechanischen Beschädigungen gibt. Ich habe zwar die Soll-Ist-Abweichung, die mir eine Blockade anzeigt. Aber eine gewisse Soll-Ist-Abweichung ist normal und auch Beschleunigungsabhängig. Also ist die Erkennung recht träge. Ich wollte den plötzlichen Anstieg des Motorstromes irgendwie mit auswerten. Ich habe nur keine Idee, wie er genau auf die PMW wirken soll. Wäre froh, wenn jemand irgendwelche Anregungen hätte.
@ Gad Zinkler (gad) >Ich will erkennen wenn der Motor blockiert, um den Strom so zu >reduzieren, das es keine mechanischen Beschädigungen gibt. Dazu braucht man einen Shunt an der H-Brücke und einen Komparator. Machen alle so. >Ich habe zwar die Soll-Ist-Abweichung, die mir eine Blockade anzeigt. >Aber eine gewisse Soll-Ist-Abweichung ist normal und auch >Beschleunigungsabhängig. Also ist die Erkennung recht träge. Eben >Ich wollte den plötzlichen Anstieg des Motorstromes irgendwie mit >auswerten. Siehe oben. >Ich habe nur keine Idee, wie er genau auf die PMW wirken soll. Wenn der zulässige Maximalstrom erreicht wird, wird die aktuelle PWM-Periode SOFORT beendet, sprich, der Treiber wieder deaktiviert. Damit klingt der Strom ab. Beim nächsten PWM.-Zyklus das gleiche Spiel. Beim AVR braucht man dazu einen Interrupt vom Comparator, das ist ein wenig langsam (ein paar us). Modernere uC haben dafür eine konfigurierbare Hardwarefunktion.
Hallo Falk, danke für die Antwort. Deine Variante geht leider nicht. Ich kann den Strom nicht in einem Comparator Interrupt auswerten weil der Strom extern gemessen wird und nur digital in den AVR kommt (I2C). Ausserdem ist meine PWM Periode sehr kurz weil die Pwm mit ca 80kHz läuft. Die kann man kaum für eine Periode unterbrechen. Abgesehen davon ist eine absolute Strombegrenzung schlecht. Denn beim Anlauf brauche ich den höheren Strom, aber bei Blockade will ich ihn vermeiden. Ausserdem sind die Ströme abhängig von den Beschleunigungsrampen. Also muss ich irgendwie den Strom in Zusammenhang mit den Lagefehler auswerten.
@Gad Zinkler (gad) >der Strom extern gemessen wird und nur digital in den AVR kommt (I2C). Also eher ein Mittelwert. >Ausserdem ist meine PWM Periode sehr kurz weil die Pwm mit ca 80kHz >läuft. Eben darum ist sowas möglichst komplett in Hardware. >Die kann man kaum für eine Periode unterbrechen. Sollst du auch nicht, sondern vorzeitig beenden. >Abgesehen davon ist eine absolute Strombegrenzung schlecht. >Denn beim Anlauf brauche ich den höheren Strom, aber bei Blockade will >ich ihn vermeiden. Wer sagt, dass das absolut ist? Die Vergleichsschwelle eines Komparators kann man verändern. >Also muss ich irgendwie den Strom in Zusammenhang mit den Lagefehler >auswerten. Wenn du WIRKLICH die Hardware nicht ändern kannst/willst, wird es nur ein Workaround. Du musst halt so schnell wie möglich per I2C den Strom auslesen und verarbeiten. Aber Die Zeitkonstante dieser Signalkette wird um Größenordnungen über der PWM Frequenz liegen, d.h. du wirst nur ein langsame Strommessung haben.
> Wenn du WIRKLICH die Hardware nicht ändern kannst/willst, wird es nur > ein Workaround. Du musst halt so schnell wie möglich per I2C den Strom > auslesen und verarbeiten. Aber Die Zeitkonstante dieser Signalkette wird > um Größenordnungen über der PWM Frequenz liegen, d.h. du wirst nur ein > langsame Strommessung haben. Ja ich fürchte auch, das ich ein Software Workaround machen muss. Die Hardware ist ja schon fertig. Meine Routinen für Positionsbestimmung und Stromerfassung laufen alle mit 1 kHz. Also könnte ich per Software innerhalb 1 ms auf Überstrom reagieren. Die Frage ist nur wie? Soll ich die PWM für 1 ms ganz abschalten? Ich wollte eigentlich irgendwie die PWM reduzieren in Abhängigkeit des Lagefehlers und Stromes. Aber damit hatte ich das Problem, das ich nicht wusste, wie. Die PWM kommt ja aus dem PID-Regler. Dann müsste ich ja die PWM dann nochmal durch eine Lagefehler-Motorstrom-Routine jagen.
:
Bearbeitet durch User
@ Gad Zinkler (gad) >Meine Routinen für Positionsbestimmung und Stromerfassung laufen alle >mit 1 kHz. Was schon mal ein grundlegender Designfehler ist. So eine Regelung ist normalerweise kaskadiert. Eine sehr schnelle Stromregleung (mit PWM Frequenz), eine darüberliegende, etwas langsamere Geschwindigkeitsregelung und darüber eine noch langsamere Positionsregelung. Damit kann man optimale Ergebnisse erreichen. http://elm-chan.org/works/smc/report_e.html >Also könnte ich per Software innerhalb 1 ms auf Überstrom reagieren. >Die Frage ist nur wie? >Soll ich die PWM für 1 ms ganz abschalten? Nein, aber den Wert verringern. >Aber damit hatte ich das Problem, das ich nicht wusste, wie. Die PWM >kommt ja aus dem PID-Regler. Sicher, das bleibt auch so. Aber man kann ja zwischen Reglerausgang und PWM-Register noch einen Begrenzer dazwischen schalten. Der bekommt seinen Maximalwert aus der Strommessung. Steigt der Strom über einen bestimmten Wert an, sinkt linear der maximale PWM-Wert. >Dann müsste ich ja die PWM dann nochmal durch eine >Lagefehler-Motorstrom-Routine jagen. Nein, so komplex sicher nicht. Wenn möglich sollte man die Strommessung schneller machen, also mit 2 oder 4 oder 5 kHz messen und die PWM begrenzen. Da muss man mal ein wenig experimentieren und messen.
> Denn beim Anlauf brauche ich den höheren Strom, > aber bei Blockade will ich ihn vermeiden. Genau deswegen denke ich, dass die Strommessung der falsche Ansatz ist. Der Motor wird hauptsächlich durch Überhitzung beschädigt. Also sollte man seine Temperatur überwachen. Praktisch ist dabei, dass der Motor bei kurzzeitigen Überlastungen (die ihm nicht schaden) auch nicht heiß wird. Bei der Temperaturüberwachung tritt dein (oben zittiertes) Problem also gar nicht auf. Darüber hinaus möchtest du eventuell das Drehmoment begrenzen, damit der Motor die daran angeschlossene Mechanik nicht zerstören kann. Zu diesem Zweck kann man Rutschkupplungen oder Sollbruchstellen einsetzen. Ganz ehrlich: Ich würde den Strom nur sehr träge auswerte, wie es Motorschutzschalter tun. Soweit ich weiß, arbeiten die auch mit einem Themo-Element.
>Ich habe zwar die Soll-Ist-Abweichung, die mir eine Blockade anzeigt. >Aber eine gewisse Soll-Ist-Abweichung ist normal und auch >Beschleunigungsabhängig. Also ist die Erkennung recht träge. Bei einem Roboter Modell hatte ich einen Timeout festgelegt. Wenn der Motor die Soll-Drehzahl (nicht die Soll-Position) zwei Sekunden lang erheblich unterschritten hat, wird das als Blockade gewertet.
@ Falk > Was schon mal ein grundlegender Designfehler ist. So eine Regelung ist > normalerweise kaskadiert. Eine sehr schnelle Stromregleung (mit PWM > Frequenz), eine darüberliegende, etwas langsamere > Geschwindigkeitsregelung und darüber eine noch langsamere > Positionsregelung. Damit kann man optimale Ergebnisse erreichen. Ja für eine Designänderung ist es zu spät. ich muss vorerst mal damit leben. Aber für die Zukunft, wie würdest du die Strombegrenzung machen mit einem AVR? Strom über Analag Comparator? Was hällst du von folgender Überlegung? Ich ermittel das Verhälnis aus Lagefehler und Strom. (Lagefehler * Factor / Strom). Daraus könnte ich einen dynamischen Grenzwert errechnen, mit dem die PMW abgesenkt wir. @Stefan Dein Ansatz ist für mich nicht richtig. ich will nicht den Motor schützen, sondern die Mechanik dahinter. Eine Rutschkupplung kommt auch nicht in Frage, weil ich beim Rutschen die Absolutpoistion verliere. Vielleicht mal zur Erklärung. Ich habe einen DC-Motor mit absolutem Multiturn-Geber am Motor. Dahinter sitzt ein Getriebe mittels Klemmkupplung ist ein Hebel auf der Getriebewelle. Genau da will ich das Rutschen der Klemmkupplung verhindern. Der Motor hat keine Überlastungsprobleme und die restliche Mechanik auch nicht. Nach Lagefehler > 1° für länger als 1 sekunde wird sowieso abgeschaltet. Da ist die Klemmkupplung aber schon gerutscht und meine Absolutposition ist falsch. Im schlimmsten Fall muss ich halt die Klemmkupplung durch eine Passfeder ersetzen...
Hi, >ich will nicht den Motor schützen, sondern die Mechanik dahinter. also Überlast/Rutschkupplung weils der Motor ja ganz locker verwürgen kann >Eine Rutschkupplung kommt auch nicht in Frage, weil ich beim Rutschen >die Absolutpoistion verliere. wer sagt das? Wie wäre es mit nur einer Raststellung und beim auslösen Schnellstop? Eine elastische Kupplung(Rotex) wäre auch noch möglich da könnte man anhand der I-Anstiegsrampe vor dem Blockieren abschalten. Wenn dein Motor kräftiger ist als die Mechanik kannst du nur den Strom begrenzen. >Die Position des Bewegungsprofil geht in ein PID und dort wird anhand >der Soll-Istposition die PWM berechnet. Der Ansatz ist ja richtig. Nun muss aber noch der I-Regler folgen der bei erreichen von I-Max die Rampe anhält/zurückfährt. Geht I noch höher wird die Rampe zurückgesetzt. >Meine Routinen für Positionsbestimmung und Stromerfassung laufen alle >mit 1 kHz. 1ms ist ja für Mech. nicht zu lang, wie schnell ist denn der Motor? Moment mal, du erzeugst erst eine Rampe und schaust dann nach der Pos.? Sollte das nicht umgekehrt sein? Ich denke du solltes das ganze System nochmal überdenken. Viel Erfolg, Uwe
Uwe schrieb: >>Eine Rutschkupplung kommt auch nicht in Frage, weil ich beim Rutschen >>die Absolutpoistion verliere. > wer sagt das? Na weil die Absolutposition an der Motorwelle gemessen wird. Ausschlaggebend ist aber die Position am Ende der Mechanik, also nach dem Getriebe. Wenn dort was nachgibt, dann verliere ich die Absolutposition. Mein Sensor gibt mir zwar noch den korrekten Wert der Motorwelle, aber die hat ja einen anderen mechanischen Bezug nach dem Rutschen. > Wie wäre es mit nur einer Raststellung und beim auslösen Schnellstop? Schnellstop geht nicht weil ich ja die Bewegung zu Ende fahren will wenn möglich. Meistens sind die machanischen Blockaden nur kurzzeitig. > Eine elastische Kupplung(Rotex) wäre auch noch möglich da könnte man > anhand der I-Anstiegsrampe vor dem Blockieren abschalten. Platztechnisch kein Platz für eine elastische Kupplung. Lediglich nach dem Hebel wäre Platz für irgendeine Art Dämpfung. Aber ich weiss nicht ob es da etwas gibt, was zumindest in einer Druckstufe mechanisch dämpft. Es müsste sowas wie ein starkes Tellerfederpacket sein oder so... >>Die Position des Bewegungsprofil geht in ein PID und dort wird anhand >>der Soll-Istposition die PWM berechnet. > Der Ansatz ist ja richtig. Nun muss aber noch der I-Regler folgen der > bei erreichen von I-Max die Rampe anhält/zurückfährt. Geht I noch höher > wird die Rampe zurückgesetzt. Wie noch ein I-Regler? Der I-Anteil ist doch im PID schon drin. > Moment mal, du erzeugst erst eine Rampe und schaust dann nach der Pos.? > Sollte das nicht umgekehrt sein? Ich denke du solltes das ganze System > nochmal überdenken. Wieso? Das macht doch jede CNC genauso, das erst ein Bewegungsprofil berechnet wird und dann der Antrieb versucht, dieser Sollposition zu folgen. Wie soll ich das denn sonst machen?
Gad Zinkler schrieb: > Ich habe zwar die Soll-Ist-Abweichung, die mir eine Blockade anzeigt. > Aber eine gewisse Soll-Ist-Abweichung ist normal und auch > Beschleunigungsabhängig. Also ist die Erkennung recht träge. Warum schließt du daraus, dass die Erkennung recht träge ist? Wenn du weißt, was für eine Soll-Ist-Abweichung normal ist, du also ein Modell deines Antriebes hast, dass das vernünftig beschreibt, kannst du doch sofort erkennen, wenn das Verhalten vom Modell abweicht. Lass ein Kalman-Filter zur Schätzung deines Systems mitlaufen und du erkennst das Blockieren wesentlich schneller, als wenn du ohne Nutzung der Kenntnisse über das System nur die Soll-Ist-Abweichung bewertest.
Hi, >Schnellstop geht nicht weil ich ja die Bewegung zu Ende fahren will wenn >möglich. Meistens sind die machanischen Blockaden nur kurzzeitig. also entweder haste Überlast oder nicht. Wenn also die Überlast dazu führt das die Pos. nicht mehr stimmt(könnte) kannste unmöglich weiterfahren es sei denn du baust den Istwertgeber ans andere Ende. >Wie noch ein I-Regler? Der I-Anteil ist doch im PID schon drin. ähmmm es war nicht der I-Anteil gemeint sondern der Strom, also ein Stromregler. >Wieso? Das macht doch jede CNC genauso nö nicht ganz. Der Programmschreiber sagt fahre von Pos1 -> Pos2 NC zerhackt den Wert in kleine Stückchen damit Achsregler nicht überfordert wird. Am Achsregler kommt also der reine Positionssollwert an und geht in den Rampengen.und wird dort mit den Geschwindigkeitrelevanten Daten (Beschleunigung/Ruck/Nmax) verrechnet dann geht es in den I(Strom)regler der den Motor/Endstufen vor Überlast schützt und dann gehts ins Leistungsteil. Ja, man kann auch eine NC dazu bringen ein Bewegungsprofiel zu erstellen, aber das benutzt man meistens nur um Werkstück/Werkzeugabhängig keinen Schaden zu erzeugen bzw. eine gewisse Qualität zu erreichen. Viel Erfolg, Uwe
Uwe schrieb: > also entweder haste Überlast oder nicht. > Wenn also die Überlast dazu führt das die Pos. nicht mehr stimmt(könnte) > kannste unmöglich weiterfahren es sei denn du baust den Istwertgeber ans > andere Ende. Den Istwertgeber hatte ich urspünglich am anderen Ende. Deshalb ist das mechanische Rutschen nicht aufgefallen, weil es nachgeregelt wurde. Überlast habe ich nur kurzzeitig. Ausserdem sind die Lasten nicht konstant, da ich auch noch gegen eine starke Feder fahren muss. Dazu brauche ich einiges an Strom um die Federkraft zu überwinden. @Wolfgang Ein Kalman Filter? Ich dachte, der macht das System eher noch träger. Ausserdem dürfte das nicht so einfach auf einem AVR in ASM werden. Ganz abgesehen von der Rechenzeit dafür...
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.