Schrittmotortreiber DRM8825

Beschreibung

Spezifikationen

Pinbelegung Modul


GND = Masse
DIR = Drehrichtung
STEP = Schritt
SLEEP =
RESET =
M2 =
M1 =
M0 =
ENABLE =
FAULT =
A2 = Motorwicklung A
A1 = Motorwicklung A
B1 = Motorwicklung B
B2 = Motorwicklung B
GND = Masse
VMOT = Spannungsversorgung 8 – 45V DC für Motor

Links

https://iknowvations.in/de/arduino/drv8825-stepper-motor-driver-with-arduino-tutorial/

Auto bed leveling

Ich habe vor meinen 3D-Drucke mit einem „Auto bedleveling – Sensor“ nachzurüsten.

was wird benötigt

Ich habe im Internet folgendes bestellt:
3D-Touch von Geeetech.com
(ein bl-Touch wäre auch möglich gewesen)

Weiter habe ich die aktuelle Version von Marlin heruntergeladen:
Marlin-2.0.6

Drucker umbauen / Sensor befestigen

Die Halterung habe ich aus Holz hergestellt. Hier habe ich versucht den Sensor so auszurichten das er auf der Flucht zur Nozzle in der X-Achse ist. Der Abstand zur Düsenmitte beträgt 37mm:

Der 3D-Touch ersetzt den Endschalter für die Z-Achse-min.
Schwarze Ader = GND (-)
Weiße Ader = S (Signal an PIN 18)
Siehe auch 3D Drucker – Endschalter

Der Servo wird an Servo 1 angeschlossen (linke Steckleiste)
Orange Ader = Signal (an PIN 11)
Rote Ader = +
Braune Ader = GND (-)

5V am Servoausgang herstellen:
Jumper zwischen VCC und 5V stecken dann liegt am +-Pin Spannung an.

Spezifikationen und Infos zum 3D-Touch

Specifications:
Voltage: 5V
Current: 15mA
Max. Current: 300mA
Cable length: 150mm
Net Weight: 10g
Shipping weight: 25g

Operate condition
3DTouch can be operated in the following condition.
One I/O for control (PWM or Software PWM)
One I/O for Z min (Z Probe)
GND and +5V power

Wiring
3-pin: Brown (-, GND), Red (+5V), Orange (control signal)
2-pin: Black (-, GND), White (Z min)

Einrichten in der Firmeware

Versatz zur Düse
X = 37mm
Y = 0mm
Z = 0mm (3,..mm)

G-Code

M280 P0 S10 = Pin ausfahren
M280 P0 S90 = Pin einfahren
M280 P0 S120 = Selbsttest starten
M280 P0 S160 = Alarm zurücksetzen (wenn er blinkt)

G28 = homing
G29 = autoleveling
M851 Z… = Offset speichern
M850 = Werte im EEProm speichern

RGB LED-Modul

Vorwiderstände (102) mit 1kOhm sind auf dem Modul schon vorhanden.

Pinbelegung:
R = Rot
G = Grün
B = Blau
GND = Masse

// RGB LED-Modul
// Die vorhandenen Farben schalten

  int BLAU = 13;
  int GRUEN = 12;
  int ROT = 11;
  
void setup() {
  pinMode(BLAU, OUTPUT); // Port als Ausgang und als BLAU festlegen
  pinMode(GRUEN, OUTPUT); // Port als Ausgang und als GRUEN festlegen
  pinMode(ROT, OUTPUT); // Port als Ausgang und als ROT festlegen
}

void loop() {
  digitalWrite(BLAU, HIGH); // Blau wird high geschaltet
  delay(500); // warten
  digitalWrite(BLAU, LOW); // Blau wird high geschaltet
  digitalWrite(GRUEN, HIGH); // Gruen wird high geschaltet
  delay(500); // warten
  digitalWrite(GRUEN, LOW); // Gruen wird low geschaltet
  digitalWrite(ROT, HIGH); // ROT wird high geschaltet
  delay(500); // warten
  digitalWrite(ROT, LOW); // ROT wird low geschaltet
}

Arduino – Hallo Welt

Allgemeine Programmstruktur

Ein Programm besteht grundsätzlich aus dem setup() – und dem loop() – Block.

Der setup()-Block wird einmal beim Neustart oder beim hochladen eines Programm auf den Arduino ausgeführt.

Der loop()-Block wird, nach dem setup()-Block, so lange zyklisch wiederholt bis der Arduino ausgeschaltet wird.

// Allgemeine Programmstruktur
//
// Ausgabe von "Hallo Welt" am Seriellen Monitor über die Serielle Schnittstelle
//

void setup() {
  // initialisiere die serielle Kommunikation mit 9600bps:
  Serial.begin(9600); }

void loop() {
  Serial.println("Hallo Welt!" );   
 // warte 10ms bis zur nächsten loop()-Ausführung.
  delay(10); }

Achtung:
Wenn die Serielle Schnittstelle verwendet wird, dürfen die Ports 0 und 1 nicht verwendet werden.

http://popovic.info/html/arduino/arduinoUno_1.html

Satanlage ausrichten

Hardware

Die Hardware ist zum großen Teil aus Holz.

Die 3D-Drucke stammen von TNT3Dprint.de.
Zahnriemenscheibe Azimut:
teeth = 120; // Number of teeth
profile = 12; //12=GT2_2mm
motor_shaft = 50.1; // NEMA17 motor shaft exact diameter = 5

m3_dia = 3.2; // 3mm hole diameter
m3_nut_hex = 1; // 1 for hex
m3_nut_flats = 5.7; // normal M3 hex nut exact width = 5.5
m3_nut_depth = 2.7; // normal M3 hex nut exact depth = 2.4

retainer = 1; // Belt retainer above teeth
retainer_ht = 1.5; // height of retainer flange over pulley
idler = 1; // Belt retainer below teeth
idler_ht = 1.5; // height of idler flange over pulley

pulley_t_ht = 8; // length of toothed part of pulley
pulley_b_ht = 8; // pulley base height
pulley_b_dia = 70; // pulley base diameter
no_of_nuts = 3; // number of captive nuts required
nut_angle = 120; // angle between nuts
nut_shaft_distance = 1.2; // distance between inner face of nut and shaft

Lagerbock

Der Lagerbockbesteht aus drei aufeinandergeleimte Multiplexplatten. In diese wurde unten und oben ein Lager, Innendurchmesser 50mm eingesetzt.

Lager: 2 x Rillenkugellager 6010 2RS 50 x 80 x 16 mm

Lagerbock mit Zahnriemenscheibe 120Zähne

Azimut, Elevations- und Deklinnationswinkel

Azimutwinkel berechnen:
A = Azimutwinkel
gLE = geographische Länge des Empfangsort
gBE = geographische Breite des Empfangsort
gLS = geographische Länge der Satelittenposition

tan(gLE – gLS)
A = 180° + arctan ————–
sin gBE

Für Astra mit 19,2 Ost würde das z.B. so aussehen:
gLE = 8,7582988 (Längengrad für Knittlingen)
gBE = 49,0240107 (Breitengrad für Knittlingen)
gLS = 19,2

tan(8,7582988 – 19,2)
A = 180° + arctan ——————-
sin 49,0240107

Elevation berechnen:

GPS-Koordinaten für Knittingen:
49° 1′ 26.439″ N
8° 45′ 29.876″ E

http://www.fen-net.de/satellitentechnik-online/texte/orbit/azimut.htm

// Azimut und Elevation berechnen

void setup() {
  double A; // Azimutwinkel
  double E; // Elevationswinkel
  
  // Daten für Stuttgart
  String Ort = "Stuttgart";
  float gLE = 9.2L; // Längengrad Stuttgart
  float gBE = 48.8L; // Breitengrad Stuttgart
  
  // Daten für Berlin
  /*String Ort = "Berlin";
  float gLE = 13.4L; // Längengrad Berlin
  float gBE = 52.5L; // Breitengrad Berlin
  */
  
  String Satellit = "Astra 19,2 Ost";
  float gLS = 19.2L; // Längengrad Astra
  //string Satellit = "Eutelsat F2 10,0 Ost";
  //float gLS = 10.0L;   // Längengrad Eutelsat F2

  // Die Grademaße in Bogenmaße umrechnen
  float L = 3.14/180 * gLE;
  float B = 3.14/180 * gBE;
  float P = 3.14/180 * gLS;

  // Azimut in Gradmaß berechnen
  A = 180 + 180/3.14 * atan (tan(L - P) / sin(B));

  // Elevation im Gradmaß berechnen
  E = 180/3.14 * atan (((cos(B) * cos(L - P)) -0.1513) / sqrt(1-sq(cos(B) * cos(L - P))));
  
  // initialisiere die serielle Kommunikation mit 9600bps:
  Serial.begin(9600); 
  
  // Ausgabe der berechneten Winkel
  Serial.println ("Ort: " + Ort);
  Serial.println ("Satellit: " + Satellit);
  Serial.print ("Azimut = ");
  Serial.print (A);
  Serial.print (" Elevation = ");
  Serial.println (E);
}

RAMPS 1.4 zur Ansteuerung

Für die Ansteuerung der Schrittmotoren wird ein RAMPS 1.4 – Shield verwendet. Folgende Anschlüsse werden verwendet

Azimut
E0 = Anschluss für den Schrittmotor „Azimut“
X_MIN = Endschalter Azimut MIN
X_MAX = Endschalter Azimut MAX

Elevation
E1 = Anschluss für den Schrittmotor „Elevation“
Y_MIN = Endschalter Elevation MIN
Y_MAX = Endschalter Elevation MAX

Kompasssensor am RAMPS 1.4

Der Kompassensor so wie eventuell weitere Sensoren werden über den I2C-Bus am RAMPS 1.4 angeschlossen

5V = rot
GND = schwarz
20 = blau
21 = grün