Forum: Mikrocontroller und Digitale Elektronik RC Signal wackelt


von Tobias T. (tobytetzi)


Lesenswert?

Hallo,

ich werte mir einem ATmega8 ein PPM RC Signal aus.

Externer Interupt, steigende Flanke:
Timer0 mit Vorteiler 256 start
Externen Interupt auf fallende Flanke setzen

Externer Interupt, fallende Flanke:
Timer stop
Pulslänge = Timerwert
Externen Interupt auf steigende Flanke setzen


Im Main frage ich die Pulslänge ab:
If (Pulslänge < 70)
LED1 an
..
If (Pulslänge >= 70 && Pulslänge < 90)
LED2 an
..
If (Pulslänge >= 90 && Pulslänge < 110)
LED3 an
..


Wenn der Puls nun aber genau 70 oder 90 an Wert hat,
flackert die LED hin und her, da der Puls zwischen 69 und 71,
bzw. zwischen 89 und 91 "wackelt".

Wie kann man das wackeln beseitigen, bzw. ausblenden?

Kann man so abfragen:
If (Pulslänge < 65)
LED1 an
..
If (Pulslänge >= 75 && Pulslänge < 85)
LED2 an
..
If (Pulslänge >= 95 && Pulslänge < 105)
LED3 an
..

Also quasi die 10 Werte von 65-74 und 85 bis 94
garnicht beachten?

Oder wie macht man es sonst, wenn Werte in einem bestimmten Bereich 
flackern, aber man trotzdem einen eindeutigen Schaltpunkt haben will?

Gruß Toby

von Ralph (Gast)


Lesenswert?

mehrere Ansätze die sich auch kombinieren lassen.

1. Filtern ==> mehrer Meßwerte zusammenfassen und daraus den 
resultierenden Wert bilden, der in der IF Abfrage genutzt wird. Es gibt 
viele Filtermöglichlickeiten die sich in Rechenaufwand, Rambedarf, 
Wertigkeit der einzlenen Werte, Schnelligkeit,...... unterscheiden. Die 
einfachste Möglcihkeit ist eine Mittelwertbildung über X- Werte.

2. Ein Toleranzband verwenden. Das heißt die Werte von Schaltpunkt +-x 
werden nicht beachtet.

3. Hysterese verwenden. Beispiel: schaltpunkt 70: Wert ist > 70 und 
geschaltet wird wen der Wert 69 unterschritten hat. Der Wert < 70 und 
geschaltet wird wenn der Wert 71 überschritten hat.

Was für deine Anwendung der günstigste Wert ist, musst du entscheiden, 
da wird dir niemand helfen können, weil die Rahmenbedimgungen nicht 
bekannt sind.

Zum ermitteln der Pulsweite, wäre eine "Capture&Compare Unit" ( heißt 
bei jedem µC hersteller anderst) günstiger, weil die Zeitmessung dort in 
Hardware realisiert wird und keine Interruptlatenzzeiten als Fehler 
hinzukommen.

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.