Algorithmus für Ansteuerung Schrittmotor mit Poti gesucht

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
helloarduino2022hh
Beiträge: 4
Registriert: Mo Mär 28, 2022 2:43 pm

Algorithmus für Ansteuerung Schrittmotor mit Poti gesucht

Beitrag von helloarduino2022hh » Mo Mär 28, 2022 6:06 pm

Moin Allerseits!

Ich bin gerade auf der Suche nach einen Algorithmus zur Ansteuerung eines Nema17 Schrittmotors mit einen Poti. Für Lösungsvorschläge möchte ich mich herzlichst bei euch im Voraus bedanken!

Worum gehts?
Bei meinem Nema17 Schrittmotor kann man die Umdrehungsgeschwindigkeit per integer-Wert steuern. Nur leider ist das so, das man die Umdrehunggeschwindigkeit nicht linear ändern kann.

Was könnt ihr euch darunter genau vorstellen?
Sagen wir (als Beispiel), dass die maximale Umdrehungsgeschwindigkeit dem Wert 35 entspricht und eine sehr langsame (der Motor stopt quasi) 5000 enstpricht. Dann gibt es zwischen dem Max.-Wert und den Min.-Wert keinen linearen Zusammenhang. Die Umdrehungsgeschwindigkeit nimmt quasi logarithmisch, bez. exponential ab. Ab dem Wert 35 sehr schnell und zum Wert 5000 hin immer langsamer. Bis quasi gar nicht mehr.

Mein Vorhaben:
Ich möchte jetzt gerne die Motor-Umdrehungsgeschwindigkeit per Poti steuern können. Mein Poti liefert mir Werte zwischen 0 und 1021 (das sind geglättet Wert, daher nicht wie üblich von 0 bis 1023 = 10-Bit). Wenn das Poti den Wert 1021 liefert, dann möchte ich den Motor mit dem Wert 35 ansteuern. Und wenn das poti den Wert 0 liefert, dann den Motor halt mit dem Wert 5000 ansteuern.

Und jetzt die große Frage an euch: wie kann man elegant so eine Funktion programmieren!?!

Gruß

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Algorithmus für Ansteuerung Schrittmotor mit Poti gesucht

Beitrag von Xin » Mo Mär 28, 2022 9:29 pm

Klingt für mich für den Einstieg erstmal nach einem Dreisatz.

vMotorMax = 5000;
vMotorMin = 35;
vPotiMax = 1021;

vMotor = vMotorMax - vPoti / vPotiMax * (vMotorMax-vMotorMin);

Jetzt würde der Motor über das Poti nicht linear die Umdrehungsgeschwindigkeit ändern. Um das Linear zu machen, müsste man halt die Funktion kennen, die da zu berücksichtigen wäre.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Algorithmus für Ansteuerung Schrittmotor mit Poti gesucht

Beitrag von cloidnerux » Mo Mär 28, 2022 10:20 pm

Was du suchst ist eine Funktion, die einen Wert "x"(dein Poti), auf einen Wert "y" mappt(dein Servo).
Wer in Mathe mal aufgepasst hat versteht hier: f(x)=y
Du suchst also keinen "Algorithmus", sonderen eine Mathematische funktion.

Du hast erwartest einen exponentiellen, aber "invertierten" zusammenhang zwischen x und y
f(x)=a+e^(b*(c-x))
a, b und c sind freie Variablen. Du hast als Randbedingungen
f(0)=5000
f(1021)=35

Aus letzterer lässt sich ableiten: a=34, c=1021 da e^(b*(1021-x)) für x=1021 1 entspricht, daher ist a=35-1
Parameter b lässt sich über umstellung finden:
b=ln(5000-a)/c
Ergibt dann folgenden zusammenhang:
https://www.wolframalpha.com/input?i=pl ... +0+to+1021

Mit den gefundenen Parametern kann man das dann direkt in Code packen.
Wichtig für sowas ist eine gewisse Fehlerbereinigung. Die mathematische Funktion kennt weder die Anwendung noch die Limits. Sollte mal ein Eingabewert kleiner 0 oder größer 1021 eingegeben werden, so wird natürlich auch eine Ausgabe passieren. Damit aber kein Unfug passiert, solltest du mit entsprechenden if-stamemnts prüfen, ob Eingabe und Ausgabe-Wertebereiche sich im erlaubten Bereich befinden.
Redundanz macht wiederholen unnötig.
quod erat expectandum

helloarduino2022hh
Beiträge: 4
Registriert: Mo Mär 28, 2022 2:43 pm

Re: Algorithmus für Ansteuerung Schrittmotor mit Poti gesucht

Beitrag von helloarduino2022hh » Do Apr 07, 2022 8:49 am

Moin cloidnerux,

vielen lieben Dank für deine Hilfestellung, bez. ja eigentlich Lösung für mein Problem!

Genau so eine Funktion habe ich gesucht und diese habe ich auch schon ausprobiert. Mit deiner Berechnung klappt das Liniarieren und damit quasi konstnet Geschwindigkeitregelung des Nema-Stepper-Motors.

Wen die Werte immer kleiner werden, dann nimmt der Stepper auch an Umdrehunggeschwindigkeit von Wert zu Wert etwas zu. Aber das macht überhaupt nichts aus. Mein Problem war ja, dass die Umdrehungsgeschwindigkiet in einem sehr kleinen Wertebereich sprunghaft zugenommen hat. Und dem Problem wird mit der Funktion entgegengewirkt.

Nochmal herzlichen Dank an der Stelle für deine Anteilnahme und Hilfestellung!
Ich wäre so schnell nicht auf die Lösung gekommen.

Gruß
Sebastian

Antworten