-         

Ergebnis 1 bis 2 von 2

Thema: PWM mit ATMEGA8

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    24.05.2005
    Ort
    NRW
    Beiträge
    34

    PWM mit ATMEGA8

    Anzeige

    Hallo,
    Ich möchte für eine Motorsteuerung mit einem ATMEGA8 die PWM verwenden und komme aufgrund bescheidener Englischkentnisse mit den Beschreibungen im Datenblatt des Controllers nicht so gut zurecht.
    Einen einfachen Counter mit 8 und 16 Bit habe ich ohne Interrupt's programmieren können, stoße jedoch bei der PWM auf große Probleme.
    Muß ich hierzu Interupt's programmieren oder kann man ein einfaches Puls-Pausen-Verhältnis z.B. über den Timer 1 ohne Interrupt hinkriegen ?
    Würde mich freuen, wenn mir jemand helfen könnte.

    Gruß Gucky.
    Wissen ist Macht, nichts Wissen macht nichts !

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    1.892
    Der Timer1 des ATMEGA 8 bietet hier sehr viele Möglichkeiten eine PWM zu realisieren.
    Die entscheidenden Register sind die WGM Bits die je nach dem gewünschten PWM Modus eingestellt werden müssen.
    Die Vergleichswerte (PWM Pulsbreiten) müssen dann im OCR1A bzw. OCR1B eingestellt werden. Die Pulse kommen dann am OC1A bzw. OC1B raus. Die PWM Erzeugung läuft grundsätzlich ohne Interrupts.
    Das Updaten der Register OCR1A/B würd ich aber im Overflow Interrupt des Timers 1 machen um keine ungewollten Phasensprünge zu bekommen.
    Die Ports OC1A und B müssen als Ausgänge geschaltet sein (DDR- Register).
    Lass dir bei dem Datenblatt von jemanden mit guten Englischkenntnissen helfen - du wirst das Datenblatt noch öfter brauchen.

    Code:
    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: Timer 1 Start
    // Mode: PWM Phase Correct top=03FFh
    // OC1A output: Non-Inv.
    // OC1B output: Non-Inv.
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer 1 Overflow Interrupt: On
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: Off
    // Compare B Match Interrupt: Off
    TCCR1A=0xA3;
    TCCR1B=0x01;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;
    Dieser Beispielcode generiert bei einem 8MHz Quarz eine PWM Frequenz von ca. 7,5 kHz für beide PWM Ausgänge des Timers 1.
    Die Konfiguration ist zur Zeit nur im Simulator getestet, die Schaltung dazu muss ich noch aufbauen.

Berechtigungen

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