- SF800 Solar Speicher Tutorial         
Ergebnis 1 bis 6 von 6

Thema: PWM-Lüfterreglungssignal vom Mainboard auslesen

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied
    Registriert seit
    05.01.2010
    Beiträge
    35
    Naja, ich brauche ja immer die Zeit zwischen steigender Flanke und fallender Flanke und direkt darauf wieder die Zeit zur steigenden Flanke, wenn ich den Duty Cycle haben will. Oft muss ich die Messung nicht machen. So einmal die Sekunde würde reichen, aber ich brauche halt eben die Zeit zwischen diesen 3 Flanken, und die kommen beim Duty Cycle von 99% mit 2,8MHz an.
    Bei meinem 16MHz Quarz sind das also keine 6 Takte zwischen den 2 Flankenwechseln.

    Ich hatte da jetzt eine Idee, die ich wohl mal versuchen werde, welche darauf basiert, dass sich der Duty Cycle nicht sehr schnell ändert (unter 1 Dutzend mal pro Sekunde).

    Als Erstes messe ich die Frequenz, also die Zeit zwischen 2 fallenden Flanken. Bei 30kHz wären das gut 571 Takte.
    Wenn da in einem bestimmten Zeitraum keine Flanken gemessen werden, kann ich davon ausgehen, dass der Duty Cycle bei 100% oder 0% liegt. Dann Messe ich Pegel um zu entscheiden, was von beidem es ist.
    Wenn da jedoch eine Frequenz gemessen wurde, dann mache ich mit dem Messen des Intervalls zwischen steigender und fallender Flanke weiter. Entweder kommt da dann ein Wert heraus, der kleiner als die Frequenz ist, oder die Zeit war zu kurz und der uC konnte den Timerwert aus dem Input Capture Register nicht rechtzeitig lesen, bevor dieser durch einen neuen Überschrieben wurde. In dem Fall wäre der Intervall dann ja größer als die Frequenz.
    Das gleiche danach dann nochmal umgekehrt für den Intervall zwischen fallender und steigender Flanke.
    Wenn der eine Intervall zu kurz zum Messen war, dann muss der andere lang genug gewesen sein. Sollte es da also einen Messfehler gegeben haben (einer der Intervalle größer als die Frequenz), dann wird einfach der richtig gemessene Intervall von der Frequenz subtrahiert und der zu kurze Intervall daraus berechnet.

    Oder gibt es da noch andere Wege?

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    37
    Beiträge
    1.225
    Zitat Zitat von Dunuin Beitrag anzeigen
    Oder gibt es da noch andere Wege?
    Klingt alles sehr praktikabel, aber auch sehr aufwändig gemessen an der Aufgabe. Rein gefühlsmäßig hätte ich einfach einen RC-Tiefpass rangeklebt und das Signal dann über den ADC eingelesen, das wäre deutlich weniger "tricky".

    A propos "tricky", mir kommt gerade noch ein schmutziger kleiner Gedanke: Du kannst ja auch über mehrere Periodendauern messen:
    1. Frequenz ermitteln, das geht für Tastgrade != 0%/100% recht einfach und genau.
    2. Trigger auf steigende Flanke einstellen
    3. Nach Auslösung Input Capture für eine halbe Periodendauer ausschalten
    4. Trigger auf fallende Flanke einstellen
    (Nach der Umschaltung jeweils zuerst das Interrupt-Flag zurücksetzen)

    Warum hilft das?
    Fall a) Tastgrad <= 50%: Du "verpasst" die fallende Flanke des (vielleicht zu) kurzen HIGH-Anteils und erfasst erst mit der nächsten fallenden Flanke insgesamt die Zeit einer Periode + Länge des (zweiten) HIGH-Anteils, zieht man die Periodendauer ab, bleibt nur noch der HIGH-Anteil übrig
    Fall b) Tastgrad > 50%: Du misst direkt die Zeit des HIGH-Anteils, da er länger als eine halbe Periode dauert.

    Relativ einfache Logik, keine zusätzliche Hardware nötig, ich glaube die Variante solltest du Mal ausprobieren.

    mfG
    Markus

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    05.01.2010
    Beiträge
    35
    Auch keine schlechte Idee.

    3. Nach Auslösung Input Capture für eine halbe Periodendauer ausschalten
    Kann ich das per Output Compare Unit und dessen Interrupt machen? Also nach Auslösung den aktuellen Wert vom Timer nehmen, die halbe Periodendauer hinzu addieren und den Wert dann ins Compare Register schreiben, damit der Interrupt dann kommt, wenn die halbe Periodendauer vorbei ist? Weil die anderen beiden Timer sind schon für PWM reserviert und für die Zeitmessung habe ich nur den Watchdog mit seinen 16ms Schritten.

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    37
    Beiträge
    1.225
    Zitat Zitat von Dunuin Beitrag anzeigen
    Kann ich das per Output Compare Unit und dessen Interrupt machen? Also nach Auslösung den aktuellen Wert vom Timer nehmen, die halbe Periodendauer hinzu addieren und den Wert dann ins Compare Register schreiben, damit der Interrupt dann kommt, wenn die halbe Periodendauer vorbei ist?
    Ja, so in der Art war das gedacht, die OC-Einheiten lassen sich ja normalerweise unabhängig von der Input Capture Funktionalität verwenden.

    mfG
    Markus

Ähnliche Themen

  1. Mainboard für Bildverarbeitung
    Von helplessTom im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 11
    Letzter Beitrag: 11.12.2007, 07:33
  2. Mainboard Elkos
    Von mrg im Forum Elektronik
    Antworten: 14
    Letzter Beitrag: 03.03.2007, 16:52
  3. Mainboard aufsetzung
    Von listner im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 23
    Letzter Beitrag: 28.08.2006, 20:46
  4. Welches PC Mainboard für Steueraufgaben??
    Von im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 15
    Letzter Beitrag: 04.04.2005, 10:44
  5. Pollux-Mainboard Lauffähig
    Von haselhuhn im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 0
    Letzter Beitrag: 02.12.2004, 20:26

Berechtigungen

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

LiFePO4 Speicher Test