Schrittmotor(VMA03/Motorshield) mit Arduino Uno steuern

Guten Abend,

wir möchten in unserem Projekt einen linearen Antrieb mit dem Schrittmotor erstellen.
Wir haben dazu ein Shield von Vellemann (VMA03) und einen Schrittmotor (leider keine Anleitung dazu vorhanden). Ich habe schon versucht eine Verbindung mit dem Shield herzustellen (siehe Bild), aber leider vibriert der Motor nur. Den Code haben wir von Vellemann übernommen.

int pwm_a = 3;  //PWM control for motor outputs 1 and 2 
int pwm_b = 9;  //PWM control for motor outputs 3 and 4 
int dir_a = 2;  //direction control for motor outputs 1 and 2 
int dir_b = 8;  //direction control for motor outputs 3 and 4 

void setup()
{
  pinMode(pwm_a, OUTPUT);  //Set control pins to be outputs
  pinMode(pwm_b, OUTPUT);
  pinMode(dir_a, OUTPUT);
  pinMode(dir_b, OUTPUT);
  
  analogWrite(pwm_a, 100);  //set both motors to run at (100/255 = 39)% duty cycle (slow)
  analogWrite(pwm_b, 100);
  
}

void loop()
{
  digitalWrite(dir_a, LOW); 
  digitalWrite(dir_b, LOW);  
  
  
  analogWrite(pwm_a, 50);  
  analogWrite(pwm_b, 50);
  
  delay(1000);
  
  analogWrite(pwm_a, 0);  
  analogWrite(pwm_b, 0);
  
  delay(1000);
  
  analogWrite(pwm_a, 150);  
  analogWrite(pwm_b, 150);
  
  delay(1000);
  
  analogWrite(pwm_a, 0);  
  analogWrite(pwm_b, 0);
  
  delay(1000);
  
  analogWrite(pwm_a, 255);  
  analogWrite(pwm_b, 255);
 
  delay(1000);
  
  analogWrite(pwm_a, 0);  
  analogWrite(pwm_b, 0);
  
  delay(5000);
  
  digitalWrite(dir_a, HIGH); 
  digitalWrite(dir_b, HIGH);  
  
  
  analogWrite(pwm_a, 50);  
  analogWrite(pwm_b, 50);
  
  delay(1000);
  
  analogWrite(pwm_a, 0);  
  analogWrite(pwm_b, 0);
  
  delay(1000);
  
  analogWrite(pwm_a, 150);  
  analogWrite(pwm_b, 150);
  
  delay(1000);
  
  analogWrite(pwm_a, 0);  
  analogWrite(pwm_b, 0);
  
  delay(1000);
  
  analogWrite(pwm_a, 255);  
  analogWrite(pwm_b, 255);
 
  delay(1000);
  
  analogWrite(pwm_a, 0);  
  analogWrite(pwm_b, 0);
  
  delay(5000);

}

Wir würden gerne mit dem Schrittmotor die Drehzahl(Umdrehungen) einstellen und die Drehrichtung ändern können.
Es wäre uns schon eine große Hilfe zu wissen, ob wir den Motor überhaupt richtig angeschlossen haben und wenn nicht, was wir ändern müssen. Zudem verstehen wir nicht welche Funktion uns was liefert.

Vielen Dank im voraus.

IMG_1046.jpg|x

IMG_1516.jpg|x

Motor2.pdf (79 KB)

mzumika:
einen Schrittmotor (leider keine Anleitung dazu vorhanden).

Das ist ganz schlecht. Zu einem Schrittmotor brauchst Du immer die technischen Daten, um ihn anschließen zu können. Insbesondere musst Du wissen, ob der stromgesteuert oder spannungsgesteuert ist.
Wenn man mal nach der Typenbezeichnung sucht ( ist deine Suchmaschine kaputt? ) findet man z.B. dieses Angebot. Lt dem dort verlinkten Datenblatt ist der Motor stromgesteuert ( die Nennspannung ist mit 2,8V sehr klein ). Da ist dein Shield nicht geeignet.

Hi

Wofür benutzt Du hier PWM?
Nicht Gegengeprüft (!) wird DAS nicht die Frequenz des Takt-Signal ändern, sondern nur den HIGH-Anteil darin. (was halt PWM so ist)
Das wiederum ist dem Treiber (wenn's denn Einer ist) egal, da Dieser nur die Flanken auswertet - da sich die Frequenz des PWM-Signal nicht ändert, wird der Stepper IMMER in der gleichen geschwindigkeit angesteuert (Ausnahme bei 0 oder 255 - dort passiert Nix, da immer HIGH bzw LOW - keine Flanken vorhanden).

MfG

Shield und Programm passen zu einem ordinären DC Motor, sonst nichts! Wenn so ein Motor greifbar ist, probier den mal damit aus.

Für einen Schrittmotor braucht man ein passendes Shield oder Treiber Modul, und Ansteuerung mit Einzelschritten oder mit variabler Frequenz, am besten mit der Stepper oder AccelStepper Bibliothek.

Der Beispielsketch von Vellemann ist in der Tat nicht für einen Schrittmotor, sondern für 2 DC-Motore vorgesehen. Man könnte das auch aus dem Kommentar schließen:

  analogWrite(pwm_a, 100);  //set both motors to run at (100/255 = 39)% duty cycle (slow)
  analogWrite(pwm_b, 100);

Mit dem Shield an sich kann man aber auch geeignete Schrittmotore ansteuern. Allerdings nicht den hier genutzten und man braucht dann natürlich auch einen passenden Sketch.
Wobei es für Schrittmotore schon bessere und modernere Treiberbausteine gibt.

hmm..

Wie kann ich mir das Vorstellen ? Ich habe jetzt gedacht der Schrittmotor hat eine Nennspannung von 2.8V.

Der Shield kann 50V vertragen (ich denke mal wenn ich den extern mit Spannung versorge, da der Arduino nur max 5V liefert).

und ich dachte das ich den Motor dann an sich über den Arduino versorgen, da der Motor wie gesgat 2.8V Spannung braucht.

Wie sollte ich den Schrittmotor auswählen zu meinem VMA03 Shield?

Vergiß Schrittmotor mit diesem Shield, dazu müßtest Du nämlich den ganzen Code selbst schreiben, der sonst in den Bibliotheken schon drinsteht. So weit bist Du noch lange nicht :frowning:

Ein Schrittmotor für 2,8V ist stromgesteuert, dafür brauchst Du ein genau passendes Shield, sonst brennt gleich was durch.

Ein Arduino Ausgang kann 20mA (max. 40mA) liefern, damit bekommt man keinen Motor zum Laufen. Deshalb die Motortreiber, die Motoren mit höherer Spannung oder höherem Strom kontrollieren können.

Der Motor Treiber L298P auf den Shield kann nicht mit 50V betrieben werden. Das Datenblatt nennt als Motorversorgungsspannung zwischen VIH+2,5V und 46V. VIH(Spannung am Eingang wenn HIGH)Kann von 2,3V bis VSS (Versorgungsspannung Logikteil) gehen. VSS seinerseits kann von 4,5V bis 7V gehen.
Also Minimale Versorgungsspannung des Motors geht in abhängigkeit der Versorgungsspannung und Signalspannung am Eingang zwischen 4,8V und 9,5V. DIe maximale Motorspannung bleibt 46V.

50V sind das ABSOLUTE MAXIMUM RATING der Motorversorgungsspannung. Bei höheren Versorgunsspannung geht der L298P kaputt. Man kann aber das Bauteil nicht bis zu dieser Spannung betreiben.

Mir seint daß der Verfasser der Daten der Produktbeschreibung das Datenblatt nicht verstanden hat.

Grüße Uwe

mzumika:
Wie sollte ich den Schrittmotor auswählen zu meinem VMA03 Shield?

Ich hole etwas aus:

Schrittmotore kann man in 2 Arten ansteuern: mit konstanter Spannung und mit konstantem Strom.

Spannungsgesteuert: Die Versorgungsspannung des Treibers ist die Nennspannung des Motors. Die Transistoren der Endstufen schalten einfach die Versorgungsspannung bzw Masse an die Wicklungen des Motors.
Vorteil: Einfacher
Nachteil: Der Motorstrom und damit das Motormoment (Kraft) hängt stark von der Schrittgeschwindigkeit ab, weil die Wicklungsiduktivität den Motorstrom langsam ansteigen läßt und damit bei schnellen Schrittfolgen = wenig Zeit währed der der Strom auf seinen Maximalwert steigen kann, der Mittelwert des Stromes weniger ist.

Stromgesteuert:
Der Treiber gibt dem Motor einen "Konstantstrom" indem er die Spannungsversorgung der Wicklung bei Erreichen des eingestellten Wertes abschaltet und wenig später wieder einschaltet bis der Strom wieder den eingestellten Wert erreicht usw. Damit die Induktivität wenig Einfluß auf den Strom hat wird der Treiber mit einem vielfachen des Motornennspannung versorgt. Bei einem 2,8V Motor auch schon mal mit 12 oder 24V.
Nachteil: Komplizierterer Aufbau des Treibers. Höhere Versorgungsspannung.
Vorteile: Der Strom ist gegenüber der Schrittgeschwindigkeit länger konstant und flacht erst bei hohen Schrittzahlen ab.
Da der Treiber den Strom bestimmt ist Microstepping möglich ( Strom der Wicklungen wird verschieden gewählt sodaß der Rotor Zwischenschritte macht. Bis 32 Zwischenschritte sind möglich; Es gibt Treiber zB TMC2100, die intern (zum Motor) 256 Zwischenschritte machen.
Microstepping macht Schrittmotore leiser.

Du brauchst für das Shield einen Motor der zwischen 12V und 46V Nennspannung und max 2A Nennstrom hat.

Für den genannten Motor (2,8V) brauchst Du einen Treiber wie den A4988, DRV8825 oder TMC21xx Familie. und ein 12V oder 24V Netzteil.

Grüße Uwe

Vielen Dank für eure unfangreichen Antworten, dann weiss ich erstmal Bescheid.

Wo kann ich vielleicht mich über Bipolareschrittmotoren und Shield einlesen das ich genau weiss was wozu passt ? Und wenn nicht wieso ? Das würde mir zurzeit sehr Helfen.

Vielleicht noch zum späteren Programmieren wie ich dann bei dem Arduino coden vorgehe.

Grüße
Mika

mzumika:
Vielleicht noch zum späteren Programmieren wie ich dann bei dem Arduino coden vorgehe.

Programmablauf detailiert aufschreiben, Funktionsblöcke bilden, umsetzen.

Gruß Tommy