Vergleich häufig verwendeter 3D Drucker Controller
Ich versuche in diesem Artikel einen Überblick über häufig verwendete Mainboards von 3D Druckern zu gegeben. Die aufgeführten Controller decken einen großen Teil der am Markt angebotenen Drucker Kits ab.
Alle aufgeführten Modelle sind oder waren bei uns im Einsatz.
Historie
Der Urvater diverser 3D Drucker Controller ist der Ramps 1.4. Der Ramps ist eine Huckepackplatine für den Arduino Mega. Er wirkt optisch etwas altbacken, ist unschlagbar günstig und akzeptiert diverse Stepper Treiber. Alle weiteren betrachteten Controller sind quasi Weiterentwicklungen des Ramps 1.4. mit integriertem Arduino Mega und zum Teil mit integrierten Stepper Treibern.
Ich habe mehrere Robotiksysteme von Makeblock.
Alle basieren auf dem Orion Controller, einem abgewandelten Arduino Uno. Als Schnittstelle zum PC verwendet der Orion ein CH340 Chip. Dieser sorgt manchmal für etwas Ärger. Man erkennt es daran das der Orion vom PC nicht erkannt wird. Während das MSI Board meines PC den Orion sofort erkannte, wollte mein Aldi Gaming Notebook eines Tages überhaupt nicht mehr mit dem Orion reden. Im Geräte Manager stand permanent fehlerhaftes USB 2 Gerät. Deinstallation aller USB Treiber, der Arduino IDE und die separate Installation der Orion Treiber brachten nichts.
Die Lösung war schließlich einen separaten Treiber für den CH340 zu verwenden. Ich wurde auf dieser Webseite fündig. Die Probleme waren nach Installation des Treibers behoben.
CH340 So funktioniert es
Wenn der Orion so wie abgebildet in der Systemsteuerung angezeigt wird ist er richtig erkannt.
Auch in der Arduino IDE müsste er jetzt als Port erscheinen
Da Windows im Folgenden ein Update des CH340 Treibers anbot, wird wohl der Windows eigene Treiber die Problem bereiten. Da das Notebook vor dem Windows Augustupdate den Orion erkannte, dürfte da wohl dieses Windowsupdate einen problematischen Treiber enthalten.
Ich hoffe, ich kann mit diesen Hinweisen so manche Fehlersuche abkürzen.
Makeblock Orion
Ein etwas aufgepimpter Arduino Uno. So wird er auch programmiert. Praktische Westernstecker für Motoren und Sensoren. Machen allerdings diese etwas teuer. Nicht von den Amazon Preisen abschrecken lassen. Bei diversen Händler und ebay gibt es Makeblock zu angemessenen Preisen.
Der 16 Kanal Servo Treiber basiert auf dem Entwurf von Adafruit. In der China Variante ist er etwas günstiger. Die Platine hat 6 I2C Adresspins. Damit wären 62 Treiber mit insgesamt 992 Ausgängen adressierbar. Das sollte reichen. Die Platinen kaskadiert man einfach mit einem 6-poligen Kabel hintereinander. Die Basisadresse des Boards ist 0x40 . Eine Lötbrücke bei A0 würde 0x41 ergeben.
Pegel und Betriebsspannung können 3,3 Volt als auch 5 Volt betragen.
Die Betriebsspannung setzt man am besten auf die des Mikrocontrollers. Damit hat man keine Pegel Probleme am I2C-Bus.
Die Servos sollte man auf jeden Fall über eine externe Spannungsquelle betreiben. Ein kleiner Stütz-Elko kann nachträglich eingelötet werden.
Die Ausgänge verfügen über 330 Ohm Widerstände um LED´s direkt zu treiben. Bei manchen Boards sind es 220 Ohm.
Der Arduino Uno wird wie folgt angeschlossen:
+5v -> VCC
GND -> GND
Analog 4 -> SDA
Analog 5 -> SCL
[code lang=”arduino” title=”Nutzung der Adafruit PWMServoDriver library”]
/***************************************************
This is an example for our Adafruit 16-channel PWM & Servo driver
Servo test – this will drive 16 servos, one after the other
Pick one up today in the adafruit shop!
——> http://www.adafruit.com/products/815
These displays use I2C to communicate, 2 pins are required to
interface. For Arduino UNOs, thats SCL -> Analog 5, SDA -> Analog 4
Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!
Written by Limor Fried/Ladyada for Adafruit Industries.
BSD license, all text above must be included in any redistribution
****************************************************/
// called this way, it uses the default address 0x40
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
// you can also call it with a different address you want
//Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(0x41);
// Depending on your servo make, the pulse width min and max may vary, you
// want these to be as small/large as possible without hitting the hard stop
// for max range. You’ll have to tweak them as necessary to match the servos you
// have!
#define SERVOMIN 150 // this is the ‘minimum’ pulse length count (out of 4096)
#define SERVOMAX 600 // this is the ‘maximum’ pulse length count (out of 4096)
pwm.setPWMFreq(60); // Analog servos run at ~60 Hz updates
yield();
}
// you can use this function if you’d like to set the pulse length in seconds
// e.g. setServoPulse(0, 0.001) is a ~1 millisecond pulse width. its not precise!
void setServoPulse(uint8_t n, double pulse) {
double pulselength;
pulselength = 1000000; // 1,000,000 us per second
pulselength /= 60; // 60 Hz
Serial.print(pulselength); Serial.println(" us per period");
pulselength /= 4096; // 12 bits of resolution
Serial.print(pulselength); Serial.println(" us per bit");
pulse *= 1000;
pulse /= pulselength;
Serial.println(pulse);
pwm.setPWM(n, 0, pulse);
}
void loop() {
// Drive each servo one at a time
Serial.println(servonum);
for (uint16_t pulselen = SERVOMIN; pulselen < SERVOMAX; pulselen++) { pwm.setPWM(servonum, 0, pulselen); } delay(500); for (uint16_t pulselen = SERVOMAX; pulselen > SERVOMIN; pulselen–) {
pwm.setPWM(servonum, 0, pulselen);
}
Eigentlich ist es fast Verschwendung eine Platine für einen einzelnen Treiber Transistor zu verwenden. Falls man aber wirklich nur einen Hochstromausgang für den Arduino braucht, ist dieses Platine bequemer als ein Breadboard. Bei größeren Strömen benötigt man aber einen Kühlkörper.
Die Treiberplatine gibt es ab 2€. Den IRF520 bekommt man einzeln für 50 Cent.
Eigentlich ist aber der IRF520 für 5 Volt Mikrocontroller Anwendungen nicht ideal. Bei einer Gate Source Spannung von 5 Volt schafft er 3,5 A Laststrom. Es reicht für einige Anwendungen, nutzt aber den FET bei weiten nicht aus. Mit 3,3 Volt Controllern geht gar nichts.
Besser ist es daher MOS FET mit Logic Pegel der Typenreihe IRL zu verwenden. Ein IRLZ44N wäre eine bessere Alternative. Er ist auch nur 10 Cent teurer als IRF520
Leider gibt es bisher bei eBay nur Module mit dem IRF520.
Dieses kleine Modul verfügt über zwei unabhängige HG7881 (L9110S) Motor-Treiber-Chips, die jeweils 800mA Dauerstrom liefern können. Logik und Spannungsversorgung der Motoren können von 2,5 V bis 12 V betrieben werden, so dass dieses Modul mit 3,3V und 5V Mikrocontrollern verwendet werden kann.
Ein PWM Pulsweitenmodulationssignal wird verwendet, um die Drehzahl eines Motors zu steuern und ein digitaler Ausgang wird verwendet, um seine Richtung zu ändern. Dieses Modul kann 2 Gleichstrommotoren oder einen zwei Phasen-Schrittmotor antreiben. Die Ausgänge verfügen über Integrierte Schutzdioden. Einen Temperatur-/ Überlastungsschutz gibt es wohl nicht. Bei einem 1A Steppermotor fingen die Treiber-IC an zu rauchen. Erstaunlicherweise haben sie dies überstanden. Die maximale Chiptemperatur ist mit 80 Grad angegeben.
Betrieb Gleichstrommotoren am Arduino
Motor an Klemme A bzw. B.
Eingang IA steuert per PWM vom Arduino die Drehzahl. Für IB reicht ein einfacher Digital Pin für die Drehrichtung.
Betrieb Stepper am Arduino
Arduino L9110 Stepper Modul
4 Digitalpins. Die zwei Wicklungen an den A bzw. B-Ausgang. Polung beachten bzw. ausprobieren. Der L9110 Treiber kommt mit der Arduino Stepper Bibliothek gut zurecht. Der Funktionsumfang ist allerdings bescheiden.
Für den Treiber auf jeden Fall eine externe Versorgungsspannung verwenden.
Mangels Kühlung kommen die Treiber bei größeren Motoren schnell an ihre Grenzen.
[asa produkt_medium]B00HTUEBVI[/asa]
Bei eBay wird das Modul ab 2€ gehandelt.
Motor Control Interface
Pin
Description
B-IA
Motor B Input A (IA)
B-IB
Motor B Input B (IB)
GND
Ground
VCC
Operating Voltage 2.5-12V
A-IA
Motor A Input A (IA)
A-IB
Motor A Input B (IB)
IA
IB
Motor State
Low
Low
Off
High
Low
Forward
Low
High
Reverse
High
High
Off
Fazit:
Billig, klein und einfach zu verwenden. Für Modellbau-Gleichstrommotoren (fischertechnik & Co) und kleinere Schrittmotoren ideal.
Arduino digital output D10 to motor driver input B-IA.
Arduino digital output D11 to motor driver input B-IB.
Motor driver VCC to operating voltage 5V.
Motor driver GND to common ground.
Motor driver MOTOR B screw terminals to a small motor.
*/
// wired connections
#define HG7881_B_IA 10 // D10 –> Motor B Input A –> MOTOR B +
#define HG7881_B_IB 11 // D11 –> Motor B Input B –> MOTOR B –
// functional connections
#define MOTOR_B_PWM HG7881_B_IA // Motor B PWM Speed
#define MOTOR_B_DIR HG7881_B_IB // Motor B Direction
// the actual values for "fast" and "slow" depend on the motor
#define PWM_SLOW 50 // arbitrary slow speed PWM duty cycle
#define PWM_FAST 200 // arbitrary fast speed PWM duty cycle
#define DIR_DELAY 1000 // brief delay for abrupt motor changes
void loop()
{
boolean isValidInput;
// draw a menu on the serial port
Serial.println( "—————————–" );
Serial.println( "MENU:" );
Serial.println( "1) Fast forward" );
Serial.println( "2) Forward" );
Serial.println( "3) Soft stop (coast)" );
Serial.println( "4) Reverse" );
Serial.println( "5) Fast reverse" );
Serial.println( "6) Hard stop (brake)" );
Serial.println( "—————————–" );
do
{
byte c;
// get the next character from the serial port
Serial.print( "?" );
while( !Serial.available() )
; // LOOP…
c = Serial.read();
// execute the menu option based on the character recieved
switch( c )
{
case ‘1’: // 1) Fast forward
Serial.println( "Fast forward…" );
// always stop motors briefly before abrupt changes
digitalWrite( MOTOR_B_DIR, LOW );
digitalWrite( MOTOR_B_PWM, LOW );
delay( DIR_DELAY );
// set the motor speed and direction
digitalWrite( MOTOR_B_DIR, HIGH ); // direction = forward
analogWrite( MOTOR_B_PWM, 255-PWM_FAST ); // PWM speed = fast
isValidInput = true;
break;
case ‘2’: // 2) Forward
Serial.println( "Forward…" );
// always stop motors briefly before abrupt changes
digitalWrite( MOTOR_B_DIR, LOW );
digitalWrite( MOTOR_B_PWM, LOW );
delay( DIR_DELAY );
// set the motor speed and direction
digitalWrite( MOTOR_B_DIR, HIGH ); // direction = forward
analogWrite( MOTOR_B_PWM, 255-PWM_SLOW ); // PWM speed = slow
isValidInput = true;
break;
case ‘4’: // 4) Reverse
Serial.println( "Fast forward…" );
// always stop motors briefly before abrupt changes
digitalWrite( MOTOR_B_DIR, LOW );
digitalWrite( MOTOR_B_PWM, LOW );
delay( DIR_DELAY );
// set the motor speed and direction
digitalWrite( MOTOR_B_DIR, LOW ); // direction = reverse
analogWrite( MOTOR_B_PWM, PWM_SLOW ); // PWM speed = slow
isValidInput = true;
break;
case ‘5’: // 5) Fast reverse
Serial.println( "Fast forward…" );
// always stop motors briefly before abrupt changes
digitalWrite( MOTOR_B_DIR, LOW );
digitalWrite( MOTOR_B_PWM, LOW );
delay( DIR_DELAY );
// set the motor speed and direction
digitalWrite( MOTOR_B_DIR, LOW ); // direction = reverse
analogWrite( MOTOR_B_PWM, PWM_FAST ); // PWM speed = fast
isValidInput = true;
break;
case ‘6’: // 6) Hard stop (use with caution)
Serial.println( "Hard stop (brake)…" );
digitalWrite( MOTOR_B_DIR, HIGH );
digitalWrite( MOTOR_B_PWM, HIGH );
isValidInput = true;
break;
default:
// wrong character! display the menu again!
isValidInput = false;
break;
}
} while( isValidInput == true );
[/code]
Diese Website verwendet Cookies von Google, um ihre Dienste bereitzustellen, Anzeigen zu personalisieren und Zugriffe zu analysieren. Informationen darüber, wie Sie die Website verwenden, werden an Google weitergegeben. Durch die Nutzung dieser Website erklären Sie sich damit einverstanden, dass sie Cookies verwendet. OK
Privacy & Cookies Policy
Privacy Overview
This website uses cookies to improve your experience while you navigate through the website. Out of these, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may affect your browsing experience.
Necessary cookies are absolutely essential for the website to function properly. This category only includes cookies that ensures basic functionalities and security features of the website. These cookies do not store any personal information.
Any cookies that may not be particularly necessary for the website to function and is used specifically to collect user personal data via analytics, ads, other embedded contents are termed as non-necessary cookies. It is mandatory to procure user consent prior to running these cookies on your website.