ich befasse mich seit kurzem mit dem Arduino Uno und zwar möchte ich eine Videoschiene mit einem Schrittmotor betreiben.
Die Hardware besteht aus:
Arduino Uno
Adafruit Motor Shield v2.3
12V/3A Netzteil
12V/0,4A Hybrid Schrittmotor (Typ: 17HS13-0404S)
Der Motor soll später über ein 10k Ohm Poti geregelt werden. Da ich ein Neuling auf diesem Gebiet bin arbeite ich mich langsam heran und habe nach dem runterladen der Adafriut Motor Shield Library das Stepper Test Sketch laufen. Der Schritmotor vibriert (wie bei einem Handy) beim Test, unabhängig von Drehzahl und Modi (Single, Double oder Interleave). Schritte überspringt er jedoch nicht. Ich habe die Aberpaare des Motors (Rot/Blau und Schwarz/Grün) am Motor Shield sowohl an Port 1 (M1/M2) und Port 2 (M3/M4) angeschlossen und auch + und - getauscht. Liegt es vielleicht am Motor? Der erste kam wohl aus China, danach habe ich mir gleich zwei neue bestellt (Typ wie oben beschrieben). Sind die Motoren vielleicht auch nicht dafür geeignet? Durch die Vibrationen des Motors stürzt mein Camcorder ab (vermutlich wegen der HDD).
Hier das Stepper Test Sketch
#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include "utility/Adafruit_PWMServoDriver.h"
// Create the motor shield object with the default I2C address
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
// Or, create it with a different I2C address (say for stacking)
// Adafruit_MotorShield AFMS = Adafruit_MotorShield(0x61);
// Connect a stepper motor with 200 steps per revolution (1.8 degree)
// to motor port #2 (M3 and M4)
Adafruit_StepperMotor *myMotor = AFMS.getStepper(200, 2);
void setup() {
Serial.begin(9600); // set up Serial library at 9600 bps
Serial.println("Stepper test!");
AFMS.begin(); // create with the default frequency 1.6KHz
//AFMS.begin(1000); // OR with a different frequency, say 1KHz
myMotor->setSpeed(10); // 10 rpm
}
void loop() {
Serial.println("Single coil steps");
myMotor->step(100, FORWARD, SINGLE);
myMotor->step(100, BACKWARD, SINGLE);
Serial.println("Double coil steps");
myMotor->step(100, FORWARD, DOUBLE);
myMotor->step(100, BACKWARD, DOUBLE);
Serial.println("Interleave coil steps");
myMotor->step(100, FORWARD, INTERLEAVE);
myMotor->step(100, BACKWARD, INTERLEAVE);
Serial.println("Microstep steps");
myMotor->step(50, FORWARD, MICROSTEP);
myMotor->step(50, BACKWARD, MICROSTEP);
}
asphaltdrifter:
...
Arduino Uno
Adafruit Motor Shield v2.3
12V/3A Netzteil
12V/0,4A Hybrid Schrittmotor (Typ: 17HS13-0404S)
...
Könntest Du zusätzlich zu dem, was Stefan anmerkt, noch die Dinge verlinken, die nicht jedermann kennt? Was ein Uno und ein Motor-Shield sind, weiß ich, aber der Schrittmotor ist mir nicht bekannt. Wäre schön, wenn Du einen Link zum Datenblatt oder zur Produktseite hättest.
Falls Du tatsächlich den angegebenen Sketch verwendest, dann wäre es ein Fehler, wenn der Motor nicht zittert. Anscheinend macht er aber alles, was ihm vom Programm vorgegeben wird, also wo ist das Problem?
Ich denke ein Schrittmotor rüttelt immer. Er läuft nicht rund, sonder macht übertrieben gesagt "Sprünge", die mal schneller und mal langsammer aufeinander folgen. Ich könnte mir vorstellen dass das vermindern der Spannung für den Motor die Sprünge weicher werden lässt. Aber er verliert dann auch an Kraft und Durchzug.
Muss diese Videoschiene millimetergenau fahren? Wenn nicht, nehme einen normalen Motor.
Dass der Schrittmotor in den Modis Single, Double, Interleave und je nach RPM vibriert ist normal. Lediglich bei Microsteps ist es ein hochfrequenter Ton und ganz ohne Vibration.
Ggf. hilft es ja den Schrittmotor vom Gehäuse zu entkoppeln.
Wenn der Schrittmotor sich nicht bewegen soll/muss, kann man die Impule abschalten, dann vibriert auch Nichts. Ich vermute, der von dir gewähle Motor ist einfach zu groß (Masse des Rotors). Würdest du einen deutlich kleineren Motor wählen, der dann auch schneller liefe (evtl. mit Getriebe), hättest du weiger Vibrations-Probleme.
Wenn ein Elektromotor langsam laufen soll, dann zittert jeder. Nur merkt man das bei einem DC Motor nicht, weil der meistens mit einer hohen Drehzahl betrieben wird. Vielleicht hilft es, der Bibliothek eine höhere Schrittgeschwindigkeit vorzugeben, dann sollte das Zittern aufhören. Der AccelStepper Bibliothek kann man nicht nur die (maximale) Geschwindigkeit vorgeben, sondern auch die maximale Beschleunigung, damit beim Hochfahren keine Impulse verloren gehen können. Die maximale Beschleunigung mußt Du selbst ermitteln, wenn die ganze zu bewegende Mechanik dranhängt, den Rest erledigt die Bibliothek dann selbst.
Die Ursache scheint doch vom Motorshield zu kommen. Ich habe mir Doppel-H-Brücken gekauft und festgestellt das Vibrationen weniger geworden sind. Und auch die im Sketch eingegebenen Motordrehzahlen den tatsächlichen entsprechen, dies ist beim Motorshield nicht der Fall. Ist es ein Einstellungsproblem im Sktech oder hat die Hardware doch ein defekt? Der Fehler tritt bei beiden Ausgängen des Shields auf.
Dein Problem liegt vor allem in der Eletronik, die mit Schrittmotoren schlecht klarkommt. So wie ein Dieselmotor, der mit Super betrieben wird. Nimm ein Shield für die Ansteuerung von Schrittmotoren, wenn Du bessere Ergebnisse haben möchtest.
Welches Motor Shield würdet Ihr empfehlen? Aktuell habe ich das von Adafruit weil es zwei Anschlüsse für Schrittmotoren hat und es nützeliche Funktionen wie Microsteps welche ich für meinen Kameraslider gerne nutzen möchte.
Bei 12V/0,4A Hybrid Schrittmotor (Typ: 17HS13-0404S) kannst Du die Vibrationen nicht wegbekommen weil Du diesen Motor nicht sinnvoll über Microschritt und darum Stromsteuerung betreiben kannst.
Das Adafruit Motor Shield v2.3 hat keine Microschritte.
Mit dem Adafruit Motor Shield sind schon Microsteps möglich, hier liegt auch nicht das Problem. Im Doublestep Modus wird das gewünschte Ergebnis nicht erzielt. Ich habe bis jetzt nur 12V Schrittmotoren bei 12V Netzspannung betrieben. Müssen es doch Motoren mit geringerer Spannung sein? Ich habe in anderen Foren gelesen das dies empfohlen wird.
leider kenne ich das Adafruit Motor Shield nicht und auf die "Schnelle" habe ich auf den Bildern im Netz auch keine Regler gesehen, mit denen der Strom eingestellt werden kann.
Daher meine Frage, wie stellst Du dort den Motorstrom ein?
Denke dass dies der "Knackpunkt" sein wird.
Bei zu wenig Strom verlierst Du oft Schritte, umgekehrt kommst Du oft in einem Bereich, in dem der Motor recht "hart" arbeiten kann.
Üblicherweise läuft so ein Motor bereits im Halb-Schritt so "rund", dass die Vibrationen keinen Einfluss auf die HDD haben sollte.
So vorhanden bzw. für Testzwecke schnell verfügbar, würde ich das Ganze mal mit einem Pololu A4988 Stepper Motor Driver auf den "Steckbrett" testen.
Diese Teile sind zu tausenden in 3D-Druckern verbaut und arbeiten, oft über Stunden, zuverlässig.
Der Motorstrom wird dort über eine Referenzspannung mit dem Poti (ist ein Winzling) eingestellt. Für einen ersten Test würde ich 0,4V zwischen Schleifer und Masse einstellen. Das entspricht etwa einen Motorstrom von 1 A.
eine genauere Anleitung gibt es hier:
Andere Frage, was benutzt Du für den Transport? Zahnriemen od. Spindel?
Spindel hat aus meiner Sicht, für den Zweck, den Vorteil, dass das Ganze nicht von selber nach unten rutschen kann und durch die Steigung (z.B. 1 mm bei M6) auch von der Geschwindigkeit sehr "soft" wird. Aber das ist natürlich eine Geschmacksfrage :- )
asphaltdrifter:
Mit dem Adafruit Motor Shield sind schon Microsteps möglich, hier liegt auch nicht das Problem. Im Doublestep Modus wird das gewünschte Ergebnis nicht erzielt. Ich habe bis jetzt nur 12V Schrittmotoren bei 12V Netzspannung betrieben. Müssen es doch Motoren mit geringerer Spannung sein? Ich habe in anderen Foren gelesen das dies empfohlen wird.
Du meinst dieses Shield? Adafruit Motor/Stepper/Servo Shield for Arduino v2 Kit [v2.3] : ID 1438 : $19.95 : Adafruit Industries, Unique & fun DIY electronics and kits
Da sind 2 TB6612 drauf und die sind NICHT Microsteppig-fähig weil es keine Stromtreiber sondern Spannungstreiber sind.
Für Microstepping braucht es einen Strom-Treiber. Dieser stellt den Wicklungsstrom der beiden Wicklungen auf bestimmte stromwerte ein die zusammen einen zwischen-Microschritt ergeben. Damit die Strombegrenzung durch den Treiberbaustein gut funktioniert muß die Versorgungsspannung mindestens 4 mal der Nennspannung sein. Daraus ergibt sich eine Nennspannung des Motors von unter 4V.