Guten Abend, ich möchte mit einem Mikrocontroller einen SSI Encoder mit 25 Bit Graycodierung auslesen. Die Hardware ist mir klar. Das raus takten der Psition sollte kein Problem darstellen. Was ich nicht verstehe ist was es mit dem Graycode auf sich hat? Kann mir bitte jemand erklären? Danke für die Hilfe
Du möchtest den Graycode in gewöhnlichen Binärcode konvertieren? Das geht ganz einfach: Hat der Code n Bits und die Graybits und die Binärbits sind jeweils von 0 (LSB) bis n-1 (MSB) durchnumeriert, dann lassen sich die Binärbits (b) aus den Graybits (g) wie folgt ermitteln:
⊕ ist dabei der XOR-Operator.
:
Bearbeitet durch Moderator
Hier ein praktisches Beispiel für den Sick Stegmann AG661 Encoder:
1 | /* Read the Sick Stegmann Encoder AG661
|
2 | * This is done by bringing the clock low first - After rising the clock again,
|
3 | * the first bit is sent by the encoder. 24 bits are sent followed by the PF bit
|
4 | * indicating a Power fail. A break with a minimum of 20 uS will reset the encoder to start
|
5 | *
|
6 | */
|
7 | void Read_Angle(void) { |
8 | uint8_t n; |
9 | uint32_t temp = 0; |
10 | ENCODER_CLOCK_PORT &= ~(1 << ENCODER_CLOCK1_PIN); // initial clock low |
11 | _delay_us(5); |
12 | for (n=0;n<25;n++) { |
13 | ENCODER_CLOCK_PORT |= (1 << ENCODER_CLOCK1_PIN); // clock high |
14 | _delay_us(5); |
15 | temp <<= 1; |
16 | if (bit_is_set(ENCODER_PIN,ENCODER_RX1_PIN)) temp |= 1; |
17 | ENCODER_CLOCK_PORT &= ~(1 << ENCODER_CLOCK1_PIN); // clock low |
18 | _delay_us(5); |
19 | }
|
20 | ENCODER_CLOCK_PORT |= (1 << ENCODER_CLOCK1_PIN); // clock high |
21 | // now convert gray to binary
|
22 | for (n=1;n<32;n=2*n){ |
23 | temp = temp ^ (temp >> n); |
24 | }
|
25 | // mask out rotation and angle
|
26 | rotationValue =(uint16_t) ((temp & 0x01ffe000) >> 13); |
27 | angleValue =(angleValue + (uint16_t) ((temp & 0x00001ffe) >> 1)) >> 1; |
28 | // _delay_us(100);
|
29 | }
|
Das differentielle Clock Signal sende ich mit einem Inverter an den Encoder. Ein Beispiel für einen Haidenhein hätte ich auch noch da.
:
Bearbeitet durch User
Mein_erstes_Mal schrieb: > Was ich nicht verstehe ist was es mit dem Graycode auf sich hat? Der Hintergrund des Graycodes: von Schritt zu Schritt, d.h. von einer Codeposition zur nächsten ändert sich jeweils nur ein einziges Bit. Genial. Sieht beim langsamen Durchdrehen des Encoders per Hand auf dem Oszilloskop sehr beeindruckend aus.
Matthias S. schrieb: > Das differentielle Clock Signal sende ich mit einem Inverter an den > Encoder. Pfui, das macht man aber mit einem RS422-Sender.
Bernd G. schrieb: > Pfui, das macht man aber mit einem RS422-Sender. Nix Pfui - Funktion entscheidet. Da ist ein Optokoppler im Eingang des Encoders, dem ist das völlig wurscht. Der sitzt zwischen zwei Gattern eines 74HC14.
:
Bearbeitet durch User
Matthias S. schrieb: > Hier ein praktisches Beispiel für den Sick Stegmann AG661 > // mask out rotation and angle > rotationValue =(uint16_t) ((temp & 0x01ffe000) >> 13); > angleValue =(angleValue + (uint16_t) ((temp & 0x00001ffe) >> 1)) >> 1; > // _delay_us(100); > } Danke für das Beispiel. sind die oberen 13 Bit nicht der Multiturn Teil? und warum wird bei der Winkel berechnung nochmal 13 Bit Maskiert? Bernd G. schrieb: > Mein_erstes_Mal schrieb: >> Was ich nicht verstehe ist was es mit dem Graycode auf sich hat? > > Der Hintergrund des Graycodes: von Schritt zu Schritt, d.h. von einer > Codeposition zur nächsten ändert sich jeweils nur ein einziges Bit. > Genial. > Sieht beim langsamen Durchdrehen des Encoders per Hand auf dem > Oszilloskop sehr beeindruckend aus. Werde ich mir mal auf dem Oszilloskop ansehen, danke
Matthias S. schrieb: > Da ist ein Optokoppler im Eingang des > Encoders, dem ist das völlig wurscht. Der sitzt zwischen zwei Gattern > eines 74HC14. Komische Encoder hast du da...
Und wie heißt der Hersteller? Ich hatte bisher nur mit Teilen von Kübler, Sick, Wachendorff, Heidenhain etc. zu tun.
Mein_erstes_Mal schrieb: > ich habe diesen Encoder Kannst du auch die komplette Typenbezeichnung ansagen? Da gibt es ja sehr viele verschiedene Typen. Aber egal wie, Kübler ist immer die richtige Wahl. Ja, ich habe eineen Interessenkonflikt. Kübler ist mein bester Kunde.
Yalu X. schrieb: > Du möchtest den Graycode in gewöhnlichen Binärcode konvertieren? > > Das geht ganz einfach: Hat der Code n Bits und die Graybits und die 50 Bits of Gray ;-)
Bernd G. schrieb: > Mein_erstes_Mal schrieb: >> ich habe diesen Encoder > > Kannst du auch die komplette Typenbezeichnung ansagen? Da gibt es ja > sehr viele verschiedene Typen. Aber egal wie, Kübler ist immer die > richtige Wahl. Ja, ich habe eineen Interessenkonflikt. Kübler ist mein > bester Kunde. ja gerne den hier 8.5883.5426.G322
Mein_erstes_Mal schrieb: > ja gerne den hier 8.5883.5426.G322 Schönes Teil, ich benutze die Ausführung mit normaler Welle in meinem Prüfgerät für SSI-Lichtwellenleiter-Übertragungen . Du brauchst hier in jedem Falle einen RS422-Treiber/Empfänger. Mein Lieblingstyp dafür: ST490 (Transceiver). Die vorgeschlagene Bastelei mit Inverter wird hier garantiert in die Hose gehen.
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.