PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Taster entprellen



RCO
13.10.2004, 21:47
Das Thema ist vielleicht nicht ganz korrekt, da es sich nciht um einen Taster, sondern um folgendes handelt, meiner Meinung nach aber auf das selbe hinausläuft:

Also ich habe uas einer alten Maus eine Welle etc. ausgebaut, die die Bewegung der Kugel aus eine y- und x-Achse umleited. Da es sich um eine late maus handelt, ist es noch mechanisch. Das heißt ein Rad mit schleifern und jeder Menge Leitflächen.
Das ganze soll nun an den motor (Servo) angschlossen werden und dann der Geschwindigkeitsermittlung dienen.
Über einen AVR wird das ganze gesteuert.
Ich habe nun ein Beipiel programmiert, um die Anzahl der Kontakt-Flächen, keine Ahnung wie man das nennt (Ich hoffe ihr könnt es euch vorstellen), zu ermittlen. Dabei drehe ich das ganze einmal rum und gebe die Counts aus.
Leider variert diese Zahl zwischen 77 und 139, ein wenig viel für eine Umdrehung. Ich vermute, dass es daran liegt, dass die Schleifer nicht richtig entprellt sind, also sie sinds ja garnicht.
Und wenn ich das Ganze langsam drhe, zählt er mal 1 dazu, mal 4...
Eine entprellung mit einem Kondesator hats nicht geprcht, und reseted den AVR von Zeit zu Zeit auch immer mal.

Wie also den Dreher entprellen?

recycle
13.10.2004, 23:59
Wie willst du denn beim "Entprellen" zwischen den gewünschten Flanken, bzw. Impulsen die du zählen willst und denen die durch die unsauberen Schleifkontakte entstehen unterscheiden?

Bei einem Taster sieht die Sache etwas anders aus, weil man da nur wissen will ob der Taster gedrückt wird oder nicht.

BlueNature
14.10.2004, 00:43
Das wird nicht leicht werden bei variierender Drehzahl. Du musst dir zu der Drehzahl je ein Zielfenster definieren in dem du dir einmalig deine Flanke zulässt. Kostet extrem Rechenaufwand (Prozessorleistung) und zum andern ist es viel Arbeit. Geh doch besser das Problem an der Ursache an, nicht am Ende. Dann ist es sicherer und es funktioniert nacher auch richtig. Das mit Kondensatoren ist vieleicht zum Testen eine Lösung aber nicht für den fertigen Aufbau und bringt daher gar nichts oder nur sehr wenig in bestimmten Drehzahlbereichen.

14.10.2004, 09:02
Eigentlich ist es weitgehend egal, wie schnell der Taster betätigt wird. Das Prellen ist wahrscheinlich wesenrtlich schneller. Wenn eine Software-Lösung gebraucht wird, würde ich folgendes machen: einen Zähler initialisieren, der sehr schnell läuft. Im Überlauf eine Variable inkrementieren. Wenn eine Tastenbetätigung detektiert wurde, die Variable auf Null setzen und bei der nächsten Tastenaktion die Variable auf einen Mindestwert prüfen. Den Mindestwert gilt es zu ermitteln. Alle Aktionen unterhalb dieses Mindestwertes ist Prellen.

Viel Glück Michael

RCO
14.10.2004, 09:25
Also wenn das so aufwendig ist, dann steige ich besser auf optische Sensoren um. Der Vorteil hier war eben nur, dass ich die 'Hardware' schon habe und schonmal keine Lichtempfindlichkeit herscht.

Also ich hab gestern Abend noch gelesen, dass es bei Countern eine Funktion Noice gibt:

Config Timer1 = Counter, edge = Falling, Noice Channel = 1...

Das soll dann solche Störungen unterdrücken.
Ich weiß allerdings nicht, ob das auch bei Timer0 funktioniert, ich werds heute mal ausprobieren.

Danke für die Hilfe

MFG Moritz

E-Fan
14.10.2004, 09:25
Vielleicht könnte man auch mit nem externen Interrupt arbeiten. In der Interruptroutine könnte man einen Timer starten, dessen Interrupt den µC dazu veranlasst einen Eingang mehrfach innerhalb von sagen wir mal 5 bis 10ms abzufragen und je nach Häufigkeit der gemessenen Pegel weiter rauf/runter zählt oder eben nicht.

(ist ja fast so wie Michaels Idee)

RCO
14.10.2004, 09:56
Also es muss nicht zwangsläufig eine Softwarelösung sein, allerdings habe ich nicht ganz verstanden, was E-Fan machen möchte.
Willst du nachdem der Interrupt ausglöst wurde noch mehrmals den Eingang abfragen, ob er sagen wir 2 von 3 mal high ist...
Naja, das würde vielleicht gehen, allerdings wäre mir da eine Hardwarelösung um einiges lieber.

MFG moritz

14.10.2004, 10:28
Wenn es außer den Kontakten, die zu zählen sind, noch eine Reihe von Kontakten gibt, die um ein Viertel des Rasters (90°) versetzt sind, dann kann man die zum Entprellen nehmen.

Egal wieviele Impuls kommen, gezählt wird nur einer, bis der Impuls aus der versetzten Reihe kommt und dann erst wieder wenn der versetzte Kontakt nicht mehr geschlossen ist.

So machen die Mäuse das und bestimmen dabei auch die Drehrichtung.
Manfred

RCO
14.10.2004, 10:41
Das die Mäuse daraus die Drehrichtung bestimmen ist mir bekannt, aber die Idee ist gut, man könnte ein UND-GATTER benutzen. Das Prüfen mit Hilfe des AVR ist zwar möglich, aber wird vermutlich sehr viel Leistung schlucken, schließlich muss bei jedem interupt geprüft und dann auch noch erhöht werden.

Frage ist nur, ob ein UND-Gatter nciht dieselben probleme haben könnte...

MFG Moritz

Manf
14.10.2004, 10:50
Das Prinzip beruht darauf, dass ein Schalter beim Schließen prellt danach nicht mehr. Wenn erständig flattert hat es keinen sinn.
Die externe Schaltung ist nicht ein Und Gatter, sondern ein Flip-Flop mit Daten- und Takt-Eingang. Erster Kontaktfächenschalter geht an Daten, versetzter an Takt.
Manfred

RCO
14.10.2004, 11:02
Wie sieht denn so ein einfaches Flip-Flop aus? Kann ich das mit dem NE555 machen?

Die Schaltung nach dem Bild liefert mir nun folgendes:

0 | 0 | 0
0 | 1 | 0
1 | 0 | 0
1 | 1 | 1

Und halt den Vorteil, dass erst 0 | 0 geherst haben muss, bevor der Ausgang wieder 1 werden kann. Die wahrscheinlichkeit, dass beide scheifer, auf dem kurzen Stück, wo beide Kontakte leiten gleichzeit keinen Kontakt ahebn, ist gering und die letzte Störquelle.

MFG moritz

Goblin
14.10.2004, 11:15
software-lösung:

du machst 2 schleifen. vereinfachtes basic:

high-schleife:
if kontkt then goto high-schleife
if nicht kontakt then zähle 1 und goto low-schleife

low-schleife:
if nicht kontakt then goto lowschleife
if kontakt then zähle1 und goto high-schleife



understanding?

Manf
14.10.2004, 11:32
Das eine ist mit Logik, das andere mit Zeitbedingung.
Ich würde speziell hier, wo es möglich ist, die Logik vorziehen.
Mit NE555'ern kann man grundsätlich alles bauen, aber ein RS FF gibt es auch als IC.
Eine weitere Möglichkeit zur Bestimmung der Kontaktflächen ist das Zählen im Foto. O:)
Manfred

PS: kannst Du mal prüfen, ob es auch damit geht?

RCO
14.10.2004, 11:48
@ Goblin:
Das löst das Problem des entprellen nicht! Er wartet zwar solange, wie high und wie low, aber durch unsaubere Schleifkontakte, kommt, obwohl der schleifer gerade mal über einer kontaktfläche ist, schon mal ein low raus, was dann eben mitgezählt wird. Ein vertiges Counterscript, was mit Hilfe des Timers läuft, also weniger Leistung schluckt, als Dauerschleifen habe ich schon.

@ Manf:
Was ist ein RS FF? Ist das das was ich da oben gemalt habe?
nun zum Bild:
Was genau soll das sein? ;-) Sinn der Sache ist doch, dass man zeischen den Eingängen unterscheiden kann, also solange nicht umgeschaltet wird, bis der andere EIngang einmal high war. Bei deinem Bild findet doch keine Eingangsunterscheindung statt, oder täusche ich mich.

MFg Moritz

Manf
14.10.2004, 11:59
Was genau soll das sein?
Weil Du nach Realisierung mit NE555 gefragt hast dachte ich , Du wärst an Sepziallösungen (Trickkiste und so) interessiert. Das ist ein Majortäts Gatter mit patieller positiver Rückkopplung.
Wenn man ganz genau hinsieht erkennt man die logische Funktion: Wenn beide Eingänge A = B =! C (Ausgang C) dann wird C = A, sonst C = C.
Und das Ganze auch noch asynchron.
Genau die gesuchte Funktion.
Die Realisierung ist speziell mit C-MOS Gattern möglich.
Manfred

allgemeine Grundlagen zu Flip Flops gibt es bestimmt sehr häufig im Netz wie auch
: http://www.e-technik.fh-kiel.de/~dispert/digital/digital4/dig004_4.htm

Starchild
14.10.2004, 12:21
Kondendsator und Widerstand seriell vor den Port hängen.
Der geschlossene Schalter läd den Kondensator über den Widerstand auf und nach einer best. Zeit steigt der Pegel am Mikrocontroller auf logisch 1.
Ist der Schalter geöffnet, entläd sichder Widerstand über einen größeren Widerstand gegen Masse wieder.
Bei dieser schaltung ist egal, wie oft der Schalter "springt".
allerdings reagiert er auch nicht sofort, sondern rst wen der Kondensator entladen bzw. geladen ist.

RCO
14.10.2004, 13:37
Puh, schwere Kost, damit muss ich mich erstmal was länger beschäftigen, kannst du mir schonmal nen Tip für ein IC geben, oder sagen wonach ich genau suchen soll? Mir würde da auch erstmla nen normales Flip-Flop reichen, alles ander krieg ich schon hin.

MFG moritz

RCO
14.10.2004, 13:50
Also nochmal drüber nachgedacht:

Für 2 Zähler, an jedem Rad einen, müsste ich mit 3 ICs auskommen:

1 x AND
2 x NOR:
-> 1 mal als Inverter (= 4 Inverter)
-> 1 mal als FLIP-FLOP (= 2 Flip-Flops)

Jetzt muss ich nur noch schaun, ob ich alles zu hause habe, vermutlich eher nicht.
Deine Logik stimmt!
Dann werd ich auch mal schaun, ob damit die Messung der Geschwindigkeit über Pulsein genauer wird, die schwankte nämlich ganz gewaltig!

Danke für eure Mühen

MFG Moritz

Manf
14.10.2004, 13:58
Inverter, oder Nand, oder NOR- Gatter mit 2 zusammengelegten Eingängen in CMOS :
CD4011, CD 4001, ......
Wenn die Widerstände alle gleich sind, dann ist die Eingangsspannung (A+B+C) /3.

Das ist kein logischer Pegel, aber freundlicherweise interprätiert ein CMOS Gatter ihn für 0V und 1,6V als "0" und für 3,3V und 5V als "1".

Dann kannst Du ja mal für C=0 und für C=1 die Funktion für A und B aufragen. Es ist für A=B ein Schmitt Trigger.

Für A und B beliebig ist es ein Majoritätsgatter, das sich mit dem Ausgang selbst hält bis die Mehrheit der Eingänge ihn überstimmt, dann schließt sich der Ausgang an, bis er wieder mit vom Gegenwert überstimmt wird.

Manfred

RCO
14.10.2004, 13:59
Sorry, hab dazwischengepostet.

Brauche insgesamt:
2 x AND-Gatter
6 x NOR-GAtter

Bleibt die Anzahl der ICs gleich, aber wenigstens sinds nicht mehr so viele Verbindungen.