Bahnsteuerung für Stepper verwenden

Gast #5225233
Lesenswert?

Hallo.
Ich habe eine funktionierende Bahnsteuerung mit Trapez/S-Kurve und 10KHz 
Takt für die Berechnung der Bahnsteuerung. Derzeit steuere ich 
DC-Motoren über eine nachfolgende Regelung an.

Bin am überlegen die gleiche Bahnsteuerung jetzt auch für Schrittmotoren 
einzusetzen. Aber irgendwie fehlt mir gerade die passende Idee für die 
Umsetzung.

Hatte mir überlegt aus der berechneten Geschwindigkeit die Frequenz für 
den nächsten Schritt zu berechnen.

Nur sehe ich folgendes Problem:
Am Anfang einer Beschleunigung wird die Geschwindigkeit wesentlich zu 
langsam sein. Also beschleunige ich "zu langsam". Beim Abbremsen bin ich 
zu schnell.
Bei FullStep mag dies ja nicht problematisch sein, da die max. 
Fahrfrequenz wohl (bei mir) nicht weit über die 1-2kHz geht. Aber was 
passiert bei 1/16 Steps.

Wie setzt man dies um? Oder kann man dies vernachlässigen?
#5225696
Lesenswert?

Irgendwie scheint ein Stueck Mathematik zu fehlen.
Ja die die Schrittgeschwindigkeit (step/s) ist die eins durch die Zeit 
zwischen den Schritten. Bei einem Motor kann man den Timer Interrupt 
jeweils neu programmieren, bei mehreren Motoren und einem festen Tick, 
braucht man eine hinreichend hohe Tickrate, denn man moecht ja auch 
etwas Aufloesung haben.
Falls das nicht geht, waere ein schnellerer Prozessor anstehend, oder 
man lagert die Schrittererzeugung an einzelne Chips, die genau nur das 
machen, aus. Da waere auch ein FPGA denkbar.
Gast #5225839
Lesenswert?

Was Du vorschlägst würde dann ja bedeuten, dass ich die Bahnsteuerung 
(vielleicht mit einem höherem Takt) laufen lasse und jedesmal, wenn die 
berechnete Position der Bahnsteuerung den nächsten ganzzahligen Wert 
erreicht, einen Schritt auf den Stepper mache?
Was ist denn eine ausreichend hohe Taktrate?
Gast #5225939
Lesenswert?

grbl hab ich mir schon angesehen. Der geht das Ganze ja gleich "aus 
Sicht des Steppers" an.
Ich möchte aber eigentlich die gleiche Bahnsteuerung verwenden, die ich 
schon habe. ( wegen gleicher Interfaces, Parameters etc. )
Gast #5225953
Lesenswert?

Tja, hat schon seine Gründe, warum alle anderen G-code als Interface 
nehmen.

Diese Leute sind schon an einigen unlösbaren Problemen gescheitert, 
bevor sie auf die Idee kamen, so einen aufwendigen Interpreter in eine 
Steuerung zu quetschen.
Gast #5226282
Lesenswert?

Pepe schrieb:

> @Possetitjel:
> Keine Schnittstelle. Direkt innerhalb der Firmware.

Sicher nicht. Zwischen der Steuerung und den Motoren
sitzt irgend eine Form von Schnittstelle. TTL ist den
Motoren deutlich zu wenig.

Wenn Du clever warst und Bahnsteuerung, Motorendstufe
und Motoren separat ausgeführt hast, könnte man
theoretisch die Bahnsteuerung weiterverwenden und einen
anderen Umrichter und Schrittmotoren anflanschen.

Wenn die Steuerung direkt digital auf die PWM-Endstufen
für die DC-Motoren geht, hast Du Pech.
Gast #5227099
Lesenswert?

Das einfachste wird sein, mit der 10-fachen Geschwindigkeit der 
Bahnsteuerung (Hausnummer) eine DDS laufen zu lassen, die die Schritte 
generiert.

100kHz sind da natürlich schon sportlich, aber ein 100MHz ARM Cortex 
o.ä. sollte das schon schaffen ohne dass ihm gleich die Luft ausgeht.

Wie sowas aussehen kann siehe hier 
https://github.com/LinuxCNC/linuxcnc/blob/master/src/hal/components/stepgen.c
Gast #5227723
Lesenswert?

Die 100kHz sollten machbar sein. Verwende einen STM32F40x mit 180MHz.
Für die PID-Regelung (für die bisherigen Motoren) inkl. Bahnsteuerung 
für 2 Achsen brauche ich weniger als 20us. Ohne Regelung schätze ich mal 
< 5us.

Ich hätte aber eher einen "handwerklichen" Ansatz: Meine bestehende 
Bahnsteuerung gibt mir im 10kHz Takt die neuen Positionen aus. Wenn ich 
jetzt intern nur mit einem 1/10tl(wenn ich die Freq. auf 100kHz erhöhe) 
rechne und jedes mal beim nächsten, vollen Schritt den Stepper bewege, 
sollte ich doch eine einigermaßen gleichmäßige Bewegung erreichen.
Gast #5228451
Lesenswert?

Der DC-Motor wird von der Bahnsteuerung oder einer anderen 
dazwischengeschalteten Komponente im Endeffekt eine Geschwindigkeit als 
Stellgröße erhalten.

Diese Geschwindigkeit kann man auch dem Schrittgenerator geben.

Die DDS-artige Schrittsynthese mit einem Positions-Akkumulator der z.B. 
1/1000000 Schritt auflöst hat den Sinn, auch kleine Geschwindigkeiten 
(im Sinne von Schritten pro Bahnsteuerungs-Intervall) fahren zu können.

Die Frequenz der Schrittsynthese sollte nicht zu klein sein, das kann 
sonst zu unruhigem Motorlauf führen. 100kHz sollte für Schrittfrequenzen 
bis 16kHz ausreichen, bei 1kHz Vollschrittfrequenz gingen sich da auch 
16 Mikroschritte aus wenn man das will/braucht.
Gast #5228829
Lesenswert?

Ich hab mir den Code noch mal angesehen. Hat mich auf eine Idee 
gebracht, die ich jetzt auch schon teilweise umgesetzt habe. Sieht gar 
nicht schlecht aus.

In meiner Bahnsteuerung kann ich auf die exakte Soll-Position inkl. 
Nachkommastellen pro Regeltakt zugreifen. Ich merke mir den Zeitpunkt 
der letzten ganzzahligen Position (=letzter Schritt des Steppers) und 
warte auf den Regeltakt in welchem die Position wieder den nächsten 
Schritt des Steppers erreicht/überschreitet. Daraus berechne ich mir 
dann den genauen Zeitpunkt des Steps.
Diesen Zeitpunkt verwende ich dann in einer weiteren (schnelleren) 
TimerSchleife (derzeit 100kHz) um den Schritt zum passenden Augenblick 
auszuführen.

Dies hat allerdings den Nachteil, dass ich mind. die Dauer des ersten 
Steps später losfahre. Das macht mir aber nichts aus.

Bei höheren Geschwindigkeiten ( mit mehreren Schritten pro Takt der 
Bahnsteuerung, d.h. > 10kHz ) hab ich gerade noch das Problem, dass die 
Fahrt in Abhängigkeit der Frequenz ruppig wird. Das sollte sich aber 
lösen lassen, wenn ich hier auch den nächsten Takt der Bahnsteuerung 
einbeziehe.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren