- Labornetzteil AliExpress         
Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 27

Thema: DC Motor simulieren (Matlab/Simulink)?!

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    19.02.2006
    Beiträge
    11

    DC Motor simulieren (Matlab/Simulink)?!

    Anzeige

    Praxistest und DIY Projekte
    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.
    Bild hier  

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

    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 ?

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    14.04.2005
    Ort
    Freiberg
    Alter
    40
    Beiträge
    311
    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
    Gurken schmecken mir nicht, wenn sie Pelz haben!

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    19.02.2006
    Beiträge
    11
    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 ?

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    14.04.2005
    Ort
    Freiberg
    Alter
    40
    Beiträge
    311
    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....
    Gurken schmecken mir nicht, wenn sie Pelz haben!

  5. #5
    Super-Moderator Lebende Robotik Legende Avatar von Manf
    Registriert seit
    30.01.2004
    Ort
    München
    Alter
    71
    Beiträge
    13.052
    Hier ist die Geschwindigkeitsberechnung des Motors unter Berücksichtigung des Trägheitsmoments beschrieben.
    Manfred

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

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    19.02.2006
    Beiträge
    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.

  7. #7
    Super-Moderator Lebende Robotik Legende Avatar von Manf
    Registriert seit
    30.01.2004
    Ort
    München
    Alter
    71
    Beiträge
    13.052
    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/vi...=120189#120189
    Bild hier  

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    19.02.2006
    Beiträge
    11
    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 ?

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.05.2005
    Beiträge
    734
    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 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/ze...ag.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
    Bild hier  

  10. #10
    Super-Moderator Lebende Robotik Legende Avatar von Manf
    Registriert seit
    30.01.2004
    Ort
    München
    Alter
    71
    Beiträge
    13.052
    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

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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

12V Akku bauen