A dream comes true

  • Hallo Martin,

    ja das Gewicht ist wirklich nicht zu unterschätzen.

    Der Verriegelungsmechanismus ist eigentlich ganz einfach, ein Messingbolzen der von einem Servo angetrieben wird. Dieser rastet dann in entsprechende Aussparungen eines Aluwinkels ein, fertig. Funktioniert seit Monaten tadellos. Es geht auch mit einem Hubmagneten, aber das ist halt nicht so leise.



    Und da ich ohnehin an einem Gleis der Bühne zwei Entkuppler mit Servo eingebaut habe, bot sich dann auch der Einbau der Servoplatine an.


    Gruß von Detlef Ko.

  • Gude zusammen,


    Lieber Detlef, da hast Du in unserem Telefonat aber heftig untertrieben. Die Konstruktion ist genial einfach und die Elektronik auch nicht eben "ich hab da ja keine Ahnung" zusammengebaut. Was mir besonders gefällt ist, wie Du das alles umgesetzt hast. Frei nach dem Motto: "Es interessiert mich nicht für was eine Sache gebaut wurde, sondern nur was man damit machen kann".:thumbup2:


    Mit freundlichen Modellbahnergrüßen

    Thomas

    "Wer sich nicht an die Vergangenheit erinnern kann, ist dazu verdammt, sie zu wiederholen." Jorge Augustín Nicolás Ruiz de Santayana

  • Hallo zusammen,


    nach einer längeren Pause von 8 Monaten ist das Projekt heute in die entscheidende Phase gegangen: It moves !


    Die gleichzeitige Änderung von Hardware und Software ging natürlich nicht ohne Probleme ab. Der Arduino Mega wurde durch einen Arduino nano ersetzt,

    Allerdings nicht, wie ursprünglich geplant auf einem fertigen Shield ...


    20200501_164343ndjbm.jpg


    ... sondern einem selbstgebauten, auf dem auch alle übrigen Bauteile Platz gefunden haben.


    img-20210124-wa0002pokrq.jpg


    Die Kabel führen auch einen 9-poligen Sub-D Stecker an den das Bedienpult angeschlossen wird.


    img-20210124-wa00018rksl.jpg


    Das KeyPad wurde durch ein passendes Bedienpult ersetzt.


    20210213_1912314dkpv.jpg

    Und natürlich der Nema 17 Stepper durch den Nema 23 mit einer 1605 Spindel. (16 mm Durchmesser und 5 mm Weg / Umdrehung)



    Zunächst wurde in einem separaten Programm die Anzahl der Schritte ermittelt, die nötig sind um den Schiebetisch bei der Refferenzfahrt vom Endschalter bis zur Refferenzposition (mittleres Gleis von 7 Gleisen) fahren zu lassen. Hier zeigte sich schon der erste Schwachpunkt: Der Schaltpunkt des Endlagenschalters war nicht immer gleich, Von 20 Meßwerten wurde dann der Durchschnittswert genommen. Klappt ganz gut, aber ich werde versuchen den mechanischen Schalter durch einen Induktiven Näherungsschaler zu ersetzen. Frage an die Fachleute: Was gibt es noch für Möglichkeiten?


    In das 2. Programm wird der ermittelten Schritte für die Refferenzfahrt eingesetzt. Als erstes muß mit dem gelben Taster die Refferenzfahrt ausgelöst werden.

    Erst danach können die einzelnen Gleise durch die übrigen 7 Taster angewählt werden.


    20210213_191223q0k0d.jpg


    Jetzt werden im nächsten Schritt alle Positionen angefahren und die Gleise verschraubt.


    20210213_191252r5j3j.jpg


    Bei den Vorversuchen mit dem Nema 17 waren wir bei einer Schrittzahl von 800 / Umdrehung gelandet. Der Nema 23 mit der Spindel lief damit im Resonanzbereich. Den Krach wollte ich mir nicht antun. Das Endergebnis waren 1600 Schritte / Umdrehung, Die von Thomas befürchteten Schrittverluste traten auch mit großen Gewichten auf dem Schiebetisch nicht auf.


    Und so sieht die komplette Hardware aus:


    layout_hardware4hky1.jpg


    Wenn alle Gleise aufgelegt und verkabelt sind, gibt es hoffentlich zum Abschluss ein kleines Video.


    Bis demnächst


    Martin

  • Moin Martin,


    klarer einfacher Aufbau. Gefällt mir. Der Endschalter für die Referenzfahrt. Ist das ein Sprungkontakt? Die Marquard-Schalter verwende ich auch in meinen CNC Steuerungen. Eine Frage noch? Wie sieht der Algorithmus aus mit dem Du den Endschalter anfährst? Ich mache das folgendermaßen und lande immer genau am Referenzpunkt.

    1. Anfahren in Richtung Endschalter mit Referenzgeschwindigkeit (etwa 400mm/min).

    2. Sobald der Endschalter angefahren ist halte ich an, schalte ich die Drehrichtung um und fahre den Endschalter mit etwa 10mm/min frei. Das ist dann der Referenzpunkt.

    Bei meinen Messtraversen und auch bei der Kreissäge kann ich damit bis auf ein halbes zehntel genau positionieren. Vorausgesetzt der Endschalter hat einen Sprungkontakt. Initiatoren, also berührungslose Endschalter, sind nicht das Mittel der Wahl. Die billigen sind nicht unbedingt Temperaturstabilisiert, was kontraproduktiv wäre.


    Anbei mal meine Funktion zum Homing einer Linearachse. Bitte nicht verwirren lassen, ich rechne in der Routine gleich die Schritte in 1/100mm um und speichere die Ergebnisse in der Achsenstruktur. Die Routine ist für den Raspberry PI geschrieben, passt aber bis auf den Bibliotheksaufruf für die I/O's auf jeden Rechner. Ich verwende außerdem rechts und links zwei Maximalendschalter und messe im ersten Schritt die Entfernung zwischen den Schaltern. Im letzten Schritt fahre ich den Homeschalter an. Die Endschalter sind als Öffner geschaltet um einen Kabelbruch oder defekt zu überwachen. Die Homeschaltersequenz habe ich mal rot gemacht. Die Funktion SendStep erzeugt die Pulse für den Servoverstärker.


    int LinDriveRef(int invers,int slow, int fast, struct AxStructLin *ax)

    {

    long homecounter = 0; // Wegstrecke vom Max rechts Schalter bis Homeendschalter

    long distcounter = 0; // Distanzzähler maximale Schrittanzahl der Achse

    int maxleft = ax->swmin, maxright = ax->swmax; // Endschalter links und rechts abhängig invers

    bool left = HIGH, right = LOW; // Drehrichtungsflag setzen

    if(slow <= 100) {slow = 200;} // Parameter Geschwindigkeit plausi.

    if(fast >= slow) {fast = slow / 2;}

    if(fast <= 5) {fast = 100;}

    if (invers) // Alle Variablen umsetzen wenn nötig

    {

    left = LOW;

    right = HIGH;

    maxleft = ax->swmin;

    maxright = ax->swmax;

    }


    bcm2835_gpio_fsel(ax->dirpin,BCM2835_GPIO_FSEL_OUTP);

    bcm2835_gpio_write(ax->dirpin, left); //Drehen nach links um Endschalter zu suchen


    while (DigIORead(maxleft)== 1) // So lange nach links fahren, bis der Endschalter MIN betätigt wurde

    {

    SendStep(ax->steppin, fast);

    }

    bcm2835_gpio_write(ax->dirpin, right); //Drehen nach rechts

    while (DigIORead(maxleft)== 0) // Endschalter links freifahren

    {

    SendStep(ax->steppin,slow);

    distcounter = 0; // Maximaldistanz nullen

    }

    while (DigIORead(maxright)== 1) // Jetzt nach rechts fahren und Endschalter rechts suchen MAX.

    {

    SendStep(ax->steppin, fast);

    distcounter++; // Maximaldistanz Schritte mitzählen

    }

    bcm2835_gpio_write(ax->dirpin, left); //Drehen nach links

    while (DigIORead(maxright)== 0) // Endschalter rechts freifahren

    {

    SendStep(ax->steppin, slow);

    distcounter--; // Schön die Schritte mitzählen

    }

    while (DigIORead(ax->swhome) == 0) // Homeschalter suchen

    {

    SendStep(ax->steppin, fast);

    homecounter++; // Schritte von MAX bis Home zählen

    }

    bcm2835_gpio_write(ax->dirpin, right); //Drehen nach rechts

    while (DigIORead(ax->swhome)== 1) // Homeschalter freifahren

    {

    SendStep(ax->steppin, slow);

    homecounter--; // Schön die Schritte mitzählen

    }


    double msp = (gst_para.reflen / gst_para.xpulseraw) * 1000;

    ax->lenpp = msp; // Minimale Schrittweite per Puls in 1/100mm

    ax->maxst = homecounter; // Ergebnis in Schritten

    ax->minst = (distcounter - homecounter) * -1; // Ergebnis in Schritten

    ax->maxmm = (ax->maxst * ax->lenpp)/1000; // Ergebnis in 1/100mm

    ax->minmm = ((ax->minst * ax->lenpp) / 1000); //Ergebnis in 1/100mm

    ax->isref = true;

    ax->actst = 0; // Aktuelle Schritte ist auch Null

    ax->actmm = 0; // Aktuelle mm ist Null

    return 1;

    }


    Mein Senf dazu und ich hoffe Du kannst etwas davon verwenden. Ich fahre die Nema 23 mit 1000 Steps/U. Die Resonanzfrequenzprobleme habe ich nicht, weil ich den Motor mit 22kHz in der höchsten Geschwindigkeit (fast) ansteuere. Nur wenn ich langsam fahre (slow) grummelt er ein wenig. Probiere mal, ob Du eine höhere Frequenz mit dem Arduino hin bekommst. Dann könntest Du wieder auf 1000Steps/U gehen und hättest ein gerades Teilungsverhältnis von 5/1000mm Step.

    Noch ein kleiner Tipp. Spendiere dem Arduino und dem Antrieb noch je eine Sicherung entsprechender Größe. Macht weniger DBQ-Signal im Fehlerfall.


    DBQ-Signal = Dunkler Beißender Qualm.:diablo:


    Mit freundlichen Modellbahnergrüßen

    Thomas

    "Wer sich nicht an die Vergangenheit erinnern kann, ist dazu verdammt, sie zu wiederholen." Jorge Augustín Nicolás Ruiz de Santayana

  • Hallo Thomas,


    danke für deine Kommentare. Das Freifahren des Endschalters werden wir auf jeden Fall umsetzen und DBQ-Signale braucht keiner.


    Leider gibt es ja nächstes Wochenende keine Ausstellung in Oberlahnstein, sonst hätte man sich dort mal wieder treffen können.


    Viele Grüße


    Martin

  • Hallo Martin,

    Gerne.

    Tja, Lahnstein. Meine Haus- und Hofveranstaltung. Hätte mich sehr auf einen Plausch mit Dir und Kollegen gefreut. Bin sehr gespannt, wann überhaupt wieder was möglich ist.

    Wenn noch Fragen sind einfach melden.

    Viele Grüße

    Thomas

    "Wer sich nicht an die Vergangenheit erinnern kann, ist dazu verdammt, sie zu wiederholen." Jorge Augustín Nicolás Ruiz de Santayana