Archiv verlassen und diese Seite im Standarddesign anzeigen : Drehzahlmessung mit Optoelekronik aus Maus
Searcher
22.10.2011, 14:50
Hallo,
ich habe aus einer Kugelmaus Encoderscheibe, Fototransistoren und IR Leds ausgebaut und an einem Getriebe zum Zwecke der Drehzahlmessung angebracht.
Es sind je zwei Fototransistoren in einem Gehäuse untergebracht, so daß man die Drehrichtung der Encoderscheibe anhand der Reihenfolge der eintreffenden high Impulse dieser beiden Transistoren feststellen kann.
Die high Impulse überlappen sich - heißt bei Vorwärtslauf schaltet T1 auf high, danach T2 auf high, dann T1 auf low, T2 auf low. Pause, Spiel beginnt von neuem. Bei Rückwärtslauf schaltet T2 zuerst auf high.
Laut RN-Wissen würde man die Pegel pollen (http://www.rn-wissen.de/index.php/Beispiel_Drehzahlmessung_mit_Drehgeber) und nach den erhaltenen Werten die Drehzahl ausrechnen.
Ich hatte mir gedacht, die Impulse der Transistoren per Pin Change Interrupt zu zählen. Dazu habe ich mir angehangene Schaltung ausgedacht. Diagramm ist von rechts nach links zu lesen (beginnt mit T1 von low nach high als Vorwärtslaufsequenz - A1 wird als erstes high. Es folgt nach der Pause die Rückwärtslaufsequenz mit T2/A2 zuerst high).
https://www.roboternetz.de/community/attachment.php?attachmentid=20337&d=1319287335
https://www.roboternetz.de/community/attachment.php?attachmentid=20338&d=1319287381
Sinn ist, daß der Ausgang (µC Eingang) high ist, dessen Transistor zuerst high geworden ist. Damit könnte man je einen Pin für Vorwärtslaufzählung und Rückwärtslaufzählung verwenden und die Counter im Programm in festen Intervallen abfragen.
Das könnte das Programm vereinfachen, erhöht aber natürlich wieder den HW-Aufwand ;), insbesondere auch, da die Impulse von den Transistoren erst noch mit einem Komparator aufbereitet werden müssen.
Ich stell das mal zur Diskussion ein und sehr gerne sind auch Vereinfachungen zur Signalaufbereitung gesehen ;)
PS. Hab die maximale Frequenz, die an den Ausgängen auftreten kann noch nicht gemessen. Dürfte aber so bis 6 kHz gehen.
Gruß
Searcher
Hie gibt es das Thema Quadratursignale mit einer Ansteuerung für einen up/down counter. Vielleicht ist noch eine Anregung für eine HW Vereinfachung drin.
https://www.roboternetz.de/community/threads/9008-Zähleransteuerung-mit-Quadratursignalen
Vor allem soll die Darstellung zeigen, wieviele Übergänge in dem Quadat der 4 Zustände sind und welche ausgewertet werden sollen und können.
Hallo!
Ich möchte nur einen ausprobierten Programablaufdiagram (PAD) für Auswertung eines Drehencoders mit jedem µC vorschlagen ( http://www.rn-wissen.de/index.php/PIC_Assembler#Mausrad_bzw._Drehencoder ), da eine diskrete Lösung mit einfachen Gättern ohne 2-bit Speicher unmöglich ist. Nur für Messung der Drehzahl in einer Richtung enfällt die Hälfte davon, weil entweder _Finc bzw. _Fdec nötig ist. Deshalb reicht dafür ein Pin und 1-bit Speicher (Flag) aus. ;)
Besserwessi
22.10.2011, 22:31
Die Lichtschranken haben in de Regel kein oder wenig Prellen. Wenn man bei der Umsetzung in ein Digitales Signal einen Schmidt-trigger mit genügend Hysterese nimmt, sollte das Signal frei von Störungen sein. So lange man nicht die Richtung erfassen muss, kann man dann einen Zähleingang am µC nutzen, oder für die Drehzahlmessung mit sehr hoher Auflösung (vor allem bei niedriger Drehzahl) auch direkt den ICP Eingang.
Um jeden Schritt wirklich zu erfassen kann man auch direkt den Pin Change Interrupt nehmen, solange das Signal frei ist von schnellen Störungen. Um sicher zu gehen das HF Störungen den µC nicht überlasten wäre wie bei den mechanischen Gebern ein Pollen, z.B. im Timer Interrupt angebracht. Auch 6 kHz Zählfrequenz sind nicht so schnell.
Searcher
23.10.2011, 12:16
Vielen Dank für eure Hinweise.
Nach Lesen der Beiträge zu den Links, vor allem von Deinem Manf, hat die oben gezeigte Schaltung den Nachteil, daß sie bei Drehrichtungsumkehr in einem ungünstigen Moment falsch zählen würde.
Wenn T1 high ist und T2 heigh wird, wird A1 high. Wird die Richtung in diesem Augenblick umgekehrt bis T1 und T2 low sind, ist ein Puls gezählt. Nun könnte wieder eine Hin- und Herbewegung stattfinden (T1 high, T2 high - T2 low, T1 low) bei dem ein weiterer Puls am gleichen Ausgang gezählt würde, obwohl keine Fortbewegung stattgefunden hat.
Richtig wäre eine Schaltung, die eine "gute" komplette Sequenz abwartet und in der "Pause (T1 = 0 und T2 = 0) den entsprechenden richtigen Ausgang pulst? Da kommt dann wohl Dein 2 Bit Speicher zum Einsatz, PICture?
Weil ich jetzt schon die Vorrichtung habe, die Vorwärts- und Rückwärtszählung erlaubt, möchte ich auch versuchen, die entsprechenden Zählungen durchzuführen. Ein Interrupt, der sich auf Triggerung über eine Flanke konfigurieren läßt wäre günstiger als ein PCINT. Die kleinen AVR haben davon jedoch zu wenig. Wenn man noch eine zweite solche Meßanordnung einen µC anbringt, braucht man schon vier Leitungen. Pollen käme dann vielleicht doch in Frage. Die Auswertung ob Vorwärts- oder Rückwärtszählung wäre mit der HW-Erweiterung schon einfacher!?
Hab die Schaltung aus der Kopfnuß noch nicht genau nachvollzogen. Dort wird, soweit ich gesehen habe, mit einem Richtungsbit und einem Puls zur Auswertung des Richtungsbits gearbeitet.
Bei mir käme ein Puls auf einer der beiden Richtungsleitungen. Ich kann noch nicht überblicken, was für Programm und/oder Hardware günstiger wäre.
Gruß
Searcher
Hallo Searcher! :D
Die Auswahl der verwendeter Methode ist natürlich frei. Früher habe ich s.g. TTL Grab's gebaut und heute wären es wahrscheinlich CMOS Grab's o.ä. Seit es µC's gibt, habe ich bisher immer die einfachste Lösung als Kompromis von Hard- und Software als optimal angenommen und somit die externe Hardware aufs Minimum reduziert, weil die Software im µC kein Platz mehr als einfachere braucht und auch nicht mehr wiegt. Als grössten Vorteil der Software finde ich, dass man sie nicht bestellen und auf die Lieferung warten muss. Ausserdem ist mir bisher, sogar bei Fehler, noch keine Zeile abgeraucht. :lol:
Searcher
24.11.2011, 13:39
Obwohl ich mittlerweile das Quadratursignal per SW auf einem µC auswertet habe, läßt mich der Gedanke an eine HW-Unterstützung nicht los. Der SW-Algorithmus (http://www.rn-wissen.de/index.php/Drehencoder#Hannes-Lux-Methode_als_Alternative_zum_ENCODER-Befehl) erzeugt aus einem zwischengespeicherten Bitmuster, daß die Reihenfolge der Zustände des Quadratursignals wiedergibt, einen Index. Der Index zeigt auf eine Tabelle, in der steht, ob es vorwärts, rückwärts oder gar nicht geht.
Weil es mir vor IC-Leichen und TTL-Gräbern nicht graust, kam mir der Gedanke, die beiden Leitungen des Quadratursignals so an ein Schieberegister anzuschließen, daß bei jedem Flankenwechsel der jeweilige Zustand der flankenverursachenden Leitung ins Register geschoben wird. An einem 8bit Schieberegister (zB 74HC595) könnte man dann am Ausgang den Zustand einer kompletten Periode abgreifen. Bliebe noch die Auswertung der Ausgänge des Schieberegisters.
Ziel wäre immer, noch zwei Leitungen zu bekommen; eine, auf der Vorwärtsimpulse kommen und die andere, auf der Rückwärtsimpulse kommen oder eben keine Impulse bei Stillstand/ungültige Zustandswechsel.
Quasi in HW gegossene SW-Lösung. Der Atomausstieg wurde auch beschlossen :-) .Idee ist noch frisch und würde vermutlich pro Quadratursignal außer dem Schieberegister ein weiteres IC, paar Dioden etc benötigen. Man hätte jedoch mit "Hausmitteln" eine billige high speed Lösung, die kaum Rechenzeit im µC beanspruchen würde.
Gruß, Euer manchmal nicht ganz dichter aber gerne bastelnder
Searcher
PS. Gerade auf Umwegen gefundene, noch nicht untersuchte Schaltung.
http://www.engr.colostate.edu/~dga/m...gures/9-18.jpg (http://www.engr.colostate.edu/%7Edga/mechatronics/figures/9-18.jpg)
Searcher
26.11.2011, 09:39
Hallo,
es geht weiter mit der zuletzt gefundenen Schaltung:
http://www.engr.colostate.edu/~dga/mechatronics/figures/9-18.jpg (http://www.engr.colostate.edu/%7Edga/mechatronics/figures/9-18.jpg)
Hab das probiert (den Schieberegisterversuch erstmal zurückgestellt :-) ), und es ist etwas besser als meine am Anfang gepostete Schaltung. Leider ist es auch da möglich, daß, wenn der Encoder zwischen bestimmten Stellungen pendelt, eine Falschzählung zu bekommen.
Die Schaltung hab ich dann mit weiteren 2 D-Flip-Flops erweitert um auf den von PICture erwähnten 2-Bit Speicher je Kanal (A und B) zu kommen. Mit weiteren, für mich nötigen 4 NANDs brauch ich glatt 3 ICs (2 X 74HC74, 1 X TC4093). Damit ist es dann möglich, einen Ausgang für die Vorwärts- und einen für die Rückwärtszählung zu bekommen.
Ich trau mich nicht, die Schaltung anzuhängen, da der Umfang selbst für mich noch nicht ganz akzeptiert ist.
Ich versuche weiter ...
Gruß
Searcher
Searcher
28.11.2011, 20:16
Hallo,
Hie gibt es das Thema Quadratursignale mit einer Ansteuerung für einen up/down counter. Vielleicht ist noch eine Anregung für eine HW Vereinfachung drin.
https://www.roboternetz.de/community/threads/9008-Zähleransteuerung-mit-Quadratursignalen
...
Es hat eine Vereinfachung gegeben :-) Hab die Schaltung aufgebaut. Aber kaum, daß ich ein Programm dazu schreiben wollte, fiel mir auf, daß ich eigentlich keine Taktimpulse brauche, um nur bei steigender Flanke auszuwerten. Der bei mir vorgesehene Pin Change Interrupt wird bei steigender und bei fallender Flanke ausgelöst und somit hat sich folgende Schaltung ergeben:
Delay XOR
______ __
.--|______|--------\\ \
| || |----------- UP/DOWN
| .-----//__/
| |
| |
| | XOR
| | __
A -------o------------)-----\\ \
| || |----------- CLOCK
B --------------------o-----//__/
Bei jeder Änderung durch das Quadratursignal an A oder B wechselt Clock seinen Pegel und kann einen PCINT auslösen. Das UP/DOWN Signal kann dann in der ISR ausgewertet werden. Das Delay bestimmt die Zeit, in der ein gültiges UP/DOWN Signal anliegt und ausgewertet werden muß.
Damit könnte man mit einem 7414 und R/C für das Delay und eventuelle Aufbereitung des Encodersignals plus einem 7486 für zwei Encoder auskommen und die ISR(s) ist auch sehr kurz zu halten, werden aber bei allen A B Pegelwechseln aufgerufen.
Die Anordnung scheint gut und richtig zu funktionieren. Hoffe nicht, das mir irgendein Testfehler unterlaufen ist.
Jetzt muß ich mich in meinem aktuellen Projekt nur noch zwischen der SW-Lösung und dieser HW-unterstützten entscheiden:confused: und versuchen den Phasenversatz möglicht genau auf 90° zu bringen.
Gruß
Searcher
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.