Featured image of post Shapeoko - Upgrade der Elektrik

Shapeoko - Upgrade der Elektrik

Nach dem mechanischen Upgrade steht auch ein Upgrade der Elektrik und somit auch das Ende von Pololu und GRBL an

Shapeoko Elektrik Upgrade

Die alte Welt - GRBL und Arduino

Über GRBL gibt es eine Menge zu lesen. Damals hatte ich einen kleinen Hack für den Code geschrieben, um einen Laser an die Hardware anzuschließen und diesen über G-Codes zu steuern. Das Ganze lief auf einem Arduino Uno mit einem uralten GRBL-Shield und Pololu-Treibern. Ich mochte die Pololu-Treiber eigentlich immer und hatte sogar eine maßgeschneiderte Kühlung aus einem Kupferblock gefräst, die die Treiber kühl halten sollte. Gekoppelt mit ein paar Kühlrippen und einem Lüfter funktionierte das einigermaßen. Die Treiber mussten über zwei Messpunkte eingestellt werden, die man mit dem Multimeter messen musste, während man (natürlich im stromlosen Zustand) an einem winzigen Poti mit einem Schraubenzieher die Spannung justierte. Das war eine ziemliche DIY-Fummelei, die ich schon damals als absurd empfand. Ob alles richtig funktionierte, konnte man auch nicht wirklich testen, weshalb man die Fräse während der Arbeit genauso im Blick behielt wie die Temperatur des Kühlers, die oft weit über 60°C lag.

Die Zwischenwelt - GRBL mit Wifi

Eigentlich wollte ich die Pololu-Treiber weiterverwenden, also habe ich das GRBL-Shield auf ein etwas moderneres Arduino Uno mit ESP32 aufgebaut. Unter der Haube lief dann nicht mehr GRBL, sondern das webbasierte FluidNC. Zugegeben, bei FluidNC habe ich mich anfangs etwas überschätzt. Da FluidNC auf vielen Plattformen läuft, ist die Konfiguration entsprechend komplex und nicht mal so nebenbei erledigt. FluidNC hat eine config.yaml-Datei, die man über die Benutzeroberfläche hochlädt. Anschließend überprüft man, ob alles passt, und nimmt gegebenenfalls über das Webinterface temporäre Änderungen vor. Offiziell unterstützt FluidNC das Arduino Uno und das GRBL-Konstrukt nicht, da sie damit schon oft Probleme und Supportanfragen hatten. Nach mehreren Anläufen entschied ich mich, das alte GRBL-Shield aufzugeben und auf etwas anderes umzusteigen. Mittlerweile hat sich natürlich auch in Sachen Treiber einiges getan, sodass ich mich ohnehin nach etwas Neuem umsehen wollte.

Die neue Welt - Fysetc E4

Am Ende entschied ich mich für ein Fysetc E4 mit TMC2209-Schrittmotortreibern und allem, was dazugehört, direkt an Bord. Sogar für eine SD-Karte, auf der man seine G-Code-Dateien ablegen kann, ist Platz. Dort wird auch die Konfiguration gespeichert, sowie ein paar Scripts, mit dem man per Knopfdruck auf dem Webinterface Befehle ausführen kann. Eigentlich ist das Board für 3D-Drucker gedacht, aber es ist angenehm günstig und bewältigt problemlos die vier Schrittmotortreiber meiner CNC-Fräse. Die Konfiguration war etwas zeitintensiv, aber nun weiß ich auch einiges über die Treiber selbst. Nach einigen Messungen habe ich es auch geschafft, einen externen Lüfter an die Hardware anzuschließen, der permanent läuft, aber über oben genanntes Script abgeschaltet werden kann. Da das gesamte Layout Open Source ist, ist es auch entsprechend gut dokumentiert. Alles Nötige findet man hier: https://wiki.fysetc.com/E4/.

Ein tipp noch. Zum invertieren der Laufrichtung eines Motor genügt es, wenn man hier ein :low an den direction_pin anhängt. Somit läuft der Motor dann in die andere Richtung.

Anbei gibt es auch meine Konfiguration des Fysetc E4 und der Shapeoko.

config.yaml Fysetc E4

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
name: "EleksLaser with Fysetc E4 controller"
board: "Fysetc E4"

stepping:
  engine: RMT
  idle_ms: 250
  dir_delay_us: 1
  pulse_us: 2
  disable_delay_us: 0

kinematics:
  cartesian:

uart1:
  txd_pin: gpio.22
  rxd_pin: gpio.21
  rts_pin: NO_PIN
  cts_pin: NO_PIN
  baud: 115200
  mode: 8N1

axes:
  shared_stepper_disable_pin: gpio.25:high

  x:
    steps_per_mm: 80
    max_rate_mm_per_min: 16000.000
    acceleration_mm_per_sec2: 1000.000
    max_travel_mm: 370.000
    soft_limits: false
    motor0:
      limit_neg_pin: gpio.15
      hard_limits: false
      pulloff_mm: 3.000
      tmc_2209:
        uart_num: 1
        addr: 1
        r_sense_ohms: 0.110
        run_amps: 1.680
        hold_amps: 0.500
        microsteps: 16
        stallguard: 0
        stallguard_debug: false
        toff_disable: 0
        toff_stealthchop: 5
        toff_coolstep: 3
        run_mode: StealthChop
        homing_mode: StealthChop
        use_enable: false
        step_pin: gpio.27
        direction_pin: gpio.26
        disable_pin: NO_PIN

  y:
    steps_per_mm: 80
    max_rate_mm_per_min: 12000.000
    acceleration_mm_per_sec2: 1000.000
    max_travel_mm: 295.000
    soft_limits: false
    motor0:
      limit_neg_pin: gpio.35
      hard_limits: false
      pulloff_mm: 3.000
      tmc_2209:
        # Labeled Y
        uart_num: 1
        addr: 3
        r_sense_ohms: 0.110
        run_amps: 1.680
        hold_amps: 0.500
        microsteps: 16
        stallguard: 0
        stallguard_debug: false
        toff_disable: 0
        toff_stealthchop: 5
        toff_coolstep: 3
        run_mode: StealthChop
        homing_mode: StealthChop
        use_enable: false
        step_pin: gpio.33
        direction_pin: gpio.32:low
        disable_pin: NO_PIN
    motor1:
      limit_neg_pin: gpio.34
      hard_limits: false
      pulloff_mm: 3.000
      tmc_2209:
        uart_num: 1
        # Labeled Z
        addr: 0
        r_sense_ohms: 0.110
        run_amps: 1.680
        hold_amps: 0.500
        microsteps: 16
        stallguard: 0
        stallguard_debug: false
        toff_disable: 0
        toff_stealthchop: 5
        toff_coolstep: 3
        run_mode: StealthChop
        homing_mode: StealthChop
        use_enable: false
        step_pin: gpio.14
        direction_pin: gpio.12
        disable_pin: NO_PIN

  z:
    steps_per_mm: 2560
    max_rate_mm_per_min: 500.000
    acceleration_mm_per_sec2: 500.000
    max_travel_mm: 100.000
    soft_limits: false
    motor0:
      tmc_2209:
        uart_num: 1
        # Labeled E
        addr: 2
        r_sense_ohms: 0.110
        run_amps: 1.680
        hold_amps: 0.500
        microsteps: 16
        stallguard: 0
        stallguard_debug: false
        toff_disable: 0
        toff_stealthchop: 5
        toff_coolstep: 3
        run_mode: StealthChop
        homing_mode: StealthChop
        use_enable: false
        step_pin: gpio.16
        direction_pin: gpio.17
        disable_pin: NO_PIN

spi:
  miso_pin: gpio.19
  mosi_pin: gpio.23
  sck_pin: gpio.18

sdcard:
  cs_pin: gpio.5
  card_detect_pin: NO_PIN

start:
  must_home: false
  deactivate_parking: false
  check_limits: false

user_outputs:
  digital0_pin: gpio.13:low

Zum deaktivieren des Lüfters muss man nur den Digital Pin 0 ein / ausschalten. Das geht mit den Befehlen M62 und M63. Diese kann man einfach in zwei Script ablegen und dann über die Oberfläche ausführen (oder man tippt es händisch ein)

1
M62 P0
1
M63 P0
comments powered by Disqus
Developer / Inventor / Creator
Erstellt mit Hugo
Theme Stack gestaltet von Jimmy