- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 8 von 8

Thema: c-PWM Problem

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    27.09.2009
    Alter
    29
    Beiträge
    661

    c-PWM Problem

    Anzeige

    Praxistest und DIY Projekte
    Liebes Forum,

    ich hab mir mal zeit genommen meinem Pro-Bot 128 in C zu programmieren
    ich versuche mich grade an der Motorsteuerung aber irgentwie funkts nicht.
    ich kann zwar die Geschwindigkeiten regeln aber die Motoren drehen in
    gegengesetzte Richtungen! Ich habe den Timer1 auf Fast PWM 8-Bit
    eigestellt. Kann mir jemand helfen. Danke.

    Hier ist mal mein Code:


    Code:
    void MoveAtSpeed(uint8_t Speed_Left, uint8_t Speed_Right) {
    DDRB |= (1<<PB6);
    DDRB |= (1<<PB5);
    TCCR1A = (1<<COM1A1) | (1<<WGM10) ;
    TCCR1B = (CS10)| (WGM12) ;
    ICR1 = 0x00FF;
    OCR1A = Speed_Left;
    OCR1B = Speed_Right;
    
    Motor_Enable();
    }
    
    void Motor_Enable (void) {
    
    
    
    DDRB |= (1<<PB7);
    PORTB |= (1<<PB7);
    
    }
    MfG Martinius

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    32
    Beiträge
    1.192
    Hallo,

    fehlt hier nicht zweimal 1<< ?
    Code:
    TCCR1B = (CS10)| (WGM12) ;
    würde CS12 auch noch setzen, dann ist das die niedrigst mögliche Frequenz fürs PWM (Prescaler -> fosc/1024).
    Ansonsten hab ich das für einen Atmega128 auch ziemlich genau so programmiert. ICR1 habe ich überhaupt nicht verwendet.

    ...aber die Motoren drehen in
    gegengesetzte Richtungen!
    Elektrisch richtig rum angeschlossen?

    Grüße,
    Bernhard

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    27.09.2009
    Alter
    29
    Beiträge
    661
    Also ich hab den Code geändert :

    Code:
    void MoveAtSpeed(uint8_t Speed_Left, uint8_t Speed_Right) {
    DDRB |= (1<<PB6);
    DDRB |= (1<<PB5);
    TCCR1A = (1<<COM1A1) | (1<<WGM10) ;
    TCCR1B = (1<<CS10)| (1<<CS12) | (1<<WGM12)  ;
    ICR1 = 0x00FF;
    OCR1A = Speed_Left;
    OCR1B = Speed_Right;
    
    Motor_Enable();
    }
    aber die Motoren drehen immer noch in unterschiedliche Richtungen
    muss für OCR1B auch eine Richtung eingestellt werden.
    MfG Martinius

  4. #4
    shedepe
    Gast
    Ich kenn den Probot zwar nicht, aber bei vielen Motortreibern ist es so, dass man die Drehrichtung durch setzen zweier Pins bestimmt und mit dem PWM Signal nur die Geschwindigkeit regelt.

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    27.09.2009
    Alter
    29
    Beiträge
    661
    Der Pro-Bot ist da eine ausnahme der wird nur über 3 Pins gesteuert und
    die PWM von einem IC aufgeteilt <128 ist rückwärts, 128 stop, und > 128 forwärts.
    MfG Martinius

  6. #6
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Wie schon öfters erwähnt finde ich die Motoransteuerung des probot eher mangelhaft. Das Problem (aus meiner Sicht): Das PWM-Signal steuert nicht nur die Leistung sondern auch die Drehrichtung. Nur wenn das Puls-/Pauseverhältniss genau 50:50 ist, steht der Motor (und saugt volle Leistung aus den Akkus). Bei 100:0 oder 0:100 dreht er mit Vollgas in die jeweilige Richtung. Ich hab's hier mal genauer beschrieben (und im Laufe des Threads auch eine Lösung für das CCPro vorgeschlagen):
    https://www.roboternetz.de/phpBB2/ze...=455722#455722

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    27.09.2009
    Alter
    29
    Beiträge
    661
    Aber warum klappts dann mit Bascom problemlos ?
    MfG Martinius

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    27.09.2009
    Alter
    29
    Beiträge
    661
    Ich hab beim durchsehn von Radbruchs Programmen den Fehler gefunden
    ich musste noch "(1<<COM1B1)" einfügen. jetzt funkts. Danke an alle.
    MfG Martinius

Berechtigungen

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

LiFePO4 Speicher Test