-         

Ergebnis 1 bis 6 von 6

Thema: Fast PWM zu langsam? Denkfehler oder Rechenfehler?

  1. #1
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.589

    Fast PWM zu langsam? Denkfehler oder Rechenfehler?

    Anzeige

    Hallo Alle,

    meine Fast-PWM läuft langsamer als berechnet.

    Umgebung: mega328/20 MHz
    Code:
    // ============================================================================== =
    // ==  PWM-Routinen zur Motoransteuerung
     void TC1PWM_init(void)         //Init Timer/Counter1 für Erzeugung des PWM-Signals
     {                              //
       TCCR1A |=  (1<<COM1A1)|(1<<COM1B1);  //Clear/set OC1A/OC1B on Cmp Match,    S132
                                            //    OC1A/OC1B ist Port PB1/B2
       TCCR1A |=  (1<<WGM10)|(1<<WGM12);    // Fast PWM, TOP=0xFF=dez255,      doc S133
       TCCR1B |=  (1<<CS11);       // Prescaler ist clk/8                      doc S135
       TIMSK1 &= ~(1<<OCIE1A)|(1<<OCIE1B);    // T/C1 Oput CmpA+B Match intrrpt dsabld
       TIMSK1 &= ~(1<<TOIE1);        // T/C1 Ovrflw intrrpt dsabled        ~S137
       OCR1A     = 0;                       // PWM auf Null setze
       OCR1B     = 0;                       // PWM auf Null setzen
    }            
    // ============================================================================== =
     void setPWM1_re (uint8_t speed)        // Geschwindigkeit Motor1, Mot12 (rechter)
     {OCR1A = speed;}                       //  PWM auf PB1/OC1A
    // ============================================================================== =
     void setPWM2_li (uint8_t speed)        // Geschwindigkeit Motor2, Mot34 (linker)
     {OCR1B = speed;}                       //  PWM auf PB2/OC1B
    // ============================================================================== =
    Nach meiner Rechnung (Taschenrechner) ergibt das also 20Mio Maschinenzyklen div Prescaler8 div 255-PWM-TOP 9803 PWM-Zyklen. Der Oskar zeigt mir aber nur rund 5000 PWM-Zyklen (rund 10 bei 10*0,2ms/DIV). Kann mir bitte jemand ne richtige Rechnung aufmachen?

    Danke im Voraus.
    Geändert von oberallgeier (26.09.2012 um 17:11 Uhr)
    Ciao sagt der JoeamBerg

  2. #2
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.785
    Blog-Einträge
    8
    Hallo

    Vielleicht schwingt der Quarz nicht richtig. Betreibst du eine (asyncrone) serielle Schnittstelle mit dem mega238?

    Beim Setzen der ersten Bits in den Kontrollregistern würde ich mit = anstelle von != beginnen um etwaigen Schrott in den Registern zu löschen. Sonst ist mir noch kein (Denk-)Fehler aufgefallen.

    Gruß

    mic

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

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.434
    Blog-Einträge
    104
    Zitat Zitat von oberallgeier Beitrag anzeigen
    TCCR1A |= (1<<WGM10)|(1<<WGM12); // Fast PWM, TOP=0xFF=dez255, doc S133
    Hallo,
    Timer sind mein neues Hobby Das WGM12 Bit ist in TCCR1B

    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.589
    Danke, mic, für die schnelle Antwort.

    mic> Vielleicht schwingt der Quarz nicht richtig.
    Die Bordzeit wird aus einem 20 kHz-Signal des Timer/Counter 0 abgeleitet. Jede 20000 Counts wird eine LED getoggelt - mein Standardverfahren. Die LED blinkt mit 2 sec Periodendauer (1sec an, 1sec aus). Das ist geprüft und sollte stimmen. BTW: in den Current Configuration Options sind von Beginn an auch 20 MHz eingetragen.

    mic> Betreibst du eine (asyncrone) serielle Schnittstelle mit dem mega238?
    Ja. Mit #define BAUD 230400 im Controller klappts bestens beiUSB-Adapter auf 256000 mit Terminal/br@y. Der Taktfehler ist aber in der momentanen sehr sparsamen Testphase, da läuft "nix" ausser dem genannten Timer, die PWM wird in einer Schleife for ( ; ; ) gewobbelt.

    mic> Beim Setzen ... Kontrollregistern ... mit = anstelle von != beginnen ...
    ??? Ich dachte, meine Syntax "TCCR1A |= (1<<COM1A1)|(1<<COM1B1);" ist Standard bei C ?? Aber ich probiers mal.

    Danke.
    Ciao sagt der JoeamBerg

  5. #5
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.589
    Zitat Zitat von Searcher Beitrag anzeigen
    ... Timer sind mein neues Hobby ... Das WGM12 Bit ist in TCCR1B ...
    Möge Dir (und uns) Dein Hobby ewig erhalten bleiben. So stehts auch in meinem Datenblatt 8271E–AVR–07/2012 auf Seite 134 - und ich schwöre, ich habs gelesen. Aber eben schlampig *schnief*.

    Whow - danke Searcher !

    Und die Softwareanpassung bestätigt den Datenblattinhalt. Danke nochmal.
    Geändert von oberallgeier (26.09.2012 um 18:05 Uhr) Grund: Testbestätigung nachgetragen
    Ciao sagt der JoeamBerg

  6. #6
    Erfahrener Benutzer Roboter Genie Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.434
    Blog-Einträge
    104


    Gerne, ist doch mein Hobby und wer beißt sich nicht schon mal an sowas fest.

    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

Ähnliche Themen

  1. I2C Codeproblem (oder Denkfehler)
    Von djdune im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 16.08.2010, 08:32
  2. Phänomen oder Denkfehler ?
    Von Frank_08 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 7
    Letzter Beitrag: 27.04.2009, 13:49
  3. Mosfetansteuerung -> Killerlösung oder Denkfehler?
    Von 1hdsquad im Forum Elektronik
    Antworten: 7
    Letzter Beitrag: 23.04.2008, 08:28
  4. Rechenfehler oder Irrtum ?
    Von alecs im Forum Motoren
    Antworten: 2
    Letzter Beitrag: 29.09.2005, 12:47
  5. Motorsteuerung-> Schottky oder Fast-Recovery
    Von McFly im Forum Elektronik
    Antworten: 1
    Letzter Beitrag: 04.05.2005, 12:48

Berechtigungen

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