INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Motor Geschwindigkeitssteuerung mit L293DNE
05.01.2016, 16:05
Beitrag #1
Motor Geschwindigkeitssteuerung mit L293DNE
Hallo an alle!
Ich lese hier seit einiger Zeit immer wieder rund um den Arduino und jetzt ist es Zeit für mein erstes eigenes Projekt Smile
Ich möchte hierzu einen
Motor (http://www.produktinfo.conrad.com/datenb...yp_33G.pdf) per
L293DNE (http://www.ti.com/lit/ds/symlink/l293d.pdf)
ansteuern und diesen mit einer bestimmten Geschwindigkeit vorwärts und rückwärts laufen lassen (vorwärts mit einer bestimmten Geschwindigkeit, stop, rückwärts mit bestimmten Geschwindigkeit)
Der Aufbau meiner Schaltung sieht so (http://farm6.static.flickr.com/5103/5670...01f2_b.jpg) aus. Hierbei habe ich statt Pin 4 und 5 die Pins 5 und 6 belegt.
Beim Benutzen des Motors ohne Netzteil läuft der Motor schön langsam, aber wenn ich das Netzteil an den Arduino anschließe, dann dreht er sich leider viel zu schnell, deshalb möchte ich die Geschwindigkeit anpassen.
Ich habe über die Suchfunktion diesen Code (http://www.arduinoforum.de/arduino-Threa...windigkeit) vom 22.09. versucht abzuändern, jedoch leider ohne Erfolg. Der veränderte Code hierbei sieht so aus:

int E1=5;
int M1=6;

void setup()
{
pinMode(M1,OUTPUT);
pinMode(E1,OUTPUT);
}

void loop()
{
//Vor
digitalWrite(M1,HIGH);
analogWrite(E1,60);
delay(100);

//Linksdrehung
digitalWrite(M1,LOW);
analogWrite(E1,60);
delay(100);
}

Des weiteren habe ich noch diesen Code getestet:
int motor_forward = 5;
int motor_reverse = 6;

// the setup routine runs once when you press reset:
void setup()
{
// initialize the digital pin as an output.
pinMode(motor_forward, OUTPUT);
pinMode(motor_reverse, OUTPUT);
}

// the loop routine runs over and over again forever:
void loop() {
digitalWrite(motor_forward,1); //terminal D1 will be HIGH
digitalWrite(motor_reverse,0); //terminal D2 will be LOW
delay(5000); //creates a 5 seconds delay //Motor will rotate in forward direction for 5 seconds

digitalWrite(motor_forward,0); //terminal D1 will be LOW
digitalWrite(motor_reverse,1); //terminal D2 will be HIGH
delay(5000); //creates a 5 seconds delay //Motor will rotate in reverse direction for 5 seconds
}
Hier konnte ich durch einfügen einer for-Funktion den Motor langsam schneller werden lassen, jedoch nicht mit einer kontstanten Geschwindigkeit.
Habe auch das Programmierhandbuch von Stefan durchgelesen http://www.arduinoforum.de/arduino-Threa...erhandbuch und denke, dass mein Vorhaben nicht mit einer for-Funktion realisiert wird, sondern durch den analogwrite-Befehl. Leider weiss ich nicht wie ich diesen einbauen bzw anpassen kann, damit mein kleiner Motor schön langsam vor und zurück läuft.
Kann mir hierzu irgendjemand helfen?
Ich danke im Voraus für jegliche Hilfe Smile

PS: Sorry, falls der Text zu lang wurde, ich wollte es nur möglichst genau beschreiben, damit es einfacher zum Verstehen ist
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.01.2016, 16:34
Beitrag #2
RE: Motor Geschwindigkeitssteuerung mit L293DNE
Vielen Dank erstmal für die Antwort.
Ich konnte wie gesagt bei dem zweiten Code bereits die Geschwindigkeit abändern, indem ich die Werte bei der Funktion for (int i=0; i<255; i++) abgeändert habe. Dies brachte den Motor dazu stetig schneller zu werden, jedeoch möchte ich eine kontstante Geschwindigkeit.
Ich habe den Motor an ein Modellauto angeschlossen und möchte dieses erstmal dazu bringen mit einer bestimmten Geschwindikeit vorwärts und rückwärts zu fahren. Das war als mein Einstieg in die Arduinowelt gedacht, jedoch ist die Realisierung doch nicht so einfach wie gedacht für mich als Anfänger.
Vielleicht gibt es auch einen fertigen Code den ich anpassen kann, jedoch habe ich viele versucht und keinen gefunden mit dem es so lief wie gewünscht. Die zwei oben genannten sind nur Beispiele gewesen.
Deshalb frage ich hier, weil ich schon seit zwei Tagen versuche den Wagen langsam vorwärts- und rückwärts laufen zu lassen Smile

PS: Danke auch für den Tipp mit dem Tag
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.01.2016, 16:53
Beitrag #3
RE: Motor Geschwindigkeitssteuerung mit L293DNE
(05.01.2016 16:41)Lötzinnerhitzer schrieb:  einen für Deine Anwendung fix und fertigen Code wirst Du kaum finden - und hier wird wohl auch niemand sein, der Dir einen Code schreibt
(Stichwort: gebratene Tauben)

wohl oder übel wirst Du Dich in die Grundlagen der Programmierung einarbeiten müssen und lernen, lernen, lernen ....

Das hatte ich natürlich nicht erwartet, nur eine Hilfestellung zu den bisher geposteten Codes. Selbstgekochtes schmeckt auch besser Big Grin Jedoch koche ich seit zwei Tagen ohne Erfolg Sad Vielleicht einen Tipp was ich beachten muss, wenn ich die Geschwindigkeit des Motors regulieren will? Ist analogWrite hierbei der richtige Ansatz?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.01.2016, 17:07 (Dieser Beitrag wurde zuletzt bearbeitet: 05.01.2016 17:17 von arduinofan.)
Beitrag #4
RE: Motor Geschwindigkeitssteuerung mit L293DNE
Hmm.., ich steuere meinen Motor mit den L293D an mit folgende Code:
Musst die Pinbelegung bei dir anpassen.

Ich habe das UNO-Board.

Code:
#define ENA_PIN   5  // ENA of DC motor driver module attach to pin5
#define ENB_PIN   6  // ENB of DC motor driver moduleattach to pin6
#define MOTOR_L_1 8  // left MOTOR_L_1 attach to pin8
#define MOTOR_L_2 9  // left MOTOR_L_2 attach to pin9
#define MOTOR_R_1 10 // right  MOTOR_R_1 attach to pin10
#define MOTOR_R_2 11 // right MOTOR_R_2 attach to pin11

#define FORWARD 0    //define forward=0,car move forward
#define BACK    1    //define back=1,car move back
#define SPEEDL 150    // 0-255
#define SPEEDR 150   // 0-255

void setup()
{
    pinMode(ENA_PIN, OUTPUT);
    pinMode(ENB_PIN, OUTPUT);
    pinMode(MOTOR_L_1, OUTPUT);
    pinMode(MOTOR_L_2, OUTPUT);
    pinMode(MOTOR_R_1, OUTPUT);
    pinMode(MOTOR_R_2, OUTPUT);

    delay(100);
    CAR_move(FORWARD,SPEEDL,SPEEDR);
    delay(2000);
    CAR_move(FORWARD,0,0;
    delay(100);
    CAR_move(BACK,SPEEDL,SPEEDR);
    delay(1000);  
    CAR_move(BACK,0,0);
}

void loop()
{
    
}

void CAR_move(unsigned char direction, unsigned char speed_left, unsigned char speed_right)
{
    switch(direction)
    {
        //car move forward
        case 0: digitalWrite(MOTOR_L_1,HIGH);digitalWrite(MOTOR_L_2,LOW);         //left motor clockwise rotation
                    digitalWrite(MOTOR_R_1,HIGH);digitalWrite(MOTOR_R_2,LOW); break;  //right motor clockwise rotation
        
        //car move back
          case 1: digitalWrite(MOTOR_L_1,LOW);digitalWrite(MOTOR_L_2,HIGH);
                    digitalWrite(MOTOR_R_1,LOW);digitalWrite(MOTOR_R_2,HIGH); break;
        
          default: break;
    }
    
    analogWrite(ENA_PIN,speed_left);  //write speed_left to ENA_PIN,if speed_left is high,allow left motor rotate
    analogWrite(ENB_PIN,speed_right); //write speed_right to ENB_PIN,if speed_right is high,allow right motor rotate
}

Gruss
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.01.2016, 16:12 (Dieser Beitrag wurde zuletzt bearbeitet: 06.01.2016 17:29 von ArduinoFanX.)
Beitrag #5
RE: Motor Geschwindigkeitssteuerung mit L293DNE
Danke Arduinofan!
Werde deinen Code gleich mal testen. Hoffe es klappt diesmal Smile

So, jetzt habe ich etwas mit deinem Code verbracht und es versucht anzupassen.
Ich konnte erkennen, dass du zwei Motoren verwendest. Da ich nur einen verwende habe ich den Code etwas angepasst.
Er sieht jetzt so aus:
Code:
Code:
#define ENA_PIN   5  // ENA of DC motor driver module attach to pin5
#define ENB_PIN   6  // ENB of DC motor driver moduleattach to pin6
#define MOTOR_L_1 8  // left MOTOR_L_1 attach to pin8
#define MOTOR_L_2 9  // left MOTOR_L_2 attach to pin9

#define FORWARD 0    //define forward=0,car move forward
#define BACK    1    //define back=1,car move back
#define SPEEDL 150    // 0-255
#define SPEEDR 150   // 0-255

void setup()
{
    pinMode(ENA_PIN, OUTPUT);
    pinMode(ENB_PIN, OUTPUT);
    pinMode(MOTOR_L_1, OUTPUT);
    pinMode(MOTOR_L_2, OUTPUT);
    
    delay(100);
    CAR_move(FORWARD,SPEEDL,SPEEDR);
    delay(2000);
    CAR_move(FORWARD,0,0;
    delay(100);
    CAR_move(BACK,SPEEDL,SPEEDR);
    delay(1000);  
    CAR_move(BACK,0,0);
}

void loop()
{
    
}

void CAR_move(unsigned char direction, unsigned char speed_left, unsigned char speed_right)
{
    switch(direction)
    {
        //car move forward
        case 0: digitalWrite(MOTOR_L_1,HIGH);digitalWrite(MOTOR_L_2,LOW);         //left motor clockwise rotation
                            
        //car move back
          case 1: digitalWrite(MOTOR_L_1,LOW);digitalWrite(MOTOR_L_2,HIGH);
                    
          default: break;
    }
    
    analogWrite(ENA_PIN,speed_left);  //write speed_left to ENA_PIN,if speed_left is high,allow left motor rotate
    analogWrite(ENB_PIN,speed_right); //write speed_right to ENB_PIN,if speed_right is high,allow right motor rotate

Jetzt stellt sich bei mir noch eine Frage:
Welche Pins vom L293D verbindest du mit deinem Pin 8 und 9 beim Arduino?
[Bild: QHx48.png]
Bei mir sieht die Verbindung von L293D zu Arduino so aus
(L293D -> Arduino) :
Pin 1 Enable -> 5V
Pin 2 Input -> Pin 5
Pin 3 Output -> Motor -
Pin 4 Gnd -> Gnd
Pin 5 Gnd -> Gnd
Pin 6 Output -> Motor +
Pin 7 Output -> Pin 6
Pin 8 Vs -> Vin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.01.2016, 18:08 (Dieser Beitrag wurde zuletzt bearbeitet: 06.01.2016 21:55 von arduinofan.)
Beitrag #6
RE: Motor Geschwindigkeitssteuerung mit L293DNE
Das ist Input1 und Input2 :

ENA 5
INT1 8
INT2 9
INT3 10
INT4 11
ENB 6

Gruss
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.01.2016, 21:31
Beitrag #7
RE: Motor Geschwindigkeitssteuerung mit L293DNE
Danke sehr! Wenn ich auf den Code schaue, dann frage ich mich was bei dir dann Pin 5 und 6 ist. Hast du vielleicht einen Link zum Aufbau deiner Schaltung?
Sieht so aus als habe ich nur zwei Optionen. Entweder passe ich den Code an meinen bestehenden Aufbau an oder ich passe den Aufbau deinem Code an.
Ich habe mich schon gefreut als der Motor vor und zurück lief und ich dachte ich füge noch ein oder zwei Zeilen Code ein um (per PWM?/analogWrite?etc..) die Geschwindigkeit zu drosseln, aber es scheint wohl doch nicht so einfach zu sein wie gedacht.
Aber ich sehe das hier als Lernprozess und freue mich über jede Nachricht die mir hilft dazuzulernen : )

PS: Vielleicht kennt jemand auch einen Link mit einer Lösung um einen Motor vorwärts-/rückwärts laufen zu lassen mit einer bestimmten Geschwindigkeit.
Dann kann ich so versuchen zu verstehen wie es aufgebaut ist und wie der Code auf einzelne Pins zugreift. Ich bin für alle Links, Schlagworte, Ratschläge, etc. offen.
Danke : )
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.01.2016, 21:54 (Dieser Beitrag wurde zuletzt bearbeitet: 06.01.2016 21:55 von Binatone.)
Beitrag #8
RE: Motor Geschwindigkeitssteuerung mit L293DNE
Jetzt mal ganz abgesehen von Pinbelegung, Schaltung etc.

Ein Gleichstrommotor hat die blöde Eigenschaft, das er viel "Schlupf" zulässt.
Mit der Spannung steuerst Du das Drehmoment, mehr nicht.
Der Motor braucht eine gewisse Losreißkraft beim Anlaufen.
Ohne Belastung fängt der vielleicht bei 20% Spannung zu drehen an.
Mit Getriebe oder gar unter Last kommt vielleicht erst bei 80% etwas.

Nimmt man (ohne Belastung) die Spannung zurück, sieht es umgekehrt aus.
Da kann der unter Umständen bei 5% Spannung noch langsam rotieren.


Es hilft nur eins:
Rückmeldung der Drehzahl und permanenter Vergleich
(Reedkontakt, Hallgeber, Gabellichtschranke...)
Drehzahl zu hoch -> Spannung senken
Drehzahl zu klein -> Spannung erhöhen.
Und das die ganze Zeit, also sind delays "verboten"

Beim Schrittmotor ist das anders:
Hier kriegt der Motor die ganze Zeit volles Drehmoment.
Über die Frequenz und die Polung wird die Drehzahl eingestellt.


Binatone


PS: Reedkontakte verschleissen recht schnell und prellen, aber zum ausprobieren gehts...)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  PWM-Lüfter mit Adafruit Motor-Shield steuern? phischmi 9 465 22.07.2016 18:06
Letzter Beitrag: phischmi
  Arduino Uno+Motor Shield+Velleman Mustercode funktionieren nicht Dubidu 8 491 20.07.2016 19:05
Letzter Beitrag: Scheams
  DC Motor in beide Richtungen steuern WIMunios 5 648 24.03.2016 12:04
Letzter Beitrag: Bitklopfer
  Rampe ohne Delay DC-Motor de_flexus 3 1.944 22.11.2015 13:07
Letzter Beitrag: frank2000
  Hilfe Möchte meinen schritt Motor ohne mastermann7 4 1.028 09.06.2015 14:28
Letzter Beitrag: fraju
  Arduino Motor-Shield Cray-1 8 1.837 18.10.2014 17:57
Letzter Beitrag: tito-t
  pid dc motor regelung dreyer 5 2.784 26.02.2014 23:09
Letzter Beitrag: dreyer
  Code funktioniert nicht - Motor startet nicht, trotz das die Bedingungen erfüllt sind Daniel Zorn 16 4.358 06.02.2014 10:23
Letzter Beitrag: demokrit
  Elko für den Motor? Coleby 4 1.659 11.01.2014 12:30
Letzter Beitrag: lumi

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste