-
        

Ergebnis 1 bis 9 von 9

Thema: L298: 2 Motoren - bei unterschiedlicher Richtung heiß

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    28.04.2004
    Ort
    Himmelstadt
    Alter
    29
    Beiträge
    80

    L298: 2 Motoren - bei unterschiedlicher Richtung heiß

    Anzeige

    Hi,

    ich verwende zur Ansteuerung zweier Getriebemotoren den Motortreiber L298:
    http://www.reichelt.de/?;ACTION=7;LA...98%2523STM.pdf

    In dieser Beschaltung:
    http://www.roboternetz.de/bilder/sch...98getriebe.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.

    Der in Frage kommende Code:

    Konstanten:
    Code:
    #define MOT_B_DDR DDRB
    #define MOT_A_DDR DDRD
    
    #define MOT_PWM_DDR DDRB
    
    #define MOT_B_PORT PORTB
    #define MOT_A_PORT PORTD
    
    #define MOT_B_OCR OCR1B
    #define MOT_A_OCR OCR1A
    
    #define MOT_B_1 PB3
    #define MOT_B_2 PB2
    
    #define MOT_B_D1 DDB3
    #define MOT_B_D2 DDB2
    
    #define MOT_A_1 PD5
    #define MOT_A_2 PD4
    
    #define MOT_A_D1 DDD5
    #define MOT_A_D2 DDD4
    
    #define MAX_SPEED_PWM 1023
    PWM initialisieren:
    Code:
    void init_pwm()
    {
      cli();
    
      //Nicht invertierter 10 Bit PWM Timer 1
      //Zusätzlich (1 << COM1A1) für invertierten Timer
      TCCR1A |= (1 << COM1A1) | (1 << COM1B1) | (1 << COM1C1) | (1 << WGM11) | (1 << WGM10);
    
      //Timer auf CPU Takt stellen
      TCCR1B &= ~((1 << CS11) | (1 << CS12));
      TCCR1B |= (1 << CS10);
    
      //Alle Motoren ausschalten
      OCR1A = 0;
      OCR1B = 0;
    
      sei();
    }
    Motoren initialisieren:
    Code:
    void init_motoren()
    {
      MOT_A_DDR |= (1 << MOT_A_D1) | (1 << MOT_A_D2);
      MOT_B_DDR |= (1 << MOT_B_D1) | (1 << MOT_B_D2);
    
      //PWM Ports auf Ausgänge stellen
      MOT_PWM_DDR |= (1 << 5) | (1 << 6);
    
      init_pwm();
    }
    PWM-Funktionen:
    Code:
    void mot_a_pwm(uint16_t pwm)
    {
      cli();
      MOT_A_OCR = pwm;
      sei();
    }
    
    void mot_b_pwm(uint16_t pwm)
    {
      cli();
      MOT_B_OCR = pwm;
      sei();
    }
    Ansteuerung:
    Code:
    void mot_a_rechts(uint16_t pwm)
    {
      mot_a_pwm(pwm);
      MOT_A_PORT &= ~(1 << MOT_A_1);
      MOT_A_PORT |= (1 << MOT_A_2);
    }
    
    void mot_b_links(uint16_t pwm)
    {
      mot_b_pwm(pwm);
      MOT_B_PORT &= ~(1 << MOT_B_1);
      MOT_B_PORT |= (1 << MOT_B_2);
    }
    In main:
    Code:
    init_motoren();
    
    mot_a_rechts(MAX_SPEED_PWM);
    mot_b_links(MAX_SPEED_PWM);
    Hat jemand eine Idee an was das liegen könnte? Ich bin im Moment
    ziemlich ratlos.

    Vielen Dank

    Franz

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    20.05.2006
    Ort
    Lippe
    Alter
    48
    Beiträge
    524
    Hallo,

    die main fehlt. Du aktivierst die Interrupts. Was für ISRs hast du. Auf welche Variablen wird da zugegriffen, wie sind die deklariert? Im anderen Forum übrigens das gleiche. Um den Fehler einzukreisen, würde ich mir ein kleines Testprogramm schreiben. Ohne PWM, ohne Interrupts, etc. Erst nur die Ausgänge zum 298 statisch setzen und schauen was passiert.

    Gruß

    Jens

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    28.04.2004
    Ort
    Himmelstadt
    Alter
    29
    Beiträge
    80
    Hi,

    in der main steht jetzt nur noch folgendes:
    Code:
    int main() {
    	MOT_A_DDR |= (1 << MOT_A_D1) | (1 << MOT_A_D2);
    	MOT_B_DDR |= (1 << MOT_B_D1) | (1 << MOT_B_D2);
    
    	//PWM Ports auf Ausgänge stellen
    	MOT_PWM_DDR |= (1 << 5) | (1 << 6) | (1 << 7);
    
    	PORTB |= (1 << PB5) | (1 << PB6);
    
    	MOT_A_PORT &= ~(1 << MOT_A_1);
    	MOT_A_PORT |= (1 << MOT_A_2);
    
    	MOT_B_PORT &= ~(1 << MOT_B_1);
    	MOT_B_PORT |= (1 << MOT_B_2);
    	while(1);
    	return 0;
    }
    Das Problem bleibt das gleiche, scheint also nicht mit den Interrupts und PWM zu tun zu haben.

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    20.05.2006
    Ort
    Lippe
    Alter
    48
    Beiträge
    524
    Hallo,

    dann können wir uns ja der Hardware zuwenden. Vor der Schaltpananalys aber noch eine Frage? Haben die Motorengehäuse elektrisch Kontakt zueinander? Es gibt Motoren, bei denen ein Anschluß mit dem Gehäuse verbunden ist, bitte prüfe das einmal.

    Gruß

    Jens

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    28.04.2004
    Ort
    Himmelstadt
    Alter
    29
    Beiträge
    80
    Hi,

    es handelt sich um folgende Motoren: http://faulhaber.de/uploadpk/d_1624S_DFF.pdf

    Ja die Motorengehäuse sind leitend verbunden. Die Anschlüsse sind wie im RN-Wissen entstört (als Masse hab ich das Gehäuse verwendet).

    Der Roboter hat jedoch drei Antriebsmotoren (Omnidirektionalantrieb). Der dritte Motor ist über einen weiteren Motortreiber angeschlossen (L293, die beiden H-Brücken sind parallel geschalten).

    Hier gibt es nicht das Problem, dass wenn ich diesen Motor in eine andere Richtung wie die anderen beiden drehe (oder auch in die Gleiche) dass die Spannung abfällt.

    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?

    Danke

  6. #6
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Da ist ein sicherer Hinweis das da was nicht stimmt. Erst man nchmessen ob das Motorgehäuse vom Stromkreis getrennt ist. Da kann im Motor eine Verbindung sein, oder Entstörkondensatoren sind defekt.

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    20.05.2006
    Ort
    Lippe
    Alter
    48
    Beiträge
    524
    Hallo,

    Ja die Motorengehäuse sind leitend verbunden. Die Anschlüsse sind wie im RN-Wissen entstört (als Masse hab ich das Gehäuse verwendet).
    Hat einer der Motoranschlüsse eine Verbindung zum Gehäuse? Das ist die erste entscheidende Frage. Ist das nicht der Fall kannst du die Ghäuse verbinden und das Potential sonstwohin legen. Prüf das bitte mit einem Messgerät, oder entferne jegliche Verbindung zu den Gehäusen (auch untereinander) und prüfe das Verhalten erneut.

    Gruß
    Jens

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    28.04.2004
    Ort
    Himmelstadt
    Alter
    29
    Beiträge
    80
    Vielen Dank euch, ich denke das ist das Problem. Einer der Kontakte ist tatsächlich mit dem Gehäuse verbunden.
    Ich versuche gerade den Kontakt zwischen Motoren und Grundplatte aufzuheben und bin zuversichtlich, das es dann funzt

    Werde dann kurz berichten

    Ciao

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    28.04.2004
    Ort
    Himmelstadt
    Alter
    29
    Beiträge
    80
    Jopp, das war das Problem. Konnte zum Glück heute auch noch Plastikschrauben auftreiben und das Problem ist keines mehr

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •