Arduino Motor Shield für 12-V-Schrittmotoren

Ich mache ein einfaches Rig für Zeitrafferfotografie mit Arduino. Es ist ein Schwenksystem für eine DSLR-Kamera, also habe ich mich für das Motorschild von Arduino mit dem L298-Chip und einem Schrittmotor mit 12 V und 1,7 A entschieden. Bevor ich den Motorschild extern mit Strom versorgen konnte, bemerkte ich, dass der Motor gut von dem 5-V-USB lief, das an das Arduino-Board geliefert wurde. Es war in der Lage, die DSLR mit unterschiedlichen Geschwindigkeiten vollständig zu bewegen und an Ort und Stelle zu halten.

Das Problem trat auf, als es aufgefordert wurde, jeweils einen einzelnen Schritt auszuführen (ich nehme an, dass das Einstellen einer beliebigen Geschwindigkeit hier ausreicht). Mir ist aufgefallen, dass nicht alle Schritte gleich sind. Manchmal gab es 2 kleine Schritte gefolgt von einem größeren Schritt oder sogar umgekehrt. Nach meinem Verständnis haben Schrittmotoren eine feste Schrittgröße, und entweder wird sie vollständig ausgeführt (mit genügend Leistung versehen) oder sie wird ausfallen, ist das richtig? Ich dachte, es wird die Trägheit vollständig überwinden und nicht auf halbem Weg stecken bleiben und dann zu anderen Zeiten gut funktionieren.

Ist hier also der Motor / die 5-V-Stromversorgung oder mein Code schuld? Um eine externe Stromversorgung bereitzustellen, müsste ich eine Spur auf dem Schild schneiden, also halte ich daran fest, bis ich sicher bin. (Auch ein einziges Netzteil wäre schön!)

Hier ist der generische Code, den ich verwende:

#include <Stepper.h>

 const int stepsPerRevolution = 1024;
 Stepper myStepper(stepsPerRevolution, 12,13);     

// give the motor control pins names:
 const int pwmA = 3;
 const int pwmB = 11;
 const int brakeA = 9;
 const int brakeB = 8;
 const int dirA = 12;
 const int dirB = 13;

 int times = 120;//420
void setup() {
 Serial.begin(9600);
 // set the PWM and brake pins so that the direction pins  // can be used to control the motor:
pinMode(pwmA, OUTPUT);
pinMode(pwmB, OUTPUT);
pinMode(brakeA, OUTPUT);
pinMode(brakeB, OUTPUT);
digitalWrite(pwmA, HIGH);
digitalWrite(pwmB, HIGH);
digitalWrite(brakeA, LOW);
digitalWrite(brakeB, LOW);

// initialize the serial port:
Serial.begin(9600);
// set the motor speed (for multiple steps only):
myStepper.setSpeed(2);
}

void loop() {
  while(times>0){
    myStepper.step(1);
    Serial.println(times);
    times--;
    delay(12000);
   }

  }

Antworten (2)

Wenn der Motor für 12 V und 1,7 A ausgelegt ist, dann versorgen Sie ihn damit. USB kann 5V bei maximal 500mA liefern, also hat man statt maximal 12V * 1,7A = 20,4W maximal 5V * 500mA = 2,5W. Das ist ein großer Unterschied.
Ich vermute, dass es aufgrund der Trägheit der DSLR und des schwachen Stepper-Spulenantriebs gelegentlich rutscht (oder ähnliches).
Außerdem erinnere ich mich an eine frühere Frage, dass der Arduino-Motorschild nicht das beste Design ist - der L298 fällt ein oder zwei Volt ab durch die Source- und Sink-Treibertransistoren, so dass Sie am Ende noch weniger Leistung zur Verfügung haben, vielleicht etwa ein Watt (siehe Source / Sink-Sättigungsspannung in der Datenblatt-Spezifikationstabelle).

Der grundlegende Code sieht in Ordnung aus, aber es ist unmöglich, dies mit Sicherheit zu sagen, da die gesamte eigentliche Funktionalität in der Stepper-Bibliothek versteckt ist. Ich gehe davon aus, dass dies wahrscheinlich in Ordnung ist, wenn es sich um eine häufig verwendete Bibliothek handelt, die es schon seit einiger Zeit gibt.

Also, ja, den Motor mit 12V und mindestens 1,7A versorgen. Wenn Sie die Leiterbahn abschneiden müssen, dann tun Sie dies, es ist einfach, sie später wieder zu löten, wenn Sie es brauchen (stellen Sie zuerst sicher, dass sich kein Jumper auf der Motorplatine befindet, ich habe das Gefühl, ich erinnere mich an einen Jumper für den Zweck eines externen Versorgung auf einem dieser Schilde)

Haben Sie versucht, die PWM-Werte zu variieren? Außerdem empfehle ich das Rugged Motor Shield . Ich verwende einen Schrittmotor, um eine Welle zu drehen, um Drosselklappensensoren zu testen, und habe ein Verhalten wie Ihres festgestellt, wenn ich am Ende des TPS-Wegs bin ... oder wenn die PWM zu niedrig ist und der Schrittmotor diesen Schritt nicht machen kann, springt er herum ein bisschen.

Das Rugged Motor Shield ermöglicht eine externe Versorgung des Shields, sodass Arduino und Shield separat mit Strom versorgt werden können. Wenn überhaupt, hilft Ihnen der Besuch dieser Website möglicherweise dabei, besser zu verstehen, wie man mit Steppern spielt.

Für meine Situation stellte ich fest, dass die TPS-Eingangswelle nicht in Bewegung sein konnte, damit der Arduino die Sensorspannung an A2 (oder einem beliebigen Stift) messen konnte, also bewegt meine Skizze die Welle um einen Schritt, nimmt die Messung vor und wiederholt sie. Für meine Situation hat mein Stepper 7,5 ° Schritte und ein 18-Zahn-Getriebe. Ich habe einen 3D-Drucker verwendet, um ein 54T-Getriebe herzustellen, damit ich eine Untersetzung von 3: 1 erhalte, wodurch mein Schrittmotor mehr Leistung und Präzision erhält.

Sie sollten PWM mit offenem Regelkreis nicht mit einem Schrittmotor verwenden, Sie sollten einen Chopper-Stromregler verwenden, der das PWM-Tastverhältnis anpasst, um den Strom so nah wie möglich am gewählten Wert zu halten.
@ChrisStratton Ich verwende die Skizze von Ruggedcircuits.com. Ich bin mir nicht sicher, wie sie implementiert ist. :P Hast du irgendwelche Beispiele?