Forum: Mikrocontroller und Digitale Elektronik Encoder SSI, Gray auswerten


von Mein_erstes_Mal (peter_s158)


Lesenswert?

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

von Yalu X. (yalu) (Moderator)


Lesenswert?

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
von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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
von Bernd G. (Gast)


Lesenswert?

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.

von Bernd G. (Gast)


Lesenswert?

Matthias S. schrieb:
> Das differentielle Clock Signal sende ich mit einem Inverter an den
> Encoder.

Pfui, das macht man aber mit einem RS422-Sender.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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
von Mein_erstes_Mal (peter_s158)


Lesenswert?

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

von Bernd G. (Gast)


Lesenswert?

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...

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Angehängte Dateien:

Lesenswert?

Bernd G. schrieb:
> Komische Encoder hast du da...

von Bernd G. (Gast)


Lesenswert?

Und wie heißt der Hersteller? Ich hatte bisher nur mit Teilen von 
Kübler, Sick, Wachendorff, Heidenhain etc. zu tun.

von Mein_erstes_Mal (peter_s158)


Angehängte Dateien:

Lesenswert?

ich habe diesen Encoder

von Bernd G. (Gast)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

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 ;-)

von Mein_erstes_Mal (peter_s158)


Lesenswert?

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

von Bernd G. (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.