PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Sinusfahrt mit DC-Motor



bbraune
25.02.2013, 09:05
Hallo!

Brauche mal wieder eure Hilfe bei einem Problem.

Ein DC-Motor soll eine sinusförmige Geschwindigkeitskurve abfahren. Dafür wollte ich mir die entsprechenden Werte in einer EXCEL-Tabelle errechnen. Leider komme ich damit nicht ganz zurecht. Hier mal Eckdaten als Beispiel.


DC-Motor mit Lochscheibe und Gabellichtschranke
Sinusförmige Geschwindigkeit 0-180 Grad
Der Weg soll 100 Löcher der Lochscheibe betragen
Die Zeit 1000 Takte


Möchte nun die Anzahl der Takte zwischen den Löchern wissen.

Bekomme da aber nach meinem Verständnis nur Blödsinn raus.
Kann mir da jemand weiter helfen?

Viele Grüße
Burkhard

Geistesblitz
25.02.2013, 14:04
Mein Ansatz wäre bei der Aufgabe so:
Geschwindigkeit hat ein Sinusprofil:
v = vmax*sin(w*t)
Durch Integrieren kommt man auf den Weg: (Integrationsgrenzen t=0 und t=1000)
s = vmax/w*(1-cos(w*1000))
Für s lässt sich deine Wegdifferenz einsetzen:
100 = vmax/w*(1-cos(w*1000))
w bekommt man nun durch den Umstand, dass cos(w*1000)=1 sein soll und auf dem Weg dahin nicht, das heißt es bleibt nur übrig, w*1000=pi zu setzen, also w=pi/1000
Die Gleichung löst sich dann auf zu
100=2*vmax*1000/pi -> vmax=pi/20
Wenn du das in die Formeln oben einsetzt, dann kannst du damit die Verläufe von v und s berechnen:
s = 50*(1-cos(1000/pi*t)
v = pi/20*sin(1000/pi*t)
s wird dabei in der Einheit "Löcher" angegeben und die v in "Löcher/Takt".
Ich hoffe mal, das ist alles so korrekt und auch nachvollziehbar. Auf meinem Taschenrechner bekomme ich jedenfalls für den Weg eine schöne Sinuskurve, die wie gewünscht bei t=0 zu s=0 wird und bei t=1000 zu s=100

Dazu sei allerdings noch gesagt, dass für die Bahnplanung meistens nicht sinusförmige, sondern sin²-förmige Bahnen verwendet werden, da das ein paar Vorteile mit sich bringt.

bbraune
25.02.2013, 17:35
Vielen Dank für deine Antwort. Werde es mir heute Abend mal in Ruhe anschauen.
Sinusförmig ist schon das was ich brauche. Es geht nicht direkt um die Motorbewegung sondern das was er antreibt. Siehe hier https://www.roboternetz.de/community/threads/37289-Künstliche-Lunge?highlight=k%FCnstliche+lunge

Gruß Burkhard

Geistesblitz
25.02.2013, 18:22
Achso, ok. Hmm, da frag ich mich aber auch, ob du wirklich unbedingt einen sinusförmigen Geschwindigkeitsverlauf brauchst. Verkehrt ist es jedenfalls nicht, aber wirklich brauchbare Ergebnisse wirst duwohl nur mit einer geeigneten Regelung erzielen können. Schließlich reicht es ja nicht, einem Motor eine Spannung zu verabreichen, damit er sich mit einer Geschwindigkeit dreht, denn diese ist sowohl von der Last als auch von der Zeit selbst abhängig (Anlaufdynamik). Naja, geh mal meine Gedanken durch und frag weiter, wenn dir was unklar sein sollte oder du andere Fragen hast.

bbraune
25.02.2013, 18:26
Habe es mir mal in eine Exceltabelle eingetragen und für t immer die Takte 0 - 1000 eingesetzt. Leider kommen da dann viele Kurven raus(siehe Bild).24656 Es soll aber nur eine Kurve sein.
Bei v kommt "Löcher/Takt" hinaus?! Ich bräuchte aber "Takte pro Loch".

Geistesblitz
25.02.2013, 19:00
Ah, ich hab da sogar einen Fehler gemacht und in der Gleichung nicht pi/1000, sondern 1000/pi hingeschrieben. Wie doof von mir, 3 Zeilen vorher stands noch richtig.
Hmm, um Takte/Schritt zu berechnen müsste man anders vorgehen: man müsste die Umkehrfunktion von der Weggleichung aufstellen (also aus s(t) ein t(s) machen) und da dann die Wegwerte von 0 bis 100 eintragen. Die Takte/Schritt würdest du dann bekommen, indem du die Zeit vom vorherigen Schritt vom Aktuellen abziehst.
Wenn du aber noch eine Regelung einbauen willst, kann es gut sein, dass du mit der geringen Winkelauflösung noch Probleme bekommst. Zu den ersten Takten wird die Position mit Sicherheit noch kleiner als 1 Loch sein und erst beim erreichen des Loches wird dann die Position ruckartig auf 1 gehen. Das geht dann immer so weiter, sodass deine Positionsmessung ziemlich gestuft sein wird. Da wäre es fast schon sinnvoller, langsamer abzutasten, damit der Verlauf glatter wird.

bbraune
25.02.2013, 19:39
Nach der EN250 Norm ist eine Sinusförmige Kurve vorgeschrieben.
Das dann noch geregelt werden musst ist natürlich klar. Brauche aber dazu erst mal die Soll-Werte.
Ich messe nicht nach jedem Takt wie viel Löcher vorbei sind sondern bei jedem Loch wie viele Takte vergangen sind.
Bin jetzt noch unterwegs. Werde es aber nachher mal mit der geänderten Formel durchrechnen.

Geistesblitz
25.02.2013, 19:59
Ah, also regelst du quasi auf Zeitebene anstatt auf Wegebene? Das ist auch mal ein interessanter Ansatz, an sowas hab ich noch gar nicht gedacht.

bbraune
25.02.2013, 20:42
Die Werte oben(100 und 1000) waren nur Beispiele damit es besser nachvollziehbar ist. Die eigentlichen Werte sind 2798 Löcher bei 19.200.000 Takte(was bei 16Mhz 1,2 Sekunden entspricht).
Die Gabellichtschranke der Lochscheibe ist am InputCaptureInterrupt angeschlossen und zählt mir so sehr genau die Takte zwischen den Löchern. Daher brauche ich also die Anzahl der Takte die zwischen den Löchern liegen.

- - - Aktualisiert - - -


Mit PI/1000 siehts jetzt so aus 24661
Ist nur ne halbe Kurve :confused:

Geistesblitz
25.02.2013, 21:35
Ja, cih dachte auch, dass du nur von 0 bis 100 positionieren willst und die Sinuskurve als Bewegungsprofil heranziehen wolltest. Das Ganze geht aber natürlich auch für andere Werte, daher hab ich die Gleichungen ja auch hergeleitet. Wie du die Werte nun einsetzen musst, dass es deine Anforderungen erfüllt, kannst du sicherlich auch selber. Ich hab dir wohl schon genug Denkarbeit abgenommen, glaub ich.

Wegen den anderen Werten: Klar, aber das Verhältnis bleibt ja ähnlich. Wird es dann so aussehen, dass bei jedem Interrupt von der Gabellichtschranke auch die Regelung erneut reagiert? Dann hast du eine variable Abtastzeit und ich weiß nicht, ob sich damit überhaupt gescheit rechnen lässt. Bei geringen Geschwindigkeiten dauert es dann nämlich länger, bis der Interrupt wieder ausgeläst wird und in dieser Zeit kann die Abweichung dann stärker wachsen als bei kürzeren Abtastzeiten. Wie sieht es eigentlich mit einer Vorsteuerung aus?

bbraune
25.02.2013, 23:08
Habe mal versucht deine Formel so umzustellen das ich die Anzahl der Takte zwischen den Löchern raus bekomme. Bekomme es aber nicht hin. Kannst du mir da bitte vielleicht noch mal helfen?

Ja, bei jedem Interrupt soll neu geregelt werden.
Da die Bewegung immer annährend gleich bleibt, wollte ich die Kurve dann so oft abfahren und korrigierten bis sie nahzu stimmt und die Werte dann immer im EEPROM zwischenspeichern. Kleine Abweichungen sollen dann während des laufenden Betrieb's in "Echtzeit" korrigiert werden.

Da ich die Geschwinigkeit nur über die Lochscheibe erfassen kann, ist die Zeit zwischen 2 Löcher die kleinste Einheit für mich.

Was meinst du mit Vorsteuerung?

Geistesblitz
26.02.2013, 01:20
Die Umkehrfunktion vom Weg wäre
t = arccos(1-s*w/vmax)/w
Und dann eben die Abstände zwischen den einzelnen t ausrechnen.

Das würde zwar nur für eine Halbwelle gehen, aber für die zweite Halbwelle bräuchtest du die Werte nur in umgekehrter Reihenfolge abzurufen. Letztendlich würde es sogar reichen, die Werte von einer Viertelwelle zu speichern und dann je nachdem, die Werte in umgekehrter Reihenfolge und/oder anderem Vorzeichen hernehmen.

Mit Vorsteuerung meine ich, dass du aus dem gegebenen Geschwindigkeits und eventuell auch Beschleunigungsverlauf die Spannung ausrechnest, die der Motor bekommen müsste, um die entsprechende Bahn von alleine zu fahren. Die Regelung wird somit entlastet. Hab das selber schonmal an einem kleinen DC-Motor mit Lochscheibe getestet und die Regelgüte hatte sich dadurch stark verbessert.

bbraune
26.02.2013, 09:04
Guten Morgen!

Wenn ich das jetzt mal VMAX und w auflöse komme ich auf folgende Gleichung:

Tges = Gesamte Anzahl der Takte
s = Gesamte Anzahl der Löcher

t = arccos(1-s*(pi/Tges)/( (s*pi)/(2*Tges) )/ (pi/Tges)

Stimmt das so? Kann es erst später durchrechnen.


Die Vorsteuerung will ich durch probieren herrausfinden. Die Werte werden dann gespeichert und können dann abgerufen werden. Die Motorbewegung kann ich beliebig oft abfahren und so schon mal die optimalen Werte ermitteln.
Denke das müsste klappen.

Geistesblitz
26.02.2013, 09:41
Dürfte so etwa hinkommen, wobei es auch sein kann, dass man das noch irgendwie skalieren muss. Wie gesagt, die Rechnung ist noch auf meine erste falsche Annahme ausgerichtet, dass du damit positionieren willst und keine kontinuierliche Sinusbewegung erzeugen. Daher kann es sein, dass an den Faktoren noch ein wenig herumgespielt werden müsste. Das werde ich dir aber nicht vorrechnen.

bbraune
26.02.2013, 12:57
Komme leider nicht mit zurecht. Habe hin und her gerechnet aber es kommt nichts gescheites bei raus. Habe auch nicht genug Matheunterricht gehabt um deine Formel zu verstehen und entsprechend zu korrieren.

Geistesblitz
26.02.2013, 19:47
Nagut, ich versuche das nochmal von vorne durch zu gehen.
Nun noch die Frage: die 19200000 Takte bei 16MHz sind die Periodendauer der Schwingung? Und die 2798 Löcher sind die AMplitude der Schwingung oder der gesamte Stellbereich?

Wie dem auch sei, für den Fall, dass dein Weg der halben Amplitude (also Abstand zwischen oberer und unterer Sinuswellenspitze) und die Zeit der Periodendauer entsprechen sollten, würde die Gleichung dann so aussehen:

t = Tges/(2*pi)*arccos(1-2*s/smax) für die Werte s=0...2798

Ich hab das mal mit Matlab ausgerechnet und dargestellt:
24669
Oben ist der sinusförmige Wegverlauf für eine halbe Periode (die andere wäre einfach nur horizontal gespiegelt) über der Zeit, unten ist die Zeitdifferenz zwischen je 2 Wegpunkten über den Weg dargestellt.

bbraune
26.02.2013, 21:09
Genau, 19.200.000 Takte sind die Periodendauer (0-180 Grad, PI oder Geschindigkeit 0->über das Maximum bei Pi/2 ->bis wieder 0). Die 16 Mhz sollten ja eigentlich egal sein. Ist dann nur wichtig das das 1,2 sec ergibt.

Über diese Periodendauer werden 2798 Löcher abgefahren.

Der Abstand der Löcher ist immer gleich. Nur die Takte zwischen den Löchern ändern sich entsprechend der Sinuskurve. Das heisst von Loch 1 - Loch 2 vergehen "viele" Takte. Bei den nachfolgenden Löchern es werden bis zum Scheitel(Pi/2) entsprechend dem Sinus immer weniger Takte werde. Nach dem Scheitel nehmen dann die Takte zwischen den Löchern ja wieder zu. Ich möchte jetzt berechen wieviel Takte zwischen den jeweiligen Löchern liegen.
Also wieviel Takte nach Loch 1 vergangen sind, dann nach Loch 2 usw. bis zu den 2798 Löchern.

Eine Kurve wie unten hatte ich auch schon mal raus. Da sie für mich aber nicht mehr nach einer Sinuskurve aussah habe ich es wieder verworfen.

Bei der oberen Kurve ist zum Anfang ein sehr flacher Anstieg, sollte der nicht steiler sein wie hier 24670?

Wollte auch nur die halbe Periode speichern da der EEprom ja auch begrenzt ist :-).

Werde mir nachher mal Excel schnappen und mit der Formel ein wenig umherspielen.

- - - Aktualisiert - - -

smax ist dann 2798 ?!

Geistesblitz
26.02.2013, 21:25
Die untere Kurve muss aber so sein, schließlich ist das die Ableitung vom arccos, das kann also nicht mehr sinusförmig sein ;)
Wie gesagt, von den erhaltenen Zeitwerten müsstest du die Differenzen bilden, um auf die entsprechenden Werte zu kommen, so hab ich ja auch die Kurve erzeugt.
Achja: die Periodendauer ist die Zeit über die positive wie auch negative Welle, nicht nur eine davon. Demnach müsstest du Tges verdoppeln, damit der Verlauf passt ;)

bbraune
27.02.2013, 12:53
Habe mir jetzt mal eine Exceltabelle mit deiner neuen Formel angelegt.
24675

Die untere Kurve gleicht deiner. Aber die obere sieht anders aus und steigt zum Schluss wieder steil an.
Kannst dir das erklären?

- - - Aktualisiert - - -


Ich sehe gerade das bei mir die X und Y Achse vertauscht ist.

Geistesblitz
27.02.2013, 12:53
Na das obere ist die Umkehrfunktion von der Sinusfunktion, würdest du das an der Diagonalen spiegeln, hättest du eine halbe Cosinuswelle.
Das untere ist dann die Ableitung der oberen Funktion nach dem Weg und gibt quasi die Steigung an jeder Stelle an. Die Steigung an der oberen Funktion würde dem Takte/Schritt entsprechen, nach dem du suchst.

bbraune
27.02.2013, 13:01
Stimmt. Bei mir war die Kurve nur verdreht.

Bin dir sehr dankbar für deine Hilfe. Denke damit komme ich erst mal weiter. Würde mich gerne wieder melden wenn ich noch mal ein Frage habe.