3-Achs Positionsanzeige für digitale Messschieber PDF Drucken E-Mail
Geschrieben von: Malte   
Sonntag, den 18. August 2013 um 09:21 Uhr

Das im Folgenden dargestellte Projekt ist noch nicht abgeschlossen, es finden noch Änderungen und Erweiterungen statt!

Hintergrund | Für mechanische Arbeiten steht mir die gut ausgestattete Werkstatt meines Vaters zur Verfügung. Seit längerem haben wir dort eine kleine Wabeco F1200 Fräsmaschine im Einsatz - ein wirklich gutes Werkzeug. Die Maschine ist in allen drei Achsen mit günstigen Anbaumessschiebern ausgestattet. Um die Positionswerte gut ablesen zu können, sind diese mit einem ebenfalls von Wabeco vertriebenen Anzeigesystem verbunden. Obwohl wir mittlerweile bereits das dritte Anzeigegerät an der Maschine haben, hat leider noch keines ordentlich funktioniert. Entweder fielen ganze Anzeigen aus, Werte sprangen oder froren zeitweise ein. Das muss kein systematisches Problem mit den Anzeigen sein, vielleicht hatten wir bisher einfach Pech. Trotzdem hatte meine Geduld in dieser Sache jetzt ein Ende und ich habe mich mal daran gemacht, so ein Auslesesystem selber zu bauen.

 

Verbindung zum Messschieber | Die neusten Modelle der Wabeco Messschieber (das sind die, die wir akutell an der Maschine haben) benutzen eine Mini-B USB Buchse als Datenausgang. Hä? Ja, eine USB Buchse, dass das daran anliegende Signal allerdings ansonsten irgendwas mit USB zu tun hat, kann ich nicht erkennen (auch wenn auf der Wabeco Seite behauptet wird, die Messschieber seien mit einer USB Schnittstelle ausgestattet). In enigen Foren habe ich aufgeschnappt, dass dieses Interface als "RB5" bezeichnet wird, habe das aber bisher nicht weiter recherchiert. Es ist zwar für meinen Geschmack ein ziemlich dreckiger Hack, eine dediziertes Steckersystem für ein anderes Signal zu verwenden (wie wäre es denn mal mit Schuko-Steckern an Lautsprecherkabeln?), immerhin sind diese Stecker mechanisch etwas solider als die der Vorgängerversion der Messschieber. Adapterkabel von "USB" nach RJ10- ("Western-") Steckern lagen dem Wabeco Ablesegerät bei, diese verwende ich hier. Die Belegung der Kabel zeigt die folgende Abbildung.

 

Serielles Protokoll | Die Messschieber geben eine synchrones serielles Signal aus, d. h. mittels eines Clocksignals wird angezeigt, wann das Datensignal gültige Bits trägt. Die Daten werden vom  Messschieber als zirka 9 ms dauernde Pakete übertragen, die etwa alle 117 ms, also mit ~8.5 Hz ausgegeben werden, wie das folgende Oszillogramm zeigt.

oszi_messschieber

spacer

Sieht man sich so ein Datenpaket näher an, erkennt man, dass es aus 24 Bit besteht. Die high-Phase des Clock-Signals (Ch 1, gelb) liegt immer innerhalb der high- oder low-Phase des Data-Signals (Ch 2, türkis). Ist das Clock-Signal high, ist also der Zustand des Data-Signals auszuwerten um das entsprechende Datenbit zu ermitteln. Bei dem folgenden Bild stand der Messschieber in 0.00 mm Stellung, die offensichtlich dadurch codiert ist, dass alle Datenbits eine Null tragen.

oszi_messschieber

spacer

Um das verwendete Datenformat zu erkennen, stellt man den Messschieber auf verschiedene Positionen und sieht sich die resultierende Bitfolge im Daten-Signal an. Für die Position 0.02 mm z. B. ist das erste Bit der Daten low das zweite high, alle weiteren Bits low (siehe folgendes Bild). Das entspricht der binären Darstellung von 2, wenn man das erste Datenbit als LSB (Least Significant Bit) interpretiert. Weitere Testpositionen bestätigen, dass die Position in Vielfachen von einem hunderstel Millimeter mit LSB 0 binär codiert ist.

oszi_messschieber

spacer

Nun fragt sich, wie das Vorzeichen in den Daten repräsentiert ist. Positioniert man den Messschieber auf -0.02 mm, sendet er ein Datenpakt wie im nächsten Bild dargestellt. Wie bei der 0.02 mm Position bleibt das zweite Bit high, dazu ist das 21. Bit high, alle anderen Bits sind low. Das 21. Bit scheint also nach 20 Betrags-Datenbits ein Vorzeichenbit zu sein. Ist es high, trägt der Wert ein negatives Vorzeichen, ansonsten ist er positiv. Die Daten sind also nicht im Einer- oder Zweierkomplement codiert - was in diesem Falle durchaus bequem ist: man kann auf der Anzeige den Betrag darstellen und ergänzt dann grafisch je nach Zustand des 21. Bits das Vorzeichen (siehe Software). Damit ist das Wesentliche des Datenformates auch schon entschlüsselt.

oszi_messschieber

spacer

Da das metrische System Teufelswerk ist, können die Messschieber Positionen auch in der Einheit Inch (Zoll) ausgeben. Ein Datenpaket für eine -1" Position sieht wie im folgenden Bild aus. Das 24. Bit zeigt die Einheit an (low -> Millimeter, high -> Inch). Die Betragsdaten nehmen für die -1" Position einen Wert von 0000_1011_1110_0000_0000 an, was dezimal 2000 bedeutet. In der Inch-Einstellung werden die Positionswerte also in Einheiten von 0.0005 Inch (= 0.0127 mm) ausgegeben.

oszi_messschieber

spacer

Schaltet man den Messschieber in dieser Position zurück in die Millimeterdarstellung - was natürlich -2.54 mm bedeutet -, lauten die Betragsbits 0011_0111_1001_0000_0000, was einem Dezimalwert von 2540 entspricht (und insofern nochmal ein Beispiel für die Richtigkeit der o.g. Coderingsannahme ist). Das Vorzeichenbit (Bit 21) ist gesetzt, der Wert ist also negativ, das Einheiten-Bit (Bit 24) ist wieder 0 und zeigt somit Ausgabewerte in (hundertstel) Millimetern an.

oszi_messschieber

spacer

 

Fasst man das Ganze nun nochmal graphisch zusammen, ergibt sich folgendes Bild. D0 entspricht "Bit 1" im Text, D23 "Bit 24".

spacer

spacer

 

 

bildspacerElektronik | Man muss zunächst dafür sorgen, dass die 1.6-V-Logik Messschiebersignale, die an den RJ-10-Buchsen K1-K3 anliegen, in 5 V Logik für den Mikrocontroller umgesetzt werden. Ich mache das hier mit Wald-und-Wiesen Komparatoren: drei LM393 (IC1-IC3). In den ICs befinden sich jeweils zwei Komparatoren. Jedes Messschieber-Signal ist mit dem nichtinvertierenden Eingang eines Komparators verbunden. An den invertierenden Eingängen der Komparatoren liegt eine Spannung von ca. 0.65 V, die mittels Spannungsteilern (R1/R2, R3/R4 bzw. R5/R6) aus der Versorgungsspannung erzeugt wird. Der LM393 besitzt einen Open-Collector-Ausgang, der nach Masse durchgeschaltet ist, wenn am invertierenden Eingang eine größere Spannung als am nichtinvertierenden Eingang anliegt. Wenn also weniger als 0.65 V vom Messschieber kommt, ist der Ausgang auf 0 V (low Pegel). Liegt eine Spannung >0.65 V an, ist der Kollektor offen und der externe Pull-up Widerstand (R9-R14) zieht den Ausgang nach 5 V (high Pegel). Auf diese Weise wird die Anpassung der Logikpegel berwerkstelligt.

Um die Anzeige zu Nullen, muss Pin 1, das (neben Clock, Data und Masse) vierte verbliebene Siganlkabel vom Messschieber  (Pin 1 von K1-K3), kurzzeitig auf Masse gezogen werden. Dieses passiert in der Schaltung über die Taster S1-S3.

Als Controller kommt ein Atmel AVR mega168 (IC4) zum Einsatz, der mit internem 8 MHz Takt läuft. Der Controller wird per ISP über K6 programmiert. Die (nach 5 V umgesetzten) Clock Signale der drei Messschieber sind mit dem INT0- (PD2), INT1- (PD3) bzw. PCINT11- (PC3) Eingang des AVRs verbunden. Dadurch können die Signale einfach per externen Interrupts ausgewertet werden (siehe Software). Die Data Signale sind an PC0, PC1 bzw. PC2 angeschlossen.

Zur Anzeige der Positionsdaten wird ein monochromes 128x64 Pixel Grafik Display mit einem KS108 kompatiblen LCD Controller verwendet. Die Daten- und Steuerleitungen des LCDs sind direkt mit dem AVR verbunden. Über den Trimmer R8 wird der Kontrast des LCDs eingestellt.

Die Schaltung wird an K5 mit einer stabilisierten 5 V Gleichspannung versorgt. Der IRLML6402 dient als Verpolungsschutz, ein Überspannungsschutz ist nicht vorhanden.

mess_schematic

(Der Schaltplan wird nach dem Klick an die Fenstergröße angepasst dargestellt. Wenn die Auflösung dadurch zu schlecht ist, hilft das Öffnen im neuen Tab oder das Speichern des Bildes)

spacer

Software | Die zeitunkritischen Teile der Firmware, also insbesondere die Darstellung der Positionswerte auf dem LCD, wurden in Bascom geschrieben, die Interrupt Service Routinen (ISRs), die das Einlesen der seriellen Signale bewerkstelligen, wurden in Assembler implementiert.

Eine Flanke auf den Clock-Signalen löst jeweils einen externen Interrupt (INT0, INT1 bzw. PCINT1) aus, sodass die entsprechende ISR angesprungen wird. Die Siganalauswertung in der jeweiligen ISR basiert darauf, dass bei jeder positiven Flanke des Clock-Signals der Zustand des zugehörigen Datensignals in eine Variable (Val1, Val2 bzw. Val3) übernommen wird. In welches Bit dieser Variablen geschrieben wird, zeigt eine Bitmaske (Val1_msk, Val2_msk bzw. Val3_msk) an, die mit jeder Clock um ein Bit in Richtung MSB geschoben wird. Nachdem die Maske um 24 Stellen geschoben wurde, wird sie zurückgesetzt und außerdem über ein Flag (new_Val) für das Hauptprogramm angezeigt, dass ein neues Datum zur Anzeige bereit steht. Mittels eines Timers wird jeweils sichergestellt, dass der Einlesevorgang resetet wird, wenn innerhalb der Übertragung eines Paketes mehr als 2.048 ms zwischen zwei Clocksignalen vergeht. Trifft länger als 122.88 ms kein Datenpakt ein, wird auf dem Display ein Übertragungfehler signalisiert. Derselbe Fehler wird angezeigt, wenn an dem Messschieber auf Inch-Einheiten umgeschaltet wurde.

Weil die meisten fertigen Fonts für monochrome Displays zu klein und zu hässlich sind, habe ich mir selbst einen Font gemacht. Die einzelnen Zahlensymbole wurden in einem Grafikprogramm "gepixelt" und dann mit dem  Bascom "Grafic Converter" ins BGF-Format konvertiert. Die Symbole können somit einfach mir "Showpic" an die gewünschte Stelle auf dem Display gebracht werden.

Quellcode Bascom: Ansicht (html)alle Projektfiles (ZIP)

 

Platine und Gehäuse | Ich habe eine kleine Platine für das Projekt layoutet, dadurch wird der Aufbau insgesamt ein wenig kompakter und eleganter. Außerdem hat das Ganze noch ein ordentliches Alu-Gehäuse bekommen, sodass das Gerät robust verpackt neben der Fräsmaschine montiert werden kann.

bildspacerbild

spacer

bildspacerbild

spacer

bildspacerbild

spacer

 

Ausblick | Natürlch könnte man ohne Probleme noch eine RS232- oder USB-Ausgabe integrieren, weil das in meinem Fall aber nicht weiter nützlich ist, habe ich darauf verzichtet - außerdem bin ich mit dem Controller schon recht knapp mit den noch freien Pins. Vielleicht könnte man entsprechendes Mal bei einer erweiterten Version einbauen.

AddThis Social Bookmark Button
Zuletzt aktualisiert am Sonntag, den 19. Januar 2014 um 10:54 Uhr
 

Kommentare  

 
#27 Jürgen Künneth 2014-05-15 10:51
zitiere Jürgen Künneth:
Hallo,
ich habe Probleme die Bilddateien mit der Endung *.bgf zu öffnen. Mit welchem Programm ist dies möglich. "Googeln" hat nix gebracht. Vielen Dank, Gruß Jürgen



Sorry, Denkfehler. Man sollte erst lesen dann handeln. Hat sich erledigt, Danke
Zitieren
 
 
#26 Jürgen Künneth 2014-05-15 06:39
Hallo,
ich habe Probleme die Bilddateien mit der Endung *.bgf zu öffnen. Mit welchem Programm ist dies möglich. "Googeln" hat nix gebracht. Vielen Dank, Gruß Jürgen
Zitieren
 
 
#25 malte 2014-04-27 21:03
zitiere Arni:
Verwendet man statt des Steckers RJ-10 eine USB-Einlötbuchse [...] kann man für den Anschluss des Positionsgebers ein Standard USB-Kabel verwenden. Da der Pluspol der Geberbatterie mit dem USB-Schirm verbunden ist, besteht die Möglichkeit, alle 3 Geber über eine zentrale Batterie in der Anzeige zu versorgen.


Ja, das ist für die nächste Version so geplant, allerdings werde ich dann weiterhin auf ein Netzteil zur Versorgung der Ausleseeinheit zurückgreifen. Danke für's Feedback und Mitdenken! Gruß, Malte
Zitieren
 
 
#24 Arni 2014-04-27 10:38
Hallo,
ich verfolge Ihr Projekt mit goßem Interesse und möchte gerne folgenden Vorschlag machen :

Verwendet man statt des Steckers RJ-10 eine USB-Einlötbuchse (gibt es bei Fa. Reichelt in allen Einlötversionen für wenige Cent), kann man für den Anschluss des Positionsgebers ein Standard USB-Kabel verwenden.
Da der Pluspol der Geberbatterie mit dem USB-Schirm verbunden ist, besteht die Möglichkeit, alle 3 Geber über eine zentrale Batterie in der Anzeige zu versorgen.
Eine Verbrauchsmessu ng ergab eine Stromaufnahme von ca. 2µA (egal ob mit oder ohne Anzeige !!!).
Bei Verwendung einer Knopfzelle CR 2354 mit 560 mAh ergibt sich eine theoretische Laufzeit von ca. 9 Jahren. Eine größere Batterie würde keinen Sinn machen, da die Lagerzeit von Lithiumzellen bei ca. 10 Jahren liegt.

mfG

Arni
Zitieren
 
 
#23 Dieter 2014-03-08 16:47
Hallo,

ich habe die Schaltung nachgebaut und wollte jetzt die Messschieber anbauen. Ich habe an Stelle der "USB-Kabel" vom Hersteller normale USB-Kabel verwendet an denen ich den A-Stecker abgeschnitten habe.
An einem Kanal werden total falsche Werte ausgegeben aber gut - also den nächsten Kanal verwendet und dort stimmen die Werte. Jetzt kommt es aber - solange ich den Messschieber in der Hand halte bekomme ich Werte. Lege ich den Messschieber auf den Tisch ohne ihn zu berühren zeigt das Display nur noch nullen.
Meine Frage wäre sind die originalen Kabel geschirmt?

Gruß
Dieter
Zitieren
 
 
#22 Walter 2014-03-03 21:26
Hallo,
eine Möglichkeit für die Platinen wäre doch, ein PDF mit dem Layout anzubieten oder noch besser Eagle Dateien, dann könnten sich Selbermacher die Platine herstellen oder bestellen.
Gruß
Walter
Zitieren
 
 
#21 malte 2014-03-02 11:48
Hallo!
zitiere Carsten:
[...] ob man die bestückte Platine [...] bekommen könnte
Die Fragen danach häufen sich. Es ist etwas schwierig damit, weil ich ungern Produkte gewerblich an "Endbenutzer" abgeben möchte. Ich werde mal überlegen was man da machen kann, sage hier Bescheid wenn ich eine Idee dazu habe.

zitiere Wael:
ich habe so ein no name Messschieber, die Schnittstelle ist aber anders belegt [...] Würde deine Anleitung auch damit funktionieren? [...] Oder würde es mit Mitutoyo-Messschieber funktionieren?
Die Frage ist, wie das Datenformat aufgebaut ist. Mit den älteren no-name Messschiebern die ich kenne (das sind natürlich nicht alle die es gibt) würde meine Software *nicht* funktionieren. Wie das Protokoll der Mitutoyo-Messschieber aufgebaut ist, weiß ich auch nicht, gehe aber davon aus, dass es ebenfalls anders ist. Ggf beschäftige ich mich mit dem Thema nochmal, gegenwärtig kann ich da aber leider keine Lösung anbieten.
Zitieren
 
 
#20 Wael 2014-02-24 12:24
Hat jemand sonst andere Erfahrung gemacht?
Zitieren
 
 
#19 Wael 2014-02-21 22:36
Hallo Malte,
vielen Dank für die tolle Anleitung, ich such sowas seit Tagen, aber ich habe nichts gefunden! Alle wollen dadurch Geld verdienen :-( Dann habe ich deine Anleitung gelesen :-)
Ich wollte es nachbauen, habe nur eine Frage, ich habe so ein no name Messschieber, die Schnittstelle ist aber anders belegt:
Masse 0v
DATA (nehme ich an)
CLK (nehme ich an)
Plus 1,5v (Gehäuse)
Würde deine Anleitung auch damit funktionieren?
Und der wird genullt durch Kurzschluss zwischen PIN 3 und 4, also CLK und Plus!
Oder würde es mit Mitutoyo-Messschieber funktionieren?
Danke und Grüße
Wael
Zitieren
 
 
#18 Carsten 2014-02-21 13:31
Hallo,
wirklich ein sehr schönes Projekt.
Meine Frage wäre, da ich Metaller und kein Elektroniker
bin ob man die bestückte Platine mit bespieltem Atmega
bei Ihnen bekommen könnte.

Gruß Carsten
Zitieren
 

Kommentar schreiben

Sicherheitscode
Aktualisieren

 

Suche

Benutzer

Wir haben 14 Gäste online

unterstützt von

batronix logo

spacer

rotacaster logo

spacer

spacer

spacer

Meine Tweets

Extern

youtube logo twitter logo email logo

spacer

spacer

spacer

Reklame