Hallo zusammen,
ich suche eine Software-Möglichkeit, die mir dabei hilft, dass ich über
einen Mikrocontroller Eingang erkennen könnte, ob jetzt PWM oder eine
konstante Gleichspannung am Eingang anliegt.
Eventuell könnte ich mir einen Timer oder dergleichen vorstellen, nur
bin ich mir dabei unsicher, da ich noch keine großen Erfahrungen im
Bereich Mikrocontroller programmieren besitze.
Zu den beiden Signalen:
Gleichspannung liegt bei 5V.
PWM hat eine Amplitude von 5V und eine Frequenz von 90Hz bis 5kHz.
Liebe Grüße
Max
Es gibt verschiedene Möglichkeiten:
1. Du könntest das Signal per Tiefpass (R-C oder L-C Filter) glätten und
dann mit einem ADC-Eingang die Spannung messen.
2. Du nimmst ein Flipflop wie dieses:
https://www.ti.com/lit/ds/symlink/sn74lvc1g74.pdf
CLK schließt Du an das PWM-Signal an, D auf VCC. Mit einem negativen
Puls auf CLR löscht du das Flipflop. Wenn das PWM-Signal anliegt, wird
es beim nächsten Wechsel von low auf high den High-Wert von D eintakten,
und das Flipflop wäre gesetzt. Bei einem Dauer-Ein würde das nie
passieren, und das Flipflop wäre gelöscht.
3. Dein Controller hat vielleicht sogenannte CCP-Eingänge
(Capture-Compare). Die können einen Timer ansteuern.
4. Dein Controller hat vielleicht Pins, die bei einem Pegelwechsel einen
Interrupt auslösen können. Ein Interrupt reicht ja zur Detektion.
fchk
wie unterscheidest du denn dann zwischen DC und 100% PWM?
und eine PWM hat in der Regel eine feste Frequenz.
Vielleicht magst du etwas mehr über dein Eingangssignal erzählen?
nurmalso schrieb:> wie unterscheidest du denn dann zwischen DC und 100% PWM?
Sobald PWM einmal erkannt wurde am Eingang (natürlich muss die PWM
zwischen 1-99% Duty liegen), möchte ich per Software, durch z.B. einer
Variable in den Zustand bleiben, sprich wird einmal PWM am Eingang
erkannt, soll alles weitere auch als PWM interpretiert werden. Erst
durch einen Tasterdruck oder dergleichen, möchte ich den Zustand
verlassen und wieder Fragen welche Art von Spannung (PWM 1-99% oder DC)
liegt am Eingang.
nurmalso schrieb:> und eine PWM hat in der Regel eine feste Frequenz.
Die Frequenzen ändern sich nicht mitten im Betrieb, sondern ich möchte
den Frequenzbereich abdecken. Entweder liegt 90Hz an oder 1kHz...
Vielen Dank Frank für die Aufzählungsmöglichkeiten.
Frank K. schrieb:> 3. Dein Controller hat vielleicht sogenannte CCP-Eingänge> (Capture-Compare). Die können einen Timer ansteuern.
Könnte ich z.B. mit einem CCP Eingangen folgendes Abfragen:
- wenn DC anliegt: miss z.B. 5 mal den Eingang, ist die Spannung
konstant 5mal High? Wenn ja dann liegt ein DC Signal am Eingang
oder wenn PWM anligt, miss z.B. 5 mal den Eingang, gibt es einen einen
Pegelwechsel? Wenn ja dann liegt PWM an.
Mit einem Monoflop. Die PWM triggert dieses Monoflop immer wieder an,
bei einem reinen DC-Signal dann nicht mehr. Der Ausgang des Monoflops
kippt dann in die andere Lage, und bleibt so. Das Monoflop muss
natürlich an die Grundfrequenz der PWM und an die minimalen und
maximalen Puls- und Pausenverhältnisse angepasst werden, dass das
Monoflop auch bei der kleinsten Pause noch nicht auslöst.
Der müde Joe schrieb:> Mit einem Monoflop.
Wozu unnötig Hardware dranpappen?
Der MC kann das doch einfach selber feststellen, z.B. mit
Pin-Change-Interrupt und Timer.
Man kann auch den ADC nehmen. Bei PWM liefert er 0V oder VCC, bei DC
irgendwas dazwischen.
M.E. schrieb:> wenn DC anliegt: miss z.B. 5 mal den Eingang, ist die Spannung> konstant 5mal High? Wenn ja dann liegt ein DC Signal am Eingang>> oder wenn PWM anligt, miss z.B. 5 mal den Eingang, gibt es einen einen> Pegelwechsel? Wenn ja dann liegt PWM an.
Der Mikrocontroller kann nicht nur zwischen DC und PWM unterscheiden,
sondern zwischen z.B. 60% und 70% PWM.
Der Mikrocontroller hat einen Timer und kann die Impulsbreite messen,
die Messergebnisse speichern und vergleichen.
Hallo,
ich entnehme der Aufgabenstellung das das PWM Signal nicht vermessen
werden muss. Es soll nur zwischen High und PWM unterschieden werden.
Vorschlag. Du fragst zyklisch oder auf deinen Tastendruck hin einen
Eingangspin mit einer Abfragezeit der längsten zu erwartenden
Periodendauer ab. Bleibt es High, ja dann ist das High. Wechselt es auf
Low, dann weißt du hier liegt eine PWM an.
Veit D. schrieb:> Vorschlag. Du fragst zyklisch oder auf deinen Tastendruck hin einen> Eingangspin mit einer Abfragezeit der längsten zu erwartenden> Periodendauer ab. Bleibt es High, ja dann ist das High. Wechselt es auf> Low, dann weißt du hier liegt eine PWM an.
Diese Lösung ist aber nicht sicher.
Wenn es dumm läuft, wird das PWM-Signal immer im High-Zustand abgefragt.
Auch wenn es unwahrscheinlich ist kann es doch etliche Abfragen dauern,
bis man auf ein Low trifft.