www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 2 Incrementalgeber koppeln


Autor: R. E. (waschle)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, ich habe schon das ganze Internet durchgestöbert, nix gefunden.
Vielleicht kann mir hier jemand helfen. Ich möchte 2 Incrementalgeber 
mit RS422, also  A /A,B /B, Z /Z Spuren auf einen Koppler , der daraus 
ein
Signal macht. Sowas gibt es fertig bei dig. Maßstäben, z.b. bei einer 
Drehbank, weil die ja oft 2 Z Achsen hat, eine am Maschinenbett und eine 
am Support. Der Nachteil bei fertigen Kopplern ist, dass die Signale 1:1 
summiert oder abgezogen werden. Ich bräuchte aber noch einen 
Getriebefaktor, am besten einstellbar oder fest programmiert.
Hat jemand eine Ahnung, wo man sowas kriegt?
Danke im Voraus
Waschle

Autor: Frank Buss (foobar)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Verstehe ich nicht was das mit RS422 zu tun hat. Ein Inkrementalgeber 
hat ja phasenverschobene Signale. Der RS422-Standard hat keine 
phasenverschobene Signale, sondern immer nur wenn A positiv ist, dann 
ist /A negativ und umgekehrt. Oder willst du die Positionen irgendwie 
codiert übertragen?

Ansonsten würde ich einen Mikrocontroller nehmen. Ist recht einfach, 
sowas zu programmieren. Man könnte z.B. die geringere Geschwindigkeit 
als Maßstab wählen, aber im Microcontroller mit der höheren 
Geschwindigkeit zählen, sodaß ein Impuls am Ausgang generiert wird, wenn 
x Impulse am Eingang mit der höheren Geschwindigkeit reinkommen.

Ist allerdings ein wenig von hinten durch die Brust. Wenn deine 
Steuerungslogik es erlaubt, einfach alle Inkrementalgebersignale 
reingeben und dort auswerten. Die Lösung mit vorgeschalteten 
Microcontroller und Neugenerierung der Inkrementalgebersignale finde ich 
nicht so elegant.

Autor: Waschle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die schnelle Antwort.
Dass das nicht elegant ist, weiß ich. Aber die Steuerung lässt nix 
anderes zu. Wenn sich die Achse in Lageregelung befindet, regelt sie 
automatisch nach, wenn sich die Incremente dazuaddieren oder abziehen.
Deshalb die vorgeschaltete Box.
Waschle

Autor: Lehrmann Michael (ubimbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frank Buss schrieb:
> Verstehe ich nicht was das mit RS422 zu tun hat.

Waschle schrieb:
> Dass das nicht elegant ist, weiß ich.

Das gibt es nicht. Zumindest ist es kein RS422. Wie es sein könnte:
Decoder -> Codierung -> RS422

Was man dann machen könnte:
Decoder -> AVR/Microncontroller (verändert Signale) -> Codierung -> 
RS422
                ^
               das wäre dann 'die Box'

Das liese sich realisieren. Fertig gibt es sowas mit an Sicherheit 
grenzender Warscheinlichkeit nicht. Entweder lernst du selbst C + AVR
http://www.mikrocontroller.net/articles/AVR
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial

oder du beauftragst jemanden hier im Forum mit der Konstruktion eines 
solchen Projektes. Kostenpunkt mit Material ~ 100-120€ ... je nach 
Anforderungen an die Einstellbarkeit (evtl. Display, etc)

Autor: Waschle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du meinst, mit ca 120 Euro wäre ich dabei?
Mach ich sofort.
Aber nochmal die Anforderung, damit wir vom gleichen reden:
Die Encoder liefern die digitalen Spuren a und b, die 90° auseinander 
liegen.
Damit kann man feststellen, wie rum die Encoder drehen. Dann gibt es 
noch das Z Signal, das kommt einmal pro Umdrehung.
Die Topologie ist RS 422.
Die Problematik ist folgende: Der eine Encoder liefert zb. 1500 Impulse 
pro Umdrehung, der andere zb. 4096 Impulse pro Umdrehung.
Also müssten meiner Meinung nach (als Programmierlaie) im 
Microcontroller 2 unabhängige Zähler laufen, die unabhängig für sich vor 
oder zurückzählen.
Die 2 Ergebnisse müssten mit einem Teiler oder Multiplizierer angepasst 
werden können. Dann werden die 2 Ergebnisse in einem weiteren Zähler 
summiert. Unter Umständen über eine Anzeige angezeigt werden. Dann aber 
müssten wieder die Impulse A B und Z ausgegeben werden. Wobei mir Z von 
einem Geber reichen würde. Also Z wäre aussen vor. Müsste nur 
durchgeschleift werden.
Wo kann ich denn so eine Anfrage stellen, wer mir das machen könnte?
Habe ich das hiermit schon getan?
Danke mal
Waschle

Autor: Frank Buss (foobar)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also RS422 wäre es nicht, wie schon geschrieben, da es bei RS422 keine 
um 90° phasenverschobene Signale gibt. Wenn du aber noch was zur 
Spannung der Signale sagst und wie schnell es sein soll, dann kommen wir 
der Sache schon näher, denn bei 4096 Impulsen pro Umdrehung und 
Maschinen da dran, die vielleicht auch noch hoch drehen mit vielleicht 
bis zu 100 Umdrehungen pro Sekunde, wird könnte ein kleiner AVR schon 
ins schwitzen kommen. Per CPLD sollte es aber auch im MHz-Bereich noch 
machbar sein.

Wenn du es nicht selber bauen willst, dann ist es laut Netiquette 
besser, wenn du im Markt-Forum nochmal eine Anfrage stellst, am besten 
mit exakter Anforderungsbeschreibung, damit man auch realistische 
Angebote machen kann.

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klar gibts die Geber mit RS422, ist halt nur das elektrische Interface. 
5V differenzielle Ausgänge. Und davon 3 Stück, also insgesamt 6 
Anschlüsse. Aber das voneinander abziehen ist nicht sooo trivial, vor 
allem bei unterschiedlichen Auflösungen. Und dann muss man es ja auch 
wieder ausgeben, da muss man dann die unteren beiden Bits des Zählers in 
Graycode wandeln. Insgesamt würde ich sagen, ist das eher eine Aufgabe 
für einen FPGA.

Autor: Reinhard Kern (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Waschle schrieb:
> Die 2 Ergebnisse müssten mit einem Teiler oder Multiplizierer angepasst
> werden können. Dann werden die 2 Ergebnisse in einem weiteren Zähler
> summiert. Unter Umständen über eine Anzeige angezeigt werden. Dann aber
> müssten wieder die Impulse A B und Z ausgegeben werden.

Hallo Waschle,

bis dahin richtig, aber da liegt der Haken - mit welcher Taktrate? Damit 
das für die Steuerung einen Sinn ergibt, muss man nicht nur die 
Positionen verrechnen, sondern auch die Taktraten = 
Verfahrgeschwindigkeiten addieren bzw. subtrahieren und die 
Ausgabesignale mit einer Taktrate entsprechend der resultierenden 
Verfahrgeschwindigkeit ausgeben. Das wird viel komplizierter und 
rechenintensiver als du annimmst. Aber wenn dir das jemand für 120 Euro 
machen will, schliess sofort einen wasserdichten Vertrag.

Gruss Reinhard

Autor: Waschle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Cristian,
Christian R. schrieb:
> Klar gibts die Geber mit RS422, ist halt nur das elektrische Interface.
>
> 5V differenzielle Ausgänge. Und davon 3 Stück, also insgesamt 6
>
> Anschlüsse

Genau so ist es. Noch 2 Anschlüsse für die 5V und Gnd.

Christian R. schrieb:
> Insgesamt würde ich sagen, ist das eher eine Aufgabe
>
> für einen FPGA.

Wie ist das mit dem FPGA, früher war das so, dass man die Verbindungen 
durchgeschossen hat, also im prinzip waren das schnelle Logikgatter, nix 
auf Microcontroller Basis. Ist das heute noch so?
Wir könnte man dann aber die unterschiedlichen Auflösungen 
programmieren?
Muss das vorher klar sein? Wäre aber auch nicht tragisch.
Ich bräuchte auch nicht unbedingt eine Anzeige.
Wäre das prizipiell eine Box mit 2 RS422-> TTL Treibern, den FPGA, 
bischen
drumrum und am Ausgang wieder ein TTL -> RS422 Treiber?

Autor: Frank Buss (foobar)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mag ja sein, daß manche Hersteller von RS422 reden, habe gerade hier 
einen gefunden: http://tinyurl.com/2vfhcgz , aber laut Wikipedia ( 
http://de.wikipedia.org/wiki/EIA-422 ) heisst es u.a. "Da beide 
Leitungen das jeweils zueinander invertierende Sendesignal übertragen, 
spricht man auch von balanced transmission.". Ich habe jetzt zwar nicht 
den Standard gelesen, aber auch die verschiedenen Treiber-ICs für RS422 
unterstützten keine phasenverschobenen Signale. Ist also wohl einfach 
nur TTL gemeint, vielleicht mit anderen Spannungen, aber kein RS422 im 
engeren Sinne.

Warum meinst du, man braucht eine Gray-Codierung? Ich würde das sowieso 
getaktet vorschlagen, z.B. mit 10 MHz oder so und alles synchron in 
einem process-Block per VHDL auswerten. Sollte noch in ein CPLD 
reinpassen. Ich habe schon einen 16 Bit Counter, der synchron zu einem 
externen Takt zählte, mit noch zusätzlicher Logik und SPI-Interface zum 
Auslesen, in ein XC9572XL reinbekommen, den man für 2 Euro bekommt. 
FPGAs sind teurer und auch meist komplizierter in der Anwendung, wegen 
der unterschiedlichen Spannungsversorgungen, meist noch externem 
notwendigen Konfig-Flash usw. Im XC9572XL ist das Flash schon eingebaut, 
allerdings nur per externen Prorgammer änderbar. Das Teilerverhältnis 
könnte man aber per DIP-Switch einstellbar machen.

Autor: Waschle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Reinhard Kern schrieb:
> bis dahin richtig, aber da liegt der Haken - mit welcher Taktrate? Damit
>
> das für die Steuerung einen Sinn ergibt, muss man nicht nur die
>
> Positionen verrechnen, sondern auch die Taktraten =
>
> Verfahrgeschwindigkeiten addieren bzw. subtrahieren und die
>
> Ausgabesignale mit einer Taktrate entsprechend der resultierenden
>
> Verfahrgeschwindigkeit ausgeben. Das wird viel komplizierter und
>
> rechenintensiver als du annimmst. Aber wenn dir das jemand für 120 Euro
>
> machen will, schliess sofort einen wasserdichten Vertrag.

Stimmt, das heißt also, gar nicht so viel umwandeln, sondern ganz anders 
angehen. Nehmen wir mal an, es würde sich um 2 Geber handeln, die die 
gleiche Auflösung haben.
Dann bräuchte man doch nur die Flanken zählen, darauf achten, welche 
zuerst kommt, damit man weiß, ob aufwärts oder abwärts gezählt wird,
und dann ensprechend diese Impulse einfach als + oder - Impulse 
durchleiten.
Kommen 2 + Impulse, werden 2 + Impulse durchgeleitet. Kommt ein - Impuls 
und eine + Impuls, wird nix durchgeleitet, kommen 2 - Impulse, werden 2 
- Impulse durchgeleitet. Liege ich da prinzipiell richtig?

Autor: Frank Buss (foobar)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Waschle schrieb:
> Stimmt, das heißt also, gar nicht so viel umwandeln, sondern ganz anders
> angehen. Nehmen wir mal an, es würde sich um 2 Geber handeln, die die
> gleiche Auflösung haben.
> Dann bräuchte man doch nur die Flanken zählen, darauf achten, welche
> zuerst kommt, damit man weiß, ob aufwärts oder abwärts gezählt wird,
> und dann ensprechend diese Impulse einfach als + oder - Impulse
> durchleiten.
> Kommen 2 + Impulse, werden 2 + Impulse durchgeleitet. Kommt ein - Impuls
> und eine + Impuls, wird nix durchgeleitet, kommen 2 - Impulse, werden 2
> - Impulse durchgeleitet. Liege ich da prinzipiell richtig?

Vermutlich meint Reinhard, daß es manche Steuerungen gibt, die nicht nur 
die Quadratursignale auswerten, sondern anhand der Taktrate auch 
Zwischenwerte berechnen können. Dann würde es tatsächlich aufwendiger 
werden und man käme wohl auch um ein FPGA nicht drumherum.

Dein Ansatz kommt mir merkwürdig vor. Es gibt ja nicht ein + Impuls und 
ein - Impuls, sondern es müssen zwei eingehende Quadratursignale, die in 
unterschiedlichen Phasensignalen zueinandern anliegen können, verrechnet 
werden. Da ist es wahrscheinlich einfacher, das erstmal intern 
aufzuaddieren und dann neu zu generieren.

Autor: Waschle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frank Buss schrieb:
> Dein Ansatz kommt mir merkwürdig vor. Es gibt ja nicht ein + Impuls und
>
> ein - Impuls, sondern es müssen zwei eingehende Quadratursignale, die in
>
> unterschiedlichen Phasensignalen zueinandern anliegen können, verrechnet
>
> werden. Da ist es wahrscheinlich einfacher, das erstmal intern
>
> aufzuaddieren und dann neu zu generieren.Beitrag melden | Bearbeiten | Löschen |

Ich habe mich nicht gut ausgedrückt. Ich meine das so: Wenn ein Geber 
zb. 1000 Impulse pro Umdrehung hat, dann sind das in Wirklichkeit 1000 x 
A und 1000 x B. Jeweils eine ansteigende Flanke und eine fallende 
Flanke.
Die meisten Auswertesyteme arbeiten mit der 4 fach Auswertung, dh. sie 
zählen alle Flanken, das hat den Vorteil, dass der Geber höher auflöst.
Jetzt braucht man ja nur hergehen, und schauen, welche Flanke zuerst 
kommt, kommt erst A, dass B, zählen wir positiv. Kommt erst B, dann A, 
zählen wir negativ, das meinte ich mit + und - Impuls.
Ist es jetzt verständlicher?
Schau mal hier
http://www.lamb.de/uploads/media/products/LA-L_L56...
Da sind die Signale mal beschieben.

Autor: Frank Buss (foobar)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, jetzt macht RS422 auch ein wenig mehr Sinn. Ich war davon 
ausgegangen, daß die beiden Ausgänge auf den beiden Leitungen einer 
einzigen RS422-Verbindung übertragen werden, aber scheint so zu sein, 
daß für A und B jeweils eine extra RS422-Verbindung mit jeweils den zwei 
differentiellen Leitungen verwendet wird. Daher ist die Idee schonmal 
gut: zwei RS422-nach-TTL Konverter, dann Microcontroller oder CPLD und 
danach wieder zwei TTL-nach RS422-Konverter.

Mit der Zählung wird aber dennoch nicht so einfach funktionieren, denn 
es kann auch sein, daß erst eine fallende Flanke auf A kommt, dann eine 
fallende Flanke auf B, was dieselbe Richtung ist, wie wenn erst eine 
steigende Flanke auf A kommt, und dann eine steigende Flanke auf B. 
Daher ist eine einfache Zusammenschaltung auch schon bei zwei 
Inkrementalgebern mit 1:1 Umsetzung nicht ganz so einfach, insbesondere 
auch wenn die sich unterschiedlich schnell bewegen können, wovon ich mal 
ausgehe.

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im Prinzip ist das mit dem FPGA heutzutage noch ähnlich. Allerdings 
jederzeit wieder programmierbar. Bei hohen Verfahrgeschwindigkeiten 
kommen an den Gebern nämlich schnell Frequenzen im 100kHz oder gar MHz 
Bereich zustande. Aber eine grundsätzliche Frage, wieso müssen die Geber 
unterschiedliche Auflösungen haben, wenn es schon so eine 
Spezialanwendung sein muss? Die Geber arbeiten ja inkrementell, du 
willst aber absolute Werte summieren/subtrahieren. Eine Verarbeitung der 
beiden Geber in der Steuereinheit wäre da wesentlich sinnvoller. Da kann 
man einfach die gezählten Positionen addieren/subtrahieren.

Autor: Reinhard Kern (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frank Buss schrieb:
> Vermutlich meint Reinhard, daß es manche Steuerungen gibt, die nicht nur
> die Quadratursignale auswerten, sondern anhand der Taktrate auch
> Zwischenwerte berechnen können.

Nein, ich meine was ganz anderes: eine Steuerung regelt nach dem Stand 
der Technik den Antrieb mit einem PID-Regler, d.h. sie braucht als 
Eingangsinformation nicht nur die aktuelle Position, sondern auch die 
aktuelle Geschwindigkeit (RICHTIG: das ist die Ableitung der Position 
nach der Zeit!). Damit die Steuerung mit der Summeninformation 
funktionieren kann, muss also nicht nur die Summe der Impulse am Ausgang 
der Blackbox der aktuellen Position entsprechen, sondern zugleich muss 
die Frequenz dieser Ausgangsimpulse der aktuellen Summe der 
Verfahrgeschwindigkeiten beider Eingänge entsprechen. Ersatzweise kann 
man auch verlangen, dass die synthetisierte Position in einem sehr engen 
Zeitraster (ms oder weniger) der aktuellen Summe der beiden Eingänge 
entspricht, dann berechnet sich die Steuerung die Geschwindigkeit 
halbwegs korrekt.

Nichts was bisher diskutiert wurde kommt auch nur in die Nähe des 
Problems, aber macht nur weiter mit den 120-Euro-Lösungen, die Wahrheit 
holt einen spätestens beim Einschalten ein.

> Kommen 2 + Impulse, werden 2 + Impulse durchgeleitet. Kommt ein - Impuls
> und eine + Impuls, wird nix durchgeleitet, kommen 2 - Impulse, werden 2
> - Impulse durchgeleitet. Liege ich da prinzipiell richtig?

Ach ja, und wie bringst du da deine verschiedenen und sogar 
teilerfremden Auflösungen der Drehgeber unter??

Gruss Reinhard

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Reinhard Kern schrieb:
>> Kommen 2 + Impulse, werden 2 + Impulse durchgeleitet. Kommt ein - Impuls
>> und eine + Impuls, wird nix durchgeleitet, kommen 2 - Impulse, werden 2
>> - Impulse durchgeleitet. Liege ich da prinzipiell richtig?
>
> Ach ja, und wie bringst du da deine verschiedenen und sogar
> teilerfremden Auflösungen der Drehgeber unter??

Wenn´s nur das wäre. So ein Drehgeber hat genau 4 verschiedene 
Ausgangswerte. Da ist schon mal gar nix mit + und - Pulsen. Die 
Steuerung bildet aufgrund des aktuellen 2-Bit Wertes und des 
vorhergehenden Wertes die Zählimpulse für den Positionszähler. Da kann 
man nicht einfach 2 Geber ineinander wursteln. Denn absolute Werte gibts 
bei den Gebern nicht. Ich bin mir ziemlich sicher, dass man da auf 
Geber-Ebene nix machen kann. Gibts übrigens mal einen Link oder 
Beschreibung so einer "Adapter-Box" die im allerersten Beitrag genannt 
wurde? Kann mir jetzt erst mal gar nicht vorstellen, wie die aus 2 
Gebersignalen eins machen sollte....

Autor: Reinhard Kern (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christian R. schrieb:
> Wenn´s nur das wäre. So ein Drehgeber hat genau 4 verschiedene
> Ausgangswerte. Da ist schon mal gar nix mit + und - Pulsen.

Hallo,

ganz so ist es auch wieder nicht, man kann natürlich + und - Impulse 
generieren. Würde also heissen:

1. Stufe : macht aus Quadratursignal pos. und neg. Zählimpulse

2. Stufe : verknüpft Zählimpulse der beiden Drehgeber - es macht 
eigentlich auch nichts, wenn man alle weitergibt, aber dann müsste man 
dafür sorgen, dass sich keine Impulse überlappen, das ist auch nicht so 
einfach.

3. Stufe : steuert mit den Zählimpulsen eine 4-State-Machine, die wieder 
Quadratursignale ausgibt.

Allerdings funktioniert das selbstverständlich nur mit 2 Drehgebern 
gleicher Schrittweite!! Also nicht im vorliegenden Fall.

Völlig ungelöst und von keinem 120 Euro-Entwickler bisher angesprochen 
ist das Problem der Referenz - die resultierende Referenz kann nur dort 
sein, wo beide Drehgeber ihren Referenzimpuls abgeben, aber das passiert 
ja niemals gleichzeitig. Die Drehgeber gemeinsam auf ihren Referenzpunkt 
zu stellen, wäre ein echtes Kunststück, das den Bediener zum Verzweifeln 
bringen würde.

@Waschle: wäre nett, wenn wir mal erfahren könnten, wieviel 
Schritte/Sekunde das Ding vertragen soll, das ist nämlich für die 
Prozessorwahl ziemlich entscheidend. Sofern noch Interesse vorhanden.

Gruss Reinhard

Autor: Kakadu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welche Größen sollen die Drehgeber auswerten?
Sollen Wege anhand der Drehungen einer Spindel ausgewertet und addiert 
werden?
Wenn ja, würde ich die beiden Drehgeber separat auswerten, den Weg jedes 
Gebers errechnen, die Wege addieren und als neues Quadratursignal oder 
auch als numerischen Wert ausgeben.

Liege ich mit meiner Vermutung richtig? Dann wären die Indeximpulse Z 
unbedeutend, wenn man einen Referenzpunkt nach dem Einschalten anfährt.

Autor: Waschle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für die zahlreichen Antworten.
In den Beiträgen steht vieles, was stimmt, aber nicht alles.
Die Anwendung ist die folgende:
Ich habe mir eine Laserschneidmaschine gekauft, beim Aufstellen haben 
wir den Rofin Laser umgeschmissen, (kopflastig) Nachdem ich mich 
seelisch erholt hatte, habe ich beschlossen, aus der 
Laserschneidmaschine eine Wasserstrahlanlage zu bauen. Habe soweit alles 
am Laufen, habe auch die alte Steuerung rausgeschmissen, da war eine 
kapazitive Höhenkorrektur dran.
Ist mir bis heute nicht klar, wie die funtionierte, da die Z Impulse der 
Z Achse direkt in die CNC STuerung ging.Für die Höhenkorrektur habe ich 
keine Unterlagen.
Da ich sowieso unter Wasser schneiden möchte, brauche ich eine 
mechanische Höhenkorrektur. Und da fiel mir ein, wie ich das bei meiner 
Fräsmaschine  gelöst habe. Dort habe ich Acu Rite Maßstäbe, in der Z 
Achse eine Pilole und ein verfahrbarer Tisch. Aus dem Abstand der Pinole 
zum Tisch ergibt sich die Höhe Z.
DA man diese Höhe genau kennen muss,  war ich gezwungen, 2 Maßstäbe 
anzubauen, die Signale gehen in einen sogenannten " Maßstabskoppler 
extern" (soviel zum Thema, gibts nicht) hat 2002 408 € gekostet. Am 
Eingang 2 x RS422, am Ausgang 1 x RS 422, jeweils mit A,B,Z.
Und das funktioniert sehr gut. Wenn sich die Achse im Regelkreis 
befindet, möchte sie ja immer genau am gleichen Punkt stehen, versuche 
ich die Achse mit Gewalt zu bewegen, wird sofort gegengesteuert, (PID 
Regler)
Verfahre ich nun den Tisch, der nicht an der CNC Steuerung angeschlossen 
ist, dann verfährt die Pinole automatisch immer um den gleichen 
Wert.D.H, der Abstand ist immer der Gleiche.
Und das möchte ich mir an der Wasserschneidanlage zu Nutze machen. Dort 
hat der Z Motor einen Incrementalgeber mit 1024 Impulsen. Aber da ist 
noch eine Umlenkeinheit mit Zahnriemen und eine Kugelgewindespindel mit 
5rer STeigung. Die Verfahrgeschwindigkeit dürfte nicht so hoch sein, ich 
schätze mal, die macht max. 50mm/sek -> 10 Umdrehungen x1024 Impulse, 
ist ca 10.000 Impulse/ sek. max. also 40.000 Flanken. (alles geschätzt)
Und meine Idee war folgende: ich montiere einen Pneumatik Zylinder, der 
ganz leicht mit Luft vorgespannt ist, unten ist das Seil eines 
Seilzugdrehgebers montiert, dessen Zählerwerte in die Berechnung der 
Höhe mit eingehen. Also im Prinzip gleiche Anwendung wie bei der 
Fräsmaschine.
Wölbt sich das Material, geht die Kolbenstange in den Zylinder, das Seil 
wird aufgefollt, der Regelkreis versucht, auszugleichen.Und der Abstand 
zum Material stimmt wieder.
Sollte ich keine Lösung finden, werde ich wohl 2 Maßstäbe mit gleicher 
Auflösung kaufen sowie diese Kopplerbox und das dann so lösen, das 
kostet aber über 1200 Euro und ist aufwändig.

Autor: Kakadu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Laser, Wasser, Pneumatik, ...
Je mehr Du schreibst, desto weniger verstehe ich es.

Autor: Waschle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So schwer kann das doch nicht sein.
Anderes Beispiel:
Du hast einen Drehgeber und eine Digitalanzeige.
Drehst du linksrum, wird abwärts gezählt. Drehst du rechtsrum,
wird aufwärts gezählt.
Nun stell dir vor, du könntest einen 2. Geber anschließen, und auch dran 
rumdrehen, drehst du den linken und den rechten rechtsrum, wird aufwärts 
gezählt, andersrum abwärts, und wenn einer linksrum dreht und einer 
rechtsrum verändert sich der Wert nicht. Alles klar?
Kann doch nicht so schwer sein. Es gibt 4 Flanken, 2 ansteigende und 2 
abfallende. Anhand der Flanke vorher ist eindeutig festzustellen wie rum 
gezählt wird. Aus diesem Ergebnis wird ein Zählimpuls generiert.
Und zwar ein positiver oder ein negativer.
Das ganze 2 mal. Daraus werden neue Impulse generiert, usw. bin leider 
kein Programmierer..

Autor: Kakadu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>und wenn einer linksrum dreht und einer
>rechtsrum verändert sich der Wert nicht. Alles klar?

Du mußt mit nicht erklären, wie ein Quadraturdekoder funktioniert. Aber 
wenn sich der eine so und der andere andersherum dreht, wozu dann der 
ganze Aufwand? Wo ist das Problem?

Autor: noch nichwach (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mal kurz was ich verstanden habe:

der 1 Encoder steuert deine Z-Achse,
der 2 Encoder "fühlt" die echte Z-Höhe des Tisches

Sinn und Zweck soll es sein die Z-Achse immer im gleichen
Abstand zum Tisch zu Regeln.

Sowas nennt man einen Tactil Sensor.

Ist das so richtig ?

Autor: R. E. (waschle)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
noch nichwach schrieb:
> der 1 Encoder steuert deine Z-Achse,
>
> der 2 Encoder "fühlt" die echte Z-Höhe des Tisches
>
>
>
> Sinn und Zweck soll es sein die Z-Achse immer im gleichen
>
> Abstand zum Tisch zu Regeln.

Stimmt genau

noch nichwach schrieb:
> Sowas nennt man einen Tactil Sensor.

habe mal gegoogelt, weiß nicht so recht.
Bei den Laser oder Wasserstrahlherstellern nennt man das z.b. 
automatische Höhenkorrektur

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Waschle schrieb:

> gezählt wird. Aus diesem Ergebnis wird ein Zählimpuls generiert.
> Und zwar ein positiver oder ein negativer.

Und genau hier liegt das Problem.

EIN Impuls ist erst mal nur EIN Impuls. Dem kann man nicht ansehen ob er 
nun ein 'positiver' oder ein 'negativer' ist.

Deine Steuerung hat also Anschlüsse für die Encoder, die elektrisch 
gleich zu einer RS422 sind.
Nur: wie ist die Signalform? Wie müssen die Pulse aussehen, damit die 
Steuerung 'positiv' von 'negativ' auseinanderhalten kann. RS422 kanns 
nicht sein, denn RS422 in seiner eigentlichen Form funktioniert ganz 
anders (was nicht bedeutet, dass man sich nicht die elektrische 
Spezifikation davon klauen kann, was hier offenbar geschehen ist)

Und damit sind wir beim nächsten Teil, den du noch gar nicht 
angesprochen hast: Welche Steuerung hast du denn schon?
Irgendwas musst du ja schon haben, sonst würdest du ja kein elektrisches 
RS422 fordern mit dem die Geber an die Steuerung angeschlossen werden.

Autor: R. E. (waschle)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:
> EIN Impuls ist erst mal nur EIN Impuls. Dem kann man nicht ansehen ob er
>
> nun ein 'positiver' oder ein 'negativer' ist.
Falsch , siehe 
http://www.lamb.de/uploads/media/products/LA-L_L56..., seite 
3
nach einer fallenden Flanke von A kommt entweder eine fallende Flanke 
von b oder eine steigende Flanke, das ist eindeutig, und in jeder 
Stellung so.
Man kann das genau nachvollziehen, man muss sich nur die Stellung davor 
merken, bevor man sagt, des ist positiv oder negativ.

Diese -Signalanordnung in den Gebern ist genormt. Die ist in jedem Geber 
gleich. Nur die Topologie ist unterschiedlich: TTL, HTL, RS422 usw.

Autor: noch nichwach (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Höhenkorektursensor ist OK.

Bei Dispensern nennt man das Tactilsensor.
Es gibt da viele Möglichkeiten sowas zu realisieren.

Der Tactile funktioniert mit einem Schalter, der bei Abweichung nach
unten (Freiraum) Abschaltet und somit der Z-Achse signalisiert weiter
nach unten zu Fahren. Nachteil: er muss von Hand auf die gewünschte
Tiefe eingestellt werden.

Laser Sensor (scheidet im Wasser ja aus)

Mechanisch, mit einer Pinole (Zahnstange und Encoder) also wie du es 
vorhast geht es wohl am Preiswertesten.

Die Elektronik muss nun nach z.B. Tastendruck die Differenz der beiden
Encoder halten und bei Abweichung dieser Differnz (Tisch uneben, oder 
Portal Paralelität) der Steuerung "Vorgaukeln" das der Z-Encoder sich 
bewegt hat.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rafael Engelbrecht schrieb:
> Karl heinz Buchegger schrieb:
>> EIN Impuls ist erst mal nur EIN Impuls. Dem kann man nicht ansehen ob er
>>
>> nun ein 'positiver' oder ein 'negativer' ist.
> Falsch , siehe
> http://www.lamb.de/uploads/media/products/LA-L_L56..., seite
> 3
> nach einer fallenden Flanke von A kommt entweder eine fallende Flanke
> von b oder eine steigende Flanke, das ist eindeutig, und in jeder
> Stellung so.

Die Rede war von EINEM Impuls auf 1 Leitung (bei RS422 auf 2 Leitungen, 
weil differentielle Übertragung)!
Du gehst von ZWEI Impulsen auf 2 Leitungen (bei RS422 auf 4 
physikalischen Kabeln) aus!

Was genau will deine Steuerung haben?
Hat die für EINEN Encoder 4 Eingänge oder nur 2?

Und bitte hör auf uns zu erklären, wie ein Enocder funktioniert. Das 
wissen hier fast alle. Die eigentliche Frage, auf die sich keiner einen 
Reim machen kann lautet: Wie genau funktioniert denn die Übertragung zur 
Steuerung? Und was hat RS422 damit zu tun? Denn danach richtet sich, was 
denn hinter die Encoder muss um die Signale für die Steuerung 
aufzubereiten. Das hängt aber in erster Linie davon ab, was die 
Steuerung haben will!

Daher nochmal die Frage: Welche Steuerung hast du denn?

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm, also mit dem Begriff "Maßstabskoppler extern" finde ich bei Google 
nix sinnvolles. Aber ich denke, die Triviallösung für 2 Geber gleicher 
Auflösung könnte so funktionieren. Allerdings mit gewissen 
Rahmenbedingungen, so wie ich das sehe, darf sich dann immer nur ein 
Geber bewegen, damit das hinhaut.
Die Lösung für unterschiedliche Auflösungen ist komplizierter. Dazu 
würde ich in einem FPGA die beiden Geber erst mal dekodieren, bei jedem 
Schritt gibts einen Zählpuls und das Richtungssignal. Daran ein up/down 
Zähler angeschlossen, und an dessen Ausgang ein "Gleichrichter", der den 
Absolutwert des Zählers bildet. Danach ein Komparator, der den 
Absolut-Zählerstand mit deinem Korrekturfaktor vergleicht. Ist der 
Zähler am Korrekturfaktor angekommen, wird ein Impuls erzeugt und der 
Zähler wieder auf Null gesetzt. Die Richtung muss dann wieder aus dem 
obersten Bit des up/down Zählers bestimmt werden. Somit gibts dann nach 
x absolut zurück gelegten Schritten einen neuen Impuls, und du hast die 
Geber-Auflösung geteilt. Die so neu generierten Pulse dann wie im 
Trivial-Koppler ODER-Verknüpfen und auf einen 2-Bit up/dwon Zähler mit 
anschließendem Gray-Encoder schicken. Das RS422 ist doch nur die 
elektrische Seite, haben fast alle industriellen Drehgeber, damit man 
das Signal nach 100m Kabel immer noch sauber übertragen bekommt. Das hat 
mit dem eigentlichen Problem überhaupt gar nix zu tun.

Autor: R. E. (waschle)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:
> Und bitte hör auf uns zu erklären, wie ein Enocder funktioniert. Das
>
> wissen hier fast alle. Die eigentliche Frage, auf die sich keiner einen
>
> Reim machen kann lautet: Wie genau funktioniert denn die Übertragung zur
>
> Steuerung? Und was hat RS422 damit zu tun? Denn danach richtet sich, was
>
> denn hinter die Encoder muss um die Signale für die Steuerung
>
> aufzubereiten. Das hängt aber in erster Linie davon ab, was die
>
> Steuerung haben will!
Sorry, aber das scheint nicht so zu sein, zumindest Du scheinst es nicht 
zu wissen, von was ich rede.
Sonst würdest du nicht diese Art von Fragen stellen, ( welche Steuerung)
das spielt nämlich überhaupt keine Rolle!
Ein Inrecmentalgeber mit einem RS 422 Ausgang ist genormt, auch, wenn 
ich mir wiederhole. Da dürfte es von Deiner Seite nicht eine einzige 
Frage geben!

Karl heinz Buchegger schrieb:
> Die Rede war von EINEM Impuls auf 1 Leitung (bei RS422 auf 2 Leitungen,
>
> weil differentielle Übertragung)!
>
> Du gehst von ZWEI Impulsen auf 2 Leitungen (bei RS422 auf 4
>
> physikalischen Kabeln) aus!
>
>
>
> Was genau will deine Steuerung haben?
>
> Hat die für EINEN Encoder 4 Eingänge oder nur 2?

Nochmal zur Xten  Wiederholung. Es sind immer 2 Spursignale A und B, und 
einmal pro Umdrehung ein Impuls Z. Also hat die Steuerung immer 3 
Eingänge.
Aber das weiß ja jeder.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rafael Engelbrecht schrieb:

> Sorry, aber das scheint nicht so zu sein, zumindest Du scheinst es nicht
> zu wissen, von was ich rede.

WEnn du dich etwas besser ausdrücken würdest, dann wäre das so.
Da du allerdings die meiste Zeit nur Bla-Bla von dir gibst, ist das eben 
nicht so.

> Nochmal zur Xten  Wiederholung. Es sind immer 2 Spursignale A und B, und
> einmal pro Umdrehung ein Impuls Z. Also hat die Steuerung immer 3
> Eingänge.

Das kann nicht sein.
Denn RS422 verwendet pro Signal 2 physikalische Kabel. Genau das ist 
nämlich der Witz an RS422 - die symetrische Übertragung EINES Signals 
auf 2 Kabel wodurch man Störungen ausfiltern kann. Und auf EINER 
Signalleitung (also 2 physikalischen Kabeln) kann man nun mal nicht die 
A-Spur und die B-Spur gleichzeitig übertragen. Das geht nun mal nicht, 
selbst wenn du das noch so gerne wolltest.
Also muss deine Steuerung 6 Eingänge haben (die möglicherweise in 3 
Buchsen zusammengefasst sind)

> Aber das weiß ja jeder.

Na, wenn es ohnehin jeder weiß, wo liegt dann das Problem?

Du brauchst offenbar eine Umsetzung von TTL (oder was auch immer deine 
Encoder liefern) auf RS422 Pegel.
Einfach mal danach googeln und du wirst fündig.


Alles natürlich nur unter der Voraussetzung, dass deine Enocder mehr 
oder weniger direkt an die Steuerung angeschlossen werden und die 
Steuerung selber die Auswertung der Pulslage macht.
Tut sie das aber nicht, dann musst du dir was einfallen lassen. Und 
genau dazu muss man dann wissen, was denn die Steuerung wirklich haben 
will.

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:
> Das kann nicht sein.
> Denn RS422 verwendet pro Signal 2 physikalische Kabel. Genau das ist
> nämlich der Witz an RS422 - die symetrische Übertragung EINES Signals
> auf 2 Kabel.

Naja, nun stell dich mal nicht so an. :) Bei solchen Gebern ist einfach 
jedem der 3 Signale ein RS422 Treiber nachgeschaltet. Jedes Signal für 
sich bildet sozusagen eine RS422 Strecke. Daher insgesamt 6 
Signalleitungen zzgl. Betriebsspannung.

Aber das hat wie gesagt mit dem eigentlichen Problem überhaupt gar nix 
zu tun, hier gehts um die Differenzbildung der Signale aus 2 Gebern, auf 
unterster Ebene, die dazu auch noch verschiedene Auflösungen haben 
sollen. Das RS422 ist nur ein winziger Nebeneffekt.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christian R. schrieb:
> Karl heinz Buchegger schrieb:
>> Das kann nicht sein.
>> Denn RS422 verwendet pro Signal 2 physikalische Kabel. Genau das ist
>> nämlich der Witz an RS422 - die symetrische Übertragung EINES Signals
>> auf 2 Kabel.
>
> Naja, nun stell dich mal nicht so an. :) Bei solchen Gebern ist einfach
> jedem der 3 Signale ein RS422 Treiber nachgeschaltet.

Das sehe ich auch so.
Zumindest lese ich das so raus

> Jedes Signal für
> sich bildet sozusagen eine RS422 Strecke. Daher insgesamt 6
> Signalleitungen zzgl. Betriebsspannung.
>
> Aber das hat wie gesagt mit dem eigentlichen Problem überhaupt gar nix
> zu tun, hier gehts um die Differenzbildung der Signale aus 2 Gebern, auf
> unterster Ebene, die dazu auch noch verschiedene Auflösungen haben
> sollen.

Gut dann formuliere ich das eigentliche Problem neu:

gesucht ist eine Schaltung, die man zwischen Enocder und RS422 Leitung 
klemmt.
Aufgabe der Schaltung ist es
  Die Enocder-Signale auszuwerten
  Mit den Werten eine Transformation durchzuführen (die Werte zu
  verändern)
  Mit diesen neuen Werten neue (gefakte) Encodersignale zu erzeugen
  Diese neuen Enocdersignale per RS422 der Steuerung als eigentliche
  Encodersignale unterzujubeln


Und?
War das jetzt so schwer für den TO, diese Aufgabe einmal klar und 
deutlich zu formulieren?

Autor: R. E. (waschle)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christian R. schrieb:
> Naja, nun stell dich mal nicht so an. :) Bei solchen Gebern ist einfach
> jedem der 3 Signale ein RS422 Treiber nachgeschaltet. Jedes Signal für
> sich bildet sozusagen eine RS422 Strecke. Daher insgesamt 6
> Signalleitungen zzgl. Betriebsspannung.

Genau so ist es.


> Aber das hat wie gesagt mit dem eigentlichen Problem überhaupt gar nix
> zu tun, hier gehts um die Differenzbildung der Signale aus 2 Gebern, auf
> unterster Ebene, die dazu auch noch verschiedene Auflösungen haben
> sollen. Das RS422 ist nur ein winziger Nebeneffekt.

auch das stimmt so. Ich habe aber inzwischen das Gefühl, dess es doch 
ganz schön aufwändig wird. Ich werde morgen mal die Hersteller von 
Inkrementalgebern anrufen, vielleicht gibt es das ja schon fertig.
Das muss es geben, jede Drehbank, die mit Glasmaßstäben nachgerüstet 
wird, braucht in der Z Achse 2 Glasmaßstäbe die zusammen in die Messung 
eingehen.
Nur wird meistens das ganze im Anzeigegerät gemacht, was ich aber nicht 
brauchen kann.

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jo so in etwa. Für manche ist das halt schwer. Speziell Leuten, die 
keine ingenieurstechnische Ausbilung haben, fällt es oft schwer, ein 
Problem auf das wesentliche herunter zu brechen und es somit anderen 
verständlich zu machen.
Wie so etwas aussehen könnte, hab ich ja oben schon mal angedeutet. Bei 
unterschiedlichen Gebern kann dabei der Aufwand schnell sehr groß 
werden.

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rafael Engelbrecht schrieb:
> Das muss es geben, jede Drehbank, die mit Glasmaßstäben nachgerüstet
> wird, braucht in der Z Achse 2 Glasmaßstäbe die zusammen in die Messung
> eingehen.
> Nur wird meistens das ganze im Anzeigegerät gemacht, was ich aber nicht
> brauchen kann.

Meine Rede. Inkrementalgeber auf Geber-Ebene so zu "verrechnen" ist 
meiner Meinung nach ziemlicher Murks. Das macht man in der Auswertung. 
Solche Drehbänke haben garantiert 2 Geber-Eingänge pro Achse und dann 
wirds nach dem Zählen verrechnet.

Autor: Frank Buss (foobar)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich denke nicht, daß es sowas fertig gibt, denn ist doch viel besser, 
und auch einfacher, wenn das alles in der Steuerung zusammenkommt und 
dort dann optimal verrechnet wird.

Aber ich verstehe das richtig: Du hast eine Maschine aufgebaut und da 
ist dann der Laser kaputt gegangen beim Aufbau. Statt das der 
Versichrung zu melden oder meinetwegen auch beim Hersteller einen neuen 
Laser zu kaufen, falls die Versicherung das nicht abdeckt, baust du also 
die gesamte Maschine mit einer anderen Technologie um, die jetzt nicht 
richtig läuft?

Autor: R. E. (waschle)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frank Buss schrieb:
> Aber ich verstehe das richtig: Du hast eine Maschine aufgebaut und da
>
> ist dann der Laser kaputt gegangen beim Aufbau. Statt das der
>
> Versichrung zu melden oder meinetwegen auch beim Hersteller einen neuen
>
> Laser zu kaufen, falls die Versicherung das nicht abdeckt, baust du also
>
> die gesamte Maschine mit einer anderen Technologie um, die jetzt nicht
>
> richtig läuft?

Der Laser mit Verfahreinheit (Mittelformat 2500 x 1250 mm 
Verfahrbereich)
kostete 1992 ca 1.000.000 DM, Der Laser an sich von Rofin ist beim 
Aufstellen umgefallen, alle Glasröhren kaputt, Rep. mind. 40.000 Euro,
die ganze Maschine hatte ich für 11.000 Euro gekauft, es gibt keine 
Versicherung, die sowas übernimmt, ich hatte alles versucht.
Und die neue Maschine läuft, ich  wollte nur noch zusätzlich eine 
automatische Höhenkorrektur einbauen.

Frank Buss schrieb:
> Ich denke nicht, daß es sowas fertig gibt, denn ist doch viel besser,
>
> und auch einfacher, wenn das alles in der Steuerung zusammenkommt und
>
> dort dann optimal verrechnet wird.
Doch, gibt es, ich habe es ja, nur nicht mit unterschiedlichen 
Auflösungen.
Morgen werde ich mehr wissen, da rufe ich mal durch, falls die alle 
schon wieder arbeiten.
Nochmals Danke für die vielen Anregungen und Antworten
Waschle.

Autor: Kakadu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich wiederhole es noch einmal:

>Wenn ja, würde ich die beiden Drehgeber separat auswerten, den Weg jedes
>Gebers errechnen, die Wege addieren und als neues Quadratursignal oder
>auch als numerischen Wert ausgeben.

Autor: Reinhard Kern (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:
> War das jetzt so schwer für den TO, diese Aufgabe einmal klar und
> deutlich zu formulieren?

Diese ganze Stellungnahme ist völlig überflüssig, die ganze Aufgabe war 
so etwa 2 - 3 m weiter oben schon völlig klar, aber dann hast du mit 
deinem totalen Unverständnis von RS422 alles zerredet. Dass ein 
Drehgeber mit RS422 alle 3 Signale auf RS422-Differentialleitungen 
umsetzt und folglich 6 Anschlussdrähte hat, ist so trivial, dass man 
schon annehmen muss, du interpretierst das absichtlich falsch, um die 
Diskussion aufzumischen.

Gruss Reinhard

Autor: Waschle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das tolle an so einem exteren Koppler ist eben, dass die Achse 
vollautomatisch nachregelt, ohne, dass man in die Steuerung eingreifen 
muss. Ich würde das nicht behaupten, wenn ich das nicht schon an einer 
anderen Maschine hätte, das geht wirklich einwandfrei.
Im schlimmsten Fall kaufe ich mir halt wieder den Koppler, den ich schon 
mal habe, aber da muss ich auf 2 gleiche Meßsysteme umstellen.

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kakadu schrieb:
> Ich wiederhole es noch einmal:
>
>>Wenn ja, würde ich die beiden Drehgeber separat auswerten, den Weg jedes
>>Gebers errechnen, die Wege addieren und als neues Quadratursignal oder
>>auch als numerischen Wert ausgeben.

Genau da liegt ja das Problem. Das sind Inkrement-Geber und keine 
Absolutwergeber. Da kann man nicht einfach was addieren. Zumindest 
nicht, wenn es über 4 Schritte hinaus geht, denn mehr Zustände bekommt 
man nicht aus den 2 Bit. Und seine Steuerung erwartet ja nur die 2 Bits. 
Denn das ganze muss ja live passieren und nicht irgendwie erst wenn man 
paar tausend Impulse gezählt hat, denn da hängt ja eine Regelung dran.

Autor: Kakadu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Das sind Inkrement-Geber

Ich habe tagtäglich mit Inkremtalgebern zu tun. Damit geht das.

Autor: Reinhard Kern (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kakadu schrieb:
> Ich habe tagtäglich mit Inkremtalgebern zu tun. Damit geht das.

Hallo Kakadu, das scheint hoffnungslos zu sein - es gibt hier 2 
übermächtige Fraktionen, die einen wissen nicht, was ein Drehgeber ist, 
und die anderen wissen nicht, was RS422 ist. Die verschwindende 
Minderheit, die weiss worum es geht, wird einfach niederdiskutiert.

Waschle kann einem leid tun, entweder gibt er jemandem 100 Euro für eine 
Nonsense-Schaltung oder er muss sich selbst helfen. Aber wahrscheinlich 
ist er dazu auch in der Lage, denn er hat wohl begriffen, dass das mit 
den verschiedenen Auflösungen ein viel komplexeres Problem ist, und dass 
er also am besten fährt, wenn er seinen Inkrementalmixer nimmt und beide 
Teil-Achsen mit gleicher Schrittweite betreibt.

Ich denke, ich könnte das mit unterschiedlichen Schritten schon 
konstruieren, aber es würde um Grössenordnungen teurer als hier 
veranschlagt und wäre auch nach meiner eigenen Meinung rausgeworfenes 
Geld - man muss ja ein Problem nicht teuer lösen, wenn man es auch 
vermeiden kann.

Hornberg lässt grüssen.

Gruss Reinhard

Autor: Walter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn die STeuerung zwei Eingänge für die betreffende Achse hat muss man 
die zwei Signale ja auch nicht mischen, sondern man kann doch auch das 
schnellere runterteilen so dass die Signale "gleich schnell" sind

Autor: Reinhard Kern (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Walter schrieb:
> wenn die STeuerung zwei Eingänge für die betreffende Achse hat muss man
> die zwei Signale ja auch nicht mischen, sondern man kann doch auch das
> schnellere runterteilen so dass die Signale "gleich schnell" sind

Hallo,

ich bedanke mich für die umgehende Bestätigung meiner Einschätzung zu 
dieser Diskussion.

Gruss Reinhard

Autor: Josef Huber (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also Leute, mit was glaubt Ihr dass ich mein Geld verdiene. 
Richtig......, u.A. baue ich Inkrementaladdierer für Meßsysteme. 
Natürlich für TTL-Ähnliche Differenzleitungssignale nach RS422. Aber 
nicht in diesem Forum. Das Prinzip wäre einfach zu erklären und ist etwa 
so alt wie die Fa. Heidenhain Maßstäbe baut. Es sind allerdings schon 
einige IC's notwendig. Wenn der Teilfaktor einstellbar und zu dem noch 
ungerade sein muss, wird es noch etwas aufwändiger.

Autor: Kakadu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>sondern man kann doch auch das
>schnellere runterteilen so dass die Signale "gleich schnell" sind

Mich würde diese Schaltung interessieren.
Nehmen wir eine Teilung von 1:4,45 an :-)

>aber es würde um Grössenordnungen teurer als hier veranschlagt und

Das müßte nicht unbedingt so sein. Es gibt Prozessoren, die zwei 
Quadraturdekoder auf dem Chip haben und problemlos die Eingangssignale 
erfassen können. Die "Verarbeitung" und Erzeugung eines Ausgangssignals 
könnten locker mit 50kHz ablaufen - schneller als die Signale am Eingang 
hier zu sein scheinen. Ein ATXmega könnte das auch schon schaffen.

Aber Waschle kann seine Aufgabe auch mit mehreren Anläufen nicht klar 
beschreiben. Für ihn ist alles selbstverständlich, aber wenn er eine 
Frage formuliert, muß er es dem Adressaten verständlich machen.
Der Zeitaufwand das zu klären, was gefordert wird, wäre das Teure an 
einer Lösung; nicht die paar Zeilen Code und die paar Chips.

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Josef Huber schrieb:
> Das Prinzip wäre einfach zu erklären und ist etwa
> so alt wie die Fa. Heidenhain Maßstäbe baut

Dann klär uns doch bitte mal auf, nach welchem Prinzip und unter welchen 
Randbedingungen die arbeiten.

Autor: Walter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kakadu schrieb:
>>sondern man kann doch auch das
>>schnellere runterteilen so dass die Signale "gleich schnell" sind
>
> Mich würde diese Schaltung interessieren.
> Nehmen wir eine Teilung von 1:4,45 an :-)

z.B. ein Attiny, hat doch max. 6 Ein/Ausgänge, passt also exakt

Autor: Kakadu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>z.B. ein Attiny, hat doch max. 6 Ein/Ausgänge, passt also exakt

@Walter
Wir haben heute erst den 4.01..
Hättest Du mit Deinem Beitrag nicht bis zum 1.04. warten können?

Autor: Frank Buss (foobar)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum sollte es nicht mit einem Attiny gehen? Die Arithmetik ist 
trivial. Unten mal ein erster Versuch. Man kann die Anzahl Impulse pro 
Umdrehung für beide Eingänge per Variable festlegen (und mit einem 
fetteren Microprozessor somit z.B. per Hex-Codierer auch außen einfach 
einstellbar machen, aber so oft ändert sich die Mechanik ja 
wahrscheinlich nicht) und auch noch eine Umsetzung auf den Ausgang 
definieren. Ist die Umsetzung auf den Ausgang kleiner als max(STEPS1, 
STEPS2), dann werden mehrere Schritt-Signale mit hoher Frequenz 
generiert (so schnell wie die Schleife läuft), wenn sich der niedrig 
aufgelöste Drehgeber bewegt. Ist die Umsetzung >= max(STEPS1, STEPS2), 
dann werden die Schritte von dem höher aufgelösten Drehgeber solange 
akkumuliert, bis sich ein Schritt als Ausgang ergibt.

So zumindest die Idee, ist aber ungetestet, sind also garantiert noch 
Fehler drin :-) Jetzt müsste das mal einer auf einen Attiny aufspielen.
#include <stdint.h>

// Anzahl Impulse pro Umdrehung für Eingang A1/B1
#define STEPS1 1500

// Anzahl Impulse pro Umdrehung für Eingang A2/B2
#define STEPS2 4096

// Anzahl Impulse pro Umdrehung für den Ausgang
#define OUTPUT_STEP STEPS2

// Tabelle für alle Zustandübergange der Eingänge,
// abgebildet auf die Zählrichtung
// A oldA B oldB Zähler
// 0 0    0 0    0
// 0 0    0 1    1
// 0 0    1 0    -1
// 0 0    1 1    0
// 0 1    0 0    -1
// 0 1    0 1    0
// 0 1    1 0    0
// 0 1    1 1    1
// 1 0    0 0    1
// 1 0    0 1    0
// 1 0    1 0    0
// 1 0    1 1    -1
// 1 1    0 0    0
// 1 1    0 1    -1
// 1 1    1 0    1
// 1 1    1 1    0
static int8_t g_delta[16] = {
  0, 1, -1, 0, -1, 0, 0, 1, 1, 0, 0, -1, 0, -1, 1, 0
};

// Tabellen für die Generierung der Quadratursignale am Ausgang
static uint8_t g_outA[4] = {
  1, 0, 0, 1
};
static uint8_t g_outB[4] = {
  1, 1, 0, 0
};

// liefert die Richtung, in der sich ein Drehgeber gedreht hat: -1, 1 oder 0
int8_t getDelta(uint8_t a, uint8_t oldA, uint8_t b, uint8_t oldB)
{
  return g_delta[oldB | (b << 1) | (oldA << 2) | (a << 3)];
}

uint8_t getA1()
{
  // TODO: abhängig vom Microcontroller
  return 0;
}

uint8_t getB1()
{
  // TODO: abhängig vom Microcontroller
  return 0;
}

uint8_t getA2()
{
  // TODO: abhängig vom Microcontroller
  return 0;
}

uint8_t getB2()
{
  // TODO: abhängig vom Microcontroller
  return 0;
}

void setOutA(uint8_t value)
{
  // TODO: abhängig vom Microcontroller
}

void setOutB(uint8_t value)
{
  // TODO: abhängig vom Microcontroller
}

int main(int argc, char** argv)
{
  int16_t counter = 0;
  uint8_t oldA1 = getA1();
  uint8_t oldB1 = getB1();
  uint8_t oldA2 = getA2();
  uint8_t oldB2 = getB2();
  uint8_t outIndex = 0;
  while (1) {
    // wenn Eingang 1 für einen Schritt eine Einheit zählt, dann entspricht
    // ein Schritt für Eingang 2 1500/4096 Einheiten.
    // Wenn somit ein Schritt an Eingang 1 4096 Einheiten sind, dann entspricht
    // ein Schritt an Eingang 2 1500 Einheiten.

    // Eingang A1/B1 auswerten
    uint8_t a1 = getA1();
    uint8_t b1 = getB1();
    int8_t delta1 = getDelta(a1, oldA1, b1, oldB1);
    if (delta1 < 0) counter -= STEPS2;
    if (delta1 > 0) counter += STEPS2;
    oldA1 = a1;
    oldB1 = b1;

    // Eingang A2/B2 auswerten
    uint8_t a2 = getA2();
    uint8_t b2 = getB2();
    int8_t delta2 = getDelta(a2, oldA2, b2, oldB2);
    if (delta2 < 0) counter -= STEPS1;
    if (delta2 > 0) counter += STEPS1;
    oldA2 = a2;
    oldB2 = b2;
    
    // Ausgangssignal per Modulo-Arithmetik generieren
    if (counter > OUTPUT_STEP) {
      counter -= OUTPUT_STEP;
      if (outIndex < 3) outIndex++; else outIndex = 0;
    }
    if (counter < -OUTPUT_STEP) {
      counter += OUTPUT_STEP;
      if (outIndex > 0) outIndex--; else outIndex = 3;
    }
    setOutA(g_outA[outIndex]);
    setOutB(g_outB[outIndex]);
  }
  return 0;
}

Autor: R. E. (waschle)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist ja interessant, dass sich doch noch jemand dafür interessiert, ob 
man das machen kann.


Frage zu der Tabelle mit den Zustandsübergängen.
du schreibst von 16 verschiedenen Möglichkeiten, aber ich komme nur auf 
8.
Also pro Zählrichtung 4 , oder ist die Tabelle für beide Geber?
oder verstehe ich das falsch? Bin kein Programmierer. Wass heißt oldA 
oldB?

Frank Buss schrieb:
> // Tabelle für alle Zustandübergange der Eingänge,
>
> // abgebildet auf die Zählrichtung
>
> // A oldA B oldB Zähler
>
> // 0 0    0 0    0
>
> // 0 0    0 1    1
>
> // 0 0    1 0    -1
>
> // 0 0    1 1    0
>
> // 0 1    0 0    -1
>
> // 0 1    0 1    0
>
> // 0 1    1 0    0
>
> // 0 1    1 1    1
>
> // 1 0    0 0    1
>
> // 1 0    0 1    0
>
> // 1 0    1 0    0
>
> // 1 0    1 1    -1
>
> // 1 1    0 0    0
>
> // 1 1    0 1    -1
>
> // 1 1    1 0    1
>
> // 1 1    1 1    0

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rafael Engelbrecht schrieb:
> Frage zu der Tabelle mit den Zustandsübergängen.
> du schreibst von 16 verschiedenen Möglichkeiten, aber ich komme nur auf
> 8.

Die 4 Bit, also 16 Zustände sind der aktuelle und der vorhergehende 
Zustand des Gebers. Nur so kann man feststellen ob und wohin er sich 
bewegt hat.

Autor: Frank Buss (foobar)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe jetzt mal ein wenig mit Drehgebern experimentiert, da ich 
vorher damit noch nie was mit gemacht habe. Hier ein Projekt mit Anzeige 
der Drehgeberposition per Grafikdisplay, einem recht netten und einfach 
anzusteuernden OLED-Display:

http://www.frank-buss.de/attiny/index.html

Da mich das Problem hier interessiert hat, habe ich dann mal 
unverbindlich versucht, es zu lösen. Zunächst mit einem PCI16F628 und 
dem C-Code von oben, zwei angeschlossenen Drehgebern und dann das neu 
generierte Drehgeber-Ausgangssignal in die andere Schaltung zur Anzeige 
eingespeist. Im Prinzip funktionierte das auch, aber als ich den 
Zeitbedarf der Hauptschleife ausgemessen habe (per Pin-Toggling und 
Oszilloskop), kam ich auf eine maximal mögliche Frequenz von ca. 3 kHz 
bei 18 MHz Takt für die CPU. Der generierte Assembler sieht auch nicht 
besonders gut aus, aber viel besser kann man es selbst in Assembler wohl 
auch nicht schreiben, da die CPU leider nur 8-Bit Register kennt und 
auch einen umständlichen Befehlssatz hat. Vielleicht würde man auf 20 
kHz oder so kommen, schätze ich mal, was aber dann noch weit weg von den 
notwendigen 40 kHz wäre. Und wenn 40 kHz die maximale Impulsfrequenz 
ist, dann wäre es schon gut, wenn man da noch ein mehrfaches drüberliegt 
mit der Abtastfrequenz, für eine sichere Erkennung.

Ich habe das daher mal in VHDL programmiert, siehe Code unten. ISE sagt 
mir, die maximale Frequenz für die clock-Leitung liegt bei ca. 8 MHz 
(der XC9572XL-10-TQ100 ist übrigens zu 78% belegt mit der Anwendung, 
bleibt aber natürlich kühl bei den niedriegen Takten). Ich habe mal 
einen 4 MHz Quarz angeschlossen und läuft damit prima. Da im dem CPLD 
nicht viel Platz ist, musste ich die Abarbeitung noch serialisieren, 
statt wie in C parallel beide Drehgeber pro Durchlauf zu testen, sodaß 
die Abtastrate effektiv bei 1/3, also ca. 1,3 MHz liegt. Da hat man dann 
genügend Reserve, auch für schnelle Drehgeber.

Geflasht ist das ganze auf einem kleinen Board, wo der CPLD verlötet ist 
und das über eine 20-polige Pfostenleiste verfügt, um die 
Versorgungsspannung und die Signale anzuschließen. Sind außerdem noch 
zwei LEDs drauf, von denen ich die rote bei jedem Wechsel irgendeines 
der Drehgeber-Eingänge jeweils invertiere. Außerdem sind zwei Taster 
drauf, die aber aktuell die grüne LED anschalten, solange der Taster 
gedrückt gehalten wird. Anbei ein Foto des Testaufbaus. Wie erwartet 
wird der erste Drehgeber 1:1 zur Anzeige durchgegeben und die Position 
des zweiten Drehgebers ca. durch drei geteilt (also ein Zählschritt alle 
drei Impulse) bei dem 4096:1500 Verhältnis. Kommt also gut hin.

Wer möchte, dem schicke ich das programmierte CPLD-Board. Die 
Signaleingänge können sowohl mit 5 V, als auch mit 3,3 V betrieben 
werden. Die beiden Ausgangssignale haben 3,3 V und die 
Versorgungsspannung des CPLD-Moduls ist 3,3 V. Man braucht außerdem noch 
einen Quarz.

Für die RS422-Umsetzung müsste man auch noch insgesamt 4 RS422-Receiver 
und 2 RS422-Transmitter haben. Könntest du dir auf Lochraster aufbauen, 
oder ich kann ich dir das auch alles professionell zusammen auf einer 
geätzten Platine aufbauen, was wohl besser wäre, damit das auch was 
haltbarer ist. Falls Interesse, dann eMail an mich. Könnte man dann auch 
vom Quarz her und dem Rest der Schaltung alles auf 3,3 V auslegen.

Oder ich kann ich dir auch einfach das programmierte CPLD-Board mit 
Flachbandkabel, den 4 MHz Quarz, 5 V Spannungsregler (für den Quarz) und 
3,3 V Spannungsregler (für den CPLD, nebst Kondensatoren) für 50 Euro 
schicken, falls du den Rest selber aufbauen möchtest.

Hier der VHDL-Code:
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity main is
  port(
    -- Takteingang
    clock: in std_logic;
    
    -- Eingänge für den ersten Drehgeber
    inA1: in std_logic;
    inB1: in std_logic;

    -- Eingänge für den zweiten Drehgeber
    inA2: in std_logic;
    inB2: in std_logic;

    -- Drehgeber Ausgang
    outA: out std_logic;
    outB: out std_logic;
    
    -- Anschlüsse auf dem Board
    greenLED: out std_logic;
    redLED: out std_logic;
    switch1: in std_logic;
    switch2: in std_logic
  );
end main;

architecture rtl of main is
  -- Anzahl Impulse pro Umdrehung für Eingang A1/B1
  constant STEPS1: integer := 1500;

  -- Anzahl Impulse pro Umdrehung für Eingang A2/B2
  constant STEPS2: integer := 4096;

  -- Anzahl Impulse pro Umdrehung für Eingang A2/B2
  constant OUTPUT_STEPS: integer := STEPS2;

  -- gelatchte Eingangssignale
  signal a1: std_logic;
  signal b1: std_logic;
  signal a2: std_logic;
  signal b2: std_logic;

  -- vorherige Signale, ein Takt früher
  signal oldA1: std_logic;
  signal oldB1: std_logic;
  signal oldA2: std_logic;
  signal oldB2: std_logic;

  -- Zähler für die Schritte der beiden Drehgeber
  signal counter: integer range
    -(STEPS1 + STEPS2 + OUTPUT_STEPS) to
    (STEPS1 + STEPS2 + OUTPUT_STEPS) := 0;
    
  -- Index für die Ausgangssignalgenerierung
  signal outIndex: natural range 0 to 3 := 0;
  
  -- Variablen der Statemachine zur Serialisierung des Prozesses
  type stateType is (test1, test2, updateOutIndex);
  signal state: stateType := test1;

  -- Variablen für LED Statusanzeige
  signal iRedLED: std_logic := '0';

begin

  koppler: process(clock)

    -- lokale Funktion:
    -- liefert die Richtung, in der sich ein Drehgeber gedreht hat,
    -- multipliziert mit "offset": -offset, offset oder 0
    function getDelta(
      signal a : in  std_logic;
      signal oldA : in  std_logic;
      signal b : in  std_logic;
      signal oldB : in  std_logic;
      offset : integer) return integer is
    variable testPattern: std_logic_vector(3 downto 0);
    variable result: integer;
    begin
      testPattern := a & oldA & b & oldB;
      case testPattern is
        when "0000" => result := 0;
        when "0001" => result := offset;
        when "0010" => result := -offset;
        when "0011" => result := 0;
        when "0100" => result := -offset;
        when "0101" => result := 0;
        when "0110" => result := 0;
        when "0111" => result := offset;
        when "1000" => result := offset;
        when "1001" => result := 0;
        when "1010" => result := 0;
        when "1011" => result := -offset;
        when "1100" => result := 0;
        when "1101" => result := -offset;
        when "1110" => result := offset;
        when "1111" => result := 0;
        when others => result := 0;
      end case;
      return result;
    end getDelta;

  -- Prozessbegin
  begin
    if rising_edge(clock) then
      -- Eingangssignale latchen
      a1 <= inA1;
      b1 <= inB1;
      a2 <= inA2;
      b2 <= inB2;

      -- Statemachine, um die benötigte Anzahl Logikzellen durch
      -- Serialisierung zu verringern
      case state is

        -- Drehgeber 1 testen
        when test1 =>
          counter <= counter + getDelta(a1, oldA1, b1, oldB1, STEPS2);
          oldA1 <= a1;
          oldB1 <= b1;
          state <= test2;

        -- Drehgeber 2 testen
        when test2 => 
          counter <= counter + getDelta(a2, oldA2, b2, oldB2, STEPS1);
          oldA2 <= a2;
          oldB2 <= b2;
          state <= updateOutIndex;

        -- Ausgangsindex per Modulo-Arithmetik berechnen
        when updateOutIndex => 
          if counter > OUTPUT_STEPS then
            counter <= counter - OUTPUT_STEPS;
            if outIndex < 3 then
              outIndex <= outIndex + 1;
            else
              outIndex <= 0;
            end if;
          end if;
          if counter < -OUTPUT_STEPS then
            counter <= counter + OUTPUT_STEPS;
            if outIndex > 0 then
              outIndex <= outIndex - 1;
            else
              outIndex <= 3;
            end if;
          end if;
          state <= test1;
      end case;

      -- Ausgangssignal generieren
      case outIndex is
        when 0 => outA <= '1'; outB <= '1';
        when 1 => outA <= '0'; outB <= '1';
        when 2 => outA <= '0'; outB <= '0';
        when 3 => outA <= '1'; outB <= '0';
      end case;      
      
      -- bei jedem Zustandswechsel an den Drehgebereingängen die rote LED invertieren
      if oldA1 /= a1 or oldB1 /= b1 or oldA2 /= a2 or oldB2 /= b2 then
        iRedLed <= not iRedLed;
      end if;
      redLED <= iRedLED;
    end if;
  end process;
  
  -- grüne LED anschalten, wenn einer der beiden Taster gedrückt wurde
  greenLED <= (not switch1) or (not switch2);

end architecture rtl;

Autor: Raimund (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rafael,
warum paßt Du nicht einfach die Welle des Seilzugdrehgebers an? 
Feinmechanik scheinst Du ja zu können. Der "Analogrechner" ist dann 
extrem einfach.

Gruß, Raimund

Autor: R. E. (waschle)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frank Buss schrieb:
> Ich habe jetzt mal ein wenig mit Drehgebern experimentiert, da ich
> vorher damit noch nie was mit gemacht habe. Hier ein Projekt mit Anzeige
> der Drehgeberposition per Grafikdisplay, einem recht netten und einfach
> anzusteuernden OLED-Display:
>
Hallo Frank,
ist ja schon toll, was du gemacht hast, nur, bis das ganze wirklich 
steht, ist eine Unmenge an Zeit und Programmieraufwand draufgegangen, 
das merkt man jetzt schon.

Raimund schrieb:
> warum paßt Du nicht einfach die Welle des Seilzugdrehgebers an?
>
> Feinmechanik scheinst Du ja zu können. Der "Analogrechner" ist dann
>
> extrem einfach.
Daran habe ich natürlich auch schon gedacht, aber das scheitert alles an 
verschiedenen Sachen, z.b. Die Achse macht 3,6mm bei 1024 incr. Würde 
ich jetzt einen 2. Geber nehmen, eine Seilrolle dranmachen, und das Seil 
auf einen Kolben festmachen, der bis nach Unten auf das Material stößt,
dann würde sich das Seil entprechend der Bewegung des Kolbens ab- oder 
Aufrollen. Und da kommt man schnell an die Grenzen. Die Welle des Gebers 
hat min. 6mm. Machen wir mal eine einfache Rechnung:
Sagen wir mal, eine Umdrehung des 2. Gebers entspricht 36mm Weg, dann 
ist der Umfang der Rolle 36mm, der Durchmesser entsprechend ca 11,5mm.
Dann müsste der Geber aber schon 10240 Impulse liefern, und das wird 
auch
schwierig.
DA ist mir was besseres eingefallen. Ich nehme statt dem 2. Geber eine 
Schaltwippe, mit einem Ini oder Lichtschranke für Auf oder Ab. Bei der 
Schaltung gibt es statt dem 2. Geber nur diese 2 Eingänge.
Mittenstellung ist 0.
Nun wird ein Oszillator programmiert, der entsprechend bei den Eingängen 
entweder positive oder negative Impulse erzeugt, und zwar solange, wie 
der entsprechende Eingang belegt ist. Die Frequenz sollte regelbar sein, 
damit man besser das Einschwingverhalten im Griff hat. Somit habe ich 
relativ wenig Mechanikaufwand und keine Probleme mit der Übersetzung 
mehr.
Habe einen Bekannten drauf angesprochen, der könnte das für mich machen.

Autor: Frank Buss (foobar)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rafael Engelbrecht schrieb:
> ist ja schon toll, was du gemacht hast, nur, bis das ganze wirklich
> steht, ist eine Unmenge an Zeit und Programmieraufwand draufgegangen,
> das merkt man jetzt schon.

Die Einarbeitung in die Auswertung von Drehgebern und die 
ATtiny-Programmierung mit Display und Aufbau usw. hat ca. 1 Tag 
gebraucht, da ich vorher auch noch nie einen ATtiny Microcontroller 
verwendet habe. Die Lösung deines Problems per CPLD war dann in ca. 2 
Stunden fertig, da ich das CPLD-Board mit Xilinx ISE-Projekt usw. schon 
hier liegen hatte von einem anderen Projekt und daher nur den C-Code 
nach VHDL portieren musste, und mit VHDL habe ich schon einige Jahre 
Programmiererfahrung.

Damit wäre zumindest das Problem mit der Kopplung zweier Drehgeber 
gelöst und man müsste nur noch die RS422-Wandlungen dranbasteln, die man 
auch fertig als Module kaufen kann, falls man die Verdrahtung der 
Treiberchips usw. auf einer Platine nicht machen möchte.

Ich habe es eben übrigens nochmal etwas mehr getestet: Wenn ich den 
zweiten Drehgeber 10 Umdrehungen drehe, der bei mir eine Rasterung von 
24 pro Umdrehung hat, dann ergibt das eine Anzeige von 88, was exakt 
passt: 4096/1500*88=240. Die Modulo-Arithmetik funktioniert also 
tatsächlich so, wie gedacht und es wird exakt das Verhältnis 4096:1500 
abgebildet. Nicht daß ich je daran gezweifelt hätte, aber wie schon 
Lenin so schön sagte: Das Kriterium der Wahrheit ist die Praxis :-)

> DA ist mir was besseres eingefallen. Ich nehme statt dem 2. Geber eine
> Schaltwippe, mit einem Ini oder Lichtschranke für Auf oder Ab. Bei der
> Schaltung gibt es statt dem 2. Geber nur diese 2 Eingänge.
> Mittenstellung ist 0.
> Nun wird ein Oszillator programmiert, der entsprechend bei den Eingängen
> entweder positive oder negative Impulse erzeugt, und zwar solange, wie
> der entsprechende Eingang belegt ist. Die Frequenz sollte regelbar sein,
> damit man besser das Einschwingverhalten im Griff hat. Somit habe ich
> relativ wenig Mechanikaufwand und keine Probleme mit der Übersetzung
> mehr.
> Habe einen Bekannten drauf angesprochen, der könnte das für mich machen.

Ich habe keine Ahnung von Mechanik und kann mir das auch nicht richtig 
vorstellen, aber klingt irgendwie wackelig. Interessant wären ein paar 
Bilder von der Mechanik, vielleicht haben dann andere auch noch Ideen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.