PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : L293d funktioniert nicht



Andri
26.04.2014, 23:10
Hallo,

ich habe nach diesem Video (https://www.youtube.com/watch?v=5nDaHJqruq0) die Schaltung aufgebaut. Da ich einen Mega benutzte,hab ich statt den Digital Pin 8 den Pin 22 genommen. Was ich jetzt nicht verstehe ist,wieso der eine Motor zwei PWM Pins hat und der andere nur einen? Ich habe nichtsdestotrotz die Schaltung so aufgebaut wie im Video und das Programm (https://www.dropbox.com/sh/d6imusx6ohlw6xh/EXbydhVnQW) ausgeführt(natürlich hab ich die 8 mit einer 22 ersetzt). Keiner von den Motoren hat eine Reaktion gezeigt,dann hab ich die Spannung an den Motoren gemessen und da war eindeutig Spannung vorhanden!! Ich bin komplett verwirrt bitte hilft mir!

Danke

Valen
27.04.2014, 00:46
Ich hab zwar die Arduino Code von diese Tutorial nicht gefunden, deshalb kann ich mich irren. Aber ich denke das ich es trotzdem verstehe.

Die PWM-pins steuern nicht die Kraft der Motoren, aber nur die Richtung. Pin 8 und 9 für Motor 2 und Pin 10 und 11 für Motor 1 (von den Uno). Die Schalt-zustanden den man bekommst sind: Links, Rechts und 2 mal Freilauf. Die 3 PWM-pins der Uno (9,10 und 11) können ein PWM-signal abgeben, aber in diesen Fall werden sie nur als einfache Digitale Ausgang verwendet.

Er sagt auch am ende das man den Geschwindigkeit regeln kann mit PWM Signalen an den beiden Enable-pins (1 und 9 von den L293D). In seinem Tutorial sinds sie einfach direkt an 5 volt geschaltet. Er sagt nichts über PWM-reglung von den Richtung-Eingangen der L293D.

Peter(TOO)
27.04.2014, 05:49
Hallo,

Hier mal das Datenblatt:
http://www.st.com/st-web-ui/static/active/en/resource/technical/document/datasheet/CD00000059.pdf

Im Prinzip sind da 4 unabhängige Verstärker drin, immer zwei haben einen gemeinsamen Enable-Eingang.

Die Pinnummern auf Seite 1 sind für den L293DD, wo sich die Pins beim L293D befinden sieht man auf Seite 2.

Welche Spannung hast du gemessen?
Du musst die Motorspannung nicht gegen Masse messen sondern zwischen den Pins 3 & 6, bzw. 13 & 14!

Wenn beide Anschlüsse des Motors z.B. auf +5V liegen ist die Differenz 0 und der Motor bewegt sich nicht.
Du musst den L293 also so ansteuern, dass ein Ausgang auf 0V liegt und der andere auf +5V, dann dreht der Motor.

Testen kannst du ganze erst mal ganz ohne Mega.
Einfach z.B. Pin 2 mit GND verbinden und Pin 7 mit +5V, dann muss sich der Motor drehen oder du hast einen Fehler im Aufbau.
Wenn du die Spannungen an Pin 2 und 7 vertauscht, dreht der Motor in die andere Richtung.

Wenn Pin 1 auf GND liegt, passiert gar nix, egal was du mit den Pins 2 und 7 machst.
Sieht man auf Seite 4 oben Links.

MfG Peter(TOO)

Andri
27.04.2014, 10:00
Also ich habe die Pins 10 und 15,bzw 2 und 7, mit 5V und GND verbunden und es ist nichts passiert. Danach habe ich alles nochmal neu gesteckt,aber das Resultat blieb das selbe. Hier Bilder von meiner Schaltung:2807128072.

Du musst die Motorspannung nicht gegen Masse messen sondern zwischen den Pins 3 & 6, bzw. 13 & 14!

Widerspricht sich das nicht? 13 und 14 sind die GND Pins?

Die 3 PWM-pins der Uno (9,10 und 11) können ein PWM-signal abgeben, aber in diesen Fall werden sie nur als einfache Digitale Ausgang verwendet.
Könnte man dann nicht direkt alle 4 Pins zu den Digital oder PWM Pins verbinden? Also das alle 4 PWM ODER Digital Pins sind.

Valen
27.04.2014, 13:50
Widerspricht sich das nicht? 13 und 14 sind die GND Pins?Beide Herren sollen besser in das Datenblatt schauen. Die Motor-Anschlusse der L293D (powerdip Gehäuse) sind 3, 6, 11 und 14. Nicht 13. Die GND Anschlusse sind 4,5 und 12, 13.


Könnte man dann nicht direkt alle 4 Pins zu den Digital oder PWM Pins verbinden? Also das alle 4 PWM ODER Digital Pins sind.Verbinden kann man. Aber PWM-signalen aus den Arduino zu den L293D Eingangen (womit den Richtung eingestellt wird) senden hat kein Sinn. Es wurde nicht Funktionieren. Die Wahrheitstabelle von den einzelne Kanälen (die 2 Verstärker auf den selbe Seite der Chip) sollte kombiniert werden. Dann kann man den Motor Polarität raus finden auf Basis der 2 Steuerleitungen und den Enable eingang. Ein PWM signal auf den Richtungseingangen wurde den Motorpolarität sehr oft in einer Sekunde wechseln. Dein Motor wurde nur piepsen, und nicht (oder kaum) drehen. Die verwendete Arduino Pins sollte als einfache Digital Ausgang verwendet werden. (Stabil bleiben biss du den Richtung ändern möchtest)

Andri
27.04.2014, 17:22
Dann hab ich mich beim Datenblatt verlesen,sorry. Gut,dann keine 4 Digital Pins,könnten wir auf mein eigentliches Problem wieder zurückkommen?

Edit: Die Spannung zwischen den Pins 2 und 7 beträgt 4,6V und zwischen 10 und 15 fast 5V(4,9). An den Motoren kommt auch Strom an ich hab an den Pins 3 und 6 gemessen. Das ist doch total unlogisch,wenn da Strom ankommt,warum drehen die sich nicht? Die Motoren funktionieren ich habe die an dem Arduino(5V und GND) getestet.

RoboHolIC
27.04.2014, 21:23
An den Motoren kommt auch Strom an ich hab an den Pins 3 und 6 gemessen.
Also - entweder kommt schlechter Strom aus dem L293 raus oder er kommt nicht am Motor an. Hast du die Spannung auch an den Motoranschlüssen messen können oder ist es vielleicht eine Fehlmessung: hochohmig messbare Spannung aufgrund von Leckströmen im IC ?

Andri
28.04.2014, 16:06
ES FUNKTIONIERT!! Als ich die Spannung nochmal messen wollte habe ich rutinemäßig alles angesteckt und nochmal so getestet und siehe da es ging!! Aber leider nur ein Motor. Als ich alles mögliche getestet habe,bin ich zu dem Entschluss gekommen,dass es nur an der Verbindung zum Arduino liegen kann. Nach einer Weile ist mir noch Mal meine Hypothese in den Sinn gekommen,dass es keinen Sinn macht zwei Verschiedene Ansteuerungen zu benutzten für die selben Motoren die das selbe tun sollen,also habe ich alle 4 Pins als PWM Pins angeschlossen und siehe da sie haben sich gedreht.
Aber ich fürchte wir sind leider noch nicht ganz fertig. Die Motoren drehen sich nur mit einem kleinen "Schubser" und sobald die Räder einen Untergrund berühren bleiben sie stehen. Außerdem dreht sich ein Motor stärker als der andere. Kann man die ganzen Probleme mit einer zweiten Spannungsversorgung für die Motoren alleine lösen?

RoboHolIC
28.04.2014, 17:20
Wenn sich die Motoren drehen, dabei aber völlig kraftlos sind, dann funktioniert es wohl doch nicht.
Welche PWM-Werte werden ausgegeben und an welchen Eingängen des Treibers werden sie eingespeist? Enthält deine Hypothese vielleicht auch die Befeuerung der Richtungseingänge mit PWM?

Andri
28.04.2014, 17:45
Wenn sich die Motoren drehen, dabei aber völlig kraftlos sind, dann funktioniert es wohl doch nicht.
Es ist schon Mal besser,als wenn sich die Motoren überhaupt nicht drehen würden,auch ohne Schubser. Und sobald man den einen Motor einen Schubs gegeben(manchmal auch ohne) hat,hatte der schon ordentlich Kraft.

Welche PWM-Werte werden ausgegeben
Wenn du damit das Programm meinst:



const int Motor1Pin1 = 8;
const int Motor1Pin2 = 9;
const int Motor2Pin1 = 10;
const int Motor2Pin2 = 11;

void setup() {
**pinMode(Motor1Pin1, OUTPUT);
**pinMode(Motor1Pin2, OUTPUT);
**pinMode(Motor2Pin1, OUTPUT);
**pinMode(Motor2Pin2, OUTPUT);
}


void loop() {
**GoForward();******
}

void GoForward(){
**digitalWrite(Motor1Pin2, LOW);
**digitalWrite(Motor1Pin1, HIGH);
**digitalWrite(Motor2Pin2, LOW);
**digitalWrite(Motor2Pin1, HIGH);
}


Sie werden in den Eingängen 2/7,bzw. 15,10 eingespeist.

Enthält deine Hypothese vielleicht auch die Befeuerung der Richtungseingänge mit PWM?
Was meinst du damit? Etwa,dass ich die Richtungseingänge mit den PWM Signalen geschrottet hab?

RoboHolIC
28.04.2014, 19:06
Die Motoren drehen sich nur mit einem kleinen "Schubser" und sobald die Räder einen Untergrund berühren bleiben sie stehen.

Es ist schon Mal besser,als wenn sich die Motoren überhaupt nicht drehen würden,auch ohne Schubser. Und sobald man den einen Motor einen Schubs gegeben(manchmal auch ohne) hat,hatte der schon ordentlich Kraft.

Ich verstehe jetzt nur noch Bahnhof.


Sie werden in den Eingängen 2/7,bzw. 15,10 eingespeist.
Das ist grundsätzlich in Ordnung. Der jeweilige Motor kriegt immer dann Strom ab, wenn die beiden Eingangspaare Input1 / Input2 sowie Input3 / Input4 mit jeweils gegensätzlichen Pegeln angesteuert werden. Wenn du beide Eingänge gleichzeitig mit PWM befeuerst, dann ist es nicht mehr so ganz einfach vorherzusagen, was passieren wird.

Was meinst du damit? Etwa,dass ich die Richtungseingänge mit den PWM Signalen geschrottet hab?
Nein, nein, so lange die Signalpegel im erlaubten Bereich sind, kann man die nicht durch die PWM beschädigen. Wohl aber ist eine Überlastung der Treiberstufen denkbar, wenn beständig Strom in die eine Richtung durch den Motor angeschoben wird und mit der nächsten Umpolung der Treiber Bremsstrom durch den Motor treibt, der höher werden kann als der Blockierstrom.

Andri
28.04.2014, 19:46
Der jeweilige Motor kriegt immer dann Strom ab, wenn die beiden Eingangspaare Input1 / Input2 sowie Input3 / Input4 mit jeweils gegensätzlichen Pegeln angesteuert werden. Wenn du beide Eingänge gleichzeitig mit PWM befeuerst, dann ist es nicht mehr so ganz einfach vorherzusagen, was passieren wird.

Also wenn ich das richtig verstehe,kann man nur jeweils einen Motor ansteuern? Das ist doch total unpraktisch,wenn die Motoren sich nicht gleichzeitig drehen können. Dementsprechend ist ja auch mein Programm falsch.

Ich meinte mit dem "Schubsen",dass man die Räder ein bisschen "andreht". Nach einem kleinem Dreher drehen die sich von alleine. Sobald die Räder den Boden berühren,drehen sie sich nicht mehr. Sie kommen also zum totale Stillstand,was ein bisschen blöd ist,weil die Räder einen kleinen Roboter vom Boden bewegen sollen.

oderlachs
28.04.2014, 20:30
Hallo ,
Hier ein LINK zu einem Beispiel (http://www.arduino-tutorial.de/2010/06/motorsteuerung-mit-einem-h-bridge-ic/), die PWM Ports musst Du nur dem ArduinoMega anpassen...

..das Anschubsen : die Motore sind zu stark fü den L293D...nimm einen stärkeren Treiber oder andere Motore...

Gruss
Gerhard

Andri
28.04.2014, 21:50
Irgendwie verwirrt mich die Schaltung,da ich nicht weiß wie man die Software dazu gestalten soll. Werden die PWM Pins an den Enable Eingängen dauerhaft auf high gestellt? Wieso die vielen PWM Anschlüssen?
Danke für den Hinweis mit dem stärkeren Treiber!

Peter(TOO)
28.04.2014, 22:03
Hallo Gerhard,

Hallo ,
Hier ein LINK zu einem Beispiel (http://www.arduino-tutorial.de/2010/06/motorsteuerung-mit-einem-h-bridge-ic/), die PWM Ports musst Du nur dem ArduinoMega anpassen...
Der Aufbau ist Fehlerhaft!

Es ist nur ein GND Pin angeschlossen.
Das funktioniert im Prinzip, da die 4 GND Pins intern verbunden sind. Allerdings hat das IC 4 GND Pins, weil ein einzelner Pin den maximalen Strom nicht verkraftet, dann kann der interne Anschluss wegbrennen ...


MfG Peter(TOO)

Rabenauge
28.04.2014, 22:17
Das einzige was an meinem Laptop angeschlossen ist,ist der Mega sonst nichts!! Der Mega ist nur für die Stromversorgung vom L293D zuständig!!

So liest sich das an anderer Stelle..sag jetzt ja nicht, dass du zwei Motoren, den Treiber UND den Mega aus nem lausigen Laptop-USB mit Strom versorgen willst??

Peter(TOO)
28.04.2014, 22:17
Hallo,

Irgendwie verwirrt mich die Schaltung,da ich nicht weiß wie man die Software dazu gestalten soll. Werden die PWM Pins an den Enable Eingängen dauerhaft auf high gestellt?

Mit Input 1 und Input 2, bzw 3 und 4, bestimmst du die Drehrichtung.
Wie schon geschrieben wurde, wenn beide Pins den selben Pegel haben, steht der Motor, bzw. er wird kurzgeschlossen.

Wenn du nun da PWM-Signal an diesen Pis anlegst, wird der Motor entweder in kurzer folge Vor- und Rückwärts betrieben oder Vorwärts und dann kurzgeschlossem, was eine Schnellbremsung erzeugt.

Der Enable Eingang schaltet den Ausgang in einen hochohmigen Zustand, d.h. Der Motor kann in diesem Zustand fei drehen.

Mit In1 und In2 legst du die Drehrichtung fest und Startest oder Stoppst den Motor.
Mit dem Enable kannst du dann, durch anlegen des PWM-Signals, die Drehzahl regeln.

BZW: Dreh mal deinen Motor mit freien Anschlüssen von Hand durch. Dann schliesst du die Motoranschlüsse kurz und drehst nochmals mit der Hand.
Je schneller du drehst umso deutlicher merkst du de Unterschied.

MfG Peter(TOO)

oberallgeier
28.04.2014, 22:35
Irgendwie verwirrt mich die Schaltung,da ich nicht weiß wie man die Software dazu gestalten soll ...Hier - klick mal - gibts ne Schaltung (http://www.rn-wissen.de/index.php/Getriebemotoren_Ansteuerung#Ansteuerung_mit_Treibe r_IC_L293_D), dazu eine Wahrheitstabelle (welche Pinkonfiguration gibt welchen Effekt) und ein paar Hinweise, wie das Ganze softwaretechnisch erledigt wird. Das hat zwar schon Peter alles sauber erklärt, aber hier stehts eben nochmal (http://www.rn-wissen.de/index.php/Getriebemotoren_Ansteuerung#Ansteuerung_mit_Treibe r_IC_L293_D) ;-)

Software habe ich hier und da schon mal präsentiert aber das ist alles in C und Du brauchst ja den ARduino-Slang.

Andri
29.04.2014, 22:03
Ich habe nun eine 9V Batterie dazugeschaltet,aber der Saft reicht immer noch nur für einen Motor,und das auch nur mit einem kleinem "Dreher".
Ich denke,das hat nun keinen Zweck mehr,ich versuche es mit einem stärkeren Treiber. Eventuell probiere ich schwächere Motoren aus,aber die sind zu schwach für mein Unterfangen.
Danke Trotzdem für die Hilfe!

Peter(TOO)
29.04.2014, 22:41
Hallo,

Ich vermute dein Problem ist nicht dein Treiber sondern der 9V-Block. Der kann nur ein paar 100mA liefern.

Miss mal die Spannung am 9V-Block. Einmal mit Motor Aus und dann mit Motor Ein.

MfG Peter(TOO)

oderlachs
30.04.2014, 09:33
Ja interessant wären mal die wahren Motordaten, also die im Betrieb gemessenen, an reiner Spannung. Oft hat man ja ziemliche "Gummidaten" Ub 3...9V, usw.. usw..Strom und Umdrehungszahl kann man sich dann aus einem Lostopf fischen ;).

Ich verwende eine L293 Schaltung nur im Testbetrieb mit Motoren die bei 6V 50mA brauchen...damit kann ich dann das Programmverhalten meiner Code Testen, das ist aber auch alles was ich damit mache. das AdafruitMotoshield ist bei mir schon tief unten in der Kiste gelanded.
Anstatt 9V Blocks habe ich mir verschiedene Batteriefächer für AA und AAA als mobiles "Kraftwerk" gemacht, die sind dann auch zum Probieren. Am Basteltisch ist natürlich alles Netzteilversorgt, denn USB an der Programmierbuchse ist ja auch nur für ein Blink-Demo nutzbar beim Arduino.. ;)

Gerhard

Rabenauge
30.04.2014, 12:10
Herrje-der Kerl...
Andri nimms mir nicht übel aber: hast du auch nur die allergeringste Ahnung von dem, was du tust?
Besorg dir gefälligst mal ein Netzteil _oder_ wenigstens vernünftige Batterien. Mit nem 9V-Block kannst Pager-Motörchen drehn lassen aber viel mehr nicht!
Hast schonmal irgendein elektrisches Spielzeug gesehen, in dem sowas drin war (mit Motoren, mein ich..)-macht kein Mensch und das aus gutem Grund.
Spätestens, wenn dann einer der Motoren doch dreht, solltest du drauf kommen, dass es an den Treibern ja wohl nicht liegt. Auch stärkere können aus "keinem Strom" raus nix treiben...