Wie Drehimpulsgeber entprellen

OP #4026477
Lesenswert?

Ich habe, wie viele andere, das Problem, dass in einer fertigen 
Anwendung (Ansteuerung eines Schrittmotors) der Drehimpulsgeber 
gelegentlich prellt, wodurch der Motor einen oder mehrere Schritte in 
nicht vorhersehbare Richtungen macht. Da es ein fertiges Projekt mit 
einem Arduino Pro Mini ist und ich nicht programmieren kann, würde ich 
das Problem gerne auf Hardwareebene lösen.

Diese Lösung funktioniert überhaupt nicht. Der Motor macht praktisch was 
er will. http://www.elektronik-bastelkeller.de/stec12E07.php

Bei der Suche hier im Forum bin ich auf diesen Artikel gestoßen:

http://www.mikrocontroller.net/articles/Drehgeber

Die dort am Ende erwähnte Schaltung möchte ich nachbauen und zwischen 
den Drehimpulsgeber und den Arduino schalten. Hierzu habe ich aber noch 
ein paar Fragen:

Bei reichelt gibt es nur den Typ 74HC174 (ohne N). Welchen Unterschied 
macht das fehlende "N"? Könnte man den Baustein ohne "N" trotzdem 
verwenden? Die gleiche Frage stellt sich beim 74HC86.

Die Beschaltung verstehe ich so:

A IN = Drehimpulsgeber (z. B. linker Pin)
B IN = Drehimpulsgeber (z. B. rechter Pin)
GND = GND (mittlerer Pin Drehimpulsgeber)
Vcc = 5V
DIRECTION = Ausgang auf Arduino (wo vorher der Drehimpulsgeber 
angschlossen war)
CLOCK ENABLE = Ausgang auf Arduino (wo vorher der Drehimpulsgeber 
angschlossen war)

Habe ich das soweit richtig verstanden?

Aber was kommt an CLK? Muss ich da einen Quarz anschließen? Falls ja, 
wie genau wird das beschaltet? Oder kann ich CLK auf einen PIN des 
Arduino Pro Mini legen?
#4026503
Lesenswert?

Frank Saner schrieb:
> Diese Lösung funktioniert überhaupt nicht. Der Motor macht praktisch was
> er will. http://www.elektronik-bastelkeller.de/stec12E07.php

Sieht aus wie aus einem Drehimpulsgeber Datenblatt ;-)
Habe ich selber auch schon so gemacht und es funktioniert sehr gut.
(((
- PIC Controller
- Ein Signal auf einen Interrupt-Eingang
- das andere wird dann im Interrupt abgefragt
- Widerstände waren 4k7
)))

Die zweite Schaltung passt vermutlich nicht zu deiner Anwendung
wenn du nicht das Programm ändern willst ...
OP #4026547
Lesenswert?

Danke für die schnellen Antworten. Wie schon erwähnt, ist das Projekt 
fertig gestellt und alles verbaut. Daher werde ich keinen anderen µC 
nehmen können. Da ich auch nicht programmieren kann, kommt für mich nur 
eine Hardwarelösung in Frage.

Könnte mir noch jemand etwas zu meiner Frage bezüglich CLK sagen?

Das hier habe ich auch noch gefunden. Der Unterschied liegt in der 
Anordnung der Widerstände zu den Kondensatoren. In der ersten verlinkten 
Schaltung sind sie in Reihe und hier parallel geschaltet. Das habe ich 
aber noch nicht getestet.

http://www.cc-zwei.de/wiki/index.php?title=Datei:ATM_18_RE_02.jpg

Die Version von hier http://www.elektronik-bastelkeller.de/stec12E07.php 
funktioniert bei mir definitiv nicht. Da macht der Motor praktisch was 
er will.

Frank.
Gast #4026550
Lesenswert?

Die Bastelkellerlösung hat den Nachteil, daß sie bei höheren Frequenzen 
nicht funktionieren kann. Die geht nur bei langsamer Bedienung per Hand.

Wie betreibst Du den Encoder? Per Hand, recht flott?
Gast #4026557
Lesenswert?

Zu CLK:

Die Schaltung von hier kannst Du nicht verwenden, sie ist auch keine 
Entprellung der A/B-Signale, sondern sie erzeugt andere Signale DIR und 
CLK.

Ohne Programmänderung passen diese SIgnale nicht an Deine Software.
Gast #4026573
Lesenswert?

Frank Saner schrieb:
> Diese Lösung funktioniert überhaupt nicht. Der Motor macht praktisch was
> er will. http://www.elektronik-bastelkeller.de/stec12E07.php

Bei dieser Lösung werden die Eingangssignale mit 1 kHz per Software 
entprellt.

Frank Saner schrieb:
> Da es ein fertiges Projekt mit
> einem Arduino Pro Mini ist und ich nicht programmieren kann, würde ich
> das Problem gerne auf Hardwareebene lösen.

Ist das Programm irgendwo zu finden?
OP #4026579
Lesenswert?

Ich verwende diesen Drehimpulsgeber

http://www.reichelt.de/Drehimpulsgeber/STEC11B13/3/index.html?&ACTION=3&LA=2&ARTICLE=73916&GROUPID=3714&artnr=STEC11B13&SEARCH=Drehimpulsgeber

Gedreht wird nicht allzu schnell von Hand.

edit: Die letzten Beiträge kamen, während ich hier schrieb. Daher dieser 
Nachtrag.

Der Arduino steuert ein LCD an, wertet Sensoren aus, etc. Er ist also 
nicht austauschbar. Das ist im Prinzip alles nicht zu ändern. Den Sketch 
bekomme ich wahrscheinlich auch nicht mehr. Nur in die Verbindung vom 
Drehimpulsgeber zum Arduino könnte ich etwas einschleifen.

Wie heißt denn das erwähnte Entprell-IC?

Frank
#4026601
Lesenswert?

Frank Saner schrieb:
> Ich verwende diesen Drehimpulsgeber
>
> 
http://www.reichelt.de/Drehimpulsgeber/STEC11B13/3/index.html?&ACTION=3&LA=2&ARTICLE=73916&GROUPID=3714&artnr=STEC11B13&SEARCH=Drehimpulsgeber
>
> Gedreht wird nicht allzu schnell von Hand.

Möglicherweise passen der Encoder und dein Programm einfach nicht 
zusammen.
Es gibt da verschiedene Arbeitsweisen der Schalter:
- Die Schalter schließen während dem Drehen am Rastpunkt kurz und öffnen 
dann beide wieder.
- ODER die Schalter wechseln am Rastpunkt von zwischen Öffnen und 
Schließen
OP #4026629
Lesenswert?

Ich denke schon, dass das ganz gut passt. Es passiert ja auch nicht 
regelmäßig oder häufig, dass der Motor wegen eines Prellers springt. 
Aber trotzdem möchte ich auch diese paar Preller vermeiden.

Theoretisch könnte ich sogar einen Sketch auf einen ATtiny85 brennen und 
den dann zwischen den Arduino und den Drehimpulsgeber hängen. Das 
Brennen bekomme ich hin, nur kann ich, wie gesagt nicht programmieren. 
Daher müsste ich einen "fertigen" Sketch finden, der das Problem löst.

Frank
Gast #4026669
Lesenswert?

Volker SchK schrieb:
> Stephan schrieb:
>> Bei den billigen Gebern läuft
>> oftmals eine Spur der anderen etwas voraus
>
> So billig sieht der aber gar nicht aus !
>
> Volker SchK schrieb:
>> ... am Rastpunkt ...
> Sollte wohl besser zwischen den Rastpunkten heißen

die Alps sind nicht besser als die billigen von Pollin.
Habe ich schon durch.
Gast #4026750
Lesenswert?

Frank Saner schrieb:
> Ich habe, wie viele andere, das Problem, dass in einer fertigen
> Anwendung (Ansteuerung eines Schrittmotors) der Drehimpulsgeber
> gelegentlich prellt

Eigentlich hat niemand das Problem, denn wenn man die Auswertung richtig 
macht, stört mechanisches Prellen oder flattern durch Vibrationen nicht.

http://www.dse-faq.elektronik-kompendium.de/dse-faq.htm#F.29

Du hast also eine Murksschaltung
"ein fertiges Projekt mit einem Arduino Pro Mini"
die mit Drehgebern nicht ordentlich umgeht.

> und ich nicht programmieren kann

Doch, man behebt das Problem genau dort. Ein korrektes Entprellen eines 
Drehencoders ist NICHT möglich, denn man kann Prellen nicht von flattern 
unterscheiden. Wenn man die maximale Drehzahl kennt und damit 
Abtastfrequenz, kann man mit einem NE555 der ein Taktsignal auf der 
nötigen Frequenz erzeugt eine Synchronisierung bauen, durch die 
schnellere Bewegungen ausgeblendet werde:
1
               +---+
2
Encoder A -----|D Q|--- Auswertung A
3
               |   |
4
            +--|CLK|
5
            |  +---+
6
            |
7
            |  +---+
8
Encoder B --(--|D Q|--- Auswertung B
9
            |  |   |
10
NE555 ------+--|CLK|
11
               +---+
12
           CD4013/74HC74
Gast #4027211
Lesenswert?

Frank Saner schrieb:
> Diese Lösung funktioniert überhaupt nicht. Der Motor macht praktisch was
> er will. http://www.elektronik-bastelkeller.de/stec12E07.php

die Schaltung funktioniert nur, wenn dahinter ein Eingang mit einem 
Schmitt-Trigger kommt. Falls deine Eingänge das nicht haben, könntest du 
zwei Inverter aus einem 74HC14 dazwischen schalten.

Außerdem passen die Werte nicht zu den Prellzeiten des Impulsgebers. 
Nimm mal für R3 und R4 100k.
OP #4027504
Lesenswert?

Da ich die Widerstände und einen 74HC14 hier habe, würde ich es mit dem 
Vorschlag von suizidbastler probieren. R3 und R4 habe ich schon gegen 
die 100KOhm Widerstände getauscht.

Wäre die Beschaltung des 74 HC14 so richtig:

http://www.mikrocontroller.net/articles/Schmitt-Trigger
(Taster entprellen mit 74HC14)

Oder müssen für die Widerstände am IC andere Werte genommen werden?

Frank
Gast #4027611
Lesenswert?

Frank Saner schrieb:
> Ich habe, wie viele andere, das Problem, dass in einer fertigen
> Anwendung (Ansteuerung eines Schrittmotors) der Drehimpulsgeber
> gelegentlich prellt

Ein Inkrementalgeber mit A/B Signal und 2-Bit Gray-Code kann, auch beim 
Prellen an einer Signalflanke, nicht zu Positionsfehlern führen, wenn 
der Dekoder fehlerfrei arbeitet.
Andernfalls ist die Auswerteschaltung Murks.
OP #4027637
Lesenswert?

Ich habe jetzt den vorgeschlagenen 74 HC14 (wie im vorigen Post verlinkt 
mit den 10K Widerständen) genommen und nun läuft es nach diversen 
Testdrehungen (bisher) ohne Fehler. Der Motor überspringt keine Raste 
mehr und läuft auch nicht mehr in die falsche Richtung.

Den Sketch habe ich nicht. Daher kann ich ihn nicht posten. Das schrieb 
ich bereits zu Anfang.

Zwischen dem Drehimpulsgeber und dem Arduino ist bisher keine weitere 
Schaltung gewesen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren