Forum: Mikrocontroller und Digitale Elektronik Schrittmotoransteuerung über Arduino mit l293D


von Orce L. (orce_l)


Angehängte Dateien:

Lesenswert?

Hallo,
ich weiß viele haben ähnlichen Beitrag gepostet aber ich bin neuling in 
der Sache und versuche einen Bipolaren Schrittmotor(STEPPER) mit einen 
Arduino Board über l293d anzusteuer dass er nach Links oder Rechts 
drehen kann aber ich komm irgendwie nicht weiter im anhang ist mein 
Schalt plan es wäre super wenn jemand mir weiter helfen würde .
Ich bedanke mich im voraraus
MFG
LAZAROV

von MaWin (Gast)


Lesenswert?

Das mit dem Schaltplna kann so funktionieren,
wenn es die richtigen Spulen des Motros sind,
und der für ungefähr 12V ausgelegt ist.
Nun muß nur noch das Programm die richtigen
Schrittimpulse liefern.

von Pikee (Gast)


Lesenswert?

Hey,

der Schaltplan sieht für den anfang soweit gut aus nur würde ich
später die beiden Enabled Kanäle (Pin 1 und 9) ggf. auch noch einzelnd 
beschalten um später auch im Halbschritt verfahren zu können.

Desweiten würde ich empfehlen dich für den Anfang mit ein paar
mehr L293D IC's einzudecken da du am anfang mit sicherheit einige
verheizen wirst :-)

gruß,
Pikee

von Milan S. (Firma: PRiavat) (weller)


Lesenswert?

Danke erstmal für die schnelle Antworten!
Und zwar habe ich mittlerweile den Motor dazugebracht das er in einer 
Richtung Dreht aber langsam,die frage ich wie kann ich die PWM 
Einstellen,damit er bisschen schneller Dreht ,außerdem wie kann ich das 
machen,dass er nach Links und Rechts dreht hier ist mein Programmcode!
1
/*
2
 * MotorKnob
3
 *
4
 * A stepper motor follows the turns of a potentiometer
5
 * (or other sensor) on analog input 0.
6
 *
7
 * http://www.arduino.cc/en/Reference/Stepper
8
 * This example code is in the public domain.
9
 */
10
11
#include <Stepper.h>
12
13
// change this to the number of steps on your motor
14
#define STEPSA 200
15
#define STEPSB 100
16
#
17
18
int pwm=5;
19
int pwm2 =3;
20
// create an instance of the stepper class, specifying
21
// the number of steps of the motor and the pins it's
22
// attached to
23
Stepper stepper(STEPSA, 7, 8, 9, 10);
24
25
26
void setup()
27
{
28
  pinMode(3, OUTPUT);
29
  pinMode(5, OUTPUT);
30
  pinMode(7,OUTPUT);
31
  pinMode(8,OUTPUT);
32
  pinMode(9,OUTPUT);
33
  pinMode(10,OUTPUT);
34
  // set the speed of the motor to 30 RPMs
35
  stepper.setSpeed(100);
36
}
37
38
void loop()
39
{
40
  digitalWrite(3, HIGH);
41
  
42
  digitalWrite(5, HIGH);
43
  
44
  digitalWrite(7,LOW);
45
  digitalWrite(8, HIGH);
46
  digitalWrite(9, LOW);
47
  digitalWrite(10,HIGH);
48
49
  delay(100);
50
  
51
  digitalWrite(3, HIGH);
52
  
53
  digitalWrite(5, HIGH);
54
  
55
  digitalWrite(7,HIGH);
56
  digitalWrite(8, LOW);
57
  digitalWrite(9, LOW);
58
  digitalWrite(10,HIGH);
59
  delay(100);
60
  
61
  digitalWrite(3, HIGH);
62
  
63
  digitalWrite(5, HIGH);
64
  
65
  digitalWrite(7,HIGH);
66
  digitalWrite(8, LOW);
67
  digitalWrite(9, HIGH);
68
  digitalWrite(10,LOW);
69
  
70
  delay(100);
71
  
72
  digitalWrite(3, HIGH);
73
  digitalWrite(5, HIGH);
74
  digitalWrite(7,LOW);
75
  digitalWrite(8, HIGH);
76
  digitalWrite(9, HIGH);
77
  digitalWrite(10,LOW);
78
  delay(100);
79
80
}
MFG
Lazarov

von Karl H. (kbuchegg)


Lesenswert?

Milan Select schrieb:
> Danke erstmal für die schnelle Antworten!
> Und zwar habe ich mittlerweile den Motor dazugebracht das er in einer
> Richtung Dreht aber langsam,die frage ich wie kann ich die PWM
> Einstellen,damit er bisschen schneller Dreht

Hä?
Welche PWM?


Darf ich mal vorschlagen, dass du aus deinem Programm alles rauswirfst, 
was erst mal nichts mit deinem Motor zu tun hat?

Das 'stepper' Objekt. Brauchst du das irgendwo in deinem Code?
Nein? - Dann weg damit

die pwm, pwm2 Variablen. Brauchst du dir irgendwo? Nein? - dann weg 
damit.

Du hast 6 Pins als Ausgänge geschaltet und legst da auch fleissig Pegel 
drauf. Dein Motortreiber hat aber nur 4 Anschlüsse. Also sind da 2 
zuviel - weg damit.

Was bleibt dann noch übrig?
1
void loop()
2
{
3
   4 Portpins nach Muster auf Low/High schalten um 1 Schritt zu machen
4
   delay( 100 );
5
6
   4 Portpins nach anderem Muster auf Low/High schalten um den
7
             nächsten Schritt zu machen.
8
   delay( 100 );
9
10
   4 Portpins nach anderem Muster auf Low/High schalten um den
11
             3. Schritt zu machen.
12
   delay( 100 );
13
14
   4 Portpins nach anderem Muster auf Low/High schalten um den
15
             4. und damit letzten Schritt einer Sequenz zu machen.
16
   delay( 100 );
17
}

das ist dann doch im Prinzip dein Code.
Was wirst du also verändern müssen, damit der Motor schneller dreht?

Jedesmal, wenn du ein neues Muster ausgibst (und das Muster das korrekte 
ist), macht der Motor einen Schritt. Je schneller er die Schritte macht, 
je weniger Zeit also von einem Schritt zum nächsten vergeht, desto 
schneller dreht er daher auch.
-> deine Schlussfolgerung für eine mögliche Programmveränderung, damit 
er schneller dreht?


Mir ist schon klar, dass du im Endeffekt dieses Stepper Objekt benutzen 
wirst. Allerdings schadet es auch nicht, wenn man mal direkt ein bischen 
mit den Pins experimentiert und so einen Motor mal 'händisch' zum laufen 
kriegt. Denn dann versteht man plötzlich auch, was da eigentlich vor 
sich geht. Das ist alles keine Raketentechnik (zumindest jetzt noch 
nicht) und ein wenig Übung im Programmieren und logischem Denken dürfte 
auch nicht schaden.

von weller (Gast)


Lesenswert?

Hallo Karl ich habe die Treiber-Platine 
https://www.ssl-id.de/b-redemann.de/catalog/product_info.php?products_id=161 
und da habe ich 6 Pins die ich ansteuern muss. 4 Pins für die 2 Spulen 
und 2 Pins für PWM . Die PWM Pins müssen auf HIGH (1) sein damit sich 
der Motor Überhaupt erst dreht. Über die PWM Pins habe ich auch vor die 
Geschwindigkeit zu konfigurieren.

PS: Ich habe gerade erst angefangen mich mit dem Arduino zu 
beschäftigen.
    Es ist ja bekanntlich noch kein Meister von Himmel gefallen ;D

von Karl H. (kbuchegg)


Lesenswert?

weller schrieb:

> Über die PWM Pins habe ich auch vor die
> Geschwindigkeit zu konfigurieren.

Das magst du vielleicht vorhaben, interessiert aber deinen Schrittmotor 
nicht.

Wie funktioniert denn so ein Schrittmotor?
Da ist ein Magnet drinnen und rundherum sind Spulen. Je nachdem auf 
welche der Spulen du 'Saft' gibst, dreht sich der Magnet genau in diese 
Richtung. Gibst du also reihum auf eine Spule nach der anderen 'Saft', 
dann folgt der Magnet schön brav dieser Sequenz. Mit seinem Norpol dreht 
er sich immer zu der Spule, die ihm gerade einen magnetischen Südpol 
zuwendet. Und wenn er sich dann dort hin gedreht hat, dann heißt es 
ätschi-bätschi. Die Spule wird ausgeschaltet und die reihum nächste 
Spule wird eingeschaltet und präsentiert ihm ihren Südpol. Also bleibt 
dem Magneten nichts anderes übrig, als sich in diese Richtung zu drehen, 
weil jetzt sein Norpol von eben genau diesem Südpol angezogen wird. Hat 
er sich soweit gedreht - ätschi-bätschi - Spule aus und die nächste 
Spule bestromt.


Wie schnell ein Schrittmotor sich dreht, und in welche Richtung, hängt 
einzig und alleine von der Schrittsequenz ab und von nichts anderem.
Mit der PWM kannst du Einstellen, wieviel Strom durch die Spule gejagt 
wird und so das Magnetfeld der Spule stärker und schwächer machen. 
Dadurch wird der sich drehende Magnet stärker oder schwächer angezogen. 
Aber drehen wird er sich immer nur soweit, bis sein Nordpol auf den 
Südpol der jeweils bestromten Spule zeigt.


Das war die Einfachvariante.
Natürlich macht es Sinn den Strom durch die Spulen zu variieren. Denn 
dadurch kann man sowas wie einen virtuellen Südpol aufbauen, der dann 
eien feiner Auflösung erlaubt, weil man mehr Kontrolle über das 
Magentfeld hat, indem man mehrere Spulen zusammen arbeiten lässt. Aber 
soweit bist du noch lange nicht und wenn es soweit ist, dann überlässt 
man das einem speziellen IC. Denn der kann das besser.

von spess53 (Gast)


Lesenswert?

Hi

>Über die PWM Pins habe ich auch vor die Geschwindigkeit zu konfigurieren.

Was willst du da mit PWM ? Die Geschwindigkeit des Motors wird mit dem 
'Takt' in dem die Bitmuster an den Treiber geschoben werden bestimmt. 
Mit einer PWM an den Enable-Eingängen kannst du höchstens die Leistung 
des Motors verringern.

MfG Spess

von der fragende (Gast)


Lesenswert?

Wie viele Accounts verwendest du eigentlich ?


=> mein Tip

delay(50)

von EGS (Gast)


Lesenswert?

Hi,

wenn du dir die Beschreibung der Stepper libary mal durchlesen würdest.

Hatte als Abschlussprüfung die Aufgabe nen Lernpaket mit Stepper und mC 
zu erstellen für nachfolgende Azubis. Am Anfang habe ich auch den 
Blödsinn mit den Bitmustern gemacht. Die einzeln zu erzeugen ist aber 
mit der libary  sinnfrei.
Bitte schaiu dir die Doku erst an oder lade mal das Beispielsketch in 
den Arduino.

Die PWM brauchst du bei dem L239D echt nicht, die nutzt man bei den 
Motortreibern, die nen PWM Eingang haben für die Drehzahl. Der L239D hat 
doch bloß nen enable und nen voll-/halb schritt.

Ich habe das damals mit Bitschieben und maskieren gelöst.

MfG EGS

von Karl H. (kbuchegg)


Lesenswert?

EGS schrieb:
> Hi,
>
> wenn du dir die Beschreibung der Stepper libary mal durchlesen würdest.
>
> Hatte als Abschlussprüfung die Aufgabe nen Lernpaket mit Stepper und mC
> zu erstellen für nachfolgende Azubis. Am Anfang habe ich auch den
> Blödsinn mit den Bitmustern gemacht. Die einzeln zu erzeugen ist aber
> mit der libary  sinnfrei.

:-)
Aber es bildet!

Plötzlich sieht man die geheimnisvollen Schrittmotoren mit anderen 
Augen. Und kann sich dann auch so manches Verhalten besser erklären.

Für Produktionseinsatz ist das natürlich kompletter Quatsch, das so zu 
machen. Kein Einwand meinerseits.

von Milan S. (Firma: PRiavat) (weller)


Lesenswert?

Hallo,
Ich komme nicht einfach weiter wie sieht den der Code aus ? Hat jemand 
ein beispiel code oder kann mir jemand helfen?
Danke im Vorraus
MFG
LAZAROV

von Karl H. (kbuchegg)


Lesenswert?

Milan Select schrieb:
> Hallo,
> Ich komme nicht einfach weiter

Womit kommst du nicht weiter?

> wie sieht den der Code aus ? Hat jemand
> ein beispiel code oder kann mir jemand helfen?

Du wirst dir doch eine Funktion schreiben können, die dir anhand einer 
Schrittnummer (0 bis 3) das entsprechende Bitmuster an den Port ausgibt. 
Beim Rechtsdrehen erhöhst du die Schrittnummer (modulo 4) und beim 
Linksdrehen erniedrigst du sie (modulo 4). Und die Funktion gibt dann 
das Bitmuster an die Portpins aus. Das ganze ist erst mal so einfach wie 
ein Lauflicht mit 4 Leds und 4 Schritten.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.