Forum: Mikrocontroller und Digitale Elektronik Wie Drehimpulsgeber entprellen


von Frank S. (hobbyist)


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?

von drama (Gast)


Lesenswert?

Am einfachsten ist es, einen Mikrocontroller zu verwenden, der 
Dekodierung von Quadratursignalen in Hardware bereits eingebaut hat. 
Z.B. XMEGA oder STM32.

von drama (Gast)


Lesenswert?

Ansonsten: du kannst die Versionen ohne N nutzen genau wie bspw. die 
HCT-Versionen der TTL-Chips.

von Volker S. (vloki)


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 ...

: Bearbeitet durch User
von Frank S. (hobbyist)


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.

von spontan (Gast)


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?

von Thomas D. (thomasderbastler)


Lesenswert?

Es gibt aber bereits spezielle Encoderentprell ICs..komme aber nicht 
drauf, glaube vom Linear..muss ich zu Hause gucken..habe da was..

von spontan (Gast)


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.

von Juups (Gast)


Lesenswert?

Was für einen Drehimpulsgeber verwendest Du denn?
Optische oder magnetische Geber können nicht prellen.

von m.n. (Gast)


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?

von Klaus (Gast)


Lesenswert?

Wenn es ein brauchbares Entprell-IC ist, könnte man den Arduino Pro Mini 
möglicherweise ganz weglassen. Was tut er dann noch?

MfG Klaus

von Frank S. (hobbyist)


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

: Bearbeitet durch User
von Volker S. (vloki)


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

von Stephan (Gast)


Lesenswert?

evtl. reicht es A und B zu vertauschen. Bei den billigen Gebern läuft 
oftmals eine Spur der anderen etwas voraus dann kippelt die vorlaufende 
Spur etwas.

von Frank S. (hobbyist)


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

von Volker S. (vloki)


Lesenswert?

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

von Frank S. (hobbyist)


Lesenswert?

Das Verdrehen der beiden Pins habe ich schon probiert. Leider ohne 
Erfolg, außer dass der Motor danach spiegelverkehrt drehte.

von Volker S. (vloki)


Lesenswert?

Frank Saner schrieb:
> Daher müsste ich einen "fertigen" Sketch finden, der das Problem löst.

m.n. schrieb:
> Ist das Programm irgendwo zu finden?

Also zeig doch mal deinen "Sketch" der den Geber handelt ...

von Stephan (Gast)


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.

von MaWin (Gast)


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

von Thomas D. (thomasderbastler)


Lesenswert?

Schaue mal den MAX6818 an..von mAxim, das ist das was ich meinte.

von suizidbastler (Gast)


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.

von Frank S. (hobbyist)


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

von vloki (Gast)


Lesenswert?

Bisher haben wir keine Ahnung, ob da sowieso ein Schmitt-Trigger Eingang 
am "Arduino-Teil" kommt und wie dein "Sketch" aussieht!
Wie soll da jemand sinnvoll antworten ?

von Wolfgang A. (Gast)


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.

von Frank S. (hobbyist)


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.

: Bearbeitet durch User
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.