PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : DC Motor simulieren (Matlab/Simulink)?!



Mikkel
19.02.2006, 18:01
Hi Forum,
wie das Topic schon sagt möchte ich einen DC Motor in Matlab/Simulink simulieren. Um an die Motor Daten zu kommen habe ich bisher zwei Messreihen aufgenommen:

1. Ich habe auf den Motor eine Sprungfunktion gelegt und und die Drehzahl und die Zeit gemessen.
http://www.bilder-hosting.de/img/V6EGF.jpg (http://www.bilder-hosting.de/show/V6EGF.html)

2. Ich habe den Motor mit einem Sinussignal und mit verschiedenen Frequenzen angesteuert und die Drehzahl und die Zeit gemessen.
Hier als Beispiel bei 2Hz.
http://www.bilder-hosting.de/img/V6XB3.jpg (http://www.bilder-hosting.de/show/V6XB3.html)

Jetzt möchte ich gerne in Matlab / Simulink eine Übertragungsfunktion aufstellen die das gemessene Verhalten nachbildet. Einmal muss ich doch das Verhalten aus Messung 1 berücksichtigen und auch das Verhalten aus Messung 2 (-> Dämpfung ? ). Ich habe schon verschiedene Bücher befragt, aber bin nicht wirklich weiter gekommen...
Also meine Frage: Wie kann ich die Übertragungsfunktion aus den gemessenen Daten ermitteln und wie könnte das Simulink Modell aussehen welches auch die Dämpfung berücksichtigt ? :)

NRicola
19.02.2006, 23:23
Aus Messung 1 bekommst du die Zeitkonstante raus:
3τ=95% * Umax
Dann hast du die Zeittfunktion des Motors:
U=Umax * [1-exp(-t/τ)]

Über das dynamische Verhalten schlaf ich nochmal ne Runde. Wenn mir was dazu einfällt, sag ich Bescheid.
Gute Nacht
Grüß
NRicola

ädit: erste Vermutung: du musst die Zeitfunktion integrieren. aber wer weiß...

ädit die zweite: Aber wie ich grad feststelle, hast du den Motor bei Messung 1 schon etwas laufen und drückst ihm dann eine Sprungfunktion auf, oder? In dem Fall heißen die Gleichungen:
3τ=0.95 * (Umax-U0)

und

U=(Umax-U0) * [1-exp(-t/τ)]+U0

Mikkel
20.02.2006, 07:31
Hi NRicola,
erstmal besten Dank für deine Antwort. Ja, bei Messung 1 läuft der Motor schon mit ~800rpm. Für die Zeitkonstante T habe ich ~0.1s ermittelt. Bei deiner genannten Gleichung kann ich jetzt die Ausgangsdrehzahl über der Zeit darstellen ( U = f( t ) ) oder ? In Matlab würde ich aber gerne, genau wie in der Messung, eine Drehzahl vorgeben ( U = f( UKommandiert ) ). Weisst du wie das gehen könnte ?

NRicola
20.02.2006, 08:58
Ja, also diese Gleichung kannst du dazu nutzen, um ein statisches Zeitverhalten darzustellen - erhälst also genau so eine Kurve wie im oberen Bild.
Hab ich das richtig verstanden: du willst ein Umax vorgeben und dafür den Zeitverlauf darstellen, oder willst du es dynamisch machen? Dass der also fortwährend immer näher ans Umax ranläuft, aber der Nutzer jederzeit dazwischenfunken und das Umax ändern kann? Im ersten Fall ist es ganz klar: Gleichung her, Umax einlesen, Zeitverlauf darstellen. Im zweiten Fall sieht's ähnlich aus. Zunächst ist die Gleichung freilich die gleiche. Aber immer, wenn das Umax geändert wird deklarierst du die aktuelle Drehzahl zu U0. Mehr isses dann auch nicht.

Bezüglich des zeitlichen Verlaufs (Bild2):
Die blaue Kurve ist die Umax-Funktion, richtig?
Also hat man
Umax=Ûsin(ωt)+U0
U0 ist der Punkt, um den das ganze oszilliert, Û die Differenz des oberen Maximums zu U0 (also Maximalausschlag).

Setzt man diese Gleichung in die Gleichung
U=(Umax-U0)[1-exp(-t/τ)]+U0
ein, erhält man
U=Ûsin(ωt)[1-exp(-t/τ)]+U0
mit ω=2πf
Dabei ist dann [1-exp(-t/τ)] auch der Dämpfungsfaktor, der bei einer Schwingung der Frequenz f einen bestimmten Wert haben muss. Also muss man eine Beziehung von -t/τ zu f herstellen - schneller getan, als gesagt:
f=1/t
also
[1-exp( -1/(f*τ) )]
Also ist die Gleichung
U=Ûsin(ωt)[1-exp( -1/(f*τ) )]+U0

Die Sache mit der Phasenverschiebung muss man sich nochmal überlegen. Vielleicht noch mit berücksichtigen, dass U0 kein konstanter Wert ist, sondern der Wert des davorigen Zeitschritts annimmt...
(also auch irgendwie eine sin-Funktion gehorcht.)
Grüß
NRicola

ädit: mir ist grad eingefallen, dass womöglich nicht genau f=1/t in die Rechnung eingeht - vielleicht auch nur 2/t oder so.... :-k

Manf
20.02.2006, 08:58
Hier ist die Geschwindigkeitsberechnung des Motors unter Berücksichtigung des Trägheitsmoments beschrieben.
Manfred

https://www.roboternetz.de/phpBB2/viewtopic.php?t=12793

Mikkel
20.02.2006, 11:11
@NRicola
Ja, es soll dynamisch sein. Ich "kommandiere" dem Motor eine Drehzahl und die Ausgangsdrehzahl soll dem Übertragungsverhalten des realen Motors ( möglichst exakt ) entsprechen. Deine aufgestellte Gleichung muss ich mir gleich mal in Ruhe anschaun. Ich dank Dir schonmal, falls du noch weitere Einfälle hast, dann immer her damit :)

@Manf
Danke für den Link. Dort habt ihr das Trägheitsmoment des Motors bestimmt. Wenn ich das Trägheitsmoment hätte, dann könnte ich versuchen die DGL für einen einfachen DC Motor aufzustellen. Da habe ich auch schon Informationen zu gefunden. Das Problem ist dabei aber, das der Motor ein Modellbau "Brushless" Motor ist. Da weiss ich nun überhaupt nicht, wie ich da was sinnvolles messen könnte, deshalb habe ich die Messreihe wie im ersten Posting durchgeführt.

Manf
20.02.2006, 11:31
Es ist sicher nicht leicht, den Motor nach seinem Verhalten zu beschreiben.
Dazu könnte man noch ein bischen weitergehen:
Ist es klar, ob der Motor im Leerlauf betrieben wird? Nicht etwa ein Lüfter mit Drehzahlabhängigier Last?

Sieht die Beschleunigungskurve für unterschiedliche Endgeschwindigkeiten unterschiedlich aus?

Ist das Trägheitsmoment die einzige (oder die überwiegende) Last?. Es gibt Beispiel zur Variation des Trägheitsmoments zur Bestimmung des Ankerträgheitsmoments, dort allerdings bei einem Schrittmotor:
https://www.roboternetz.de/phpBB2/viewtopic.php?p=120189#120189
https://www.roboternetz.de/phpBB2/album_pic.php?pic_id=710

Mikkel
20.02.2006, 13:40
Ohje langsam wird es richtig kompliziert :(
Also für meine Messungen wurde der Motor nicht im Leerlauf betrieben, sondern mit einer Luftschraube belastet, was auch dem späteren Anwendungsfall entspricht. Hätte ich ohne Luftschraube messen sollen ?
Gibt es nicht ein einfaches Verfahren um aus den Messergebissen von Sprungantwort und Sinussignal die Übertragungsfunktion zu bestimmen ?

waste
20.02.2006, 15:29
Hallo Mikkel!

Zur Simulation eines DC-Motors in Matlab/Simulink gibt es mehrere Möglichkeiten, je nachdem wie genau es sein soll. Im Prinzip hat ein DC-Motor zwei Zeitkonstanten. Eine (meist die größere) wird durch das Trägheitsmoment verursacht, die Zweite wird durch die Induktivität verursacht. Die Zeitkonstante durch die Induktivität ist meistens so viel kleiner, dass sie in der Sprungantwort nicht mehr herauslesbar ist.

Wird die Induktivität und die Reibung vernachlässigt, reduziert sich die Übertragungsfunktion (Laplace) auf:
K/(T*s+1)
K ist das Übertragungsmaß = delta Drehzahl/delta U
T ist die Zeitkonstante

Mit dieser Übertragungsfunktion kann sowohl in Matlab als auch in Simulink gerechnet werden. Wenn du zusätzlich noch die Zeitkonstante durch die Induktivität berücksichtigen willst, dann brauchst du die Werte L und R deines Motors. Daraus kannst du die 2. Zeitkonstante berechnen. Die Übertragungsfunktion ist dann:
K/((T1*s+1)(T2*s+1))

Eine andere Möglichkeit für Simulink ist im Anhang zu sehen. Hier wurde die Differentialgleichung x''=(K/T)*U -(1/T)*x' in ein Scicos-Modell umgesetzt. Scicos ist ein Clone von Simulink, es sollte also nicht so schwierig sein, die entsprechenden Blöcke für Simulink zu finden. Die Differentialgleichung beschreibt ein Verzögerungsglied 1. Ordnung (PT1-Glied), was der obigen Übertragungsfunktion K/(T*s+1) entspricht. Also Induktivität und Reibung ist vernachlässigt.

Eine genaue Modellierung ist hier (http://www.library.cmu.edu/ctms/ctms/simulink/examples/motor/motorsim.htm) beschrieben. Wobei hier die spezifischen Werte des Motors, wie R, L, J (Trägheitsmoment) und b (Dämpfung) benötigt werden. Dieses Modell geht von einer viskosen Reibung aus, was bei Kleinmotoren nicht immer zutrifft. Kleinmotoren mit Bürsten haben hauptsächlich eine trockene Reibung, d.h. das Reibmoment ist konstant und nicht proportional mit der Drehzahl, wie in dem Beispiel mit der Dämpfung b.

Aber ich sehe gerade, dass deine Sprungantwort sogar mit Luftschraube gemessen wurde. In dem Fall muss dann zusätzlich noch eine Last mit turbulenter Reibung angesetzt werden.
Hier die Unterschiede:
Die trockene Reibung geht nur mit dem Vorzeichen (SGN) der Drehzahl ein, das Reibmoment bleibt über dem Drehzahlbereich konstant.
Die viskose Reibung ist proportional mit der Drehzahl.
Die turbulente Reibung geht quadratisch mit der Drehzahl ein.

Wie das Reibmoment ohne Luftschraube bei deinem Brushless ist, kann ich nicht sagen, ich habe noch keinen gemessen. Da ein Brushless keine Bürsten hat, kann es durchaus einer viskosen Reibung entsprechen. Das müsstest du vielleicht noch messen. Messmethode entsprechend dem Link: https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=12793
Deine Last (Luftschraube) ist auf jeden Fall turbulent. Ich würde die auch separat modellieren. D.h. extra messen, also einmal ohne und einmal mit Luftschraube.

Hoffe das hilft weiter.
Gruß Waste

Ohje, ich habe meine maximale Upload Quota Grenze von 1 MB erreicht. Kann scheinbar keine Bilder mehr anhängen. Manfred, kannst du mir helfen?

Edit: Bild ergänzt
http://www.bilder-hosting.de/img/XGHTL.png

Manf
20.02.2006, 17:09
Ohje, ich habe meine maximale Upload Quota Grenze von 1 MB erreicht. Kann scheinbar keine Bilder mehr anhängen. Manfred, kannst du mir helfen?
Manchmal hilft es die Bilder nicht so groß zu machen dan rutschen sie noch durch, sonst die pers. Gallery nehmen.
Manfred

Mikkel
20.02.2006, 17:33
Jetzt bin ich vollends verwirrt.

Ich fasse mal zusammen was ich verstanden / nicht verstanden habe.

Ich möchte das verhalten eines Brushless Motors der mit einer Luftschraube belastet ist in Matlab / Simulink simulieren. Es liegen mir keine Motorparameter wie R, L, C, J oder b vor. Deshalb habe ich zwei Messreihen mit montierter Luftschraube aufgestellt.

1. Einen Sprung auf den Eingang gegeben und die Drehzahl und Zeit gemessen.

2. Ein Sinussignal auf den Eingang gegeben und wieder die Drehzahl und die Zeit gemessen. Diese Messung habe ich für mehrere Frequenzen wiederholt, in der Hoffnung das Frequenzverhalten ermitteln zu können.

Der Motor läßt sich in vereinfachter Form als PT1 Strecke betrachten.
Deshalb hat NRicola die Formel U=(Umax-U0) * [1-exp(-t/τ)]+U0 eingebracht. Diese Formel beschreibt die Drehzahl der Luftschraube im Zeitbereich. Die Parameter Umax, Uo und t lassen sich aus der Grafik von Messung 1. ermitteln. In diese Gleichung geht aber noch nicht das Verhalten aus Messung 2. ein.

Von Waste kam nun eine neue Gleichung K/(T*s+1) diese Beschreibt das Verhalten des Motors im Frequenzbereich. In diese Formel geht aber noch nicht die Zeitkonstante der Induktivität mit ein. Weiterhin ist die Reibung vernachlässigt. Die Parameter K und T bestimmt man auch hier aus Messreihe 1. Ist das richtig ? Auch hier ist das Verhalten aus Messreihe 2. noch nicht berücksichtigt ?

Eine andere Möglichkeit die Übertragungfunktion zu erhalten wäre, die fehlenden Motorparameter J, R, L, C und b über weitere Messungen zu ermitteln. Mit diesen Werten könnte man über eine DGL das den Motor modellieren.

Was mir nun gar nicht klar ist:
Bisher ging noch nirgends die Messreihe 2. ein. Irgendwie muss ich doch das Frequenzverhalten aus den Messdaten modellieren können ? Warum muss ich die fehlenden Motorparameter noch einzeln messen ? In meine bisherige Messung gingen diese Werte doch schon ein. Ich kann zwar nicht sagen welcher Parameter das Verhalten wie stark beeinflusst hat, aber in der Summe sind sie doch enthalten ? Warum muss ich den Motor ohne Luftschraube messen ? Kann ich die Motorreibung im Vergleich zu der Luftschraube nicht vernachlässigen, oder hat das noch einen anderen Grund ? :) Was wären jetzt die nötigen Messungen um den Motor mit montierter Luftschraube korrekt modellieren zu können ?

@Waste: Bilder kannst du hier prima hochladen: http://www.bilder-hosting.de/upload.html

Manf
20.02.2006, 18:03
Wenn Du den Motor nur ein und ausschaltest und die Verzögerung bestimmen möchtest wird es wohl reichen den Vorgang aufzunehmen und in der Simulation wieder abzurufen.
Wenn klar ist was die Simulation leisten soll dann läßt sich eine Beschreibung finden.

Erreichen des Sollwertes mit Verzögerung durch Zeitkonstante ist eine einfache Beschreibung. Ist die Zeitkonstante vom Endwert unabhängig?
Manfred

Mikkel
20.02.2006, 19:56
@Manf
Die Zeitkonstante nicht ganz unabhängig. Mir würde es aber im ersten Schritt reichen überhaupt eine passende Übertragungsfunktion zu haben. Die Änderung in der Zeitkonstanten ist nur minimal, das könnte ich verschmerzen wenn es nicht modelliert wird.

waste
20.02.2006, 20:28
@Mikkel

Ich habe das Bild in meinem obigen Beitrag ergänzt.


Von Waste kam nun eine neue Gleichung K/(T*s+1) diese Beschreibt das Verhalten des Motors im Frequenzbereich. In diese Formel geht aber noch nicht die Zeitkonstante der Induktivität mit ein. Weiterhin ist die Reibung vernachlässigt. Die Parameter K und T bestimmt man auch hier aus Messreihe 1. Ist das richtig ? Auch hier ist das Verhalten aus Messreihe 2. noch nicht berücksichtigt ?
Die Übertragungsfunktion beschreibt das Verhalten sowohl im Zeit- als auch im Frequenzbereich. Du brauchst die Funktion nur in Matlab eingeben und kannst dann die Sprungfunktion ausgeben lassen oder auch das Bodediagramm. Die 2. Messreihe wird also nicht direkt gebraucht, du kannst sie aber zur Überprüfung hernehmen. Entweder im Bodediagramm die Dämpfung und Phase bei 2Hz überprüfen oder im Zeitbereich mit 2Hz stimulieren und das Ausgangssignal vergleichen.

Für die zusätzliche Berücksichtigung der Induktivität habe ich auch eine Funktion angegeben, aber fang erst mal mit der einfachen Version an, sonst löst sich die Verwirrung nie auf. :cheesy:

Das Problem für die Simulation in Matlab ist die Luftschraube, die macht das System nichtlinear. Die Sprungfunktion ist keine e-Funktion mehr, da die Last quadratisch mit der Drehzahl steigt. Der Unterschied ist allerdings nur geringfügig. Dafür bietet sich die Simulation in Simulink an, da kann man auch nichtlinear simulieren. Füge vor dem -1/T-Block in meinem Scicosmodell im Rückkoppelzweig noch einen Quadrierer ein, dann ist das Modell für eine Luftschraube näherungsweise gültig. Die Reibverluste des Motors sind aber vernachlässigt.

Übrigens, wenn die Last verändert wird, ändert sich die Zeitkonstante fast gar nicht, nur die Enddrehzahl variiert.

Waste

stochri
20.02.2006, 20:52
Zitat:
Ohje, ich habe meine maximale Upload Quota Grenze von 1 MB erreicht. Kann scheinbar keine Bilder mehr anhängen. Manfred, kannst du mir helfen?

Manchmal hilft es die Bilder nicht so groß zu machen dan rutschen sie noch durch, sonst die pers. Gallery nehmen.


Ist mir auch vor kuzem erst passiert. Ich finde das sehr ärgerlich, vor allen Dingen, weil man das am Amfang gar nicht weis.
Gerade die Threads von waste stellen ja einen echten Mehrwert im Roboternetz dar. Sie sind ja sehr gut als Nachschlagewerk geeignet. Eigentlich sollte man pro Jahr ein MB mehr bekommen, das wäre ein sinnvolle Regelung.

Gruss,
stochri

Manf
20.02.2006, 22:26
Ich habe es weitergegeben und suche auch mit nach Lösungen, es gibt Ansätze. Gute Bilder sind wichtig.
Manfred

waste
21.02.2006, 12:56
Hallo Mikkel,

für eine gezieltere Hilfe wäre es sinnvoll, wenn du mir Näheres zu deinem Vorhaben erklären könntest.
Für was willst du das Simulationsmodell verwenden?
Ein Brushless-Motor braucht einen spez. Regler, der Motor läuft ja nicht mit Gleichspannung. Soll der Regler auch simuliert werden, oder alles (Regler, Motor und Luftschraube) in einen Block? Willst du später verschiedene Luftschrauben testen, dann sollte die Luftschraube extra simuliert werden.
Hast du schon Erfahrung mit Matlab/Simulink? Wenn nicht, dann könntest auch mit Scilab/Scicos loslegen, da könnte ich dir dann den Code direkt vorgeben. Allerdings wäre dann der Lernerfolg durch das einfache "copy and paste" nicht mehr so gegeben.
Wie sind deine theoretischen Vorkenntnisse? Ist dir der Ausdruck "s" in der Übertragungsfunktion ein Begriff?

Waste

Mikkel
21.02.2006, 17:59
Hi Waste !
Mit dem Simulationsmodell möchte ich später den Regler für ein X-Ufo auslegen. Sowas bauen hier ja schon einige wie ich gesehen habe. Die 6-Dof Simulation habe ich schon und das klappt auch schon halbwegs. Was mir jetzt noch fehlt ist ein Modell des Antriebs.
Mittlerweile habe ich schon die ein oder andere Erfahrung mit Matlab gesammelt, deswegen würde ich gerne dabei bleiben. Im Grunde würde mir das Streckenmodell Regler + Motor + Luftschraube reichen. Ich denke einzeln brauch ich das nicht unbedingt aufschlüsseln ? Hast du da evt eine gute Idee ?
Mittlerweile habe ich deine Gleichung K/(T*s+1) in Matlab ausprobiert und siehe da das passt auch in etwa mit der Messung überein :o)
Die Gleichung K/(T*s+1) ist doch die Laplace Transformation der PT1 DGL oder ? Wenn ich das noch richtig in Erinnerung habe transformiert man damit die Gleichung vom Zeit in den Frequenzbereich. Somit erspart man sich das Differenzieren bzw das Differenzieren im Zeit wird zur Multiplikation im Frequenzbereich ?
Ich fände es eigentlich ganz spannend wenn wir mal, quasi zur Übung, die Luftschraube extra simulieren würden. Also eine Überlegung angefangen von den physikalischen Grundlagen, aufstellen der DGL, aufnehmen von Messwerten bis hin zum Matlab Modell. Ok du hast sicher noch was anderes zu tun, aber evt schüttelst du dir das ja mal so eben aus dem Ärmel ;)

Im Anhang habe ich den Simulink Aufbau:

http://www.bilder-hosting.de/img/ZAFSZ.jpg (http://www.bilder-hosting.de/show/ZAFSZ.html)

Der obere Teil ist die Laplace Funktion. Im unteren Teil habe ich versucht die PT1 DGL nachzubilden. Ist das so korrekt ?

gruss
mikkel

waste
21.02.2006, 20:45
Im Grunde würde mir das Streckenmodell Regler + Motor + Luftschraube reichen. Das geht, und hat auch den Vorteil, dass die Nichtlinearität der Drehzahl durch die Luftschraube wegfällt. Ich gehe davon aus, dass man dem Regler eine Dehzahl vorgibt und die dann eingestellt wird. Allerdings weiß ich nicht genau, was der Regler dynamisch macht, aber gehen wir einmal davon aus, dass der gesamte Block näherungsweise ein PT1-Glied bleibt. Dann kannst du den Block mit der Übertragungsfunktion in Simulink nehmen.

Mittlerweile habe ich deine Gleichung K/(T*s+1) in Matlab ausprobiert und siehe da das passt auch in etwa mit der Messung übereinSehr gut! In deinem Fall mit dem gesamten Block (Regler, Motor und Luftschraube) wäre dann K=1, wenn man die Drehzahl direkt vorgeben kann. Die Zeitkonstante T müsstest du so anpassen, dass es mit den Messungen übereinstimmt.

Ich fände es eigentlich ganz spannend wenn wir mal, quasi zur Übung, die Luftschraube extra simulieren würden.Das heben wir uns für später auf.

Im Simulink-Blockschaltbild ist der obere Block mit der Übertragungsfunktion richtig. Ich lese daraus K=0.98 und T=0.15.
Der untere Teil stimmt nicht. Nimm einfach mein Scicos-Bild als Vorlage.

So, jetzt kommt Fussball, komm später wieder.

Waste

waste
21.02.2006, 23:29
Nun zu der Umsetzung der DGL x''=(K/T)*U -(1/T)*x' in ein Simulationsmodell.
Begriffserklärung:
x' = Geschwindigkeit bei Translation oder Winkelgeschwindigkeit bei Rotation
x'' = Beschleunigung bzw. Winkelbeschleunigung (Ableitung von x')
U = Eingangsgröße z.B. Spannung
K = Übertragungsmaß
T = Zeitkonstante

In folgenden Bild sind x'' und x' eingezeichnet. Wenn x'' die Ableitung von x' ist, dann ist umgekehrt x' das Integral von x''. Der linke Eingang entspricht U.
https://www.roboternetz.de/phpBB2/album_pic.php?pic_id=848
Man kann sehr schön die DGL nachvollziehen:
x'' = U*K/T + (-1/T)*x'

Wenn du das in Simulink nachbaust und für K=0.98 und T=0.15 einsetzst, dann sollte das gleiche wie bei deinem oberen Block mit der Übertragungsfunktion herauskommen.

Waste

Mikkel
22.02.2006, 08:41
Das kann ich nachvollziehen wie du aus der DGL das Simulationsmodell erzeugt hast. Was mir aber nicht klar ist, wie du auf die DGL kommst. Die DGL von der PT1 Strecke ist doch: T*x'+x=K*U ?

waste
22.02.2006, 10:26
Die DGL von der PT1 Strecke ist doch: T*x'+x=K*U ?
Richtig!
Stell jetzt einfach die Gleichung nach x' um, das ergibt:
x' = K/T*U - x/T
Wenn man jetzt in meinem Bild x'' durch x' und x' durch x ersetzt, ist hoffentlich die Welt wieder in Ordnung.

Ich habe aus Bequemlichkeit das Bild aus einem größeren Blockschaltbild herauskopiert. In dem Gesamtbild ist nämlich auch noch die Position (Weg) als Variable x vorhanden. Ich war zu faul das mit x und x' neu zu zeichnen.
Entschuldige, wenn das verwirrt hat.

Übrigens, willst du nicht auch noch den Schub simulieren?

Waste

Mikkel
22.02.2006, 13:08
Ahhh ok, ich habe die ganze Zeit versucht die DGL nocheinmal zu differenzieren, da kommt natürlich Müll bei raus. Ok habs verstanden.

Mein Regler kommandiert einen Schubwert. Der Motorregler verlangt einen PWM Wert. Jetzt habe ich mir einfach die Funktion PWM = f( Schub ) ausgemessen. Ich könnte jetzt noch eine Funktion Schub = f( Rpm ) oder Schub = f( PWM ) aufstellen.

Wie würdest du den Schub simulieren ?

waste
22.02.2006, 19:12
Der Motorregler verlangt einen PWM Wert.
Ok dann bleibt es bei der nichtlinearen Umsetzung von Ansteuerung zu Drehzahl.

Hier der Signalflussplan, so wie ich ihn mir vorstelle:
https://www.roboternetz.de/phpBB2/album_pic.php?pic_id=849
Der Schub ist auch schon berücksichtigt.
Da sowohl das aufzubringende Drehmoment als auch der Schub quadratisch mit der Drehzahl steigen, ist der Quadrierer mit dem Block u^a eingefügt. In der Rückkopplung muss der durch die Quadrierung zu hohe Wert korrigiert werden. Ich habe das mit der Konstanten K gemacht, die gilt aber nur, wenn die Ansteuerung den Endwert 1 hat (100% PWM = 1). Die Konstante KL für den Schub müsstest du experimentell heraus finden.

Nach diesem Schaltbild wäre der Schub proportional zur PWM, wenn man mal die Verluste durch Gleitreibung vernachlässigt. Die Drehzahl allerdings entsprechend dem folgenden Bild nichtlinear zur PWM. Vielleicht kannst du das durch Messungen bestätigen. Wenn nicht, dann müssen wir noch mal nachbessern.
https://www.roboternetz.de/phpBB2/album_pic.php?pic_id=850

Waste

Mikkel
23.02.2006, 19:50
Hi Waste,
ich habe erstmal die Messung PWM zu RPM durchgeführt.

http://www.bilder-hosting.de/img/57MYV.jpg (http://www.bilder-hosting.de/show/57MYV.html)

Das sieht in etwas so aus wie du es erwartet hast.

Die Zweite Messung ist PWM zu Schub.

http://www.bilder-hosting.de/img/58MMK.jpg (http://www.bilder-hosting.de/show/58MMK.html)

Das ist nicht so ganz proportional.

Ich habe jetzt die ursprüngliche Schaltung erweitert:

http://www.bilder-hosting.de/img/58T5K.jpg (http://www.bilder-hosting.de/show/58T5K.html)

Die beiden Polynome sind Approximationen aus der Messung. Damit rechne ich von PWM in RPM und von RPM in Schub um. Das passt eigentlich ganz gut mit den Messwerten überein. Was hälst du davon ?

waste
24.02.2006, 12:47
Ah, ich verstehe. Mit der PT1-Nachbildung simulierst du die Verzögerung und mit den P(u)-Blöcken die Nichtlinearität. Ja, das sollte so gehen.

Da du die Messung PWM zu Schub schon hast, könntest auch direkt einen Block mit PWM_to_Force nehmen.
Vielleicht gibt es bei Simulink auch einen Block wie bei Scicos, in den man mit der Maus eine Funktion stückweise eintragen kann. Dann brauchst nicht mühsam die Polynome ermitteln, sondern einfach den Graph deiner Messung stückweise übernehmen.

Waste

Mikkel
26.02.2006, 17:10
Hi Waste,
ich habe deinen Vorschlag umgesetzt und jetzt nur noch einen P(u) Block der direkt von PWM in Schub umrechnet. Ob es bei Simulink so einen Block gibt weiss ich nicht. Aber dieser P(u) Block ist auch sehr einfach zu benutzen. Ich kann direkt eine Approximation meiner Messkurve machen, die Koeffiziente in einem Vector speichern, und den Vector Namen dem P(u) Block übergeben.