Forum: Mikrocontroller und Digitale Elektronik Arduino Motorshield bremst bei geringer geschwindigkeit


von LeiderNichtVerfügbar A. (Firma: Keine) (strgfn)


Lesenswert?

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?

von Falk B. (falk)


Lesenswert?

@ 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.

von LeiderNichtVerfügbar A. (Firma: Keine) (strgfn)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

@ 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.

von LeiderNichtVerfügbar A. (Firma: Keine) (strgfn)


Lesenswert?

Sorry, anbei ein Schaltplan des shields:

https://www.arduino.cc/en/uploads/Main/arduino_MotorShield_Rev3-schematic.pdf

https://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

: Bearbeitet durch User
von Falk B. (falk)


Lesenswert?

@ 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.

: Bearbeitet durch User
von LeiderNichtVerfügbar A. (Firma: Keine) (strgfn)


Lesenswert?

Ok, danke das du mich so geduldig ans ziel geführt hast, hoffe ich habe 
jetzt alles verstanden.

LG

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.