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.
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.
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 Anhang 24661
Ist nur ne halbe Kurve![]()
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?
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?
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.
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.
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.
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.
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:
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.
Geändert von Geistesblitz (26.02.2013 um 18:54 Uhr)
Lesezeichen