PWM einlesen

OP #3415767
Hallo Zusammen,
Ich möchte ein PWM Signal in einen Arduino uno einlesen. Ich versuchte 
die über pulseIn() Funktion, das Problem dabei ist, dass mein Signal von 
2us bis 500us variabel ist und die pulseIn() Funktion erst ab ca. 10us 
funktioniert.

Danach liess ich das Signal analog über einen Tiefpass 2. Ordnung ein. 
Dies funktionierte Grundsätzlich nicht schlecht, doch das Problem bei 
dieser Methode ist dass ich logischerweise den Wechsel des Signals von 
100% zu 0% nicht sauber detektieren kann weil durch den Filter das 
Signal träge wird.

Meine Frage ist:
Soll ich das Signal über einen Interrupt Eingang einlesen und auswerten 
oder den Filter so anpassen dass die Zeitkonstante kleiner wird und ich 
ev. ein Rippel auf dem Signal hätte aber dafür den Sprung erkenne? 
(Dieser stört nicht da mich nur die Vorderste stelle interessiert….)

Sehe ich das richtig dass die Interrupt Lösung meinen Kontroller mehr 
belastet? Oder ist das einlesen des ADC genauso rechenintensiv?

Gibt es noch eine andere Möglichkeit das PWM Signal einzulesen?

Vielen Dank für eure Rückmeldung.
Gast
interrupt...
Input capture ist das Stichwort!
Kein Plan, ob der Arduino das kann. Sonst halt Interrupts zählen und 
irgenwoher eine Timebase holen, schon haste deine Frequenz.
Gast
Svenska schrieb:
> PWM nutzt man, um eine analoge Spannung mit einem digitalen Pin
> auszugeben.

Das sollte man, ohne Hintergrundinformationen nicht so verallgemeinern.

Jeder Modellbauservo wird mit einem PWM-Signal gesteuert, dessen 
High-Dauer die Information über die Position enthält. Dabei ist also die 
Dauer analog, aber nicht die Spannung, die ein TP daraus erzeugen 
würde, da die Information nicht im Duty-Cycle Kodiert wird.
Tysk schrieb:
> Jeder Modellbauservo wird mit einem PWM-Signal gesteuert,

Und das hat man damals gemacht, weil sich das PWM-Signal besser erzeugen 
und über Funk übertragen lies als ein Analoges. Ein Vergleich einer 
analogen Spannung mit der Motorpositon ist einfacher.
Gast
Manuel K. schrieb:
> mein Signal von 2us bis 500us variabel

2µs sind schon sportlich, wenn der Controller nicht entsprechend hoch 
getaktet wird (ich weiß nicht, mit welcher Frequenz der Arduino läuft).
Ansonsten ist die InputCature-Einheit das Stichwort.
Gast
Oliver R. schrieb:
> Und das hat man damals gemacht, weil sich das PWM-Signal besser erzeugen
> und über Funk übertragen lies als ein Analoges.

Vor allen Dingen lassen sich damit mehrere Kanäle im Zeitmultiplex als 
Pulskette ("Summensignal") übertragen.

ggg schrieb:
> Kein Plan, ob der Arduino das kann.
Der Arduino besitzt einen ATmega328. Input capture per HW und 
anschließender Interrupt zum Auswerten, ohne den Prozessor groß zu 
belasten, sollte kein Problem sein, sofern die Wiederholfrequenz nicht 
zu hoch ist. Um die maximale Auflösung zu erreichen, wäre ein 16-bit 
Timer die richtige Wahl.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.