Forum: Mikrocontroller und Digitale Elektronik L298: 2 Motoren - bei unterschiedlicher Richtung heiß


von Franz (Gast)


Lesenswert?

Hi,

ich verwende als Motortreiber den L298:
http://www.reichelt.de/?;ACTION=7;LA=6;OPEN=1;INDEX=0;FILENAME=A200%252FL298%2523STM.pdf;

In dieser Beschaltung:
http://www.roboternetz.de/bilder/schaltung298getriebe.gif

Die Motorspannung beträgt etwa 24V.

Wenn ich die Motoren einzeln ansteuere (also nur ein Motor läuft), 
funktioniert das Problemlos, links drehen, rechts drehen, ausschalten, 
bremsen, PWM. Auch wenn beide Motoren sich in die selbe Richtung drehen 
gibt es noch keine Probleme und der IC bleibt auch bei Belastung relativ 
kühl.

Wenn ich jedoch die beiden Motoren in unterschiedliche Richtungen drehen 
lasse, wird der IC selbst im Leerlauf schnell heiß. Die Motoren drehen 
sich auch nur sehr langsam und ich messe eine Motorspannung von etwa 4V.

Hat jemand eine Idee an was das liegen könnte? Ich bin im Moment 
ziemlich ratlos.

Vielen Dank

Franz

von STK500-Besitzer (Gast)


Lesenswert?

>Hat jemand eine Idee an was das liegen könnte? Ich bin im Moment
>ziemlich ratlos.

An der Software...

von Franz (Gast)


Lesenswert?

OK, dann hier der in Frage kommende Code:

Konstanten:
1
#define MOT_B_DDR DDRB
2
#define MOT_A_DDR DDRD
3
4
#define MOT_PWM_DDR DDRB
5
6
#define MOT_B_PORT PORTB
7
#define MOT_A_PORT PORTD
8
9
#define MOT_B_OCR OCR1B
10
#define MOT_A_OCR OCR1A
11
12
#define MOT_B_1 PB3
13
#define MOT_B_2 PB2
14
15
#define MOT_B_D1 DDB3
16
#define MOT_B_D2 DDB2
17
18
#define MOT_A_1 PD5
19
#define MOT_A_2 PD4
20
21
#define MOT_A_D1 DDD5
22
#define MOT_A_D2 DDD4
23
24
#define MAX_SPEED_PWM 1023

PWM initialisieren:
1
void init_pwm()
2
{
3
  cli();
4
5
  //Nicht invertierter 10 Bit PWM Timer 1
6
  //Zusätzlich (1 << COM1A1) für invertierten Timer
7
  TCCR1A |= (1 << COM1A1) | (1 << COM1B1) | (1 << COM1C1) | (1 << WGM11) | (1 << WGM10);
8
9
  //Timer auf CPU Takt stellen
10
  TCCR1B &= ~((1 << CS11) | (1 << CS12));
11
  TCCR1B |= (1 << CS10);
12
13
  //Alle Motoren ausschalten
14
  OCR1A = 0;
15
  OCR1B = 0;
16
17
  sei();
18
}

Motoren initialisieren:
1
void init_motoren()
2
{
3
  MOT_A_DDR |= (1 << MOT_A_D1) | (1 << MOT_A_D2);
4
  MOT_B_DDR |= (1 << MOT_B_D1) | (1 << MOT_B_D2);
5
6
  //PWM Ports auf Ausgänge stellen
7
  MOT_PWM_DDR |= (1 << 5) | (1 << 6);
8
9
  init_pwm();
10
}

PWM-Funktionen:
1
void mot_a_pwm(uint16_t pwm)
2
{
3
  cli();
4
  MOT_A_OCR = pwm;
5
  sei();
6
}
7
8
void mot_b_pwm(uint16_t pwm)
9
{
10
  cli();
11
  MOT_B_OCR = pwm;
12
  sei();
13
}

Ansteuerung:
1
void mot_a_rechts(uint16_t pwm)
2
{
3
  mot_a_pwm(pwm);
4
  MOT_A_PORT &= ~(1 << MOT_A_1);
5
  MOT_A_PORT |= (1 << MOT_A_2);
6
}
7
8
void mot_b_links(uint16_t pwm)
9
{
10
  mot_b_pwm(pwm);
11
  MOT_B_PORT &= ~(1 << MOT_B_1);
12
  MOT_B_PORT |= (1 << MOT_B_2);
13
}

In main:
1
init_motoren();
2
3
mot_a_rechts(MAX_SPEED_PWM);
4
mot_b_links(MAX_SPEED_PWM);

Ich kann keinerlei Fehler finden :-/

von Matthias L. (Gast)


Lesenswert?

Erstmal Schlatplan zeigen...

von Franz (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

den eigentlichen Schaltplan habe ich ja oben bereits gepostet (meiner 
ist lediglich ein Nachbau mit einem anderen Anschluss).
Das Board habe ich im Anhang kopiert. Die beiden Motoren A und B sind am 
unteren Motortreiber angeschlossen.
Die roten Linien sind Drahtbrücken. Die Anschlüsse zum µC müssen 
stimmen, da ja die Einzelsteuerung der Motoren klappt.

HTH

Franz

von Franz (Gast)


Lesenswert?

Eine Beobachtung habe ich gerade noch gemacht:
Die Motoren sind ja mit jeweils 2 Kabel am Motorboard angeschlossen, 
einer ist bei "voller Fahrt" mit 24V, der andere mit Masse beschaltet.
Wenn ich die beiden Motoren nun mit unterschiedlichen Richtungen drehen 
lasse, fällt ja die Spannung stark ab. Sobald ich aber bei dem einen 
Motor das Kabel mit 24V entferne, dreht sich der andere Motor wieder 
normal. Das gleiche wenn ich beim andern Motor das Massekabel entferne 
dreht sich ersterer Motor normal (jeweils nur das andere Kabel entfernen 
hilft nicht).
Komischerweise dreht sich jedoch der eine Motor, bei dem das Massekabel 
entfernt wird, trotzdem noch, jedoch nur sehr langsam. Ist das vllt ein 
Hinweis darauf dass da mit der Verkabelung was nicht stimmt?
Die Motoren sind so entstört:
http://www.roboternetz.de/wissen/images/3/3a/Entstoerung.gif
Als Masse habe ich das Gehäuse der Motoren benutzt. Über eine 
Alu-Grundplatte sind die Gehäuse leitend miteinander verbunden.
Ist das in Ordnung?

Übrigens habe ich auch schon versucht die PWM-Steuerung 
auszukommentieren und die Enable-Leitungen ständig auf Ausgang zu 
schalten, hat jedoch nichts geholfen.

Über weitere Hilfe würde ich mich sehr freuen

Franz

von Benedikt K. (benedikt)


Lesenswert?

Klemm die Motoren vom L298 ab, und messe ob zwischen den Anschlüssen der 
beiden Motoren eine Verbindung besteht. Falls ja, dann hast du dein 
Problem.

von Falk B. (falk)


Lesenswert?

@ Franz (Gast)

>Komischerweise dreht sich jedoch der eine Motor, bei dem das Massekabel
>entfernt wird, trotzdem noch, jedoch nur sehr langsam. Ist das vllt ein
>Hinweis darauf dass da mit der Verkabelung was nicht stimmt?

Auf jeden Fall!

>Als Masse habe ich das Gehäuse der Motoren benutzt. Über eine
>Alu-Grundplatte sind die Gehäuse leitend miteinander verbunden.
>Ist das in Ordnung?

NEIN! Du hast eine H-Brücke. Die Motoren dürfen KEINERLEI Massebzug 
haben, auch nicht untereinander. Die müssen beide vollkommen isoliert 
werden!

MFG
Falk

von Franz (Gast)


Lesenswert?

Oh in der Tat, da scheint was nicht zu passen. Danke für den Tipp, jetzt 
weiß ich wo ich nach dem Fehler zu suchen habe :)

von Matthias L. (Gast)


Lesenswert?

Ich wei ja nicht, was du für Motoren verwendest. Aber ich habe mal bei 
einigen Typen herausgefunden, dass die intern zwischen beiden 
Anschlüssen einen kleinen Entstörkondensator (zwischen den beiden 
Anschlüssen)) hatten. Den musste ich herauslöten, erst dann war ein 
ordentlichen "dimmen" per PWM möglich.

von STK500-Besitzer (Gast)


Lesenswert?

Der Kondensator ist zur Entstörung gedacht, damit dein Mikrocontroller 
(und was sich noch so in näherer Umgebung zu deinem Motor) nicht 
gelegentlich aufhängt und von vorn anfängt.

Ein Schaltplan für den kompletten Aufbau könnte helfen, den Fehler zu 
finden...

von Matthias L. (Gast)


Lesenswert?

Das stimmt schon, aber der Kondensator hat meine PWM vermurkst und mit 
der Induktivität des Motors einen Schwingkreis gebildet. Der Motor war 
ja unsprünglich nur dazu da, an echter Gleichspannung betrieben zu 
werden...

von Franz (Gast)


Lesenswert?

Danke für eure Hilfe. Das Problem lag eben daran, dass einer der beiden 
Motorenanschlüsse mit dem Gehäuse verbunden ist, naja und wenn die 
Gehäuse untereinander verbunden sind gibt es eben bei unterschiedlicher 
Polung einen Kurzschluss (anscheinend war die Verbindung nicht sehr gut, 
50 Ohm Widerstand etwa, drum ist nicht mher passiert).

Konnte zum Glück heute noch Plastikschrauben auftreiben, so haben die 
Motoren keinen leitenden Kontakt mehr zur Grundplatte und das Problem 
ist gelöst.

Eine erfolgreiche Woche

Franz

von Matthias L. (Gast)


Lesenswert?

>Konnte zum Glück heute noch Plastikschrauben auftreiben, so haben die
>Motoren keinen leitenden Kontakt mehr zur Grundplatte und das Problem
>ist gelöst.

Ich würde dir eher raten, die Verbindung Motoranschluss-Gehäuse zu 
trennen und das Gehäuse auf GND zu legen.

Ein Gehäuse, das mit ner PWM betrieben wird, zieht sehr hohe Ströme beim 
Schalten und bildet eine gute Antenne...

von Franz (Gast)


Lesenswert?

Oh man ich habe gedacht eine Leitung ist von Haus aus (durch den 
Hersteller) mit dem Gehäuse verbunden. Nach deinem Hinwe (lippy) habe 
ich gerade an einem ausgebauten Motor festgestellt, das das gar nicht 
der Fall ist. D.h. da ist nur irgendwo die Isolierung der Anschlüsse an 
den Motoren gerissen.

Nun ja, für die Präsentation morgen spielt das wohl keine Rolle :)

Grüße

Franz

von STK500-Besitzer (Gast)


Lesenswert?

>Nun ja, für die Präsentation morgen spielt das wohl keine Rolle :)


Ein zukünftier Messemuster-Bauer...
Viel Erfolg!

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.