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