Forum: Mikrocontroller und Digitale Elektronik NodeMCU Motor Shield - Drehrichtung lässt sich nicht ändern


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Philipp K. (phil)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich versuche aktuell ein NodeMCU Motor Shield mit einem ESP32 und zwei 
Motoren anzusteuern. Das Motor Shield besitzt einen L293D. Mein Problem 
ist die Drehrichtung der Motoren.
Das Vorwärtsfahren mit folgendem Code funktioniert einwandfrei:
1
void forward(void)
2
{
3
    analogWrite(5, 1023);
4
    analogWrite(4, 1023);
5
    digitalWrite(D3, HIGH);
6
    digitalWrite(D4, HIGH);
7
}

Wenn mich nicht alles täuscht und ich die Zuordnung der Pins richtig 
verstanden habe, müsste ich doch mit folgendem Code rückwärts fahren 
können:
1
void backward(void)
2
{
3
    analogWrite(5, 1023);
4
    analogWrite(4, 1023);
5
    digitalWrite(D3, LOW);
6
    digitalWrite(D4, LOW); 
7
}
So passiert allerdings gar nichts mehr und keiner der beiden Motoren 
bewegt sich. Wenn ich hingegen folgenden Code probiere, dreht immerhin 
Motor A in die richtige Richtung, also rückwärts. Motor B dreht sich 
vorwärts:
1
void backward(void)
2
{
3
    analogWrite(5, 1023);
4
    analogWrite(4, 1023);
5
    digitalWrite(D3, LOW);
6
    digitalWrite(D4, HIGH); 
7
}

Was genau mache ich hier falsch?

Viele Grüße
Philipp

von Stefan ⛄ F. (stefanus)


Bewertung
-1 lesenswert
nicht lesenswert
Warum benutzt du Schreibweisen gemischt?
4 und  5 versus  D3 (=0) und D4 (=2)?

Wo ist denn der Schaltplan von diesem Shield?

von Philipp K. (phil)


Bewertung
0 lesenswert
nicht lesenswert
Stefan U. schrieb:
> Warum benutzt du Schreibweisen gemischt?
> 4 und  5 versus  D3 (=0) und D4 (=2)?

Merkwürdigerweise kommt er damit nicht klar. Wenn ich D3 und D4 durch 0 
und 2 ersetze, passiert ebenfalls nichts mehr.

Einen richtigen Schaltplan habe ich nicht gefunden, aber hier steht, auf 
welchen GPIOs die Eingänge vom Motor Shield liegen: 
https://hackaday.io/project/8856-incubator-controller/log/29291-node-mcu-motor-shield

von Stefan ⛄ F. (stefanus)


Bewertung
-1 lesenswert
nicht lesenswert
Kein Schaltplan, das ist doch Käse!

Wenn diese Doku stimmt (was wir mangels Schaltplan nicht prüfen können), 
müsste es so funktionieren. Hast du eventuell vergessen, D3 und D4 als 
Ausgang zu konfigurieren?

Mach doch zur Kontrolle einfach LED's an diese Pins dran.

: Bearbeitet durch User
von Philipp K. (phil)


Bewertung
0 lesenswert
nicht lesenswert
Eigentlich habe ich das gemacht. Nur der Vollständigkeit halber mal der 
komplette Code. Sieht nicht schön aus und ist munter aus verschiedenen 
Code-Beispielen zusammenkopiert.
Aber die Ausgänge sind doch korrekt konfiguriert, oder?
1
#include <ESP8266WiFi.h>
2
#include <ESP8266WebServer.h>
3
// configure server
4
ESP8266WebServer server(80);
5
const char *form = "<center><form action='/'>"
6
"<button name='dir' type='submit' value='4'>Forward</button><br>"
7
"<button name='dir' type='submit' value='1'>Left</button> "
8
"<button name='dir' type='submit' value='2'>Right</button><br>"
9
"<button name='dir' type='submit' value='3'>Backward</button><p>"
10
"<button name='dir' type='submit' value='5'>Stop</button>"
11
"</form></center>";
12
void stop(void)
13
{
14
    analogWrite(5, 0);
15
    analogWrite(4, 0);
16
}
17
// Macht: Links
18
void left(void)
19
{
20
    analogWrite(5, 1023);
21
    digitalWrite(0, HIGH);
22
}
23
void backward(void)
24
{
25
    analogWrite(5, 1023);
26
    analogWrite(4, 1023);
27
    digitalWrite(D3, LOW);
28
    digitalWrite(D4, LOW); 
29
}
30
// Forward klappt
31
void forward(void)
32
{
33
    analogWrite(5, 1023);
34
    analogWrite(4, 1023);
35
    digitalWrite(D3, HIGH);
36
    digitalWrite(D4, HIGH);
37
}
38
void right(void)
39
{
40
    analogWrite(5, 1023);
41
    analogWrite(4, 1023);
42
    digitalWrite(0, HIGH);
43
    digitalWrite(2, LOW);
44
}
45
void handle_form()
46
{
47
    // only move if we submitted the form
48
    if (server.arg("dir"))
49
    {
50
        // get the value of request argument "dir"
51
        int direction = server.arg("dir").toInt();
52
        // chose direction
53
        switch (direction)
54
        {
55
            case 1:
56
                left();
57
                break;
58
            case 2:
59
                right();
60
                break;
61
            case 3:
62
                backward();
63
                break;
64
            case 4:
65
                forward();
66
                break;
67
            case 5:
68
                stop();
69
                break;
70
        }
71
        // move for 300ms, gives chip time to update wifi also
72
        delay(300);
73
    }
74
    
75
    // in all cases send the response
76
    server.send(200, "text/html", form);
77
}
78
void setup()
79
{
80
    pinMode(5, OUTPUT); // A D1 PWM control 0 - 1023
81
    pinMode(4, OUTPUT); // B D2 PWM control 0 - 1023
82
    pinMode(D3, OUTPUT); // A D3 Direction 0/1
83
    pinMode(D4, OUTPUT); // B D4 Direction 0/1
84
85
    // connect to wifi network
86
    WiFi.begin("FRITZ!Box 6490 Cable-2", "XXX");
87
    // static ip, gateway, netmask
88
    WiFi.config(IPAddress(192,168,8,51), IPAddress(192,168,8,1), IPAddress(255,255,255,0));
89
    // connect
90
    while (WiFi.status() != WL_CONNECTED)
91
    {
92
        delay(200);
93
    }
94
  
95
    // set up the callback for http server
96
    server.on("/", handle_form);
97
    // start the webserver
98
    server.begin();
99
    pinMode(5, OUTPUT); // 1,2EN aka D1 pwm left
100
    pinMode(4, OUTPUT); // 3,4EN aka D2 pwm right
101
    pinMode(0, OUTPUT); // 1A,2A aka D3
102
    pinMode(2, OUTPUT); // 3A,4A aka D4
103
}
104
void loop()
105
{
106
    // check for client connections
107
    server.handleClient();
108
}

: Bearbeitet durch User
von Stefan ⛄ F. (stefanus)


Bewertung
-1 lesenswert
nicht lesenswert
Mach mal LED's an die Pins. Dann siehst du, welches der beiden Boards 
nicht tut, was es soll.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.