IAI-Geber

Eine preiswerte Linearachse mit Schrittmotor, Wegmesssystem und Controller. Soll an einer Siemens-Steuerung betrieben werden. Bezeichnung: IAI PCON-CB 35PWAI-PN-2-0. Der Controller soll ersetzt werden. Dazu muss die Schnittstelle für die Wegmessung bekannt sein. Ggf. muss eine Schaltung mit Mikrocontroller oder FPGA dazwischen.

Ausforschung

Verbindungskabel

Auf der Controllerseite ist ein 2-reihiger 24-poliger XAD-JST-Board-Zu-Wire-Steckverbinder im 2,5-mm-Raster mit Verriegelung. An diesem ist ein 22-poliges ungeschirmtes Kabel von ca. 2 m Länge angeschlossen, bei dem 6 Adern etwas dicker sind; sie gehen zum Schrittmotor. An der Achse sitzt ein (nicht im Internet auffindbarer) 5-reihiger 24-poliger JST-Wire-Zu-Wire-Steckverbinder im 2,5-mm-Raster mit Verriegelung. Dabei hat die untere, von der Verriegelung am weitesten entfernte Reihe, nur 4 Kontakte. Da die Zählweise aus dem Datenblatt nicht ersichtlich ist, habe ich diese wie im folgenden Bild ersichtlich festgelegt. Einige Adern haben einen schwarzen Längsstreifen.

Meine Pin-Nummerierung der beiden Steckverbinder

Im Innern der Achse verteilt sich der Stecker auf 3 weitere Stecker, je einer zum Motor, zur Bremse und zum Geber. Auch hier ist die Zählweise „nach Gusto“ festgelegt. Um sich einen Überblick über das Stecker- und Farben-Wirrwarr zu machen, folgt eine sortierbare Tabelle.

Pin
Controller
Farbe
(fett=dick)
Pin
Achse
Farbe
(fett=dick)
Pin
Geber
Pin
Motor
Pin
Bremse
Bedeutung
1bl3br1?
2or1rt2?
3br6or3?
4gr7ge4?
5gn2sw5?
6rt11bl2?
7sw8-
8ge12-
9bl-sw16rt1Bremse, 0 V = gebremst, 24 V = gelöst
10or-sw4sw2Bremse Masse
11bl14ws1digital
12or19br2digital
13gn5or5A
14br10ge6A
15gr15bl7B
16rt20vi8B
17gr-sw24rt35,7 V
18br-sw18-
19rt-sw9sw40 V
20gn-sw13-
21rs23-
22-22-
23-17-
24sw21gnGehäuse

Geber-Signale

Auf dem Geber ließen sich neben einem QR-Kode diverse Bezeichnungen finden:

Meine Pin-Nummerierung am Inkrementalgeber

Was sich so mit dem Oszilloskop beobachten ließ: A und B liefern komplementäre digitale Sinus- und Kosinussignale für magere 200 Striche pro Umlauf. Die Spindelsteigung beträgt 24 mm pro Umlauf. Das Zahnriemengetriebe hat eine 1:1-Übersetzung, also keine. Die Auswertung des Quadrantensignals ergibt eine Linearauflösung von 24 mm / 4×200 = 0,03 mm = 30 µm. Es wird sicherlich während der Bewegung vom Controller ausgewertet, weil es ohne Verzögerung kommt.

Auf der Geberplatine befindet sich ein 64-beiniger Schaltkreis. Dieser macht sicherlich eine Interpolation, und gibt das Ergebnis digital gewandelt aus. Und genau hier liegt das Problem: Es ist undokumentiert! Heidenhain EnDat ist es jedenfalls nicht, kein Taktsignal. Alle Signale (auf allen 6 Leitungen) haben 3,3 V Amplitude, nicht 5 V. Die Stromaufnahme lag bei 80 mA.

PulseView bei Positionsabfrage

Das beobachtete Digitalsignal hat folgende Eigenschaften:

Wer Sender und Empfänger ist wurde mit Serienwiderständen herausgefunden.

Was der Geber tut, wenn man etwas anderes als 0x1A hinschickt, muss noch herausgefunden werden. Auch ist es denkbar, wenn auch unwahrscheinlich, dass der Geber eine gesonderte Initialisierungssequenz benötigt. Für die Beobachtung derselben muss man größere Geschütze auffahren als das hier verwendete Analogoszilloskop. Ohne Anfragebyte kommt jedenfalls nichts.

Wer macht daraus einen Absolutwertgeber?

Das Versprechen des Herstellers ist ein (teurer) Absolutwertgeber, vebaut wurde lediglich ein preiswerter Inkrementalgeber. Da auf der Controllerplatine eine dicke Stützbatterie oder Superkondensator verbaut wurde, gehe ich davon aus, dass der Controller die Strichzählung irgendwie auch bei Stromausfall fortsetzt. Oder aber er ist doch etwas blöder und verlässt sich auf die Endschalter Motor-Blockierung beim Referenzieren.

Schlachtplan

Als nächster Schritt kommt ein Arduino mit MAX485 dran. Für die erforderliche Baudrate muss ein AVR mit 2,5 MHz × 8 = 20 MHz getaktet sein, dazu müsste man einen ATmega schon übertakten. Wenn es nur um's Auslesen für den PC geht, eignet sich der bereits für eine andere Anwendung entwickelte USB-zu-RS422-Umsetzer ganz ausgezeichnet als Vorlage. Der Quarz wird durch 20 MHz ersetzt, der ATtiny nicht mal übertaktet, und der 75179 durch einen 75176 ersetzt. Andererseits sollte das ein PIC16F1454 auch ohne FT245 und ohne Quarz schaffen? Nein, das wird zu ungenau: BRG16=1, BRGH=1, SPBRG=4 ergibt 48MHz/(4(4+1)) = 2,4 MBaud, ein Fehler von 4 %, zu viel.

Adapter-Schaltung

Jetzt kommt's raus: Die Siemens-Steuerung will Heidenhain EnDat. Also doch mal wieder so ein Adapter. Ich gehe mal davon aus, dass auch BiSS unterstützt wird.

Korrigierter Schaltplan

An SV2 wird für die Inbetriebnahme (irgend)ein Arduino mit seinem Slave-SPI angeschlossen, um die Daten des IAI-Gebers zu überprüfen, also zum Debuggen. Das BiSS/EnDat-Interface wird erst danach bestückt. Die aktive Terminierung aus den vielen Widerständen, Kondensatoren und IC5 kann für Vorversuche entfallen, ich habe dennoch erst mal alles bestückt, auch die Angstwiderstände, weil sie die oszillografische Inbetriebnahme erleichtern.

Als Mikrocontroller kommt ein ATtiny2313 zum Einsatz, der IMHO als einziger Mikrocontroller die folgenden Eigenschaften vereinigt:

Als Schnittstellenwandler wurden die etwas teureren MAX485 an Stelle der Stromfresser 75176 eingesetzt. Kein (8-Bit-)Arduino kann das!

Eagle-4.11-Datei zum Download inklusive Mikrocontroller-Firmware. Der Nachweis der korrekten Funktion des seriellen UART-Empfangs bei 2,5 MBaud mit ATtiny2313 wurde 2021-01-06 erbracht.

Die Anschlussbelegung der beiden RJ45-Buchsen wurde mit Absicht so gewählt, dass:

Auf Verwechslungssicherheit wurde zugunsten der Verwendbarkeit von vorkonfektionierten Ethernet-Kabeln verzichtet; für J2 könnte aber auch eine vierpolige RJ10-Buchse vorgesehen werden, als Bestückungsvariante auf einer professionell gefertigten Platine.

Musteraufbau auf (recycelter) Lochrasterplatine

Untersuchung mit Logikanalysator

Beim Einschalten gibt es serielle Kommunikation mit 115200 Baud!! Mit unklarer Datenrichtung.

PulseView beim Einschalten
Das erste Telegramm
Einleitende serielle Kommandos mit 115200 Baud
NrBytes
101 00 00 00 00 00 00 01
241 40 10 05 00 00 01 15
306 00 06 00 00 00 00 00
446 00 06 68 70 75 6C 41
520 68 70 75 6C 73 65 37
660 68 70 75 6C 73 65 77

Vom Einschalten bis zum 1. Telegramm: 260 ms. Von Telegramm (in sich lückenlos) zum nächsten: 4,3 ms (Lücke dazwischen 3,6 ms). Vom letzten Telegrammende bis zur Kommunikation mit 2,5 MBaud: 6,6 ms Das letzte Byte ist jeweils die XOR-Prüfsumme.

Das erste Telegramm mit 2,5 MBaud
Einleitende serielle Kommandos mit 2,5 MBaud
NrBytesBytes Antwort
1EA 20 CAEA 20 FF 35
2EA 21 CBEA 21 FF 34
3EA 22 C8EA 22 FF 37
4EA 23 C9EA 23 FF 36
..EA xx csEA xx FF cs
28EA 3B D1EA 3B FF 2E
29EA 3C D6EA 3C 17 C1
30EA 3D D7EA 3D 19 CE
31EA 3E D4EA 3E FF 2B
32EA 3F D5EA 3F ED 38

Datenrichtungen sind unklar, vermutlich kommt die Antwort vom Inkrementalgeber. Die letzten Bytes sind jeweils XOR-Prüfsummen. Nachdem 1x die Position mit 0x1A (wie oben) abgefragt wird, eine Pause und nochmal Abfragen!

Einleitende serielle Kommandos mit 2,5 MBaud
NrBytesBytes Antwort
1EA 41 A8EA 42 00 A8
2...43......05...
3...44......20...
4...45......DB...
5...46......D3...
6...47......6D...
732 7E FF B332 7E FF B3
8EA 7E 94EA 7E FF 6B
932 7F FE B332 7F FE B3
10EA 7F 95EA 7F FE 6B

Der Startup ist hier aufgezeichnet: IAI Start.sr, IAI Start.pvs. Das legt folgende Funktionalität nahe:

Schließlich wurde die Firmware so umgestaltet, dass sie auf dem Debugport die 15-Bit-Position als 16-Bit-Wert linksbündig ausspuckt. Um es später mit einem Arduino Leonardo auf dem PC durchzureichen. Vorerst genügt die Anzeige mit PulseView.

PulseView zum Funktionsnachweis der Firmware

Stecker

Den 14-poligen Centronics-ähnlichen Stecker für die Siemens-Steuerung (Buchse X9) gibt's bei Digikey unter der Nummer 3M158272-ND. Das Gehäuse mit der Bezeichnung 3M 10314 gibts unter der Nummer 3M1745-ND, sowie bei Ebay, allerdings als Rasthaken-, nicht als Schraubbefestigung. Wie sich bei Ankunft der Motorsteuerung herausstellte: Die Buchse X9 kommt sowohl mit Rasthaken als auch mit Schrauben zurecht.

Steuerung und Motor

Nun liegt alles neu auf dem Tisch, die alte Linearachse mit Schrittmotor wird obsolet:

Kabelage für Istwertgeber
Stecker Geber
Molex 501330-0800
Ader
grünes Kabel
Zwischenstecker
Molex 5557: 39-01-2125
Ader
NVF35/19...560120.1
X9
3M158272
Signal
-1BISS-Data+
-2BISS-Data-
-3BISS-Takt-
-4BISS-Takt+
8rt1sw55P
7rt6
7sw2bl700
8vi8
6vi-sw5br9R+
5vi11ws10R-
3gn10gr11B-
4gn-sw4or12B+
2bl-sw9gn13A-
1bl3ge14B-
GehäuseSchirm12Schirm
Fotos

Siehe auch