Hallo! Ich habe folgende Aufgabenstellung an einer Seilwindensteuerung: Winde (Werte exemplarisch): Seilstärke 10mm Trommelbreite 400mm 100 Motorumdrehungen pro Trommelumdrehung Also 40 Trommelumdrehungen bzw. 4000 Motorumdrehungen für eine Seillage Es werden mehrere Seillagen übereinandergetrommelt. Eine Schrittmotorgesteuerte Seilführung über die Trommelbreite (0-400mm) soll stets die Position einnehmen, an der das Seil zu liegen hat. Das bedeutet: Bei Motorumdrehung 0 Führungsposition 0 (Linker Anschlag) Motorumdrehung 2000 Führungsposition 200 (Hälfte) Motorumdrehung 4000 Führungsposition 400 (Rechter Anschlag) Motorumdrehung 6000 Führungsposition 200 (Hälfte) Motorumdrehung 8000 Führungsposition 0 (Linker Anschlag) usw.usf. Frage: wie am einfachsten die Zuordnung von Führungsposition zu Motorumdrehung realisieren? Mit einer Art look-up-tabele etwa? Ich möchte den Controller so wenig wie möglich mit intensiven Berechnungen belasten.
Wo ist denn das Problem, letztendlich muss man doch nur einen Faktor für Motorumdrehung zu Schrittmotor-Schritte einmalig berechnen. Am linken und rechten Rand, muss dieser Faktor nur mit -1 mal genommen werden und gut...
Stephan schrieb: > Motorumdrehung realisieren? Mit einer Art look-up-tabele etwa? Ich > möchte den Controller so wenig wie möglich mit intensiven Berechnungen > belasten. Na ja. So intensiv ist das auch wieder nicht. Wie hast DU denn das auf dem Papier gerechnet? Bzw. wie würdest DU die Position der Führung berechnen, wenn ich dir sage, dass der Motor bei Umdrehung 9765 ist? * wieviele Lagen sind voll? * die nicht volle Lage, welche ist das daher? von links nach rechts oder von rechts nach links * ja nach Richtung dann den Abstand berechnen, mit der verbleibenden Anzahl an Umdrehungen die nicht in den vollen Lagen schon berücksichtigt sind. PS: du machst da einen klitzekleinen Fehler. Denn das Seil in der nächst äusseren Lage wird nicht direkt über der darunterliegenden Windung zu liegen kommen, sondern in die Kerben der darunterliegenden Windungen rutschen. D.h. die Windungen von aufeinanderfolgenden Lagen sind etwas gegeneinander versetzt.
:
Bearbeitet durch User
Interesant wirds wenn das Seil etwas gealtert ist und dadurch etwas dicker geworden und plötzlich nur noch 39 Windungen in eine Lage passen.
Fabian schrieb: > Am linken > und rechten Rand, muss dieser Faktor nur mit -1 mal genommen werden Der Faktor ergäbe (bei tatsächlichen 760m Kabel) eine gigantische Variable! Karl Heinz schrieb: > Stephan schrieb: > >> Motorumdrehung realisieren? Mit einer Art look-up-tabele etwa? Ich >> möchte den Controller so wenig wie möglich mit intensiven Berechnungen >> belasten. > > Na ja. So intensiv ist das auch wieder nicht. > Wie hast DU denn das auf dem Papier gerechnet? > > * wieviele Lagen sind voll? > * die nicht volle Lage, welche ist das daher? von links nach rechts oder > von rechts nach links > * ja nach Richtung dann den Abstand berechnen > > PS: du machst da einen klitzekleinen Fehler. Denn das Seil in der nächst > äusseren Lage wird nicht direkt über der darunterliegenden Windung zu > liegen kommen, sondern in die Kerben der darunterliegenden Windungen > rutschen. D.h. die Windungen von aufeinanderfolgenden Lagen sind etwas > gegeneinander versetzt. Das dachten wir anfangs auch. Tatsächlich sind die "Gewinde", die die Kabel auf der Trommel bilden, abwechselnd "Rechts- und Linksgewinde", sie liegen quasi immer über 'x', daher rutschen sie nicht in die Kerben. Udo Schmitt schrieb: > Interesant wirds wenn das Seil etwas gealtert ist Irgendein Superkonstrukteur hat die Trommel 5mm zu breit gemacht. Dachte ich zuletzt jedenfalls. Vielleicht war das seine Absicht :)
Stephan schrieb: > Das dachten wir anfangs auch. Tatsächlich sind die "Gewinde", die die > Kabel auf der Trommel bilden, abwechselnd "Rechts- und Linksgewinde", > sie liegen quasi immer über 'x', daher rutschen sie nicht in die Kerben. Ah. Mea culpa Daran hab ich nicht gedacht. Ich hab mir nur eine Querschnittszeichnung vorgestellt. Aber die Begründung ist logisch. Wieder was gelernt
:
Bearbeitet durch User
Karl Heinz schrieb: > wie würdest DU die > Position der Führung berechnen, wenn ich dir sage, dass der Motor bei > Umdrehung 9765 ist? 9765 - 8000 = 1765 Ganze Lagen (8000/16000/24000...)abziehen. Jetzt muss die Position für Umdrehung 1765 ermittelt werden: 400/4000 * 1765 ergibt Position 176mm
Stephan schrieb: > wie am einfachsten die Zuordnung von Führungsposition zu > Motorumdrehung realisieren Früher hat man das mit simpler Mechanik gemacht, was heutige Studenten nicht mal mit einem Microcontroller hinbekommen. Wahrscheinlich brauchst du den Controller noch um nebenbei MineCraft zu spielen.
MaWin schrieb: > Studenten Wer ist hier Student? MaWin schrieb: > MineCraft Was ist MineCraft? Udo Schmitt schrieb im Beitrag #3520045: > modulo Den hatte ich auch schon im Verdacht...
Stephan schrieb: > Also 40 Trommelumdrehungen bzw. 4000 Motorumdrehungen für eine Seillage Soweit die Theorie. Praktisch kann Mechanik auch klemmen und der SM Schritte überspringen. Daher sollte man die Trommeldrehungen kontrollieren z.B. mit einem Hallsensor o.ä.
Stephan schrieb: > Karl Heinz schrieb: >> wie würdest DU die >> Position der Führung berechnen, wenn ich dir sage, dass der Motor bei >> Umdrehung 9765 ist? > > 9765 - 8000 = 1765 Ganze Lagen (8000/16000/24000...)abziehen. Exakt. Wo nimmst du die 8000 her? (gibt 2 Möglichkeiten, die zu bestimmen.) > Jetzt muss die Position für Umdrehung 1765 ermittelt werden: > 400/4000 * 1765 ergibt Position 176mm Eben. Ist das eine intensive Berechnung? Würde sagen: Ah geh. Von diesen Berechnungen schafft dein µC locker ein paar Tausend pro Sekunde.
Die viel interessantere Frage lautet allerdings: Woher nimmst du die aktuelle Nummer der Motorumdrehung? Und zwar auch dann, wenn das Gerät zwischendurch ausgeschaltet war und jemand an der Kabeltrommel gespielt hat. Alles abwickeln und bei 0 beginnen ist ja wohl eher nicht praktikabel.
Karl Heinz schrieb: > Ist das eine intensive Berechnung? Einst (vor ein paar Wochen) beriet man mich hier im Forum zum Thema inkrementalem Drehgeber: der muss nämlich ziemlich häufig abgefragt werden, sodass -das hast Du glaubich vorgerechnet- bei 20MHz Quarz etwa 300 Takte zwischen zwei Drehgeberabfragen Zeit bleiben. "400/4000 * 1765" hört sich irgendwie schon nach ein paar Täktchen an?!
Karl Heinz schrieb: > jemand an der Kabeltrommel gespielt hat. Bei abgeschaltetem Motor greift eine Scheibenbremse ein. Da verdreht niemand was. Bei Spannungsausfall (trotz 24V-USV)wird der letzte Wert rechtzeigig im EEPROM gespeichert.
Hallo Stephan! > Einst (vor ein paar Wochen) beriet man mich hier im Forum zum Thema > inkrementalem Drehgeber: der muss nämlich ziemlich häufig abgefragt > werden, sodass -das hast Du glaubich vorgerechnet- bei 20MHz Quarz etwa > 300 Takte zwischen zwei Drehgeberabfragen Zeit bleiben. > > "400/4000 * 1765" hört sich irgendwie schon nach ein paar Täktchen an?! Nein. 400 und 4000 sind ja Konstanten, zusammengefasst 0,1. Wenn man die Position jetzt in µm berechnet, wird daraus der Faktor 100. Dann musst du nur noch eine INT-Multiplikation machen. Mit freundlichen Grüßen Thorsten Ostermann
Stephan schrieb: > Karl Heinz schrieb: >> Ist das eine intensive Berechnung? > > Einst (vor ein paar Wochen) beriet man mich hier im Forum zum Thema > inkrementalem Drehgeber: der muss nämlich ziemlich häufig abgefragt > werden, sodass -das hast Du glaubich vorgerechnet- bei 20MHz Quarz etwa > 300 Takte zwischen zwei Drehgeberabfragen Zeit bleiben. > > "400/4000 * 1765" hört sich irgendwie schon nach ein paar Täktchen an?! Den Inkrementalgeber fragst du in einem Interrupt ab, die Umrechnung in der Hauptschleife. Selbst wenn die Berechnung 3 mal von einem Interrupt unterbrochen wird, ist das immer noch ziemlich egal. Im übrigen musst du ja nicht dividieren bzw. modulo rechnen
1 | MotorPos = .... |
2 | |
3 | Lage = 0; |
4 | while( MotorPos > 4000 ) |
5 | {
|
6 | Lage++; |
7 | MotorPos -= 4000; |
8 | }
|
9 | |
10 | if( Lage % 2 == 0 ) |
11 | ... von links nach rechts |
12 | else
|
13 | ... von rechts nach links |
Wieviele Lagen hast du maximal? Genau soviele Subtraktionen hast du maximal und die 1 Multiplikation macht das Kraut dann auch nicht mehr fett. Mann darf schon auf einem Computer ein bischen was rechnen. Wenn der Herr elm-chan auf einem Mega8 eine Fast Fourier Transformation rechnet um damit auf einem Text-LCD das aktuelle Musikspektrum online zu errechnen und anzuzeigen, dann darfst du ruhig ein paar Subtraktionen und Multiplikationen machen. Wenn du 10 mal pro Sekunde einen neuen Wert erhältst, dann wird das ja wohl reichen.
:
Bearbeitet durch User
Stephan schrieb: > Bei abgeschaltetem Motor greift eine Scheibenbremse ein. Da verdreht > niemand was. Bei Spannungsausfall (trotz 24V-USV)wird der letzte Wert > rechtzeigig im EEPROM gespeichert. Und wenn die Stromversorgung deiner Elektronik ausfällt, die Versorgung des Motors und der Bremse aber nicht?
Stephan schrieb: > Karl Heinz schrieb: >> Wieviele Lagen hast du maximal? > > 11 d.h. du hast 11 Subtraktionen bzw. Vergleiche. Wenn dein µC keine Hardware-Division hat, würde ich mal schätzen, dass die 11 Subtraktionen bzw. Vergleiche schneller sind als eine Software-Division.
Udo Schmitt schrieb: > Und wenn die Stromversorgung deiner Elektronik ausfällt, die Versorgung > des Motors und der Bremse aber nicht? Der den Motor antreibende und Bremse betätigende Phasenumrichter erwartet ein geschwindigkeitsregulierendes Analog- sowie ein digitales Freigabesignal der (/meiner) übergeordneten Steuerung. Movitrac heißt das Ding.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.