Raspberry Pi steuert einen Scanning-Tisch von Zeiss

    • Offizieller Beitrag

    Hallo zusammen,

    nachdem ich eigentlich schon vor Monaten davon gesprochen habe, habe ich es nun endlich in die Tat umgesetzt und es funktioniert. Die Steuerung des Scanning-Tisches mit dem Raspberry Pi.

    Der Raspberry Pi ist nicht nur ein eigenständiger PC, mit dem man auch im Internet surfen kann, er läß sich auch mit seinen Steuerausgängen (GPIOs) als Microcontroller nutzen.

    So lassen sich auf diese Steuerausgänge Spannungen von entweder 0 Volt oder 3,3V programmieren. Von den insgesamt 27 nutzbaren Ports werden für die Anwendung zum Steuern des Scanning-Tisches 6 Ports benötigt, desweiteren noch die Versorgungsspannung für die Treiberbausteine von 3,3V und Masse.

    Auf einer Lochrasterplatine, die gleichzeitig als Versuchsaufbau dient, sind neben den Anschlußbuchsen die beiden Treiberbausteine in Wechselfassungen für die Ansteuerung der Schrittmotoren aufgelötet. Es handelt sich dabei um die Treiber-Module A4988. Über Steckbrücken besteht die Möglichkeit, von Vollschritten über Halbschritten bis zu Mikroschitten die Motoren anzusteuern, was die Auflösung entsprechend erhöht. Der noch freie und unbestückte Teil der Platine könnte nun einfach abgesägt oder ggf. mit anderen Komponenten wie z.B. für die Ansteuerung einer Kamera bestückt werden.

    Neben dem Signal Enable/Disable, das bestimmt, ob sich ein Motor überhaupt bewegen soll, wird mit dem Signal Direction die Drehrichtung des Motors vorgegeben. Das dritte Signal wird im Wechseltakt aufgeschaltet. Jeder Schaltvorgang bewirkt einen Schritt des Motors.

    Nun möchte man aber die Motoren auch über Bedienelente ansteuern können und dabei vorgeben können, wieviele Schritte ein Motor in welche Richtung gemacht werden sollen, um dadurch bestimmte Tischpositionen anfahren zu können. Auch möchte man gerne die aktuelle Position angezeigt bekommen und dabei noch die Geschwindigkeit vorgeben können.

    All dies ist über die Programmiersprache Python zu bewerkstelligen, mit der sich auch über das Modul TKinter eine grafische Fensteroberfläche programmieren läßt mit diversen Elementen ausgestattet wie Buttons, Labels, Eingabefelder und Schiebereglern, die hier gerade zum Einsatz kommen.

    Durch Anklicken der Buttons bewegt sich der Scanning-Tisch also in die X- und Y-Richtungen mit der vorgegebenen Anzahl von Schritten. Je nach Stellung des Schiebereglers erfolgen die vorgegeben Schritte im schnellen bzw. langsamen Tempo, indem die Pause zwischen den einzelnen Schritten entsprechend verkürzt bzw. verlängert wird.

    Natürlich läßt sich diese Oberfläche für die Bedienung noch beliebig erweitern, gestalten, ohne daß dazu Komponenten wie Taster, Schalter, Joysticks oder Anzeigedisplays vonnöten sind.

    Bei chronischen Platzmangel auf dem Tisch ist es beim Raspberry Pi sehr entgegenkommend, daß an ihm für den Betrieb nicht zwingend ein Monitor, Maus und Tastatur angeschlossen werden müssen. Man kann sich auch über eine Remote-Desktop-Verbindung von einem anderen PC im hauseigenen WLAN-Netzwerk aufschalten, den man ohnehin am Laufen hat.

    Beste Grüße

    Bernd

  • Hallo Bernd,

    ich hab für eine andere Anwendung (HMI für eine SPS) einen Pi4 mit einem 7" Touchpanel um ca. €50 in den Schaltkasten eingebaut. Das gibt es aber auch gleich mit ganz brauchbaren Gehäusen z.B. bei Pollin. Tastatur und Maus lassen sich natürlich auch anstecken. Wenn man die GUI ordentlich baut, braucht man das aber nicht.

    VG

    Klemens

    • Offizieller Beitrag

    Hallo Klemens,

    diese Kisten-Bastlerei wollte ich bei diesem Projekt eigentlich möglichs vermeiden und nur die nötigste Hardware in ein Kistchen verbauen.

    Beim Arduino-Projekt ist dabei nämlich ein ziemlicher Aufwand entstanden und es wurde doch ziemlich eng.

    Die Raspicam habe ich auch noch angeschlossen. Die Bedienung über das Kommando-Fenster ist dabei auch eher umständlich.

    BG

    Bernd

    • Offizieller Beitrag

    Inzwischen habe ich ein zweites Fenster erstellt und das erste Fenster noch etwas erweitert.

    Es wird nun die aktuelle Position des Tisches angezeigt. Diese können auch durch Druck auf den Button mal eben auf Null gesetzt werden.

    Die Tischbewegung nach einem Step hängt davon ab, ob der Motor im Vollschritt oder im Halbschrittmodus betrieben wird. Durch die Vorwahl wird es in der Berechnung der Tischkoordinaten berücksichtigt. Auch kann bereits das verwendete Objektiv angewählt werden, was zum späteren Stitchen benötigt werden wird.

    BG

    Bernd

  • Hallo Bernd,

    :78:. Das ist ja der Meilenstein zu meinem Zeiss Tisch schlechthin. Echt geil wie Du das machst.

    Funktioniert das auch beim Olympus Tisch vom BX 51? Leider habe ich im Moment nicht viel Zeit.

    Meine Frau spannt mich im Frühjahr immer auf dem Campingplatz stark ein :). Also im ernst- im Frühjahr habe ich natürlich immer mehr auf dem Platz zu tun. Aber dieses Jahr kommt noch ein Umzug wegen Platzwechsel dazu. Aber in der Mikroskopie wartet auch schon meine nächste Baustelle:

    Olympus BX 51 Fluoreszenz mit DIC und Scanningtisch. Das ganze wurde vorher mit einem ChemScan RDI von Chemunex betrieben.

    Das ist ein Laserscan System. Wenn Du da Unterlagen hast oder mir helfen kannst wäre ich sehr dankbar.

    Davon habe ich nämlich 0 Ahnung- und davon viel. Den Aufbau vom DIC verstehe ich auch nicht- der ist irgendwie anders wie Zeiss.

    Mal schauen, wenn ich etwas mehr Zeit habe setze ich ein paar Bilder rein. Ich denke wenn mir da einer helfen kann.........

    Also den Tisch wollte ich schon separat ansteuern. Da wäre Arduino oder Raspberry genau das richtige.

    Gruß aus dem Taunus Harald

    • Offizieller Beitrag

    Hallo Harald,

    zwar weiß ich nicht, was für Schrittmotoren in deinem Tisch vom Olympus verbaut sind, aber ich nehme mal stark an, daß es auch bipolare oder unipolare Schrittmotoren sind. Man müßte dazu aber noch wissen, mit welcher Spannung diese Motoren betrieben werden sollen. Wenn man die Typenbezeichnung hat, läßt sich das ggf. über Google & CO. ermitteln. Falls der recht universelle Treiber A4988 zu schwach sein sollte, besorgt man sich eben etwas stärkere. Der L298 sollte das auf jeden Fall packen. Sicher kann ich es aber nur sagen, wenn ich das Datenblatt gesehen habe.

    Dann wäre noch die Sache mit den Anschlüssen. Bipolare Motoren haben 2x2 Anschlüsse, bei denen sich einfach ermitteln läßt, welche auf die Spulen gehen. Bei den Motoren im Zeiss-Tisch mußte ich eben aus 4x2 Anschlüssen die Belegung ermitteln. Vier davon werden auf einen Punkt zusammengelegt.

    Zu deinem Olympus DIC kann ich dir adhoc wenig sagen. Am besten zeigst du mal Fotos davon wie Simon es mit seinem Pluta-DIC gemacht hat.

    Ich denke, daß wir dabei die Sache schon aufklären werden.

    Beste Grüße

    Bernd

  • Guten Morgen Bernd,

    wie gesagt, ich brauche dafür Zeit. Ich habe mir aus dem Grund der Beschaltung mal die Steuergeräte mitgenommen. Bei der Stromaufnahme gehe ich von keinem zu hohem Strom aus, da Olympus hier mit einem 15poligen EDV Stecker (Joystick) arbeitet. Aber wie gesagt- nur eine Annahme meinerseits.

    Es kann ja auch gut sein, dass die Kontakte aus diesem Grund doppelt belegt sind.

    Alles andere klären wir, wenn ich das Mikro im Laufen hab. Was diesen Faden angeht- den habe ich mir schon mal gespeichert =). Ich fand diesen auch aus dem Grund interessant, da fast alle mit einem Arduino arbeiten, während mein Kollege gleich den Raspberry dafür favorisiert hatte.

    Gruß aus dem Taunus Harald

    • Offizieller Beitrag

    Moin Harald,

    ich brauchte auch ein wenig Zeit, um mich in die ganze Thematik einzufuchsen und habe längst noch nicht alle Möglichkeiten ausgeschöpft,

    Wenn du keine Schaltunterlagen hast, wirst du dir schon die Mühe machen müssen, die Leitungen von diesem 15-Poligen SUB-D-Stecker bis zu den Motoren zu verfolgen. Wenn man keine Angaben zu den Strömen hat, muß man sich eben von unten rantasten und beobachten, ab welchen Spannungen sich die Motoren bewegen. So mußte ich es beim Zeiss-Scanning-Tisch auch machen. Da war keiner, der mir dazu freundlicherweise Tipps geben konnte bis auf die Youtuber mit ihren Tutorials.

    Wie man das mit dem Arduino realisieren kann, hatte ich ja bereits gezeigt. Es läßt sich sogar noch der Arduino mit dem Rasberry Pi ansteuern, aber das wird dann doch etwas umständlich.:99:

    Beste Grüße

    Bernd

    • Offizieller Beitrag

    Da sich die diversen Steuerelemente nach dem Gitterprinzip so schön platzieren lassen, bleibe ich nun doch wieder bei einem Fenster.

    Wenn nun eins der Objektive über die Radiobuttons angewählt wird, werden im Programm die zugehörigen Daten wie z.B. der Typ und die Bildbreite zugeordnet. Für den Stitchvorgang werden diese Daten weiterberarbeitung für die Bestimmung der Anzahl der nötigen Steps.

    Auch lassen sich über die beiden Engabefenster die Anzahl der gewünschten Teilbilder vorgeben, aus denen das spätere Bild dann zusammengerechnet werden soll.

    BG

    Bernd

    • Offizieller Beitrag

    Nun ist noch eine kleine Erweiterung bei der Oberfläche und der Funktion hinzugekommen. Für Messzwecke ist es ganz nützlich, die Distanz vom Startpunkt bis zur aktuellen Position angezeigt zu bekommen, was nun in einem weiteren Anzeigefeld erfolgt.

    Errechnet wird die Distanz aus den Positions-Koordinaten. Im Programmcode ist dazu das Modul math einzubinden, welches die Funktionen beinhaltet, von Zahlen die Quadratwurzeln und Potenzen zu bilden. Es entstehen dabei Werte mit mitunter vielen Nachkommastellen, die sich auf die gewünschte Anzahl runden lassen.

    • Offizieller Beitrag

    Gestern stand ich noch kurz vor dem Abgrund, heute bin ich schon einen Microstep weiter.

    Für einen Stitch wir zunächst das betreffende Objektiv per Radiobutton angewählt. Auch die Größe der Matrix, die für den Stitch abgefahren werden soll, wird in den Eingabefeldern vorgegeben. Jeder Klick auf den Button Stitch bewirkt ein Weiterfahren in der Bildmatrix.

    Hier inzwischen bei Bild Nr. 3 (von 9) angelangt. Auch die aktuelle Position wird angezeigt.

    Das letzte Bild Nr. 9 ist nun erreicht.

    Ein weiterer Klick bewirkt das Zurückfahren zur Startposition. Danach passiert nichts weiter. Aber nach dem Anklicken des SET-Buttons kann derselbe Stitch oder ein anderer wieder erneut abgefahren werden bis das letzte Bild erreicht ist.

    Beste Grüße

    Bernd

    • Offizieller Beitrag

    Ein weiteres kleines Update bei diesem Projekt:

    Der Screenshot über die Drucktaste ist doch etwas besser als per Smartphone abfotografiert. ;)

    Der Abstand zwischen den einzelnen Steuerelementen war doch recht ungleichmäßig, was mit der Größe der Steuerelemente (Widgets) in den anderen Spalten zusammenhing. Abhilfe schaffte das Erstellen eines Rahmens (Frame) pro Spalte, in die dann die Steuerelemente gepackt werden. So sieht das (für mich jedenfalls) ein wenig aufgeräumter aus. :)

    • Offizieller Beitrag

    So ein fliegender offener Aufbau wie auf den ersten Fotos gezeigt ist natürlich keine Dauerlösung allein schon wegen der Kurzschlußgefahr, auch wenn die elektrischen Spannungen niedrig sind.

    Aus dem Grunde wurde die Platine mit den Treiberbausteinen bereits in ein Kunsstoffgehäuse gesetzt und auch die Anschlußbuchsen für den Scanning-Tisch eingearbeitet. Die Stromversorgung für die beiden Speppermotoren soll später durch ein kleines Schaltnetzteilmodul, das bereits eingesetzt wurde bereitgesetellt werden.

    Noch erfolgt die Ansteuerung der Steppertreiber über 8 Leitungen zum Raspberry Pi. Wenn aber noch weitere Steuerfunktionen hinzukommen sollen, ist über ein Porterweiterungsbaustein, welcher für die Steuerung über den I2C-Bus nur 4 Leitungen benötigt, nachzudenken.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!