Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zu CustomStepper
Hallo,
mit der Funktion CustomStepper, die hier beschrieben ist:
http://playground.arduino.cc/Main/CustomStepper
bekomme ich mit diesem Programm:
#include <CustomStepper.h>
CustomStepper stepper(8, 9, 10, 11);
boolean rotate1 = false;
boolean isDone = false;
int Umdrehungen = 3;
void setup()
{
stepper.setRPM(12); // Drehzahl
stepper.setSPR(4096); // Schritte pro Umdrehung, hier für den 28BYJ-48
}
void loop()
{
if (stepper.isDone() && rotate1 == false)
{
stepper.setDirection(CW); // Drehrichtung (CW, CCW, and STOP)
stepper.rotate(Umdrehungen); // dreht 3 Umdrehungen
rotate1 = true;
}
stepper.run(); // *****dieser Befehl muss sein*****
}
meinen Schrittmotor prima zum Laufen. Das ist abgeleitet aus der library CustomStepper.zip. Ich bin der Meinung, dass das IF in dem vollständigen Programm nur dazu dient, um die Varianten, einen Stepper zu betreiben, auszuwählen.
Wenn ich es aber mit dieser noch weiter vereinfachten Version versuche,
#include <CustomStepper.h>
CustomStepper stepper(8, 9, 10, 11,(byte[]){8, B1000, B1100, B0100, B0110, B0010, B0011, B0001, B1001},4096,12,CW); // Anschlüsse festlegen
void setup() {
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
stepper.rotate(3);
stepper.run();
}
dann ist die Schrittfolge so hoch (am Oszilloskop zu sehen), dass der Motor nicht mitkommt und ich kann sie auch nicht verändern!
Wie kann das sein?
hi,
ab hier (https://www.roboternetz.de/community/threads/68202-fahrzeug-mit-vier-motoren-und-vier-encodern/page3?p=621937&viewfull=1#post621937) habe ich mich mit der CustomStepperlib und dem chinastepper (den ich immer noch in meinem fahrgestell verwende) beschäftigt und auch viel hilfe bekommen. Vielleicht hilfts dir auch...
wäre intressant die ergebnisse deiner überlegungen zu sehen...
Rabenauge
11.04.2016, 11:53
Denk ich mir.
Die loop() ist nämlich ne Schleife und da in dem Programm nicht viel zu tun ist, soll dein Stepper also alle paar Mikrosekunden drei Umdrehungen machen.
Das wird der wohl nich schaffen können....:cool:
Das if() fängt sowas auf, nur wenn die vorherige Aufgabe erledigt ist, gibts ne neue.
Bei deiner Sparvariante erstickt der Motor kurzerhand in Arbeit...
Hallo,
danke für die Antworten.
Dass die LOOP eine Schleife ist mir natürlich klar.
Was mir aber nicht klar ist:
was macht der CustomStepper bei einem Schleifendurchlauf eigentlich? Erzeugt er jedesmal einen Schritt oder arbeitet er unabhängig von der Schleife das ab was man ihm zuletzt vorgegeben hat und signalisiert er das dem Schleifenprogramm, dass er das erledigt hat, über die Variable stepper.isDone(). Aber wie kann man den CustomStepper dann jederzeit unterbrechen?
Die Parametererklärungen kenne ich natürlich. Die helfen aber beim Ablaufverständnis nicht wirklich..
Noch 2 Fragen:
Was passiert in meiner Schleife, während CustomStepper das Programm für den Motor abarbeitet?
Wie so bleibt der Motor dauerhaft stehen, wenn ich vor oder hinter dem " stepper.run()" eine delay(10) einfüge? Bei einem delay(1) läuft er aber weiter!
vG
fredyxx
hi,
der CustomStepper sendet nur den befehl "drehe dich 3x" an den stepper, und das bei jedem schleifendurchlauf. Wenn man ihm nicht die zeit dazu gibt sich dreimal zu drehen ( und dazu isDone abfragt) dreht er sich halt nicht...
ich glaube nicht einmal, dass man ihn jederzeit unterbrechen kann, deshalb habe ich kleinere stepps gewählt, nicht 3 umdrehungen, sonder vielleich 30°...
es ist ungünstig zusätzlich fragen nachträglich in den post einzubauen, die werden leicht übersehen. Die akzeptanz von delays hängt auch von deren größe ab - 1ms geht noch, 10ms sind schon evtl. zu viel. Timing halt :-(
Hallo,
da ich noch nicht lange mit Arduino umgehe, stelle ich evtl. noch merkwürdige Fragen. Z.B. diese:
wenn ich nun in mein Motorsteuerungsprogramm z.B. eine blinkende LED einbauen will, dann tauchen da ja ein oder zwei delays auf. Wie geht das dann, ohne dass der Motor stehen bleibt?
vG
fredyxx
Rabenauge
11.04.2016, 20:46
Delay() braucht man generell niemals, die sind zu 70% nur Gepfusche.
Grundsätzlich kann man sie _immer_ vermeiden, und gewöhnlich sollte man das auch tun.
Ausserdem: unterschätz die Motorcontroller nicht- viele halten den letzten Wert nämlich, bis sie ein neues Kommando empfangen.
Zudem kann auch ein Arduino unter der Haube so einiges, was man normal gar nicht merkt- beispielsweise können mittels eingebauten Timern durchaus mehrere Prozesse "scheinbar" nebeneinander laufen. Das spielt sich in Mikrosekunden ab, daher merkt man das nicht.
Nur: Schrittmotoren müssen _völlig_ anders angesteuert werden.
Du wirst also nicht drumherum kommen, dir die Dokumentation zu der Bibliothek mal gründlich anzusehen.
Du wirst also nicht drumherum kommen, dir die Dokumentation zu der Bibliothek mal gründlich anzusehen.
Würde ich ja evtl. auch machen, wenn ich wüsste, wo die zu finden ist.
vG
fredyxx
Rabenauge
12.04.2016, 02:51
Dort, wo es auch die Bibliothek gegeben hat?
http://playground.arduino.cc/Main/CustomStepper
Dort, wo es auch die Bibliothek gegeben hat?
http://playground.arduino.cc/Main/CustomStepper
Die Seite kenne ich. Sie beschreibt aber nur die Parameter und nicht die Funktionsweise im Zusammenhang mit einem eigenen , übergeordneten Programm
vG
fredyxx
Rabenauge
12.04.2016, 11:34
Das Beispielprogramm (hab ich mir eben angeschaut) enthält auch ausreichend Kommentare.
Was genau musst du noch wissen?
Dass die Lib. _keinen_ Hardware-Timer belegt? Steht in der Doku.
Ansonsten wirst du einfach nen bissel mehr "Arduino" lernen müssen, denn so wie ich das sehe, ist zu der Bibliothek nix weiter zu sagen.
Ansonsten wirst du einfach nen bissel mehr "Arduino" lernen müssen, denn so wie ich das sehe, ist zu der Bibliothek nix weiter zu sagen.
Das ist auf jeden Fall nötig.
Mit dem Beispielprogramm habe ich angefangen und war auch sehr froh, dass sich mein Motor mit einem brauchbaren Drehmoment drehte und dass man die verschiedenen Vorgaben machen kann. Aber es beschäftigt sich ja auch nur mit dem Motor.
Dann kam die Phase des weiteren Experimentierens mit der Idee, den Motorlauf einfach nur mal für eine Sekunde zu unterbrechen und so kam ich erst mal auf delay(1000), um dann festzustellen, dass es eben so einfach nicht geht. Denn ich habe mir zum Spaß als Aufgabe gestellt, ein Baggermodell mit 6 Motoren programmiert zu steuern und da kann ich mir vorstellen, dass der Arduino auch noch neben Motorsteuerung mit einigen Berechnungen zu tun hat.
Ich (66 Jahre) werde also weiter üben!
vG
fredyx
Rabenauge
12.04.2016, 18:07
Ich empfehle dir dringend, den Schrittmotor mal beiseite zu legen.
Es gibt ne Menge besserer Möglichkeiten, um die Basics zu lernen: Knöpfe, Led's, auch mal nen Poti, eventuell auch ein Display (nich gleich ein TFT, sondern nen einfaches LCD), da lernst du sehr vieles übers programmieren.
Vor allem auch, wie ein komplexeres Programm aufgebaut werden sollte, oder wie es einfach besser geht.
Diese Schrittmotoren sind da alles andere als Einsteigerfreundlich, da man ne Menge Parameter braucht.
Lies mal nen Lichtsensor (Temperatur, Luftfeuchte....wozu du eben Lust hast, nich grade nen Eindraht-Bus-Teil) aus oder so Dinge, und lass dir die Werte auf Konsole oder LCD geben.
Nimm einfach mal drei Buttons, und versuche so Sachen wie, dass es irgendeine Reaktion gibt, wenn die drei Knöpfe in der _richtigen_ Reihenfolge gedrückt werden, oder ähnliches.
Das kannst du mit der Bord-LED machen, brauchst also nix weiter. Oder eben mit der seriellen Konsole.
Hallo Rabenauge,
sicher ein gut gemeinter Rat. Werde ich bei Bedarf auch versuchen. Aber Programmieren ist nicht grundsätzlich neu für mich. Das habe ich schon mit FORTRAN, AEG CP80, Step5 , Basic und VisualBasic gemacht. Evtl. fehlt da auch noch was.
Nur eben Arduino ist neu für mich und es hat mich gereizt mal wieder mit so was an zu fangen.
Es wäre schön, wenn mir das Forum bei Bedarf dennoch weiter hilft.
vG
fredyxx
Rabenauge
13.04.2016, 11:44
Klar machen wir das... :)
Ist aber einfach so: Arduino hat nen etwas- sagen wir wohlwollend "eigenen" Workflow und einige Besonderheiten (teilweise nervig), mit denen man sich vertraut machen sollte.
Dazu sind einfachere Aufgaben besser geeignet- wenn ich was mit links programmiere, dann verstehe ich eher, was im Hintergrund abgeht.
Arduino wird oft mit "einsteigerfreundlich", "kann jeder" usw. beworben- das stimmt nur bis zu nem gewissen Punkt.
Später stolpert das System nämlich öfter mal über seine eigenen Füsse, weil eine Bibliothek nen Timer nutzt, den eine andere auch braucht, die PWM-Frequenz einfach viel zu niedrig ist und ähnliches.
Ausserdem ist programmieren nicht gleich programmieren: PC-Programme geht man nahezu völlig anders an als Programme für Arduino oder ähnliche Rechner, die eher Steueraufgaben übernehmen sollen.
Man muss einfach viel mehr direkt "in Hardware" machen.
Inzwischen versuche ich öfter, ohne bestimmte Bibliotheken auszukommen, einfach, weil _ich_ dann weiss, was der Prozessor wirklich treibt. Die vielen Bibliotheken sind schon toll, aber sie verschleiern auch die Komplexität gewaltig, was dann dazu führt, dass der Einsteiger glaubt, das geht alles fast von selber- so isses nicht.
Und: man kann mit Arduino auch recht grosse Projekte durchziehen, aber dann muss man schon bissel den Durchblick haben.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.