- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 2 von 6 ErsteErste 1234 ... LetzteLetzte
Ergebnis 11 bis 20 von 51

Thema: PWM 2 kleine Probleme.... bitte um Hilfe

  1. #11
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.01.2005
    Ort
    Bayern
    Alter
    38
    Beiträge
    795
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo,

    Ich habe beschlossen, dass ich PWM nun intensiever forschen werde...

    Es gibt nämliche mehrere PWM-Betriebsarten....

    Eventuell kann man auch das PWM signal erzeugen, welches mit einem RC-Sender übermittelt wird!

    Wenn man einen RC-Empfänger betrachtet, dann kommen beispielsweise bei einem 8Kanal-Empfänger sämtliche Servo-stellungen in einem einzigen PWM signal.

    Das sog. PPM-Signal ( http://www.mftech.de/ppm.htm

    man würde nur einen PWM-Kanal benötigen...

    Ob es nun tatsächlich geht weiss ich jetzt noch nicht genau.

    Aber Antworten folgen.....

    Gruß Kaiser

  2. #12
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.01.2005
    Ort
    Bayern
    Alter
    38
    Beiträge
    795
    Irgentwie komme ich einfach nicht mir der Formel klar von Atmel:

    Die schreiben dass die PWM Fraquent Folgende ist:

    f(PWM) = F(CLK) / ( 2* N*TOP)

    Mit N ist der prescaler
    TOP ist die Obergranze


    Mit f(CLK) = 8000000
    N = 64
    TOP= 1023

    ergibt sich: f(PWM) = 61,09 Hz (= 16,35ms)


    Wenn ich das Laufen lasse, dann messe ich im Oszi jedoch für f(PWM) = 8,33333333 Hz ( 120 ms )


    WARUUUUUUUUMMMMM???????????????????????

  3. #13
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    03.01.2004
    Ort
    Pottenstein
    Alter
    45
    Beiträge
    269
    Wo hast du denn die Formel gefunden? Wenn das ein Druckfehler war, gibts vielleicht auf der AVR-Freaks-Homepage schon ein korrigiertes Datenblatt. Die veroeffentlichen da immer so Errata...
    Nils

  4. #14
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.01.2005
    Ort
    Bayern
    Alter
    38
    Beiträge
    795
    Gefunden hab ich die Formel im ATMEGA8535 Datenblatt auf Seite 104

    "The PWM frequency for the output when using phase correct PWM can be calculatet by the following equation":

    Die PWM Fraquenz für den Ausgang bei "phase correct" PWM kann durch folgende Gleichung berechnet werden:

    f(OCnxPCPWM) = f(clk_IO) / ( 2*N*TOP);





    Im Datenblatt des ATMEGA128 steht aber das Selbe....

    Vielleicht hab ich irgendwas übersehen... aber die Formel ist ja eindeutig.....

    Mein Code stimmt normalerweise auch:

    TCCR1A = (1<<WGM11)|(1<<WGM10)|(1<<COM1A1)|(1<<COM1A0); // 10Bit PWM, invertiert
    TCCR1B = (1<<CS11)|(1<<CS10); //Prescaler = 64
    OCR1A = 500; // Testwert... spielt für Fraquenzmessung keine rolle

  5. #15
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    03.01.2004
    Ort
    Pottenstein
    Alter
    45
    Beiträge
    269
    Hm. Das Datenblatt hab ich zwar nicht, weil ich diesen Chip nicht benutze, aber die Formel ist ja die gleiche, die ich mir oben zusammengereimt habe. Wird also stimmen
    Wenn deine Bits korrekt gesetzt sind, fällt mir eigentlich bloß noch ein, daß die CPU-Frequenz falsch ist. Bist du sicher, daß du die Fuses auf 8MHz umprogrammiert hast? Wenn der AVR nämlich mit den voreingestellen 1MHz des internen Oszillators läuft, würde das erklären, warum du erstens etwa ein Achtel des erwarteten Wertes mißt und zweitens nicht GENAU ein Achtel mißt. Der interne Oszillator ist ja recht ungenau...
    Nils

    Mir faellt grad auf, das wuerde ja auch erklaeren, warum deine fruehere Einstellung mit den 100 us alle 2ms so halbwegs funktioniert hat. Das waeren dann naemlich in Wirklichkeit 0,8ms alle 16ms gewesen, was einem normalen Servosignal schon ziemlich nahe kommt... Ich taete mal die Fuses checken

  6. #16
    Benutzer Stammmitglied
    Registriert seit
    17.02.2005
    Ort
    Pfullingen, am Rande der Schwäbischen Alb
    Alter
    41
    Beiträge
    56
    Servus Kaiser-F,

    hab mich grad mal hingesetzt und mein Oszi abgestaubt.
    Bei mir hat das PWM-Signal ungefähr den von dir errechneten Wert (16,35ms). Verwende einen AT90S2313, einen Fehler habe ich aber noch korregieren müssen, und zwar musste ich

    TCCR1A = (1<<PWM11)|(1<<PWM10)|(1<<COM1A1);

    anstatt von

    TCCR1A = (1<<WGM11)|(1<<WGM10)|(1<<COM1A1);

    verwenden. Du hast es ja genau andersrum... Liegt das am verwendeten Controller, oder an der Programmierumgebung- ich verwende WinAVR. Weis da jemand bescheid?

    gruss Siggi

  7. #17
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.05.2004
    Ort
    Untersöchering(Bayern,Alpenvorland)
    Alter
    37
    Beiträge
    215
    Das liegt am verwendeten Controller. Schaut doch mal eure inlcude Datei des jeweiligen Controllers an. In der iom32.h ist es WGM in der io8535.h PWM. Aber ihr müsst eigentlich nur mal reinschaun.
    Gruß Muraad

  8. #18
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    03.01.2004
    Ort
    Pottenstein
    Alter
    45
    Beiträge
    269
    Moin moin!
    Nachdem ich jetzt mein neues PC-USB-Digi-Oszi-Teil hab *freu*, hab ich eure Methode, PWMs zu erzeugen, auch mal probiert. Mit ATmega8, da heissen die Bits ebenfalls WGM... Und siehe da:Es geht. Ich messe bei CPU=8MHz und Prescaler=64 eine Periode von 15,6ms, was recht nah an den rechnerischen 16,35 liegt. Und bei einem Vergleichswert von 64 komme ich rechnerisch und messtechnisch auf ungefaehr 1ms fuer die Pulsdauer (nicht invertierend).

    Wieder was gelernt

    Kaiser-F, klappts bei dir inzwischen auch?

    Nils

  9. #19
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.01.2005
    Ort
    Bayern
    Alter
    38
    Beiträge
    795
    Hallo Nils,

    Ich hab irgendwie noch mit kleineren Problemen zu kämpfen...

    Würdest du mir den Gefallen tun, und mal deinen Versuch nochmal messen,
    Aber mit invertierten PWM? Dann müsstest du deinen Vergleichswert von 64 auf "OBERGRENZE - 64" legen.... dann müsste rein theoretisch das selber Ergebnis rauskommen....

    Das wär ne super Sache!

    MfG,

    Kaiser

  10. #20
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    03.01.2004
    Ort
    Pottenstein
    Alter
    45
    Beiträge
    269
    Yups, gerade gemessen. Kommt genau das gleiche raus. Mit COM1A1 und COM1A0 gesetzt, und 1024-64=960 als Vergleichswert.
    Hast du deine CPU-Frequenz gecheckt?

    Nils

    Code:
    #include <avr\io.h>
    
    int main(void) {
    	DDRB	= 0xFF;
    	TCCR1A	= (1<<WGM11)|(1<<WGM10)|(1<<COM1A1)|(1<<COM1A0);
    	TCCR1B	= (1<<CS11)|(1<<CS10);
    	OCR1A	= 1024-64;
    }

Seite 2 von 6 ErsteErste 1234 ... LetzteLetzte

Berechtigungen

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

Labornetzteil AliExpress