Dzisiaj trochę więcej informacji i pełna konfiguracja mojego klippera, może ktoś skorzysta, poświęciłem na to ładnych kilkadziesiąt godzin
Na potrzeby robotów googla:
SKR 1.4 uart klipper fluidd mainsail sensorless 2208 2209 mini12864 btt smart filament sensor printer.cfg
Cała konfiguracja oparta o konstrukcję Ender 3 Pro, płyta główna SKR 1.4, stepstiki 2209 na X oraz Y, dual Z z osobnymi stepami oraz ekstruder to TMC2208. Silniki .9 stopnia na osiach X,Y oraz E. Wyświetlacz to mini12864. Całość uzupełnia czujnik smart filament sensor. Pole robocze 235x235 mm. Zarządzanie przez Fluidd, firmware to oczywiście Klipper, uruchomione na Raspberry Pi 3b.
Zacznijmy od aktualizacji firmware, w związku z tym, że płyta podłączona jest przez UART w slocie płyty musi być karta pamięci sformatowana jako FAT/FAT32. Można oczywiście połączyć płytę przez USB (ale na to nie mam miejsca) lub przez włożenie karty pamięci z nowych firmware do płyty i jej restart (ale to mało eleganckie i trzeba przewracać drukarkę "na plecy").
1. Aktualizacja SKR 1.4
a. ~/klipper
b. make menuconfig
c. Zaznaczyć opcje:
Micro-controller Architecture (LPC176x (Smoothieboard))
Processor model (lpc1768 (100 MHz))
Communication interface (Serial (on UART0 P0.3/P0.2))
Wyjść zapisując
d. sudo service klipper stop
e. ./scripts/flash-sdcard.sh /dev/ttyAMA0 btt-skr-v1.4 (zakończy się błędem zapisu na karcie SD)
f. sudo service klipper start
2. Aktualizacja linux mcu
a. cd ~/klipper/
b. make menuconfig
Odznaczyć wszystko, zaznaczyć tylko "Micro-controller Architecture (Linux process)"
Wyjść zapisując
c. sudo service klipper stop
d. make flash
e. sudo service klipper start
Teraz pliki konfiguracyjne. Będzie kilka ciekawostek i z mojej strony również prośba - jeżeli zauważycie coś, co warto poprawić, lub gdzie mam błąd - dajcie proszę znać. Konfiguracja, dla wygody, została podzielona na kilka osobnych plików, które są dołączane na początku głównego pliku printer.cfg
printer.cfg
Kod: Zaznacz cały
#exEnder 3 Pro
[include adxl.cfg]
[include debug.cfg]
[include filament.cfg]
[include menu.cfg]
[include macro.cfg]
[z_tilt] ; wyrownanie lewego i prawego steppera, dosc ryzykowne, bo mam osie mocowane na sztywno na belce, wiec testowo
z_positions:
0,112.5
185,112.5
points:
0,112.5
185,112.5
speed: 50
horizontal_move_z: 5
retries: 3
retry_tolerance: 0.05
[mcu]
serial: /dev/ttyAMA0
restart_method: command
[printer]
kinematics: cartesian
max_velocity: 300
max_accel: 9000
square_corner_velocity: 5.0
max_z_velocity: 20
max_z_accel: 100
[probe]
pin: !P0.10
x_offset: 38.84
y_offset: 12.61
speed: 6
samples: 3
samples_result: median
sample_retract_dist: 3
samples_tolerance: 0.0075
samples_tolerance_retries: 10
lift_speed: 10
[bed_mesh]
speed: 150
horizontal_move_z: 7
mesh_min: 40,20
mesh_max: 220,210
probe_count: 4,4
move_check_distance: 5
split_delta_z: .025
fade_start: 1
fade_end: 10
fade_target: 0
[screws_tilt_adjust]
screw1: 0,17
screw1_name: front left screw
screw2: 165,17
screw2_name: front right screw
screw3: 165,187
screw3_name: rear right screw
screw4: 0,187
screw4_name: rear left screw
horizontal_move_z: 10.
speed: 100.
screw_thread: CW-M3
[stepper_x] #Pozycja X-CLS
step_pin: P2.2
dir_pin: !P2.6
enable_pin: !P2.1
microsteps: 16
rotation_distance: 40
full_steps_per_rotation: 400
endstop_pin: tmc2209_stepper_x:virtual_endstop
position_endstop: 0
position_min: 0
position_max: 230
homing_speed: 60
homing_retract_dist: 0
[tmc2209 stepper_x]
uart_pin: P1.10
diag_pin: ^P1.29
driver_SGTHRS: 166
interpolate: True
run_current: 0.8
hold_current: 0.7
sense_resistor: 0.110
stealthchop_threshold: 0
[stepper_y] #Pozycja Y-CLS
step_pin: P0.19
dir_pin: !P0.20
enable_pin: !P2.8
microsteps: 16
rotation_distance: 40
full_steps_per_rotation: 400
position_endstop: 0
position_min: 0
position_max: 225
homing_speed: 50
homing_retract_dist: 0
endstop_pin: tmc2209_stepper_y:virtual_endstop
[tmc2209 stepper_y]
uart_pin: P1.9
diag_pin: ^P1.28
driver_SGTHRS: 160
interpolate: True
run_current: 0.8
hold_current: 0.7
sense_resistor: 0.110
stealthchop_threshold: 0
[stepper_z] #Pozycja Z-CLS
step_pin: P0.22
dir_pin: P2.11
enable_pin: !P0.21
microsteps: 16
#rotation_distance: 8
step_distance: .0025
endstop_pin: !P0.10
position_max: 250
position_min: -10
homing_speed: 10
second_homing_speed: 4
homing_retract_dist: 1.5
endstop_pin: probe:z_virtual_endstop
[tmc2208 stepper_z]
uart_pin: P1.8
run_current: 0.8
hold_current: 0.7
stealthchop_threshold: 0
interpolate: True
[stepper_z1] #Pozycja E1-CLS
step_pin: P1.15
dir_pin: P1.14
enable_pin: !P1.16
microsteps: 16
#rotation_distance: 8
step_distance: .0025
endstop_pin: !P0.10
endstop_pin: probe:z_virtual_endstop
[tmc2208 stepper_z1]
uart_pin: P1.1
run_current: 0.8
hold_current: 0.7
stealthchop_threshold: 0
interpolate: True
[extruder] #Pozycja E0-CLS
step_pin: P2.13
dir_pin: P0.11
enable_pin: !P2.12
rotation_distance: 22.6789511
gear_ratio: 50:17
microsteps: 16
full_steps_per_rotation: 400
nozzle_diameter: 0.400
filament_diameter: 1.75
heater_pin: P2.7
sensor_type: NTC 100K beta 3950
sensor_pin: P0.24
min_temp: 20
max_temp: 300
max_power: 1.0
min_extrude_temp: 170
max_extrude_only_distance: 150
## pressure_advance ASA:0.025 PLA:0.06 ABS: 0.09
pressure_advance: 0.075
pressure_advance_smooth_time: 0.040
[tmc2208 extruder]
uart_pin: P1.4
run_current: 0.420
hold_current: 0.300
stealthchop_threshold: 999999
interpolate: True
[heater_bed]
heater_pin: P2.5
sensor_type: EPCOS 100K B57560G104F
sensor_pin: P0.25
#control = pid
#pid_Kp=48.004
#pid_Ki=0.664
#pid_Kd=867.667
min_temp: 0
max_temp: 120
[heater_fan nozzle_cooling_fan]
pin: P2.4
heater: extruder
heater_temp: 60
[fan]
pin: P2.3
[homing_override]
set_position_z:6
axes: z
gcode:
G90
G1 Z10 F6000
SENSORLESS_HOME_X
SENSORLESS_HOME_Y
G1 X115 Y112.5 F6000
G28 Z0
G1 X115 Y112.5 Z10
[board_pins]
aliases:
# EXP1 header
EXP1_1=P1.30, EXP1_3=P1.18, EXP1_5=P1.20, EXP1_7=P1.22, EXP1_9=<GND>,
EXP1_2=P0.28, EXP1_4=P1.19, EXP1_6=P1.21, EXP1_8=P1.23, EXP1_10=<5V>,
# EXP2 header
EXP2_1=P0.17, EXP2_3=P3.26, EXP2_5=P3.25, EXP2_7=P1.31, EXP2_9=<GND>,
EXP2_2=P0.15, EXP2_4=P0.16, EXP2_6=P0.18, EXP2_8=<RST>, EXP2_10=<NC>
# Pins EXP2_1, EXP2_6, EXP2_2 are also MISO, MOSI, SCK of bus "ssp0"
[display]
lcd_type: uc1701
cs_pin: EXP1_3
a0_pin: EXP1_4
rst_pin: EXP1_5
contrast: 63
encoder_pins: ^EXP2_5, ^EXP2_3
click_pin: ^!EXP1_2
[output_pin beeper]
pin: EXP1_1
[neopixel fysetc_mini12864]
pin: EXP1_6
chain_count: 3
color_order: RGB
initial_RED: 1.0
initial_GREEN: 0.0
initial_BLUE: 0.0
[virtual_sdcard]
path: ~/gcode_files
[display_status]
[pause_resume]
Plik menu.cfg, tutaj zmienionych kilka elementów odnoszących się do Octoprinta (używany jest Fluidd), dodane opcje związane z testem rezonansu dla osi X oraz Y, jak również zapis wartości babystepping po zakończeniu wydruku. Zmienione wartości ladowania/cofania filamentu - tak by byly idealnie dobrane dla długości ścieżki filamentu w Afterburner.
Kod: Zaznacz cały
[menu __main __octoprint]
type: list
name: Print Control
[menu __main __filament __loadf]
type: command
enable: False
name: Load Fil. fast
[menu __main __filament __loads]
type: command
enable: False
name: Load Fil. slow
[menu __main __filament __unloadf]
type: command
enable: False
name: Unload Fil.fast
[menu __main __filament __unloads]
type: command
enable: False
name: Unload Fil.slow
[menu __main __setup __calib __delta_calib_auto]
type: list
enable: False
name: Print Control
[menu __main __setup __calib __delta_calib_man]
type: command
enable: False
name: Delta cal. man
[menu __main __setup __calib __bedprobe]
type: command
enable: False
name: Bed probe
[menu __main __setup __calib __delta_calib_man __start]
type: command
enable: False
name: Start probing
[menu __main __setup __calib __delta_calib_man __move_z]
type: command
enable: False
name: Move Z: {'%03.2f' % menu.input}
[menu __main __setup __calib __delta_calib_man __test_z]
type: list
name: Test Z: {['++','+','+.01','+.05','+.1','+.5','-.5','-.1','-.05','-.01','-','--'][menu.input|int]}
[menu __main __setup __calib __delta_calib_man __accept]
type: command
enable: Accept
name: Load Fil. fast
[menu __main __setup __calib __delta_calib_man __abort]
type: command
enable: False
name: Abort
[menu __main __filament __loadfilament]
type: command
name: Load Filament
gcode:
SAVE_GCODE_STATE NAME=__filament__load
M83
G1 E70 F960
G1 E50 F240
RESTORE_GCODE_STATE NAME=__filament__load
[menu __main __filament __unloadfilament]
type: command
name: Unload Filament
gcode:
SAVE_GCODE_STATE NAME=__filament__load
M83
G1 E-85 F1200
RESTORE_GCODE_STATE NAME=__filament__load
[menu __main __setup __calib __testresx]
type: command
name: T. Resonance X
gcode:
TEST_RESONANCES AXIS=X
[menu __main __setup __calib __testresy]
type: command
name: T. Resonance Y
gcode:
TEST_RESONANCES AXIS=Y
[menu __main __octoprint __pause]
type: command
enable: {printer.idle_timeout.state == "Printing"}
name: Pause printing
gcode:
PAUSE
[menu __main __octoprint __resume]
type: command
enable: {not printer.idle_timeout.state == "Printing"}
name: Resume printing
gcode:
RESUME
[menu __main __octoprint __abort]
type: command
enable: {printer.idle_timeout.state == "Printing"}
name: Abort printing
gcode:
CANCEL_PRINT
[menu __main __tune __applyoffset]
type: command
enable: {printer.idle_timeout.state == "Printing"}
name: Apply Offset Z
gcode:
Z_OFFSET_APPLY_PROBE
SET_GCODE_VARIABLE MACRO=PRINT_END VARIABLE=save_needed VALUE=1
Plik macro.cfg, tutaj ustawione są wszystkie makra użyte w drukarce. Z wartych uwagi na pewno zapis wartości baby stepping po zakończeniu wydruku:
Kod: Zaznacz cały
[gcode_macro SENSORLESS_HOME_X]
gcode:
{% set HOME_CUR = 0.700 %}
{% set driver_config = printer.configfile.settings['tmc2209 stepper_x'] %}
{% set RUN_CUR = driver_config.run_current %}
{% set HOLD_CUR = driver_config.hold_current %}
SET_TMC_CURRENT STEPPER=stepper_x CURRENT={HOME_CUR} HOLDCURRENT={HOME_CUR}
G4 P1000
G28 X0
G90
G1 X5 F1200
SET_TMC_CURRENT STEPPER=stepper_x CURRENT={RUN_CUR} HOLDCURRENT={HOLD_CUR}
[gcode_macro SENSORLESS_HOME_Y]
gcode:
{% set HOME_CUR = 0.700 %}
{% set driver_config = printer.configfile.settings['tmc2209 stepper_y'] %}
{% set RUN_CUR = driver_config.run_current %}
{% set HOLD_CUR = driver_config.hold_current %}
SET_TMC_CURRENT STEPPER=stepper_y CURRENT={HOME_CUR} HOLDCURRENT={HOME_CUR}
G4 P1000
G28 Y0
G90
G1 Y5 F1200
SET_TMC_CURRENT STEPPER=stepper_y CURRENT={RUN_CUR} HOLDCURRENT={HOLD_CUR}
[gcode_macro PAUSE]
rename_existing: BASE_PAUSE
default_parameter_E: 1.7
gcode:
{% set x_park = printer.toolhead.axis_maximum.x|float - 5.0 %}
{% set y_park = printer.toolhead.axis_maximum.y|float - 5.0 %}
{% set max_z = printer.toolhead.axis_maximum.z|float %}
{% set act_z = printer.toolhead.position.z|float %}
{% if act_z < (max_z - 2.0) %}
{% set z_safe = 2.0 %}
{% else %}
{% set z_safe = max_z - act_z %}
{% endif %}
SAVE_GCODE_STATE NAME=PAUSE_state
BASE_PAUSE
G91
G1 E-{E} F2100
G1 Z{z_safe} F900
G90
G0 X{x_park} Y{y_park} F6000
G91
[gcode_macro PRINT_START]
gcode:
BED_MESH_PROFILE LOAD=default
G28
G1 Z20 F3000 ; move nozzle away from bed
G1 X20 Y0 Z0.2 F3000 ; get ready to prime
G92 E0 ; reset extrusion distance
G1 X100 E15 F600 ; prime nozzle - bylo E15
G1 X180 F5000 ; quick wipe
G1 Z1 F5000
[gcode_macro PRINT_END]
variable_save_needed: 0 ; wyzerowanie wartosci zmiennej save_needed
gcode:
M400
SET_FILAMENT_SENSOR SENSOR=sfs ENABLE=0 ; wylaczenie czujnika filamentu, moze sprawic problem przy koncu wydruku
G92 E0
G1 E-10.0 F3600 ; wycofanie filamentu
G91 ; pozycjonowane wzgledne
G0 Z2.00 X20.0 Y20.0 F20000 ; move nozzle to remove stringing
TURN_OFF_HEATERS
M107 ; wylaczenie wentylatorow
G1 Z10 F3000 ; uniesienie o 2mm
G90 ; pozycjonowanie bezwzglende
G0 Y225 F3600 ; parkowanie glowicy z tylu
BED_MESH_CLEAR
M18
SET_FILAMENT_SENSOR SENSOR=sfs ENABLE=1 ; wlaczenie czujnika filamentu
{% if printer["gcode_macro PRINT_END"].save_needed %} ; sprawdzenie, czy zmieniony byl baby-stepping
TEMPERATURE_WAIT SENSOR=extruder MAXIMUM=50 ; jezeli babystepping byl wlaczony i potrzebny jest restart - oczekiwanie na spadek temperatury ekstrudera ponizej 50C
SAVE_CONFIG ; zapisanie nowej wartosci z-offset i restart drukarki
{% endif %}
[gcode_macro RESUME]
rename_existing: BASE_RESUME
default_parameter_E: 1 # edit to your preferred retract length
gcode:
G91
G1 E{E} F2100
G90
RESTORE_GCODE_STATE NAME=PAUSE_state MOVE=1
BASE_RESUME
[gcode_macro FILAMENT_RUNOUT]
gcode:
M300 S1 P10
M600
M300 S1 P10
[gcode_macro M300]
gcode:
{% set S = params.S|default(1000)|int %}
{% set P = params.P|default(100)|int %}
SET_PIN PIN=BEEPER VALUE=0.5 CYCLE_TIME={ 1.0/S if S > 0 else 1 }
G4 P{P}
SET_PIN PIN=BEEPER VALUE=0
[gcode_macro M600]
gcode:
{% set X = params.X|default(25)|float %}
{% set Y = params.Y|default(25)|float %}
{% set Z = params.Z|default(10)|float %}
SAVE_GCODE_STATE NAME=M600_state
PAUSE
G91
G1 E-.8 F2700
G1 Z{Z}
G90
G1 X{X} Y{Y} F3000
G91
G1 E-15 F1000
RESTORE_GCODE_STATE NAME=M600_state
[gcode_macro CANCEL_PRINT]
rename_existing: BASE_CANCEL_PRINT
gcode:
TURN_OFF_HEATERS
CLEAR_PAUSE
SDCARD_RESET_FILE
BASE_CANCEL_PRINT
Plik adxl.cfg, tutaj konfigurujemy układ ADXL345 podłączony do RPi:
Kod: Zaznacz cały
[mcu rpi]
serial: /tmp/klipper_host_mcu
[adxl345]
cs_pin: rpi:None
[resonance_tester]
accel_chip: adxl345
probe_points:
115,115,40
[input_shaper]
shaper_freq_x: 57.8
shaper_type_x: mzv
shaper_freq_y: 50.6
shaper_type_y: mzv
Plik filament.cfg, konfigurujemy czujnik filamentu:
Kod: Zaznacz cały
[filament_motion_sensor sfs] #Btt Smart Filament Sensor
detection_length: 7.0
extruder: extruder
switch_pin: P1.26
#pause_on_runout:
runout_gcode: FILAMENT_RUNOUT
To by było na razie na tyle. Muszę rozwiązać jeszcze jeden problem - nie mogę zlecić wydruków z poziomu LCD. Pliki z wirtualnej karty SD są wyświetlane prawidłowo, ale po kliknięciu na wybranym - nic się nie dzieje. Na pewno znowu coś z Octoprintem (którego tu nie ma). Dzisiaj postaram się to ogarnąć.