Forum: Mikrocontroller und Digitale Elektronik PWM einlesen


von Manuel K. (manuelk)


Lesenswert?

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.

von ggg (Gast)


Lesenswert?

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.

von Svenska (Gast)


Lesenswert?

Wie wäre es mit Glätten und per ADC einlesen? PWM nutzt man, um eine 
analoge Spannung mit einem digitalen Pin auszugeben. Wie genau muss das 
sein?

von Tysk (Gast)


Lesenswert?

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.

von Oliver R. (orb)


Lesenswert?

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.

von STK500-Besitzer (Gast)


Lesenswert?

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.

von Tysk (Gast)


Lesenswert?

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.

von Manuel K. (manuelk)


Lesenswert?

Vielen Dank für eure Rückmeldungen und guten Inputs. Ich werde dies mit 
Input capture versuchen zu lösen.

Ich wünsche ein schönes Wochenenden.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.