Forum: Mikrocontroller und Digitale Elektronik Mehrere Inkrementalgeber auslesen


von Norbert (Gast)


Lesenswert?

Hallo zusammen,

ich muss mehrere Inkrementalgeber(bis 8 Stück) auswerten. Wichtig ist
die getrennte Zuordnung der Links-Rechtsimpulse. Alle 8 Encoder müssen
mit ihren A- und B-Leitungen entprellt sein.

Ich kenne zwar den Thread von Peter Dannegger in 'Codesammlung',
jedoch erscheint mir eine Softwarelösung zu zeitintensiv.

Mir ist zwar eine Hardwarelösung bekannt, die separiert aber nur die
Links-Rechtskanäle, macht aber keine Prellunterdrückung.

Kennt jemand eine komplette Hardwarelösung?

Vielen Dank für Hinweise!

Norbert

von ,,,, (Gast)


Lesenswert?

> jedoch erscheint mir eine Softwarelösung zu zeitintensiv.

Warum? Läuft doch alles im Timerinterrupt und das bisschen Pinabfrage
kostet doch nicht viel Zeit. Also effektiver dürfte es kaum gehen.

von Norbert (Gast)


Lesenswert?

Aber bis zu 8 Encoder am mega128, kommt es da nicht zu Konflikten?

Norbert

von Stefan Kleinwort (Gast)


Lesenswert?

Welche Frequenzen sollen die Encoder denn messen? Das ist der einzige
kritische Punkt.

Stefan

von Norbert (Gast)


Lesenswert?

Frequenz bis zu 5kHz bei einer 1000er Scheibe. Evtl. können wir eine
500er Scheibe nehmen, dann wären das 2,5kHz.

Norbert

von Stefan Kleinwort (Gast)


Lesenswert?

5khz sind mit Software-Enprellung kein Problem. Nimm einen Timer-IR mit
20khz und frage darin alle 8 Kanäle ab. Orientiere Dich an Peter
Daneggers Entprell-Routine.

> Kennt jemand eine komplette Hardwarelösung?

Sorry, wenn ich Deine eigendliche Frage ignoriert habe, aber den
Hardwareaufwand würde ich mir sparen ...

Viele Grüße, Stefan

von Rahul (Gast)


Lesenswert?

Hardware-Lösungsvorschlag: Mega16 oder so nur für die
Inkrementalgeber, und den dann irgendwie an den 128 knoten...

Was soll dein Controller denn sonst noch machen?
Wenn man den mit 16MHz betreibt, hat er doch ohne Ende Reserven.

von Michael (Gast)


Lesenswert?

Meine Einschätzung ist, daß 8 Kanäle mit 5kHz mit einem AVR, wenn
überhaupt, nicht problemlos erledigt werden können.
Um auf der sicheren Seite zu sein, würde ich für ein bis zwei Kanäle je
einen Mega8/Tiny2313 einsetzen und diese dann per UART/IIC auslesen.
Da in allen Sub-µCs die gleichen Programme laufen, ist die Entwicklung
nicht aufwendig; der Hardwareaufwand ist dadurch gerechtfertigt, daß
die Sache sicher funktioniert und es nicht sporadisch zu
Falschzählungen kommt.

von Norbert (Gast)


Lesenswert?

a) Die Encoder sitzen an Achsen von Transportbändern. Es wird u.a. eine
Geschwindigkeitsregelung für jedes Band benötigt. Dazu kommen Tastaur,
Grafikdisplay, div.I/Os usw.

b) Ein anderes Projekt benutzt die selben Encodersignale zur mm-genauen
Positionierung.

Geld und Materialaufwand sind hier nicht wichtig. Wegen b) will ich
kein Risiko eingehen. Deshalb meine Frage.

Besten Dank für eure Tipps!

Norbert

von Michael (Gast)


Lesenswert?

Ich habe noch einen Link für Dich:
http://www.mino-elektronik.de/mt12_iic/mt12_iic.htm

Für Deine Anwendung kann der Analogkram weggelassen werden. Ich setze
diese Schaltung für Heidenhain-Taster ein; maximal 5 auf einer
Leiterplatte.

von Peter Dannegger (Gast)


Lesenswert?

@Michael,

"Meine Einschätzung ist, daß 8 Kanäle mit 5kHz mit einem AVR, wenn
überhaupt, nicht problemlos erledigt werden können."


Diese Einschätzung ist falsch.

In Assembler benötigt man 13 Zyklen pro Kanal, mit 12 Zyklen
Interruptrahmen sind das insgesamt 116 Zyklen, d.h. Du kannst mit
137kHz abtasten, was weit über den benötigten 5kHz liegt.

Um nun dem Main noch reichlich Rechenzeit übrig zu lassen, würde ich
mit etwa 20kHz abtasten.

Probleme könnten nur andere Interrupts machen, wenn diese zu lange
sperren.
Dann könnte es was bringen, z.B. einen ATMega48 nur für die Encoder
abzustellen und diesen per SPI auszulesen.


Peter

von Michael (Gast)


Lesenswert?

@Peter

Wie ich sehe, teilst Du meine Einschätzung, indem Du gleich die
Probleme aufzeigst, die sich ergeben könnten.

von Ulrich (Gast)


Lesenswert?

also falls ein Interrupt die Programmierung mit einem Mikrocontroller
unmöglich macht dann tut es mir erstmal für dich leid ;-) und dann
würde ich dir als 2. den Tipp geben eventuell ein CPLD zu nehmen.
Ich würde die Messwerterfassung warscheinlich auch mit einem seperaten
IC machen. Why not ein CPLD dort gibts auf jedenfall keine störenden
Interrupts

von Rahul (Gast)


Lesenswert?

Wenn man das Programm und vor allem die ISR richtig plant, steht einer
Einzel-Controller-Varinate nichts im Weg.
Ich würde es mit einem Controller ausprobieren.
Notfalls könnte man es noch mit einem externen Drehencoder-Controller
machen...

von Rahul (Gast)


Lesenswert?

...Variante...

von Norbert (Gast)


Lesenswert?

Habt erstmal Dank für eure Anregungen.

Auch unter meinen Kollegen wird ein Für und Wider dikutiert.

Die Forderung sieht mittlerweile vor, daß alle Kanäle auf
Kurzschluss(A=B), falsche Impulsfolge und Impulsausfall detektiert
werden sollen.

Da der mega128 mit seiner einfachen Interruptstruktur von weiteren
Interruptquellen(Ext., USART) angefordert wird, geht die Tendenz bei
uns in der Tat zur CPLD-Lösung.


Schönen gruß   Norbert

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.