Forum: Mikrocontroller und Digitale Elektronik Einfachster Weg (Hard/Software) einen Schrittmotor zu bewegen?


von Tom H. (toemchen)


Lesenswert?

Hallo zusammen,

ich will hier in der Firma einen Versuchsaufbau realisieren, um das 
Zusammenspiel von Kolbenstangen mit Dichtung zu testen.
Ein Schrittmotor-angetriebener Schlitten schiebt die Stange in die 
Dichtung hinein, dahinter ist Vakuum, das über einen 
Analogspannungs-ausgebenden Sensor gemessen wird.
Um was es da genau geht, ist nicht wichtig, aber können wir gerne 
nebenbei diskutieren.

Meine FRAGE ist die:
Da hab ich nun den Schrittmotor und den Sensor, wie bekomme ich das mit 
geringstem Aufwand zum Laufen?

Die Informationsflut erschlägt mich momentan, und ich bin total 
unentschieden.

Meine ersten Ideen:

A)
Komplette RAMPS 1.4 Elektronik mit Display und Arduino ATMega2560 hab 
ich hier liegen, nie benutzt. Problem sind meine begrenzten 
Programmier-Fähigkeiten. Ich steh schon wie der Ochs vorm Berg, wenn 
darum geht, Marlin oder ähnliches darauf zu installieren. Geschweige 
denn das dann für meine Bedürfnisse abzuändern. Falls ich die 
Pinbelegungen rauskriege, könnte ich mir vorstellen, ganz von Grund auf 
mit dem Mega2560 einen Schrittmotor zu betreiben, dann aber nur im 
langsamen Start/Stop-Betrieb. Selbst eine smoothe Beschleunigungsrampe 
hinzubekommen, da fehlen mir die Kenntnisse und Konzepte.

B)
Eine simple A/D-Wandlung der Sensorwerte habe ich vor 1-2 Jahren mit 
einem Arduino MKRZERO hinbekommen. Ich habe diesen quasi als 
A/D-Wandlerboard mit USB-Anschluß mißbraucht, und den in der Arduino-IDE 
enthaltenen "Serial Plotter" als Anzeige am PC mißbraucht. Das war quick 
und dirty, so stelle ich es mir wieder vor.
Dieser Hardware einen einzelnen dieser A4988 Schrittmotor-Treiber 
dranzustricken ist nicht schwierig, wenn man dessen Pinbelegung verdaut 
hat. Aber dann bin ich natürlich wieder an dem Punkt, eine 
Beschleunigungsrampe selbst programmieren zu müssen.

Kurzum, ich bin zu doof, das mächtige Marlin-Paket zu sezieren und zu 
verändern, aber auch zu doof, selbst eine Beschleunigungsrampe zu 
programmieren.

Fällt Euch da eine Lösung ein?

Viele Grüße
Tom.

: Bearbeitet durch Moderator
von Adam P. (adamap)


Lesenswert?

Sowas wäre wohl am einfachsten:

https://funduino.de/nr-15-schrittmotor

Falls du jedoch deine Hardware nutzen möchtest, wirds je nachdem 
bestimmt umfangreicher.

Tom H. schrieb:
> Beschleunigungsrampe selbst programmieren zu müssen.

Da kannst du dir einfach ein Array mit Werten hinterlegen die du beim 
Anfahren durchläufst, fertig.

Oder die Library hat sogar schon eine Funktion dafür, kenn jetzt auch 
nicht alle vorhandenen Bibliotheken. Sollte es bestimmt geben.

: Bearbeitet durch User
von Michael B. (laberkopp)


Lesenswert?

Adam P. schrieb:
> Sowas wäre wohl am einfachsten:

Dazu wäre die Bedingung, dass er überhaupt so einen alten dummen 
uneffektiven unipolaren Scgrittmotor hat.

Und selbst dann fehlt jede Bewegung.

Diese Schaltung

https://www.ebay.de/itm/326053473747

bewegt wenigstens den Schrittmotor, stoppt aber nicht bei Erreichen des 
gewünschten Drucks, der resultierenden Analogspannung und schaltet nicht 
die Richtung um wenn er sinkt.

Immerhin hat er aber ENABLE und DIRECTION Eingänge, ein 
(Doppel/Quad)OpAmp könnte also die Steuerung übernehmen.

Das ist dann aber keine schnelle PID Regelung, sondern billige 
Zweipunktregelung.

Hätte er einen kleinen DC Motor statt Schrittmotor würde
1
      +---+---- +12V
2
      |   |
3
      |   |
4
      |   | OpAmp, leistungsstark genug für den Motor, z. B. L272
5
Druck-)--|+\
6
      |  |  >--(M)-- Masse
7
    Poti-|-/
8
      |   |
9
      |   |
10
      |   |
11
      +---+---- -12V
dasselbe bringen.

von Tom H. (toemchen)


Lesenswert?

Die in dem verlinkten funduino-Artikel verwendete Library "stepper.h" 
scheint doch recht einfach zu sein. Ich bin mir recht sicher, daß da 
keinerlei Beschleunigungsrampe enthalten ist.
Sie bietet das Auscodieren der Schritte, falls jede 
SAchrittmotor-Wicklung über einen einzelnen diskreten Treiber von einem 
Controllerpin gesteuert wird.
Aber das brauch ich so nicht, ich habe ja diese kleinen A4988-Module, 
die werden über zwei Pins mit Step und Direction gesteuert.

Ich habe jetzt auch schon Beispiele für Rampen gefunden, aber da werden 
die Step-Signale über Bitbanging eines IO-Pins und dazwischengeschaltete 
"delayMicroseconds" generiert. Das muß doch eleganter/professioneller 
gehen? Ich will ja auch während der Schrittmotor-Fahrt die Sensorwerte 
aufzeichnen.

von Adam P. (adamap)


Lesenswert?

Tom H. schrieb:
> Das muß doch eleganter/professioneller
> gehen? Ich will ja auch während der Schrittmotor-Fahrt die Sensorwerte
> aufzeichnen.

Ja, dafür machst dir halt eine State Machine.
Verzichtest auf delay und nutzt einen Timer (System-Tick).

von J. S. (jojos)


Lesenswert?

Eine bessere Lib ist AccelStepper, da kann man auch Rampen 
konfigurieren. Die kann die Step/Dir Treiber ansteuern und du gibst 
einfach die Anzahl Schritte vor die gemacht werden sollen, Beispiele 
sind natürlich dabei.

von Tom H. (toemchen)


Lesenswert?

Salamischeibe 1:

Der Schrittmotor ist ein 2phasen mit 6V 0,8A und sollte mit 24V 
Betriebsspannung die gewünschte Dynamik haben.
Liegt schon da, ist gesetzt.
DC-Motor hatte ich auch überlegt, aber der Schrittmotor bietet eine von 
der wechselnden Belastung unabhängige Geschwindigkeit.

Die A4988 Treibermodule liegen auch schon da, sind millionenfach in 
3D-Druckern bewährt und werden verwendet.

Doch noch ein paar Worte zum mechanischen Aufbau, damit hier nicht 
gemutmaßt werden muß oder überflüssige* Ideen gestrickt werden, wie man 
das ganz anders machen kann.

*überflüssig? Kann auch hilfreiche Ideen geben, aber dazu muß ich eben 
den Aufbau näher erklären.

Also,

wir bauen hier ein Produkt, bei dem zwei Betätigungsstangen durch 
O-Ring-Dichtungen in ein Hochvakuum (~10hoch-8 mbar) geschoben werden.
Das muß super dicht sein, auch während der Bewegung. Es sind zwei 
O-Ringe in kurzem Abstand hintereinander, dazwischen ist großzügig 
Vakuumfett eingebracht, sozusagen als Vorratspackung.
Es ist auch nicht nur die reine "Dichtheit", es geht auch um 
Luftfeuchtigkeit, die sich an der Stange anlagert, solange sie außerhalb 
an Atmosphäre ist, und die dann abdampft, wenn die Stange eingeschoben 
wird.
Ausgehend von früheren Erfahrungen verwende ich auf h7 geschliffene 
Stangen aus 1.4301 Edelstahl und poliere diese Stangen händisch auf 
Hochglanz (mit Kontrolle unterm Stereomikroskop, ob die ursprünglichen 
Schleifriefen wirklich wegpoliert wurden)
Das ist eine Sch...arbeit und nun möchte ich doch ausprobieren und 
quantisieren, wieviel schlechter unpolierte Stangen, oder zum Beispiel 
fertig verchromte Kolbenstangen wären.

Deshalb Versuchsstand.
Der Schrittmotor fährt die Stangen mit reproduzierbarer Geschwindigkeit 
rein, der sündteure Sensor mißt (leider mit schlechter Samplerate) das 
kurze "Einbrechen" des Vakuums. Das ganze am besten wiederholt, bis eine 
vernünftige zusammengemittelte Zeit-Druck-Kurve da ist.
Dann der nächste Stangen-Proband...

von Tom H. (toemchen)


Lesenswert?

Und noch kurz zu den zwei Antworten während meiner letzten Tipperei :-)

Ja, StateMachine und Zugriff auf System-Tick (also z.B. micros() ) 
verstehe ich sogar. Vielleicht ist es doch nicht so ein Hexenwerk.

AccelStepper habe ich als Stichwort schon gehört, schaue ich mir an.

Danke!

von Tom H. (toemchen)


Lesenswert?

Wenn ein Mod die Muße hat, kann er dem Schritmotor im Titel ein zweites 
t spendieren. Das ist mir ein Dorn im Auge... danke.

von Walter T. (nicolas)


Lesenswert?

Tom H. schrieb:
> Die in dem verlinkten funduino-Artikel verwendete Library "stepper.h"
> scheint doch recht einfach zu sein. Ich bin mir recht sicher, daß da
> keinerlei Beschleunigungsrampe enthalten ist

Es ist eine Beschleunigungsrampe drin. Nicht besonders sauber und schön, 
aber vorhanden. Für einfache Anwendungen reicht sie.

Die maximale Schrittfrequenz ist allerdings ziemlich begrenzt.

: Bearbeitet durch User
von J. S. (jojos)


Lesenswert?

Es gibt neuere SM mit angeflanschtem Treiber: MKS Servo42D. Die gibt es 
mit RS-485 oder CAN Bus Schnittstelle und können daher direkt von einem 
PC mit entsprechendem Interface (10-20 €) angesteuert werden. Diese 
Treiber sind nur etwas teurer als gute TMC Treiber, knappe 20 €, mit 
Motor knappe 30 €. Für das was sie können eher spottbillig, durch Closed 
Loop können die auch besser und auf höhere Schrittfrequenzen 
beschleunigen. Wenn die Ansteuerung also per PC kommen soll sind die 
sicher auch eine Alternative.

von Stephan S. (uxdx)


Lesenswert?

Tom H. schrieb:
> Problem sind meine begrenzten Programmier-Fähigkeiten.

Python wirst Du doch wohl können, falls nicht: da hat man sich schnell 
eingearbeitet, selbst wenn man vor 30 Jahren das letzte mal mit Fortran 
unterwegs war.

Da wäre die Lösung Python auf einem Raspi oder Micropython auf einem 
ESP32-C3, dazu eine einfache Treiberplatine, die haben oft einen Eingang 
für "1 Schritt vorwärts" bzw. "1 Schritt rückwärts"

ADC und Raspi:
https://www.elektronik-kompendium.de/sites/raspberry-pi/2701241.htm

Und der ADC ist mit dem ESP genauso einfach:
https://randomnerdtutorials.com/esp32-esp8266-analog-readings-micropython/

Allerdings ist der ADC am hohen Ende des Eingangsbereichs etwas ungenau.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

https://github.com/gnea/grbl/

Einen simplen Arduino mit Schrittmotor-Shield dazu, kann man alles 
plug&play kaufen. Das Teil sprichst du seriell mit G-Codes an. Wenn du 
nur eindimensional arbeiten willst, dann bestückst du halt nur X, und 
sagst sowas wie
1
X250
2
X0

Mit bissel gugeln findest du, wie du die Parameter dafür so einstellst, 
dass sie zu deinem Schrittmotor passen, sodass in obigem Kommando dann 
halt genau 250 mm (oder 25.0 mm oder was auch immer du brauchst) 
gefahren werden. Die Parameter werden danach im EEPROM des Controllers 
abgelegt, das musst du nur einmalig einrichten.

von Walter T. (nicolas)


Lesenswert?

Naja, wenn man eh RAMPS nutzen will und per G-Code ansteuern, kann man 
sich auch einfach ein 3D-Drucker Mainboard kaufen. Das ist schon fertig 
programmiert.

Dann wäre das Fahren gegen einen Endschalter mit G28 schon direkt 
einprogrammiert.

von Tom H. (toemchen)


Lesenswert?

Eine erste Abrundung für heute:

Alle bisherigen Antworten zeigen für mich in die Richtung: Selber 
programmieren ist machbar, auch für einen alternden Autodidakten, der 
vor 20 Jahren mit C-Control angefangen hat und jetzt auch leidlich was 
auf Arduino zusammenstöpseln kann.

Damit ist diese RAMPS 1.4 Hardware raus und auch jegliche gruslige 
Gedanken, aus der Marlin-Firmware etwas herauszuschälen.

Als nächstes klatsche ich den vorhandenen MKRZERO und ein 
A4988-Steppermodul auf eine Lochraster und fange an zu probieren. Leider 
sind diese schönen IC-Buchsenleisten zum Einstecken der Module gerade 
aus, mußte ich bestellen, also gehts erst morgen wieder weiter.

Die Dimensionierung des Linearschlittens mit Kugelgewindetrieb und des 
Schrittmotors erfolgte ganz grob über den Daumen. Sollte es sich als zu 
schwach herausstellen, bietet der Lineartrieb auch einen Montageplatz 
für einen NEMA23-Motors statt des jetzt verhandenen NEMA17. Der würde 
dann auch mehr Power benötigen, da wäre einer mit hinten angeflanschter 
Treiberplatine dann das richtige.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Walter T. schrieb:
> Naja, wenn man eh RAMPS nutzen will und per G-Code ansteuern, kann man
> sich auch einfach ein 3D-Drucker Mainboard kaufen. Das ist schon fertig
> programmiert.

Da ist aber ein Haufen mehr drin, was man mit bezahlt. grbl auf einen 
Arduino(-Clone) zu flashen ist nun keine Raketenwissenschaft.

Endschalter müsste ich nachgucken. Da grbl zur Steuerung von 
Werkzeugmaschinen konzipiert ist, wird es das sicher auch unterstützen. 
Wir haben damit vor einiger Zeit einen Drehteller für ein paar Messungen 
angesteuert und dafür ebenfalls nur eindimensional ansteuern müssen 
(X360 -> 360° in einer Richtung drehen).

von Carsten-Peter C. (carsten-p)


Lesenswert?

Moin,
ich habe mal für meinen XY-Tisch einen Treiber geschrieben.
Beitrag "Re: Zeigt her eure Kunstwerke (2021)"
Wenn Du sowas gebrauchen kannst, kann ich Dir gerne den Quelltext und 
die .hex schicken.
Natürlich kannst Du damit auch nur einen Motor ansteuern. Das läuft auch 
über eine Kugelumlaufspindel.
Gruß
 Carsten

von Rainer W. (rawi)


Lesenswert?

Tom H. schrieb:
> Meine FRAGE ist die:
> Da hab ich nun den Schrittmotor und den Sensor, wie bekomme ich das mit
> geringstem Aufwand zum Laufen?

Dann brauchst du noch einen Treiber für den Schrittmotor, der ihn mit 
dem erforderlichen Strom füttert.

> Kurzum, ich bin zu doof, das mächtige Marlin-Paket zu sezieren und zu
> verändern, aber auch zu doof, selbst eine Beschleunigungsrampe zu
> programmieren.

Du könntest dir die Atmel Applikation Note AVR446 zu Gemüte führen.

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.