Forum: Mikrocontroller und Digitale Elektronik Bestimmung der Seilführungsposition zur Trommelumdrehung


von Stephan (Gast)


Lesenswert?

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.

von Fabian (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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
von Udo S. (urschmitt)


Lesenswert?

Interesant wirds wenn das Seil etwas gealtert ist und dadurch etwas 
dicker geworden und plötzlich nur noch 39 Windungen in eine Lage passen.

von Stephan (Gast)


Lesenswert?

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 :)

von Karl H. (kbuchegg)


Lesenswert?

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
von Stephan (Gast)


Lesenswert?

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

von MaWin (Gast)


Lesenswert?

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.

von Stephan (Gast)


Lesenswert?

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

von oszi40 (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Stephan (Gast)


Lesenswert?

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?!

von Stephan (Gast)


Lesenswert?

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.

von Thorsten O. (Firma: mechapro GmbH) (ostermann) Benutzerseite


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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
von Stephan (Gast)


Lesenswert?

Karl Heinz schrieb:
> Wieviele Lagen hast du maximal?

11

von Udo S. (urschmitt)


Lesenswert?

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?

von Karl H. (kbuchegg)


Lesenswert?

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.

von Stephan (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.