Go Down

Topic: Steuerung eines Kamerasliders (Read 5942 times) previous topic - next topic

SkobyMobil

Hallo,
"Kannst du das Buch für Anfänger empfehlen?"

Wenn Du in Elektronik ein wenig fit bist, und auch schon ein wenig
Kenntnisse im Programmieren hast, dann geht das.

Ich habe von Arduino keine Ahnung gehabt, habe mir einen Mega 2560 und diese
Buch gekauft. Erfolg kam sofort…

Die Grundlagen werden im Buch fast nicht erklärt, es geht sofort zur Sache.
Die Sketche laufen Fehlerfrei und man bekommt eine Menge Anregungen.
Es ist so erklärt, das man es verstehen kann. Ich habe bis heute jede Idee
damit erschlagen können. Die Sketche kann man alle downloaden.

Wenn mir heute etwas einfällt, dann schaue ich erst einmal ins Buch. Ich finde
dort immer etwas ähnliches. "Genau! So könnte es gehen"

Es hat den Vorteil, das du diesen ganzen "InternetScheiss" nicht probieren
mußt. Wenn es Probleme gibt, dann kannst Du hier im Forum Hilfe bekommen.
Und wenn du Glück hast, dann verfeinern dir die Profis den Sketch.
Mit dem Buch und diesem Forum kommst Du dann schon verdammt weit- du mußt
aber auch bereit sein, dich damit zu beschäftigen…
Gruß und Spaß
Andreas
P.S. bei googlebooks? kann man es anlesen, mußt mal schau´n, suchen
die zweite Maus bekommt den Speck...

Fototobi94

Wie soll der Motor überlastet sein, wenn keine Last dranhängt? Das ist einfach die Stepper Lib, welche genau 4x Mehr schritte Braucht.
Komisch: Wenn ich den StepPin und den DirPin tausche, macht der Motor genau das Selbe.

Aber ich versuche ja auch Accelstepper zu verstehen und nicht die Arduino Stepper Lib.

SkobyMobil

#17
Apr 28, 2016, 10:59 pm Last Edit: Apr 28, 2016, 11:59 pm by SkobyMobil
Hallo,
dann komme doch mal mit etwas mehr Info rüber…
Was ist es denn für ein Motor, bipolar oder unipolar?
Wie wird der denn angesteuert?
Ein geheimnisvolles Shield- oder direkt über einen ULN2003A, EasyDriver-Board,
L298 oder L293?

hier schon mal geschaut:
http://www.arduino.cc/en/Reference/Stepper

oder hier:

http://techref.massmind.org/techref/io/stepper/wires.asp

normalerweise braucht es nicht mehr als die Stepper.h. Die steckt mit
Beispielen in der IDE.



Der Sketch ist ziemlich einfach:

Code: [Select]
/*
 * Stepper sketch
 *
 * stepper is controlled from the serial port.
 * a numeric value followed by '+' or '-' steps the motor
 *
 *
 * http://www.arduino.cc/en/Reference/Stepper
 */

#include <Stepper.h>

// change this to the number of steps on your motor
#define STEPS 24

// create an instance of the stepper class, specifying
// the number of steps of the motor and the pins it's
// attached to
Stepper stepper(STEPS, 2, 3, 4, 5);

int steps = 0;


void setup()
{
  stepper.setSpeed(30);    // set the speed of the motor to 30 RPMs
  Serial.begin(9600);
}

void loop()
{
  if ( Serial.available()) {
    char ch = Serial.read();

    if(ch >= '0' && ch <= '9'){             // is ch a number?
      steps = steps * 10 + ch - '0';        // yes, accumulate the value
    }
    else if(ch == '+'){
      stepper.step(steps);
      steps = 0;
    }
    else if(ch == '-'){
      stepper.step(steps * -1);
      steps = 0;
    }
    else if(ch == 's'){
      stepper.setSpeed(steps);
      Serial.print("Setting speed to ");
      Serial.println(steps);
      steps = 0;
    }
  }
}


Gruß und Spaß
Andreas
P.S. hat dein Motor zufällig ein Getriebe- dann wär´s kein Wunder...
die zweite Maus bekommt den Speck...

Fototobi94

Ich habe ganz vergessen,  die Infos zum Motor dazu zu schreiben. Mein Fehler  :-[

Es ist ein Bipolarer 12V Schrittmotor mit 200 Schritten pro Umdrehung (Emis 547). Betrieben wird er über einen DRV8825, dort brauche ich nur signale für Step, Dir und später noch Enable.

SkobyMobil

Hallo,
wenn es dieser Motor ist, dann muß dein Schlitten ziemlich klein sein.
Das Ding hat keine Kraft, es sei denn, es hängt ein Getriebe an der Welle. Das würde auch Deine
falschen Schritte erklären.

Hast du das StepperDriver probiert.
Hier wäre auch noch eine Spielerei
Gruß und Spaß
Andreas
die zweite Maus bekommt den Speck...

Fototobi94

#20
Apr 29, 2016, 07:12 pm Last Edit: Apr 29, 2016, 07:27 pm by Fototobi94
Ja, das ist dieser Motor. Ich finde, der hat genug kraft. Das Halte-Moment ist nicht wichtig, da im Stillstand Enable auf HIGH gesetzt wird und die Gewindestange selbsthemmend ist.

Ich habe den Motor mit der StepperDriver.h auch ganz gut zum Laufen bekommen. Aber ich kann dort keine Beschleunigung wie bei der Accelstepper.h realisieren.

Nochmal eine kurze Frage:
Was würdet Ihr nun als Endschalter empfehlen?
Umschalter sind ja entweder als Öffner oder Schließer eingebaut. Die Steuerung der Fahrtrichtung wird ja im Code programmiert.


DrDiettrich

Den Vorteil der Umschalter verstehe ich nicht. Wie sollen die verschaltet werden, damit sie ein Überfahren der Endschalter selbsttatig verhindern?

So wie ich den Betrieb von Motoren verstanden habe, werden die meist mit einer höheren Spannung angesteuert, und der Treiber begrenzt den Stom. Für einen 12V Stepper wären dann 24V (oder mehr) notwendig, wenn er schön schnell laufen soll.

Fototobi94

Den Vorteil der Umschalter verstehe ich nicht.
Ich auch nicht. Die Umschalter wurden von SkobyMobil vorgeschlagen. Ich wollte ja Reedkontakte oder Rollentaster verwenden. Sofern es Rollentaster in so einer kleinen Bauweise gibt.

SkobyMobil

Hallo,
Dein "selbsthemmend" möchte ich lieber als "schwergängig" bezeichnen, aber
darüber kann man sich sreiten.
Mit Deinem Taster greifst Du den Arduino an, dieser sagt dann dem Motor, stop,
andere Richtung.
Mit dem Umschalter greifst Du den Motor an, andere Richtung fahren, an Arduino-
Motor fährt andere Richtung.

Deine Geschwindigkeit regeln…
Beim Schrittmotor ist es doch so- er bekommt einen Impuls pro Schritt.
Also, in einer Sekunde einen Schritt, in 200 Sekunden eine Umdrehung.
In einer Sekunde zwei Impulse, in 100 Sekunden eine Umdrehung.
Dem Datenblatt des Motor kannst Du entnehmen, wie schnell Dein Motor maximal
laufen kann.
D.h. bei X(maxImpuls/Sek) läuft Dein Motor auf Höchstgeschwindigkeit.
Dafür brauch´s nicht mal ne´Lib.
Gruß und Spaß
Andreas
die zweite Maus bekommt den Speck...

DrDiettrich

Wenn die Schalter das Direction Signal beeinflussen, dann stimmt die Anzahl der Schritte nicht mehr, die der Arduino zählt. Dann muß man dafür sorgen, daß die Endschalter im Normalbetrieb überhaupt nicht erreicht werden können, und einen zusätzlichen Referenz-Sensor einbauen, der beim Erreichen das Richtungssignal nicht beeinflußt.

SkobyMobil

#25
Apr 30, 2016, 05:40 pm Last Edit: Apr 30, 2016, 05:41 pm by SkobyMobil
Hallo,
die Endschalter werden im Normalbetrieb auch nicht genutzt! Das wäre ja noch
schöner. Wozu auch?
Du hast eine max. Anzahl von Schritten für einen bestimmten Weg. Diese Schritte
werden verarbeitet. Und nur mit diesen Schritten wird gearbeitet!

Wenn die Steuerung hochfährt, dann fährt der Schlitten in den Endschalter.
Wenn der Endschalter geschaltet hat, dann fährt der Schlitten wieder raus
und Stopt. Das ist der Anfang aller Dinge...

Erst, wenn es zu einem Fehler in Mechanik oder Steuerung kommt, dann lösen
diese Endschalter eine Sicherheitsfunktion aus.
Gruß und Spaß
Andreas




die zweite Maus bekommt den Speck...

Fototobi94

Selbsthemmend bedeutet, dass sich der Schlitten ohne die Drehung der Gewindestange nicht verschieben lässt. Schneckenradgetriebe sind auch selbsthemmend. Das hat nichts mit Schwergängigkeit zu tun.

Ich möchte dazu sagen, dass ich Industriemechaniker bin und durchaus Ahnung von Technik habe. Nur nicht von der komplexen Programmierung.

Ihr meint also, dieser eine Endschalter am Ende des Slider ist mein absoluter Nullpunkt. Wie der Maschinennullpunkt einer CNC Drehmaschine. Dieser ändert sich auch nie.

Zum Beginn soll sich der Motor dann in die Richtung drehen, bis dieser Nullpunkt angefahren wird. Von Dort bis zum Ende habe ich dann ca:

Quote
950mm / 1,25mm pro Umdrehung = 760 Umdrehungen

760 Umdrehungen x 200 Vollschritte pro Umdrehung = 152.000 Vollschritte
Ich verstehe die Funktionsweise. Aber mit einem Endschalter Links und Rechts finde ich es auf den ersten Blick einfacher.

Solange der Linke Endschalter nicht betätigt ist, kann der Schlitten nach Links fahren. Solange der Rechte Endschalter nicht betätigt ist, kann der Schlitten nach Rechts fahren.

Das kann ich doch über zwei while-Schleifen lösen, oder nicht?

man beachte das Vorzeichen:
Code: [Select]
while(endschalterLinks == LOW){
stepper.move(+Schritte);
}
else{
stepper.stop();
}

while(endschalterRechts == LOW){
stepper.move(-Schritte);
}
else{
stepper.stop();



Ich weiß nur nicht richtig, wie der Motor mit Accelstepper richtig angesteuert wird. stepper.move(200) und dahinter stepper.run() reicht nicht aus, dass der Motor 200 Schritte macht.

Serenifly

#27
Apr 30, 2016, 08:11 pm Last Edit: Apr 30, 2016, 08:16 pm by Serenifly
Selbsthemmend bedeutet, dass sich der Schlitten ohne die Drehung der Gewindestange nicht verschieben lässt. Schneckenradgetriebe sind auch selbsthemmend. Das hat nichts mit Schwergängigkeit zu tun.
Ich verstehe diese Bedenken auch nicht. Das Drehmoment deines Motors kann ich jetzt nicht einschätzen, aber im Prinzip ist das überhaupt kein Problem. Ich habe das schon oft gemacht (nicht mit dem Arduino). Mit den Standard L293/L298 Treibern und 08/15 Schrittmotoren. Da braucht es nichts besonders dazu.

Wenn es sehr schnell gehen muss und man viel Masse bewegen muss ist das was anderes. Wobei bei der maximalen Geschwindigkeit natürlich auch die Steigung des Gewindes eine Rolle spielt.


Quote
Das kann ich doch über zwei while-Schleifen lösen, oder nicht?
Auf dem Arduino ist es generell besser man verwendet loop() als Schleife und macht if-Abfragen. Dann kann man noch andere Dinge tun. Wenn du wirklich nur fahren willst, dann tut es auch while.

SkobyMobil

Hallo,
ich kenne die "Accelstepper" nicht.
Laufen denn diese Beispiele bei Dir sauber durch?
http://www.airspayce.com/mikem/arduino/AccelStepper/examples.html

Wenn nicht, dann hast Du im Sketch einen Fehler.
Die Beispiele sollten schon laufen.
Gruß und Spaß
Andreas
die zweite Maus bekommt den Speck...

Doc_Arduino

Hallo,

wenn du mit "Arduino Accelstepper" suchst, gibts eigentlich paar brauchbare Seiten in deutsch.

Wenn du einen Motortreiber hast, mit Takt und Richtungseingang, dann brauchste jedoch das alles nicht.
Im Grunde programmierst du dir einen LED-Blinker mit variabler Ein/Aus Zeit. Wobei Ein/Aus immer gleich lang ist, also symmetrisch. Damit steuerst du später die Geschwindigkeit in bestimmten Grenzen, weil das der Takt ist.

Dann brauchst du noch einen links/rechts Enable Ausgang bzw. ist das manchmal auch einer zusammengefasst der zwischen Low/High unterscheidet.

Mit dem Takt zählst du noch einen Variable. Also deine Schritte. Mit links enable runter. Mit rechts enable hoch. Zum Bsp. Somit weist du immer wo die gerade stehst. Die nullst du am Anfang beim Homing (Referenzfahrt) oder zwischendurch bei Bedarf, wenn Encoderfehler kommt (falls vorhanden) oder sonstiges.

Wenn du nicht auf Referenzfahrt bist, kannste diesen "Home-Sensor" als einen Begrenzungssensor ansehen. Du brauchst also nur jeweils einen Sensor pro Seite, Die schalten im Normalbetrieb den Takt ab. Also Enable aus. Not-Aus sozusagen.

Beim Homing mußte eine gewisse Schalthysterese beachten/berücksichtigen. Mußte dann für dich festlegen welche Flanke deine Null wird. 2x am Sensor hin/her fahren ist eigentlich normal. Vielleicht kannste die Sensoren ganz modern ausführen. Hallsensor mit kleinen Magnet. TLE4905L und Magnet Südpol zeigt zum Sensor. Ich spiele gerade damit rum, deshalb die Erwähnung. Gabellichtschranke geht natürlich auch.



Tschau
Doc Arduino '\0'

Messschieber auslesen: http://forum.arduino.cc/index.php?topic=273445
EA-DOGM Display - Demos: http://forum.arduino.cc/index.php?topic=378279

Go Up