Blackpicker: Pick&Place-Automat aus Maker-Komponenten (Teil1)

Seite 4: Schrittmotorsteuerung

Inhaltsverzeichnis

Die Idee war gut: Man nehme einen Arduino Mega mit CNC-Shield und benutze die berühmte Accelstepper-Lib. Es stellte sich aber schnell heraus, dass die geforderte Geschwindigkeit und der ruhige Lauf mit mind. Viertel-Microstepping den Mega schnell an den Anschlag bringt – zumal auch häufig mehrere Achsen gleichzeitig bewegt werden müssen. Mit einem Takt von 16Mhz kann er mit der Library nur ca. 4000 Steps/sek fahren, mit Tricks auch wenig mehr. Was dann in einer Verfahrgeschwindigkeit von ca. 10 cm/s endete. Die daraus resultierende Geschwindigkeit war nicht geeignet für die Sortieraufgabe. Ein Upgrade auf den Arduino Due versprach eine Leistungssteigerung um ca. 60% – das dann aber leider nur für eine Achse auf einmal. Daher musste etwas Schnelles her.

"Form follows function": Die Verkabelung der Steuerungsschublade wurde bestimmt nicht ISO gerecht aufgebaut und auch die farbige Kennzeichnung lässt zu wünschen übrig. Der Teensy wurde auf ein Prototying-Board gesteckt, damit alle Leitungen bequem eingesteckt und verbunden werden konnten.

Leider hatte die Arduino Familie nicht viel im Angebot, so dass auf die ebenfalls günstigen Teensies ausgewichen werden musste. Beim ersten Test musste ich aber feststellen, dass die Accelstepper-Library auf dem Teensy nicht läuft. Der erste Schock stellte sich als ungerechtfertigt heraus, da "luni64" seine superschnelle TeensyStep-Library auf Github zur Verfügung stellt. Diese lief nach erfolglosen Versuchen auf dem Teensy 4.2 erst auf dem Teensy 3.6. Auch die TeensyStep-Lib hat ein objektorientiertes Interface und lässt sich leicht verwenden. Einzig bei der Implementierung einer Initialisierung mit Anfahren der Endschalter musste ein wenig nachgeforscht werden.

void init_XMotor(){
  motor_X.setAcceleration(maxAccX); // steps/s^2 

  // XXXX
  motor_X.setMaxSpeed(1500) ;     // steps/s
  motor_X.setTargetRel(-50000);  // Set target position to 1000 steps from current position
  controller.moveAsync(motor_X);     // This will start the movement and return immediately
  
  while(controller.isRunning()){              // wait until the movement is finished
      if (digitalRead(EndSwitchPin_X) == HIGH){
        controller.emergencyStop();  // stops the movement immediately
        motor_X.setPosition(0); 
      }      
  }
  motor_X.setMaxSpeed(maxSpeedX);
}

Arduino Code Listing zur Initialisierung der Endposition der X-Achse. Der Notfallstop ist ein bisschen hart, aber erfüllt die Anforderungen an Genauigkeit. Normalerweise würde man hier nochmals vor- und zurückfahren, um den genauen Nullpunkt zu finden.

Mit einer Taktfrequenz von 180 MHz konnte der Teensy 3.6 die Freunde der Geschwindigkeit ansprechen! Natürlich mussten auch die richtigen Motor-Treiber her, die die hohen Taktzahlen auch verarbeiten können. Mit dem TB6600 wurde ein einfach zu verwendender und günstiger Treiber gefunden. Die Treiber können maximal 20 kHz am Eingang verarbeiten und verarbeiten die 3.3V Signale des Teensy dank eingebauten Optokopplern wunderbar. Um eine weitere Steigerung der Geschwindigkeit zu erreichen, müsste nun neben dem Treiber wohl auch die Spannung von 24V erhöht werden und stärkere Motoren als die NEMA 17 eingesetzt werden, die die Leistung auch auf die Schiene bringen. Hier wäre ein Upgrade zu mindestens NEMA 23 angebracht gewesen. Für den Moment war das aber gut so. Nebenbei erwähnt wäre auch die Umsetzung mit einem Odrive und mit Encodern ausgestatteten BLDC-Motoren spannend gewesen, hätte aber auch eine ganz neue Welt mit vielen neuen Herausforderungen aufgetan und den zeitlichen Rahmen weiter gesprengt. Die Verdrahtung der Motoren und Treiber ist im Bild ersichtlich und folgt den gängigen Standards aus dem Internet.

Alle Elektronik-Komponenten des BlackPickers in einer konzeptionellen Übersicht.

Anschluss des TB6600 Treibers an Teensy (hier z.B. die X Achse). Die 5V Eingänge sind mit den 3.3V des Teensy kompatibel. Mit den Dip Switches lassen sich Strom und Microstepping einstellen. Hier wurde 4-fach Microstepping und 3.5 Ampere eingestellt.