Tastverhältnis mit ATmega oder PC-Schnittstelle messen (C)

Gast #3560484
Lesenswert?

Hi,

ich bin auf der Suche nach einer Lösung, um das PWM-Signal einer 
KE-Jetronic auszuwerten.
Grundfrequenz < 500Hz
Pegel: 0V=Lo 12V=Hi
Tastverhältnis in 10% Schritten.
Hardwaretechnisch sollte das ja kein Problem darstellen.
Müsste also wohl auch ohne Interrupts funktionieren.
Mir fallen nun zwei Möglichkeiten ein:
1. Ich triggere bei steigender und fallender Flanke und berechne immer 
die Zeit. Mit dem Anfang und Ende wird das aber u.U. schwer.
2. Ein Kondensator als Glättung und dann die Spannung am A/D Wandler 
abnehmen. Ist aufgrund der Trägheit evtl. nicht linear.

Gibt es vielleicht sonst noch eine Möglichkeit, ein solches Signal 
digital auszuwerten (Oszi und der gleichen sind etwas umständlich und 
wohl auch überdimensioniert)

Beste Grüße
Mela
#3560539
Lesenswert?

> 1. Ich triggere bei steigender und fallender Flanke und berechne immer
> die Zeit. Mit dem Anfang und Ende wird das aber u.U. schwer.

Du lässt den 16-Bit Timer 1 frei laufen. Flanken des Signals lösen dann 
einen IRQ aus und du liest schnell den Timer aus und setzt ihn wieder 
auf null.

Läuft der Timer über, kannst du auch einen IRQ auslösen und somit 
feststellen, wenn das Signal nicht mehr anliegt.
Gast #3560742
Lesenswert?

Thomas Forster schrieb:
> Du lässt den 16-Bit Timer 1 frei laufen. Flanken des Signals lösen dann
> einen IRQ aus und du liest schnell den Timer aus und setzt ihn wieder
> auf null.

ne, dafür nimmt man lieber den Input Capture Modus.
Dann steht der Timestamp in einem extra Register und man hat bis zur 
nächsten Flanke Zeit, ihn auszulesen. Gleichzeitig im Interrupt jeweils 
die auslösende Flanke ändern (fallend <-> steigend).
#3560822
Lesenswert?

ATmela schrieb:
> Also der Algorithmus wäre dann wie folgt:
>
> Loop:
>
> warten auf (1.) Flanke
> get time01
> warten auf nächste (2.) Flanke
> get time02
> warten auf nächste (3.) Flanke
> get time03
>
> Periodendauer = time01-time03
> Zustand01 = time01-time02
> Zustand02 = time02-time03
>
> Verhältnis = Zustand01/Zustand02
>
> Ist das Sinnvoll?

Nein.
In deiner Schleife hast du 3 Flanken detektiert. Eine ungerade Zahl. 
D.h. beim nächsten Durchlauf durch die Schleife misst du dann die 
Pulslücke und nicht den Puls aus.

Grundsätzlich:
Wenn dein µC nichts anderes zu tun hat als dieses hier, dann ja.
Aber so komplex ist eine Interrupt Lösung dann auch wieder nicht. 
Befreit allerdings den µC vom ständigen Warten, sodass er nebenher auch 
noch andere Dinge machen kann. Zum Beispiel wirst du ja mit den 
ermittelten Werten auch irgendwas machen müssen. Und dafür muss dann ja 
auch noch Rechenzeit übrig bleiben.
Zudem: bleiben die Pulse aus, dann wartet dein µC bis zum St. 
Nimmerleinstag auf eine Flanke, die nicht kommt.
Aus all diesen Gründen ist eine Lösung, die auf 'Warten' beruht, 
meistens eine schlechte Lösung. Zumal die Alternative mit Interrupts 
auch nicht wesentlich komplizierter ist.
Gast #3966686
Lesenswert?

Hallo zusammen,

ich habe genau das gleiche vor und war echt froh, dieses Thread hier 
gefunden zu haben.

Kleine Hintergrundinfo: Bei mir geht's um einen Mercedes M103 von 1991, 
dessen Motorsteuergerät Daten per PWM raushaut, laut Internetrecherche 
mit etwa 100Hz, mangels Oszi hab ich's aber nicht prüfen können.

Mein Plan war es, mit Interrupts die Timestamps bei steigender/fallender 
Flanke zu speichern und mir daraus das Tastverhältnis zu berechnen und 
auf 'ne SD-Karte zu schreiben.

Mein Problem gerade ist, dass der Schreibvorgang vermutlich recht lange 
brauch und ich in der Zwischenzeit einige Interrupts "verpassen" würde. 
Anstatt einzelne Timestamps zu benutzen, dachte ich an ein Array, das in 
der ISR befüllt und beim Schreiben auf die SD-Karte geleert wird. 
Allerdings bin ich unschlüssig, wie groß das Array sein muss, damit ich 
nicht auch noch Überläufe bedenken muss.

Da ich wenig Erfahrung mit all dem habe, wäre ich echt froh, wenn das 
Thema hier weitergeführt würde (Wink mit dem Zaunpfahl an den 
Themenstarter).

Danke und viele Grüße
Marius
Gast #3966768
Lesenswert?

Es soll ein Datenlogger werden, d.h. rumfahren, SD-Karte raus, in den PC 
rein, auswerten. Wollte noch weitere Daten aufzeichnen, z.B. Drehzahl, 
Geschwindigkeit, Kühlwassertemperatur, etc.

Wenn ich nur ein Messgerät haben will, mit dem ich den Fehlerspeicher 
akut auslesen kann, brauch ich natürlich keine SD-Karte.

Viele Grüße
Gast #3966833
Lesenswert?

Ok, wenn Du einen Datenlogger willst dann schau dich doch mal hier um im 
Forum. Ich könnte wetten da gibt es nicht nur ein fertiges Projekt wo 
Daten (wo sie auch immer herkommen mögen) auf eine SD-Karte schreibt ;-)

Dann brauchst Du Dich "nur noch" um die Erfassung der Daten und die 
richtige Formatierung dieser zu kümmern.

Abhängig davon was Du nämlich alles Loggen möchtest (Anzahl Bytes) und 
mit was für einer Abtastrate berechnet sich nämlich Deine Datenrate was 
Dein Controller stemmen können muss.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren