mirror of
https://github.com/bassamanator/Sovol-SV06-firmware.git
synced 2025-11-08 21:41:15 +00:00
Compare commits
13 Commits
v0.1.0-sv0
...
v0.1.2-sv0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
953daefa32 | ||
|
|
d0b426d5b0 | ||
|
|
4b90c7abc5 | ||
|
|
daa07e37c0 | ||
|
|
758a3f8b77 | ||
|
|
c1427d9418 | ||
|
|
371e0d604a | ||
|
|
5b5ce8df57 | ||
|
|
8346c79f35 | ||
|
|
98a1cd7fe6 | ||
|
|
39131e0d66 | ||
|
|
862c45b88f | ||
|
|
73f15169b6 |
73
README.md
73
README.md
@@ -1,6 +1,8 @@
|
||||
# 🚨 *One-Stop-Shop* Sovol SV06 Klipper Configuration
|
||||
|
||||
This repository contains the Klipper configuration and firmware for the Sovol SV06 3D printer with completely *stock hardware*.
|
||||
This repository contains the Klipper configuration and firmware for the **Sovol SV06** 3D printer with completely *stock hardware*.
|
||||
|
||||
If you wanted to use the One-Stop-Shop Klipper Configuration for a *different printer*, please switch to the [any-printer](https://github.com/bassamanator/Sovol-SV06-firmware/tree/any-printer) branch.
|
||||
|
||||
I am creating these files for my personal use and cannot be held responsible for what it might do to your printer. Use at your own risk.
|
||||
|
||||
@@ -18,36 +20,29 @@ I am creating these files for my personal use and cannot be held responsible for
|
||||
- Load/unload filament macros.
|
||||
- Purge line macro.
|
||||
|
||||
## To do:
|
||||
|
||||
- [x] Replace M109/M190 with `TEMPERATURE_WAIT`.
|
||||
- [ ] Get the Ellis `TEST_SPEED` macro working.
|
||||
- [x] Add information about directory structure.
|
||||
- [x] Create FAQ section.
|
||||
- [x] Get filament sensor working with hotend PCB.
|
||||
- [x] Finalize filament sensor config and merge into `master`.
|
||||
- [ ] Create topic in Discussion section detailing how users should keep this repository in sync with their own Klipper config using `git`.
|
||||
- [ ] Explain `PAUSE`/`RESUME` extruder behaviour.
|
||||
- [ ] Integrate KAMP (Klipper Adaptive Meshing and Purging).
|
||||
- [x] Add `BEEP` when filament needs changing/`M600`.
|
||||
|
||||
## Stay Up-to-Date
|
||||
|
||||
I work on this repository all the time and a lot of new features are coming. Watch releases of this repository to be notified for future updates:
|
||||
|
||||
<img src="./images/githubstar.gif" width="500" alt='Raspberry Pi'/>
|
||||
|
||||
# Preface
|
||||
|
||||
Although I've made switching over to Klipper as easy as is possible, it can still be a challenge for some, especially considering that most of you have likely never used GNU+Linux. Save yourself the fustration, and fully read all documentation found on this page. Also note that Klipper is not a *must*, and is not for everyone. You can stick with Marlin, and have a fine 3D printing experience.
|
||||
|
||||
# Installation Steps
|
||||
|
||||
## Before You Begin
|
||||
|
||||
- Know what you're getting into by reading this documentation *fully!*
|
||||
- It is assumed that you are connected to your host Raspberry Pi (or other host device) via SSH, and that your printer motherboard is connected to the host via USB.
|
||||
- Read this documentation *fully!*
|
||||
- Follow the steps in order.
|
||||
- If an error was reported at a step, do no proceed to the next step.
|
||||
- It is assumed that you are connected to your host Raspberry Pi (or other host device) via SSH, and that your printer motherboard is connected to the host via a data USB cable. Note that most of the micro USB cables that you find at home are *unlikely* to be data cables, and it's not possible to tell just by looking.
|
||||
- It is also assumed that the username on the host device is `pi`. If that is not the case, you will have to manually edit `moonraker.conf` and `cfgs/misc-macros.cfg` and change any mentions of `/home/pi` to `/home/yourUserName`.
|
||||
- Klipper *must* be installed on the host Raspberry Pi for everything to work. Easiest is to use a [FluiddPi](https://docs.fluidd.xyz/installation/fluiddpi#download) or [MainsailOS](https://github.com/mainsail-crew/mainsail/releases/latest) image.
|
||||
- It is assumed that there is one instance of Klipper installed. If you have multiple instances of Klipper installed, via `KIAUH` for example, then this guide is not for you. You can still use all the configs of course, but the steps in this guide will not work for you.
|
||||
- Klipper *must* be installed on the host Raspberry Pi for everything to work. Easiest is to use a [FluiddPi](https://docs.fluidd.xyz/installation/fluiddpi#download) or [MainsailOS](https://github.com/mainsail-crew/mainsail/releases/latest) image. [KIAUH](https://github.com/th33xitus/kiauh) is another excellent option, though it's not as simple as flashing MainsailOS on a microSD card, for example.
|
||||
- Robert Redford's performance in *Spy Game (2001)* was superb!
|
||||
- It is assumed that there is one instance of Klipper installed. If you have multiple instances of Klipper installed, via `KIAUH` for example, then this guide is not for you. You can still use all the configs of course, but the steps in this guide will likely not work for you.
|
||||
- Your question has probably been answered already, but if it hasn't, please post in the [Discussion](https://github.com/bassamanator/Sovol-SV06-firmware/discussions) section.
|
||||
- If you see any errors, or encounter any issues, please create an [Issue](https://github.com/bassamanator/Sovol-SV06-firmware/issues/new), or a [Pull request](https://github.com/bassamanator/Sovol-SV06-firmware/pulls).
|
||||
- I would recommend searching for the word `NOTE` in this repository. There are roughly half a dozen short points amongst the various files that you should be aware of if you're using this configuration.
|
||||
|
||||
## Flash Firmware
|
||||
@@ -56,6 +51,8 @@ I work on this repository all the time and a lot of new features are coming. Wat
|
||||
|
||||
💡 For the sake of simplicity, I will refer to the klipper firmware file as `klipper.bin` even though the actual filename is something along the lines of `klipper-v0.11.0-148-g52f4e20c.bin`.
|
||||
|
||||
💡 The firmware file is located in the `misc` folder.
|
||||
|
||||
### Prepare the microSD Card for Flashing
|
||||
|
||||
- Size: `8GB`. According to Sovol, the largest size that you can use is `16GB`.
|
||||
@@ -79,13 +76,13 @@ You may find this [video](https://youtu.be/p6l253OJa34) useful.
|
||||
|
||||
You can choose *either* of the 2 following methods.
|
||||
|
||||
### Clone the Repository
|
||||
### Method 1: Clone the Repository
|
||||
|
||||
1. `cd ~/printer_data/config`
|
||||
2. Empty entire `~/printer_data/config` folder. Unfortunately, for safety reasons I will not post this command here. However, in linux, you can delete files via `rm filename`.
|
||||
3. `git clone -b master --single-branch https://github.com/bassamanator/Sovol-SV06-firmware.git .`
|
||||
|
||||
### Download the ZIP
|
||||
### Method 2: Download the ZIP
|
||||
|
||||
1. [Download](https://github.com/bassamanator/Sovol-SV06-firmware/archive/refs/heads/master.zip) the `ZIP` file containing the Klipper configuration.
|
||||
2. The parent folder in the `ZIP` is `Sovol-SV06-firmware-master`. This is relevant in the next step.
|
||||
@@ -106,22 +103,26 @@ You can choose *either* of the 2 following methods.
|
||||
|
||||
💡 I recommend no filament be loaded for any of these steps.
|
||||
|
||||
1. Do a `G28`; home all.
|
||||
1. Check to see if `X` and `Y` max positions (`G1 X223 F3000`, `G1 Y223 F3000`) can be reached, and adjust `position_max`, if necessary. You can probably go all the way up to `225` for `X` and `Y` both, however, I would not recommend it.
|
||||
💡 Find explanations for gcode commands at [https://marlinfw.org/](https://marlinfw.org/) and [klipper.org](https://www.klipper3d.org/G-Codes.html).
|
||||
|
||||
1. `G28`
|
||||
1. Check to see if `X` and `Y` max positions (`G90`, `G1 X223 F3000`, `G1 Y223 F3000`) can be reached, and adjust `position_max`, if necessary. You can probably go all the way up to `225` for `X` and `Y` both, however, I would not recommend it.
|
||||
2. Do a `G34`; mechanical gantry calibration. After the controlled collision against the beam at the top, there will be a 10 second pause for you to verify that both sides of the gantry are pressed up agaisnt the `stoppers` at the top. You will hear a succession of beeps.
|
||||
1. Figure out your `Z` `position_max` by baby stepping your way up to the beam. The range is 250 to 261 from what I've seen, could be even higher for you. Adjust `position_max`, if necessary. I can go all the way to 258 over and over again, however, I would not print anything higher than 255 probably.
|
||||
1. Figure out your `Z` `position_max` by baby stepping your way up to the beam. The range is 250 to 261 from what I've seen, could be even higher for you. Adjust `position_max`, if necessary. I can go all the way to 258, however, I would not print anything higher than 257.
|
||||
3. Pid tune the bed, but first move the printhead to the center. Ideally, all Pid tuning should occur at the temperatures that you print most at.
|
||||
1. `G28`
|
||||
2. `G1 X111 Y111 Z40 F6000`
|
||||
3. `PID_CALIBRATE HEATER=heater_bed TARGET=70`
|
||||
4. `SAVE_CONFIG` (once completed)
|
||||
2. `G90`
|
||||
3. `G1 X111 Y111 Z40 F6000`
|
||||
4. `PID_CALIBRATE HEATER=heater_bed TARGET=70`
|
||||
5. `SAVE_CONFIG` (once completed)
|
||||
4. Pid tune the extruder while part cooling fan runs at 25%.
|
||||
1. `G28`
|
||||
2. `G1 X111 Y111 Z10 F6000`
|
||||
3. `M106 S64`
|
||||
4. `PID_CALIBRATE HEATER=extruder TARGET=245`
|
||||
5. `SAVE_CONFIG` (once completed)
|
||||
5. Adjust `z_offset`. Make sure your nozzle if very clean. Paper test [reference](https://www.klipper3d.org/Bed_Level.html?h=probe_calibrate#the-paper-test).
|
||||
2. `G90`
|
||||
3. `G1 X111 Y111 Z10 F6000`
|
||||
4. `M106 S64`
|
||||
5. `PID_CALIBRATE HEATER=extruder TARGET=245`
|
||||
6. `SAVE_CONFIG` (once completed)
|
||||
5. Adjust `z_offset`. Make sure your nozzle if very clean. Do the [Paper test](https://www.klipper3d.org/Bed_Level.html?h=probe_calibrate#the-paper-test).
|
||||
1. `SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET=60`
|
||||
2. `SET_HEATER_TEMPERATURE HEATER=extruder TARGET=180`
|
||||
3. Proceed to next steps after both temperatures have been reached.
|
||||
@@ -136,6 +137,14 @@ You can choose *either* of the 2 following methods.
|
||||
5. `BED_MESH_CALIBRATE`
|
||||
6. `SAVE_CONFIG` (once completed)
|
||||
|
||||
If you've made it here, then your printer has been Klipperized, and is ready to print!
|
||||
|
||||
But first, adjust your slicer.
|
||||
|
||||
## Adjust Your Slicer
|
||||
|
||||
You need to adjust the start and end gcode in your slicer. The relevant macros are `PRINT_START` and `PRINT_END`. Find instructions [here](https://ellis3dp.com/Print-Tuning-Guide/articles/passing_slicer_variables.html#slicer-start-g-code).
|
||||
|
||||
## Directory Structure
|
||||
|
||||
This repository contains many files and folders. Some are *necessary* for this Klipper configuration to work, others are not.
|
||||
|
||||
@@ -75,17 +75,34 @@ gcode:
|
||||
{% endif %}
|
||||
|
||||
[gcode_macro PURGE_LINE]
|
||||
# https://github.com/JoeCat1207/V0.1-Purge-line-SuperSlicer/blob/main/Purgeline.txt
|
||||
# https://github.com/VoronDesign/Voron-Switchwire/blob/200cdae033c59ef81f67c4235469da7ca66d53a1/Firmware/skr_mini_e3_v2_config.cfg
|
||||
gcode:
|
||||
{% set PRE_PURGE_PRIME_LENGTH=printer["gcode_macro _globals"].pre_purge_prime_length|default(1.40)|float %}
|
||||
ADJUST_FILAMENT_SENSOR_STATUS ENABLE=1
|
||||
G0 Y0 X0 F4000 ; go to tongue of print bed
|
||||
G1 Z0.4 F500.0 ; move bed to nozzle
|
||||
|
||||
# Get Boundaries
|
||||
{% set max_x = printer.configfile.config["stepper_x"]["position_max"]|float %}
|
||||
{% set max_y = printer.configfile.config["stepper_y"]["position_max"]|float %}
|
||||
{% set max_z = printer.configfile.config["stepper_z"]["position_max"]|float %}
|
||||
{% set extrudeAmount = 26.6 %}
|
||||
{% set movementLength = 100.0 %}
|
||||
{% set movementSpeed = 15 * 60 %}
|
||||
{% set xStart = 0.5 %}
|
||||
{% set yStart = 0.5 %}
|
||||
|
||||
# Set safe speeds
|
||||
{% set maxVelocity = printer.configfile.settings.printer.max_velocity|default(200)|int %}
|
||||
{% set maxVelocityAdjusted = (0.95 * maxVelocity * 60)|int %}
|
||||
|
||||
G92 E0.0 ; reset extruder
|
||||
G90 ; Absolute positioning
|
||||
G0 X{xStart} Y{yStart} F{maxVelocityAdjusted} ; move to purge position
|
||||
G1 Z0.4 F500.0 ; move to purge height
|
||||
M83 ; Relative extrusion mode
|
||||
G1 E{PRE_PURGE_PRIME_LENGTH} F500 ; pre-purge prime LENGTH SHOULD MATCH YOUR PRINT_END RETRACT
|
||||
G1 Y140 E35.0 F1200.0 ; intro line 1
|
||||
G1 X{xStart + movementLength} E{extrudeAmount} F{movementSpeed} ; intro line 1
|
||||
#G1 E-.5 F2100 # Retract
|
||||
G92 E0.0 ; reset extruder
|
||||
M82 ; Absolute extrusion mode
|
||||
G1 Z5.0 ; move nozzle to prevent scratch
|
||||
|
||||
[gcode_macro CANCEL_PRINT]
|
||||
@@ -104,19 +121,23 @@ gcode:
|
||||
{% set hotendtemp = params.HOTEND|int %}
|
||||
{% set chambertemp = params.CHAMBER|default(0)|int %}
|
||||
|
||||
# Set safe speeds
|
||||
{% set maxVelocity = printer.configfile.settings.printer.max_velocity|default(200)|int %}
|
||||
{% set maxVelocityAdjusted = (0.95 * maxVelocity * 60)|int %}
|
||||
|
||||
ADJUST_FILAMENT_SENSOR_STATUS ENABLE=1
|
||||
|
||||
G28 X Y
|
||||
# <insert your routines here>
|
||||
G90
|
||||
M140 S{bedtemp} ; set & don't wait for bed temp
|
||||
M104 S{hotendtemp} ; set & don't wait for hotend temp
|
||||
G28 X Y
|
||||
|
||||
M190 S{bedtemp} ; set & wait for bed temp
|
||||
# TEMPERATURE_WAIT SENSOR="temperature_sensor chamber" MINIMUM={chambertemp} ; wait for chamber temp
|
||||
# <insert your routines here>
|
||||
M109 S{hotendtemp} ; set & wait for hotend temp
|
||||
# <insert your routines here>
|
||||
M104 S{hotendtemp} ; set & don't wait for hotend temp
|
||||
G28 Z ; final z homing
|
||||
|
||||
G1 X0 Y0 F{maxVelocityAdjusted}
|
||||
M109 S{hotendtemp} ; set & wait for hotend temp
|
||||
|
||||
BED_MESH_PROFILE LOAD=default
|
||||
G1 Z20 F3000 ; move nozzle away from bed
|
||||
|
||||
@@ -125,11 +146,18 @@ gcode:
|
||||
ADJUST_FILAMENT_SENSOR_STATUS ENABLE=0
|
||||
CONDITIONAL_BEEP I=2 DUR=30 FREQ=8500 ; NOTE Comment out this line to stop the beeps at the end of a print
|
||||
{% set PRE_PURGE_PRIME_LENGTH=printer["gcode_macro _globals"].pre_purge_prime_length|default(1.40)|float %}
|
||||
|
||||
M400 ; wait for buffer to clear
|
||||
G92 E0 ; zero the extruder
|
||||
G1 E-{PRE_PURGE_PRIME_LENGTH} F400 ; retract filament
|
||||
G91 ; relative positioning
|
||||
|
||||
# Set safe speeds
|
||||
{% set zVelocity = printer.configfile.settings.printer.max_z_velocity|default(15)|int %}
|
||||
{% set maxVelocity = printer.configfile.settings.printer.max_velocity|default(200)|int %}
|
||||
{% set zVelocityAdjusted = (0.95 * zVelocity * 60)|int %}
|
||||
{% set maxVelocityAdjusted = (0.95 * maxVelocity * 60)|int %}
|
||||
|
||||
# Get Boundaries
|
||||
{% set max_x = printer.configfile.config["stepper_x"]["position_max"]|float %}
|
||||
{% set max_y = printer.configfile.config["stepper_y"]["position_max"]|float %}
|
||||
@@ -155,8 +183,8 @@ gcode:
|
||||
{% set z_safe = max_z - printer.toolhead.position.z %}
|
||||
{% endif %}
|
||||
|
||||
G0 Z{z_safe} F2000 ; move nozzle up
|
||||
G0 X{x_safe} Y{y_safe} F9000 ; move nozzle to remove stringing
|
||||
G0 Z{z_safe} F{zVelocityAdjusted} ; move nozzle up
|
||||
G0 X{x_safe} Y{y_safe} F{maxVelocityAdjusted} ; move nozzle to remove stringing
|
||||
TURN_OFF_HEATERS
|
||||
M107 ; turn off fan
|
||||
G90 ; absolute positioning
|
||||
|
||||
11
printer.cfg
11
printer.cfg
@@ -23,6 +23,7 @@ max_velocity: 200
|
||||
max_accel: 3000
|
||||
max_z_velocity: 15
|
||||
max_z_accel: 45
|
||||
square_corner_velocity: 8.0
|
||||
|
||||
#####################################################################
|
||||
# X/Y/Z Stepper Settings
|
||||
@@ -32,7 +33,7 @@ max_z_accel: 45
|
||||
step_pin: PC2
|
||||
dir_pin: !PB9
|
||||
enable_pin: !PC3
|
||||
microsteps: 64
|
||||
microsteps: 128
|
||||
rotation_distance: 40
|
||||
endstop_pin: tmc2209_stepper_x:virtual_endstop
|
||||
position_endstop: 0
|
||||
@@ -54,7 +55,7 @@ diag_pin: PA5
|
||||
step_pin: PB8
|
||||
dir_pin: PB7
|
||||
enable_pin: !PC3
|
||||
microsteps: 64
|
||||
microsteps: 128
|
||||
rotation_distance: 40
|
||||
endstop_pin: tmc2209_stepper_y:virtual_endstop
|
||||
position_endstop: 0
|
||||
@@ -76,7 +77,7 @@ diag_pin: PA6
|
||||
step_pin: PB6
|
||||
dir_pin: !PB5
|
||||
enable_pin: !PC3
|
||||
microsteps: 64
|
||||
microsteps: 128
|
||||
rotation_distance: 4
|
||||
endstop_pin: probe:z_virtual_endstop
|
||||
position_min: -4
|
||||
@@ -100,7 +101,7 @@ diag_pin: PA7
|
||||
step_pin: PB4
|
||||
dir_pin: !PB3
|
||||
enable_pin: !PC3
|
||||
microsteps: 64
|
||||
microsteps: 128
|
||||
rotation_distance: 4.65 # NOTE Calibrate e-steps and adjust https://www.klipper3d.org/Rotation_Distance.html
|
||||
nozzle_diameter: 0.400
|
||||
filament_diameter: 1.750
|
||||
@@ -224,6 +225,8 @@ switch_pin: !PA4 # "Pulled-high"
|
||||
pause_on_runout: True
|
||||
insert_gcode:
|
||||
M117 Insert Detected
|
||||
{ action_respond_info("Insert Detected") }
|
||||
runout_gcode:
|
||||
M117 Runout Detected
|
||||
{ action_respond_info("Runout Detected") }
|
||||
CONDITIONAL_BEEP i=3 dur=300 freq=400
|
||||
|
||||
Reference in New Issue
Block a user