Hallo leute, ich hätte eine Frage zu meinem Arduino motorshield,
Habe ein komplizierteres Programm geschrieben in dem es vorkam das bei
das Motorschield den DC Motor langsamer fahren lässt, komischerweise hat
es dabei immer gebremst...
habe also ein neues Projekt erstellt und in der loop einfach folgende
Zeilen geschrieben:
digitalWrite(9, LOW); //Deaktiviert de Bremse
digitalWrite(12, HIGH); // Stellt Richtung auf Vorwärts
analogWrite(3, 10); //Dreht den Motor langsam
und siehe da, der Motor dreht sich natürlich sehr langsam, aber er
bremst auch,
wenn er sich nach rechts bewegt leuchtet normal nur die LED am Ausgang
A, bei links B...
Wenn ich die bremse mit HIGH aktiviere Leuchten beide, also A und B
wenn ich ihn jetzt aber wie oben beschrieben sehr langsam drehen lasse
Leuchtet A natürlich sehr dunkel...aber B leuchtet auch, er bremst
also... Je langsamer desto heller leuchtet Ausgang B, bremst also
stärker...
Ist das normal? also das er für geringere Geschwindigkeiten die Bremse
hinzuzieht oder stimmt hier irgendetwas nicht?
@ LeiderNichtVerfügbar AuchNicht (Firma: Keine) (strgfn)
>Habe ein komplizierteres Programm geschrieben in dem es vorkam das bei>das Motorschield den DC Motor langsamer fahren lässt, komischerweise hat>es dabei immer gebremst...
???
Wie meinst du das? Wenn der Motor langsam dreht, dann bremst er nicht.
Das kann er nur, wenn er schnell dreht und dann per Ansteuerung
langsamer drehen soll. Das geht aber nur mit einem Halb- oder
Vollbrückentreiber.
>digitalWrite(9, LOW); //Deaktiviert de Bremse
Was für eine Bremse? Wo geht das Pin hin? Wie sieht die Endstufe genau
aus?
>digitalWrite(12, HIGH); // Stellt Richtung auf Vorwärts>analogWrite(3, 10); //Dreht den Motor langsam>und siehe da, der Motor dreht sich natürlich sehr langsam, aber er>bremst auch,>wenn er sich nach rechts bewegt leuchtet normal nur die LED am Ausgang>A, bei links B...>Wenn ich die bremse mit HIGH aktiviere Leuchten beide, also A und B
Schaltplan?
>wenn ich ihn jetzt aber wie oben beschrieben sehr langsam drehen lasse>Leuchtet A natürlich sehr dunkel...aber B leuchtet auch, er bremst>also... Je langsamer desto heller leuchtet Ausgang B, bremst also>stärker...
Du schließt also aus leuchtenden LEDs, der Motor würde bremsen?
>Ist das normal? also das er für geringere Geschwindigkeiten die Bremse>hinzuzieht oder stimmt hier irgendetwas nicht?
Ja, dein Interpretation der Lage. Ich fürchte, du hast da was falsch
verstanden oder es ist falsch in einer Doku beschrieben.
Vielleicht ist es etwas komisch beschrieben ja...
Das Arduino Motorshield wird auf das Arduino gesteckt...
Schaltpläne gibt es dabei im Internet wobei man nichts selbst verkabeln
muss etc.
digitalWrite(9, LOW); //Deaktiviert de Bremse
an beide Eingänge des Motors wird eine Spannung angelegt, also auf A und
B.
Die LED's vor A und B geben dabei an (wenn ich mich nicht irre) auf
welchem Kanal eine Spannung ausgegeben wird.
Leuchtet also A, wird eine spannung auf Kanal A ausgegeben und der Motor
dreht sich nach rechts.
Die geschieht mit:
digitalWrite(12, HIGH); // Stellt Richtung auf Vorwärts
analogWrite(3, Wert von 0 - 255); //Dreht den Motor langsam
(0 - 255) gibt dabei die Geschwindigkeit bzw PWM an.
Stelle ich jetzt den Motor auf Vorwärts und gebe bei analogWrite nur 10
an, leuchtet die LED bei A logischerweise nur dunkel, da geringer
DutyCycle.
Die LED bei B leuchtet jedoch auch was bedeutet es wird etwas bei B
ausgegeben -> ergo er bremst ganz leicht.
Bei höheren werten zb 40 leuchtet bei B nichts mehr.
So hätte ich das erklärt bzw. verstanden.
Meine Frage ist nun: stimmt da etwas nicht oder ist das normal das der B
Ausgang auch etwas ausgibt wenn ich den Motor langsamer drehe.
@ LeiderNichtVerfügbar AuchNicht (Firma: Keine) (strgfn)
>Das Arduino Motorshield wird auf das Arduino gesteckt...
Ach was?
>Schaltpläne gibt es dabei im Internet
Schön, daß es die DORT gibt. Glaubst du, daß WIR die uns raussuchen, wo
doch DU ein Problem hast? Kleiner Tip: Netiquette.
>digitalWrite(9, LOW); //Deaktiviert de Bremse
Das halte ich für einen Irrtum. Das klingt eher nach den Enable
Eingängen. Ein Schaltplan wäre JETZT Gold wert!
>an beide Eingänge des Motors wird eine Spannung angelegt, also auf A und>B.
Das schon eher. Der Motor wird von einer klassichen H-Brücke
angesteuert.
>Die LED's vor A und B geben dabei an (wenn ich mich nicht irre) auf>welchem Kanal eine Spannung ausgegeben wird.>Leuchtet also A, wird eine spannung auf Kanal A ausgegeben und der Motor>dreht sich nach rechts.>digitalWrite(12, HIGH); // Stellt Richtung auf Vorwärts>analogWrite(3, Wert von 0 - 255); //Dreht den Motor langsam>(0 - 255) gibt dabei die Geschwindigkeit bzw PWM an.
Schon klar.
>Stelle ich jetzt den Motor auf Vorwärts und gebe bei analogWrite nur 10>an, leuchtet die LED bei A logischerweise nur dunkel, da geringer>DutyCycle.
Ja.
>Die LED bei B leuchtet jedoch auch was bedeutet es wird etwas bei B>ausgegeben -> ergo er bremst ganz leicht.
Nö, das halte ich für eine Fehlinterpretation.
>Bei höheren werten zb 40 leuchtet bei B nichts mehr.>Meine Frage ist nun: stimmt da etwas nicht oder ist das normal das der B>Ausgang auch etwas ausgibt wenn ich den Motor langsamer drehe.
Ich wiederhole mich. Schaltplan her oder es geht nicht weiter.
Sorry, anbei ein Schaltplan des shields:
https://www.arduino.cc/en/uploads/Main/arduino_MotorShield_Rev3-schematic.pdfhttps://www.arduino.cc/en/Main/ArduinoMotorShieldR3
Laut arduino webseite ist der zuständige PIN für die Bremse D9.
>an beide Eingänge des Motors wird eine Spannung angelegt, also auf A und>B.>Das schon eher. Der Motor wird von einer klassichen H-Brücke>angesteuert.
aber im nächsten satz schreibst du:
>Die LED bei B leuchtet jedoch auch was bedeutet es wird etwas bei B>ausgegeben -> ergo er bremst ganz leicht.>Nö, das halte ich für eine Fehlinterpretation.
bremst er nun wenn beide Ausgänge auf "HIGH" sind oder nicht?
Ich weiß nur das wenn beide Ausgänge auf HIGH sind bewege ich den Motor
keinen Milimeter.
Und da bei langsamen Vorwärtslauf beide auf High sind wie ich an den
LED's erkenne müsste er doch bremsen obwohl ich pin D9 nie auf High
setze( und ihm damit sage er soll bremsen)...
Hoffe so ist es verständlicher bzw. klarer formuliert.
LG
@ LeiderNichtVerfügbar AuchNicht (Firma: Keine) (strgfn)
>Sorry, anbei ein Schaltplan des shields:>https://www.arduino.cc/en/uploads/Main/arduino_Mot...
Hm, die üblichen Murksschaltpläne aus der Arduinowelt mit 1001 Labels
:-(
Ok, ist nicht deine Schuld.
>https://www.arduino.cc/en/Main/ArduinoMotorShieldR3>Laut arduino webseite ist der zuständige PIN für die Bremse D9.
Die Schaltung funktioniert so.
Jeder Zweig der H-Brücke hat einen Steuereingang am IC1. Das sind IN1
und IN2. DIRA geht direkt an den IC1, DIRA# über IC2. Das ist ein 4fach
XNOR, das ist ein gesteuerter Inverter. Sprich, wenn BRAKE_A LOW ist,
wird DIRA invertiert an IN2 gegeben. Dann dreht der Motor links oder
rechts rum, abhängig von DIRA. Ist BRAKE_A aber HIGH, dann wird DIRA
NICHT invertiert an IN2 gegeben, IN1=IN2=DIRA. Damit sind beide
Motoranschlüsse auf der gleichen SPANNUNG, 0V oder VMOT. Damit dreht er
sich nicht. Er bremst, weil er aktiv durch die H-Brücke kurzgeschlossen
wird. Somit passt das alles, auch mit der Beschreibung BRAKE ;-)
>bremst er nun wenn beide Ausgänge auf "HIGH" sind oder nicht?
Ja, er bremst.
>Ich weiß nur das wenn beide Ausgänge auf HIGH sind bewege ich den Motor>keinen Milimeter.
Du meinst wenn du ihn per Hand drehen willst?
>Und da bei langsamen Vorwärtslauf beide auf High sind wie ich an den>LED's erkenne
Ja, dort beginnt dein Irrtum! Dort ist der Shield Murks. Man schließt
keine Status-LEDs an Leistungsausgänge an! Denn wenn beide
Treiberausgänge OUT1/2 auf HIGH liegen, leuchten die LEDs, aber der
Motor ist kurzgeschlossen.
> müsste er doch bremsen obwohl ich pin D9 nie auf High>setze( und ihm damit sage er soll bremsen)...
Nein, er bremst nicht, die LED-Anzeige ist Unsinn. Die gehört an die
Logikeingänge! Den so wie sie angeschlossen sind, zeigen die LEDs die
Spannung der einzelnen Leistungsausgänge an.
LED1 LED2 Motor
OFF OFF bremsen
OFF ON links
ON OFF rechts
ON ON bremsen
Das Ganze noch mit PWM garniert. Denn bei der PWM am ENA Pin werden die
Motorausgänge kurzzeitig beide HIGH, auch bei normalem Betrieb
links/rechts. Das ist es, was du siehst.
Beweis. Schalte mal DIR im 1s Takt um, wenn BRAKE=LOW ist und PWM=100%.
Dann schalten zwar die LEDs, aber der Motor bremst die ganze Zeit.
1
digitalWrite(9,HIGH);// Aktiviert die Bremse
2
analogWrite(3,255);// Full speed
3
4
while(1){
5
digitalWrite(12,HIGH);// Stellt Richtung auf Vorwärts
6
delay(1000);
7
digitalWrite(12,LOW);// Stellt Richtung auf Rückwärts
8
delay(1000);
9
}
>Hoffe so ist es verständlicher bzw. klarer formuliert.
Ein wenig.
Summa sumarum. Der Motor bremst nur dann, wenn BRAKE_A auf LOW ist, egal
was die LEDs vorgaukeln.