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.
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.
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 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | bl | 3 | br | 1? | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2 | or | 1 | rt | 2? | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
3 | br | 6 | or | 3? | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
4 | gr | 7 | ge | 4? | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
5 | gn | 2 | sw | 5? | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
6 | rt | 11 | bl | 2? | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
7 | sw | 8 | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
8 | ge | 12 | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
9 | bl-sw | 16 | rt | 1 | Bremse, 0 V = gebremst, 24 V = gelöst | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
10 | or-sw | 4 | sw | 2 | Bremse Masse | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
11 | bl | 14 | ws | 1 | digital | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
12 | or | 19 | br | 2 | 13 | gn | 5 | or | 5 | A
| 14 | br | 10 | ge | 6 | 15 | gr | 15 | bl | 7 | B
| 16 | rt | 20 | vi | 8 | 17 | gr-sw | 24 | rt | 3 | 5,7 V
| 18 | br-sw | 18 | - |
| 19 | rt-sw | 9 | sw | 4 | 0 V
| 20 | gn-sw | 13 | - |
| 21 | rs | 23 | - |
| 22 | - | 22 | - |
| 23 | - | 17 | - |
| 24 | sw | 21 | gn | Gehäuse
| |
Auf dem Geber ließen sich neben einem QR-Kode diverse Bezeichnungen finden:
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.
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.
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.
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.
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.
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.
Beim Einschalten gibt es serielle Kommunikation mit 115200 Baud!! Mit unklarer Datenrichtung.
Nr | Bytes |
---|---|
1 | 01 00 00 00 00 00 00 01 |
2 | 41 40 10 05 00 00 01 15 |
3 | 06 00 06 00 00 00 00 00 |
4 | 46 00 06 68 70 75 6C 41 |
5 | 20 68 70 75 6C 73 65 37 |
6 | 60 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.
Nr | Bytes | Bytes Antwort |
---|---|---|
1 | EA 20 CA | EA 20 FF 35 |
2 | EA 21 CB | EA 21 FF 34 |
3 | EA 22 C8 | EA 22 FF 37 |
4 | EA 23 C9 | EA 23 FF 36 |
.. | EA xx cs | EA xx FF cs |
28 | EA 3B D1 | EA 3B FF 2E |
29 | EA 3C D6 | EA 3C 17 C1 |
30 | EA 3D D7 | EA 3D 19 CE |
31 | EA 3E D4 | EA 3E FF 2B |
32 | EA 3F D5 | EA 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!
Nr | Bytes | Bytes Antwort |
---|---|---|
1 | EA 41 A8 | EA 42 00 A8 |
2 | ...43... | ...05... |
3 | ...44... | ...20... |
4 | ...45... | ...DB... |
5 | ...46... | ...D3... |
6 | ...47... | ...6D... |
7 | 32 7E FF B3 | 32 7E FF B3 |
8 | EA 7E 94 | EA 7E FF 6B |
9 | 32 7F FE B3 | 32 7F FE B3 |
10 | EA 7F 95 | EA 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.
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.
Nun liegt alles neu auf dem Tisch, die alte Linearachse mit Schrittmotor wird obsolet:
Stecker Geber Molex 501330-0800 | Ader grünes Kabel | Zwischenstecker Molex 5557: 39-01-2125 | Ader NVF35/19...560120.1 | X9 3M158272 | Signal |
---|---|---|---|---|---|
- | 1 | BISS-Data+ | |||
- | 2 | BISS-Data- | |||
- | 3 | BISS-Takt- | |||
- | 4 | BISS-Takt+ | |||
8 | rt | 1 | sw | 5 | 5P |
7 | rt | 6 | |||
7 | sw | 2 | bl | 7 | 00 |
8 | vi | 8 | |||
6 | vi-sw | 5 | br | 9 | R+ |
5 | vi | 11 | ws | 10 | R- |
3 | gn | 10 | gr | 11 | B- |
4 | gn-sw | 4 | or | 12 | B+ |
2 | bl-sw | 9 | gn | 13 | A- |
1 | bl | 3 | ge | 14 | B- |
Gehäuse | Schirm | 12 | Schirm |