Forum: Mikrocontroller und Digitale Elektronik Motorsteuerung Strombegrenzung


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Gad Z. (gad)


Angehängte Dateien:

Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

@ 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.

von Gad Z. (gad)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

@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.

von Gad Z. (gad)


Lesenswert?

> 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
von Falk B. (falk)


Lesenswert?

@ 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.

von Stefan ⛄ F. (stefanus)


Lesenswert?

> 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.

von Stefan ⛄ F. (stefanus)


Lesenswert?

>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.

von Gad Z. (gad)


Lesenswert?

@ 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...

von Uwe (Gast)


Lesenswert?

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

von Gad Z. (gad)


Lesenswert?

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?

von Wolfgang (Gast)


Lesenswert?

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.

von Uwe (Gast)


Lesenswert?

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

von Gad Z. (gad)


Lesenswert?

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...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.