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?
Am einfachsten ist es, einen Mikrocontroller zu verwenden, der Dekodierung von Quadratursignalen in Hardware bereits eingebaut hat. Z.B. XMEGA oder STM32.
Ansonsten: du kannst die Versionen ohne N nutzen genau wie bspw. die HCT-Versionen der TTL-Chips.
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
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.
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?
Es gibt aber bereits spezielle Encoderentprell ICs..komme aber nicht drauf, glaube vom Linear..muss ich zu Hause gucken..habe da was..
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.
Was für einen Drehimpulsgeber verwendest Du denn? Optische oder magnetische Geber können nicht prellen.
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?
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
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
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
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.
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
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
Das Verdrehen der beiden Pins habe ich schon probiert. Leider ohne Erfolg, außer dass der Motor danach spiegelverkehrt drehte.
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 ...
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.
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 |
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.
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
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 ?
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.