# Schrittmotor "Schritte" in millimeter umrechnen und zurück



## ph4nt0m (14 Oktober 2010)

Moin moin,

hab da ein kleines problem zur berechnung der istposition vom Schrittmotor
Zur verfügung steht mir ein DINT mit Schritten des Motors.

Also ein DINT zur eingabe der Schritte und ein DINT zur ausgabe der Schritte (Aktuelle Schritte)

Anlagendaten:

Schrittmotor im halbschrittbetrieb 0,9° = 400 Schritte / Umdrehung
Vorschubkonstante = 70mm / Umdrehung

Wie genau kann man das nun in der SPS umrechnen?

Ich möchte gerne den Aktuellen fahrweg anzeigen sowie den schrittmotor eine vorgabe in mm geben die dann halt in schritte umgerechnet werden muss.

Hab da grad irgendwie grad eine blockade 

Vielen Dank


----------



## tnt369 (14 Oktober 2010)

intern (sps) würde ich mit den schritten arbeiten um die max. genauigkeit zu haben. zur anzeige/eingabe würde ich dann die schritte normieren zu den millimetern.
1 schritt entspricht 0,175mm.

z.b. sps 0-10000 = anzeige 0-1750mm


----------



## Larry Laffer (14 Oktober 2010)

Ähhh ...

Nach deiner Darstellung entsprechen also 400 Schritte = 1 Umdrehung und 1 Umdrehung = 70 mm - demzufolge wäre dann 1 Schritt = 70 / 400 [mm] = 0,175 mm

Gruß
Larry


----------



## ph4nt0m (14 Oktober 2010)

Larry Laffer schrieb:


> Ähhh ...
> 
> Nach deiner Darstellung entsprechen also 400 Schritte = 1 Umdrehung und 1 Umdrehung = 70 mm - demzufolge wäre dann 1 Schritt = 70 / 400 [mm] = 0,175 mm
> 
> ...




Und genau da besteht mein Problem mit der rückrechnung in Schritte 

also wenn ich ein mm wert angebe beispiel " 1mm " oder " 1,5 mm " kommt da irgend nen komma wert raus ich muss aber immer gerade schritte haben


----------



## tnt369 (14 Oktober 2010)

s. meine antwort oben

1mm läßt sich auf diese art nicht exakt steuern
annährerung: 6 schritte => 1,05mm

d.h. die eingabe 1mm wird in der sps zu 6 schritte was wiederum zur
anzeige 1,05mm wird

sollte mehr genauigkeit bzw. einfachere umrechnung notwendig sein dann empfehle ich ein anderes getriebe.
z.b. 1:7 untersetzt => 1 umdrehung (400 schritte) = 10mm
damit läßt sich dann auch 1,000 bzw 1,500 mm in eine gerade schrittanzahl auflösen


----------



## SW-Mech (15 Oktober 2010)

Wäre das eine Lösung:


```
//IstSchritte -> Istposition [mm]
      L     #IstwertSchritt             // als DINT
      DTR   
      L     4.000000e+002               // 400 Inc/Umdr
      /R    
      L     7.000000e+001               // 70 mm/Umdr
      *R    
      T     #Istposition                // Istposition in mm (REAL)


//Sollposition [mm] -> SollSchritte
      L     #Sollposition               // als REAL
      L     7.000000e+001               // 70 mm/Umdr
      /R    
      L     4.000000e+002               // 400 Inc/Umdr
      *R    
      RND   
      T     #SollwertSchritt            // Sollposition in Inc (DINT)
```
Gruss SW-Mech


----------



## MCerv (15 Oktober 2010)

Hi,

ich habe oft ähnliche Anwendungsfälle und arbeite grundsätzlich im REAL-Format, so geht nichts verloren und ich bin super genau, vor allem bei unendlichen Brüchen. Nach allen Berechnungen runde ich ich wieder ins DINT. 

Früher hatte ich Steuerungen (OMRON CQM1), die konnten nur DINT, da habe ich, der Genauigkeit wegen mit 100 oder 1000 multipliziert (die Kommastelle verschoben) und erst am Ende alller Berechnungen das Komma wieder zurückgeschoben (Dividiert durch 100 oder 1000 oder ...).

Grüße
Michael


----------



## ph4nt0m (15 Oktober 2010)

SW-Mech schrieb:


> Wäre das eine Lösung:
> 
> 
> ```
> ...




Funktioniert Perfekt  Vielen Vielen Dank !

Werd mich wohl dann um eine andere übersetzung kümmern um das noch ein bisschen genauer zu bekommen 

Solche funktionen sollte man hier irgendwo in ein Kompendium zusammenfassen! Sehr gute Arbeit


----------



## Larry Laffer (16 Oktober 2010)

Ähhh ... sorry ...

Schön wenn es jetzt perfekt funktioniert ... allerdings bewirkt der vorgeschlagene Wert keine präziseren Ergebnisse als wenn man gleich mit den aus den Einzelwerten resultierenden Faktor rechnet.
70 / 400 ergibt immer den gleichen 0,175 - ergo kann man das auch gleich als Konstante verwenden. Der Unterschied ist nur, dass die CPU diese Konstante in jedem Zyklus wieder neu berechnet.

Das Einzige, was etwas bewirkt ist das strikte Vermeiden von Type-Wechseln - also nach Möglichkeit bei einem Variablentyp bleiben und es mit dem bis zu Ende durchziehen. In diesem Fall wäre sicherlich REAL der Type der Wahl ...

Eine höhere Genauigkeit erhält man hier (und auch allgemein) nur durch eine Erhöhung der Auflösung.

Gruß
Larry


----------

