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.
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.
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?
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.