From e52d799edf32b7a6533521092cf3e7e4ffe60192 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Thu, 16 Feb 2023 19:16:45 -0500 Subject: [PATCH 01/23] Adjusted README.md. Removed .md from .*ignore. --- .eslintignore | 2 +- .prettierignore | 2 +- README.md | 9 ++++++--- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/.eslintignore b/.eslintignore index 2e1fa2d..8f21e45 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1 +1 @@ -*.md \ No newline at end of file +# *.md \ No newline at end of file diff --git a/.prettierignore b/.prettierignore index 2e1fa2d..0c06336 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1 +1 @@ -*.md \ No newline at end of file +#*.md \ No newline at end of file diff --git a/README.md b/README.md index 17b9b0b..c24b233 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Sovol-SV06-firmware +# Sovol SV06 Klipper Firmware This repository contains firmware for the SV06 3D printer from Sovol. You should not use this firmware on any other printer. @@ -11,17 +11,20 @@ I am creating these files for my personal use and cannot be held responsible for # Highlights - Minimum configuration settings for Mainsail/Fluiddpi to work. -- Mechanical gantry calibration/`G34` macro. -- SuperSlicer config bundle that contains the printer configuration, as well as what are considered by many to be the best print settings available for an FDM printer. Find the differences between the different print setting profiles [here](https://github.com/AndrewEllis93/Ellis-SuperSlicer-Profiles/tree/master/SuperSlicer). +- SuperSlicer config bundle that contains the printer configuration, as well as what are considered by many to be the best print settings available for any FDM printer. Find the differences between the different print setting profiles [here](https://github.com/AndrewEllis93/Ellis-SuperSlicer-Profiles/tree/master/SuperSlicer). But basically, the 45 degree profile places the seam at the back. - Bed model and texture to use in SuperSlicer/PrusaSlicer. - Macros + - Mechanical gantry calibration/`G34` macro. - Misc macros: `PRINT_START`, `CANCEL_PRINT`, `PRINT_END`, `PAUSE`, `RESUME`. - Parking macros (parks the printhead at various locations): `PARKFRONT`, `PARKFRONTLOW`, `PARKREAR`, `PARKCENTER`, `PARKBED`. - Load/unload filament macros. - Purge line macro. To do: + - Get the Ellis `TEST_SPEED.cfg` working. +- Replace M109/M190 with TEMPERATURE_WAIT + # Installation Steps ๐Ÿ’ก **Requirement**: klipper must be installed on the host Raspberry Pi for everything to work after the flash. Easiest is to use a Fluiddpi or MailsailOS image. From ad2ecd6d963d30435b0fc5a9f09f634d77f21915 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Thu, 16 Feb 2023 21:54:32 -0500 Subject: [PATCH 02/23] Added link to my RP2040 instructions repo. --- cfgs/adxl-rp2040.cfg | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/cfgs/adxl-rp2040.cfg b/cfgs/adxl-rp2040.cfg index bf02a8e..5362615 100644 --- a/cfgs/adxl-rp2040.cfg +++ b/cfgs/adxl-rp2040.cfg @@ -1,22 +1,25 @@ ##################################################################### +# Find my instructions here: +# https://github.com/bassamanator/rp2040-zero-adxl345-klipper # ADXL345 related Settings # https://www.klipper3d.org/Measuring_Resonances.html#adxl345 ##################################################################### -[mcu rp2040] +[mcu RP2040] baud: 115200 # 250000 restart_method: command # Obtain definition by "ls -l /dev/serial/by-id/" serial: /dev/serial/by-id/usb-Klipper_rp2040_E66138935F154C28-if00 [adxl345] -spi_software_miso_pin: rp2040:gpio8 -cs_pin: rp2040:gpio9 -# spi_bus: spi0b -spi_software_sclk_pin: rp2040:gpio10 -spi_software_mosi_pin: rp2040:gpio11 -axes_map: x,y,z +cs_pin: RP2040:gpio1 +spi_bus: spi0a [resonance_tester] accel_chip: adxl345 -probe_points: 111.5, 111.5, 20 \ No newline at end of file +probe_points: 111.5, 111.5, 20 + +[gcode_macro ADX] +description: Shortcut to ACCELEROMETER_QUERY +gcode: + ACCELEROMETER_QUERY From c3d755b671b980b121db7386b764bcfbfc97884e Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Fri, 17 Feb 2023 23:55:53 -0500 Subject: [PATCH 03/23] Updated readme.md. --- README.md | 6 ++++++ cfgs/adxl-rp2040.cfg | 2 -- images/githubstar.gif | Bin 0 -> 94789 bytes 3 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 images/githubstar.gif diff --git a/README.md b/README.md index c24b233..5005f2a 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,12 @@ To do: - Get the Ellis `TEST_SPEED.cfg` working. - Replace M109/M190 with TEMPERATURE_WAIT +## 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: + +Raspberry Pi + # Installation Steps ๐Ÿ’ก **Requirement**: klipper must be installed on the host Raspberry Pi for everything to work after the flash. Easiest is to use a Fluiddpi or MailsailOS image. diff --git a/cfgs/adxl-rp2040.cfg b/cfgs/adxl-rp2040.cfg index 5362615..8e81ed3 100644 --- a/cfgs/adxl-rp2040.cfg +++ b/cfgs/adxl-rp2040.cfg @@ -1,8 +1,6 @@ ##################################################################### # Find my instructions here: # https://github.com/bassamanator/rp2040-zero-adxl345-klipper -# ADXL345 related Settings -# https://www.klipper3d.org/Measuring_Resonances.html#adxl345 ##################################################################### [mcu RP2040] diff --git a/images/githubstar.gif b/images/githubstar.gif new file mode 100644 index 0000000000000000000000000000000000000000..04d25d40202c0515d40a8fbfdee5536d10ec5a22 GIT binary patch literal 94789 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

?bOR$vt>8C=?p}_q;Xu}@qr8w0^}mh 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 JacPustpW9ttvCPx literal 0 HcmV?d00001 From 5fd3d77fc26bce0beaadcede7d198e94824dda3a Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Sun, 19 Feb 2023 02:30:08 -0500 Subject: [PATCH 04/23] Many changes to README. --- README.md | 27 +++++++++++++++++++-------- cfgs/macros.cfg | 2 +- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 5005f2a..0b12051 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,19 @@ -# Sovol SV06 Klipper Firmware +# ๐Ÿšจ *One-Stop-Shop* Sovol SV06 Klipper Configuration ๐ŸŽ๏ธ This repository contains firmware for the SV06 3D printer from Sovol. You should not use this firmware on any other printer. I am creating these files for my personal use and cannot be held responsible for what it might do to your printer. -โš ๏ธ The instructions found on this page apply only to the `master` branch. - โš ๏ธโšกโ˜ข๏ธ USE AT YOUR OWN RISK! YOU HAVE BEEN WARNED! โ˜ข๏ธโšกโš ๏ธ # Highlights +- ๐Ÿ’ฅ This Klipper configuration is an endpoint, meaning that it contains everything that you could possibly need in order to have an excellent Klipper experience! ๐Ÿ’ฅ - Minimum configuration settings for Mainsail/Fluiddpi to work. -- SuperSlicer config bundle that contains the printer configuration, as well as what are considered by many to be the best print settings available for any FDM printer. Find the differences between the different print setting profiles [here](https://github.com/AndrewEllis93/Ellis-SuperSlicer-Profiles/tree/master/SuperSlicer). But basically, the 45 degree profile places the seam at the back. +- SuperSlicer config bundle that contains the printer configuration, as well as what are considered by many to be the best print settings available for any FDM printer ([Ellis' SuperSlicer Profiles](https://github.com/AndrewEllis93/Ellis-SuperSlicer-Profiles)). Find the differences between the different print setting profiles [here](https://github.com/AndrewEllis93/Ellis-SuperSlicer-Profiles/tree/master/SuperSlicer). But basically, the 45 degree profile places the seam at the back. - Bed model and texture to use in SuperSlicer/PrusaSlicer. - Macros - - Mechanical gantry calibration/`G34` macro. + - Improved mechanical gantry calibration/`G34` macro that provides the user audio feedback, and time to verify the calibration. - Misc macros: `PRINT_START`, `CANCEL_PRINT`, `PRINT_END`, `PAUSE`, `RESUME`. - Parking macros (parks the printhead at various locations): `PARKFRONT`, `PARKFRONTLOW`, `PARKREAR`, `PARKCENTER`, `PARKBED`. - Load/unload filament macros. @@ -33,10 +32,14 @@ I work on this repository all the time and a lot of new features are coming. Wat # Installation Steps -๐Ÿ’ก **Requirement**: klipper must be installed on the host Raspberry Pi for everything to work after the flash. Easiest is to use a Fluiddpi or MailsailOS image. +## Before You Begin +- *Read these docs fully!* Your question has probably been answered already. 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 create a [Pull request](https://github.com/bassamanator/Sovol-SV06-firmware/pulls). ## Flash Firmware +๐Ÿ’ก *If you have already flashed klipper onto your motherboard in the past, you can skip this step* + 1. Copy `klipper.bin` to a MicroSD card and rename to `anyNewFilename.bin`. 2. Make sure the printer is off. 3. Insert MicroSD into printer. @@ -49,6 +52,8 @@ You may find this [video](https://youtu.be/p6l253OJa34) useful. ## Clone the Repository +๐Ÿ’ก **Requirement**: 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. + There are many ways to get started, the simplest being to clone this repo to the appropriate folder. 1. `cd ~/printer_data/config` @@ -61,7 +66,7 @@ There are many ways to get started, the simplest being to clone this repo to the โš ๏ธโšกโ˜ข๏ธ **Power off if there is a collision/problem** โ˜ข๏ธโšกโš ๏ธ -๐Ÿ’ก I would recommend searching for the word `NOTE` in this repository. There are about 6 short points amongst the various files that you should be aware of if you're using this `printer.cfg`. +๐Ÿ’ก I would recommend searching for the word `NOTE` in this repository. There are about 6 short points amongst the various files that you should be aware of if you're using this configuration. I recommend no filament be loaded for any of these steps. @@ -95,13 +100,19 @@ I recommend no filament be loaded for any of these steps. 5. `BED_MESH_CALIBRATE` 6. `SAVE_CONFIG` (once completed) +## Useful Resources + +- [Everything Sovol SV06](https://github.com/bassamanator/everything-sovol-sv06) +- [RP2040-Zero ADXL345 Connection Klipper](https://github.com/bassamanator/rp2040-zero-adxl345-klipper) +- [๐Ÿงจ Ellis' Print Tuning Guide ๐Ÿงจ](https://ellis3dp.com/Print-Tuning-Guide) + ## Sources - https://www.klipper3d.org - https://ellis3dp.com/Print-Tuning-Guide - https://github.com/strayr/strayr-k-macros - https://docs.vorondesign.com/build/software/miniE3_v20_klipper.html -- https://github.com/spinixguy/Sovol-SV06-firmware +- โญ https://github.com/spinixguy/Sovol-SV06-firmware - https://github.com/Pr20100/SOVOL-SV06-Klipper-profile - https://www.printables.com/model/378915-sovol-sv06-buildplate-texture-and-model-for-prusas - https://github.com/AndrewEllis93/Ellis-SuperSlicer-Profiles diff --git a/cfgs/macros.cfg b/cfgs/macros.cfg index a9211eb..7962d60 100644 --- a/cfgs/macros.cfg +++ b/cfgs/macros.cfg @@ -64,7 +64,7 @@ gcode: [gcode_macro PRINT_END] # Use PRINT_END for the slicer ending script - please customize for your slicer of choice gcode: - BEEP I=2 DUR=30 FREQ=8500 + 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 From 55c8b92809c52ba7714b79f9fda6e8b1d0e9b75a Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Sun, 19 Feb 2023 02:41:16 -0500 Subject: [PATCH 05/23] Changed heading in readme. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0b12051..c57f776 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# ๐Ÿšจ *One-Stop-Shop* Sovol SV06 Klipper Configuration ๐ŸŽ๏ธ +# ๐Ÿšจ *One-Stop-Shop* Sovol SV06 Klipper Configuration This repository contains firmware for the SV06 3D printer from Sovol. You should not use this firmware on any other printer. From 89c81460acf54b5102055a9dae962aacaf74e253 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Sun, 19 Feb 2023 02:47:08 -0500 Subject: [PATCH 06/23] Adjusted README.md. --- README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index c57f776..e9ebcf7 100644 --- a/README.md +++ b/README.md @@ -34,8 +34,11 @@ I work on this repository all the time and a lot of new features are coming. Wat ## Before You Begin -- *Read these docs fully!* Your question has probably been answered already. If it hasn't, please post in the [Discussion](https://github.com/bassamanator/Sovol-SV06-firmware/discussions) section. +- Know what you're getting into by reading this documentation *fully!* +- 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 create a [Pull request](https://github.com/bassamanator/Sovol-SV06-firmware/pulls). +- I would recommend searching for the word `NOTE` in this repository. There are about 6 short points amongst the various files that you should be aware of if you're using this configuration. + ## Flash Firmware ๐Ÿ’ก *If you have already flashed klipper onto your motherboard in the past, you can skip this step* @@ -66,9 +69,7 @@ There are many ways to get started, the simplest being to clone this repo to the โš ๏ธโšกโ˜ข๏ธ **Power off if there is a collision/problem** โ˜ข๏ธโšกโš ๏ธ -๐Ÿ’ก I would recommend searching for the word `NOTE` in this repository. There are about 6 short points amongst the various files that you should be aware of if you're using this configuration. - -I recommend no filament be loaded for any of these steps. +๐Ÿ’ก 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. From d76bf9eab26a7969adb5b4f59dfb79c930506195 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Sun, 19 Feb 2023 18:05:33 -0500 Subject: [PATCH 07/23] Adjusted README.md. --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index e9ebcf7..d65a977 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ I am creating these files for my personal use and cannot be held responsible for - SuperSlicer config bundle that contains the printer configuration, as well as what are considered by many to be the best print settings available for any FDM printer ([Ellis' SuperSlicer Profiles](https://github.com/AndrewEllis93/Ellis-SuperSlicer-Profiles)). Find the differences between the different print setting profiles [here](https://github.com/AndrewEllis93/Ellis-SuperSlicer-Profiles/tree/master/SuperSlicer). But basically, the 45 degree profile places the seam at the back. - Bed model and texture to use in SuperSlicer/PrusaSlicer. - Macros - - Improved mechanical gantry calibration/`G34` macro that provides the user audio feedback, and time to verify the calibration. + - Improved mechanical gantry calibration/`G34` macro that provides the user audio feedback, and time to check the calibration. - Misc macros: `PRINT_START`, `CANCEL_PRINT`, `PRINT_END`, `PAUSE`, `RESUME`. - Parking macros (parks the printhead at various locations): `PARKFRONT`, `PARKFRONTLOW`, `PARKREAR`, `PARKCENTER`, `PARKBED`. - Load/unload filament macros. @@ -21,8 +21,8 @@ I am creating these files for my personal use and cannot be held responsible for To do: -- Get the Ellis `TEST_SPEED.cfg` working. -- Replace M109/M190 with TEMPERATURE_WAIT +- [ ] Replace M109/M190 with `TEMPERATURE_WAIT`. +- [ ] Get the Ellis `TEST_SPEED` macro working. ## Stay Up-to-Date From 0001556dee4eb97ecd1b9843dd6540097fbc2f7c Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Sun, 19 Feb 2023 20:53:32 -0500 Subject: [PATCH 08/23] Adjusted highlights. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d65a977..2521b59 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ I am creating these files for my personal use and cannot be held responsible for - SuperSlicer config bundle that contains the printer configuration, as well as what are considered by many to be the best print settings available for any FDM printer ([Ellis' SuperSlicer Profiles](https://github.com/AndrewEllis93/Ellis-SuperSlicer-Profiles)). Find the differences between the different print setting profiles [here](https://github.com/AndrewEllis93/Ellis-SuperSlicer-Profiles/tree/master/SuperSlicer). But basically, the 45 degree profile places the seam at the back. - Bed model and texture to use in SuperSlicer/PrusaSlicer. - Macros - - Improved mechanical gantry calibration/`G34` macro that provides the user audio feedback, and time to check the calibration. + - **Improved** mechanical gantry calibration/`G34` macro that provides the user audio feedback, and time to check the calibration. - Misc macros: `PRINT_START`, `CANCEL_PRINT`, `PRINT_END`, `PAUSE`, `RESUME`. - Parking macros (parks the printhead at various locations): `PARKFRONT`, `PARKFRONTLOW`, `PARKREAR`, `PARKCENTER`, `PARKBED`. - Load/unload filament macros. From f0ef2d1a176ce7ac8a085ad210c5ccc8dac92a44 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Wed, 22 Feb 2023 01:03:52 -0500 Subject: [PATCH 09/23] Added donation link. --- README.md | 6 ++++++ misc/cup-border.png | Bin 0 -> 7958 bytes misc/logo_white_stroke.png | Bin 0 -> 12878 bytes 3 files changed, 6 insertions(+) create mode 100644 misc/cup-border.png create mode 100644 misc/logo_white_stroke.png diff --git a/README.md b/README.md index 2521b59..d1eb326 100644 --- a/README.md +++ b/README.md @@ -101,6 +101,10 @@ There are many ways to get started, the simplest being to clone this repo to the 5. `BED_MESH_CALIBRATE` 6. `SAVE_CONFIG` (once completed) +## Ko-fi Support Me Ko-fi + +If you found my work useful, please consider buying me a [Ko-fi](https://ko-fi.com/bassamanator). + ## Useful Resources - [Everything Sovol SV06](https://github.com/bassamanator/everything-sovol-sv06) @@ -117,3 +121,5 @@ There are many ways to get started, the simplest being to clone this repo to the - https://github.com/Pr20100/SOVOL-SV06-Klipper-profile - https://www.printables.com/model/378915-sovol-sv06-buildplate-texture-and-model-for-prusas - https://github.com/AndrewEllis93/Ellis-SuperSlicer-Profiles + +[![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/H2H0HIHTH) \ No newline at end of file diff --git a/misc/cup-border.png b/misc/cup-border.png new file mode 100644 index 0000000000000000000000000000000000000000..2b6d55e78aadd8e36c5f02e16375091e5f9226a7 GIT binary patch literal 7958 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 ZOC5_!IOF>`NQG^{T^$2$oTh#B{{b9&x7Gjv literal 0 HcmV?d00001 diff --git a/misc/logo_white_stroke.png b/misc/logo_white_stroke.png new file mode 100644 index 0000000000000000000000000000000000000000..14d8ab9b939f72f5b7fc47c30a9a20890764f83c GIT binary patch literal 12878 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 literal 0 HcmV?d00001 From a9eab9906ec9a8c45405f25909412421e2767003 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Wed, 22 Feb 2023 01:12:03 -0500 Subject: [PATCH 10/23] Added funding.yml. --- .github/FUNDING.yml | 1 + 1 file changed, 1 insertion(+) create mode 100644 .github/FUNDING.yml diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..93ff5f5 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +ko_fi: bassamanator From 2ade28b750c684f95a1ce0ab38c57899f7c770e4 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Fri, 24 Feb 2023 15:44:46 -0500 Subject: [PATCH 11/23] Set x, y, z microsteps to 64 to reduce whine. --- printer.cfg | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/printer.cfg b/printer.cfg index c838eeb..0175120 100644 --- a/printer.cfg +++ b/printer.cfg @@ -33,7 +33,7 @@ max_z_accel: 45 step_pin: PC2 dir_pin: !PB9 enable_pin: !PC3 -microsteps: 32 +microsteps: 64 rotation_distance: 40 endstop_pin: tmc2209_stepper_x:virtual_endstop position_endstop: 0 @@ -55,7 +55,7 @@ diag_pin: PA5 step_pin: PB8 dir_pin: PB7 enable_pin: !PC3 -microsteps: 32 +microsteps: 64 rotation_distance: 40 endstop_pin: tmc2209_stepper_y:virtual_endstop position_endstop: 0 @@ -77,7 +77,7 @@ diag_pin: PA6 step_pin: PB6 dir_pin: !PB5 enable_pin: !PC3 -microsteps: 32 +microsteps: 64 rotation_distance: 4 endstop_pin: probe:z_virtual_endstop position_min: -4 From 54d796789c5535f97779c2c28e23d4e1a44f40f0 Mon Sep 17 00:00:00 2001 From: Bassam Husain <61985779+bassamanator@users.noreply.github.com> Date: Mon, 27 Feb 2023 07:51:40 -0500 Subject: [PATCH 12/23] Updated to do list: directory structure. Updated to-do list: information about dir structure needs to be added to README --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d1eb326..ffd630d 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,7 @@ To do: - [ ] Replace M109/M190 with `TEMPERATURE_WAIT`. - [ ] Get the Ellis `TEST_SPEED` macro working. +- [ ] Add information about directory structure. ## Stay Up-to-Date @@ -122,4 +123,4 @@ If you found my work useful, please consider buying me a [ Date: Mon, 27 Feb 2023 21:35:51 -0500 Subject: [PATCH 15/23] Deleted unnecessary files. NOTE: users need not pull these changes. --- .eslintignore | 1 - .gitignore | 1 - .prettierignore | 1 - klipper-printer-sovol-sv06.cfg | 224 --------------------------------- 4 files changed, 227 deletions(-) delete mode 100644 .eslintignore delete mode 100644 .prettierignore delete mode 100644 klipper-printer-sovol-sv06.cfg diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 8f21e45..0000000 --- a/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -# *.md \ No newline at end of file diff --git a/.gitignore b/.gitignore index dc8d21e..a46f989 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,2 @@ -macros/mainsail.cfg printer-*_*.cfg .moonraker.conf.bkp diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index 0c06336..0000000 --- a/.prettierignore +++ /dev/null @@ -1 +0,0 @@ -#*.md \ No newline at end of file diff --git a/klipper-printer-sovol-sv06.cfg b/klipper-printer-sovol-sv06.cfg deleted file mode 100644 index 8c55065..0000000 --- a/klipper-printer-sovol-sv06.cfg +++ /dev/null @@ -1,224 +0,0 @@ -# This file contains pin mappings for the stock Sovol SV06 -# To use this config, during "make menuconfig" select the -# STM32F103 with a "28KiB bootloader" and serial (on USART1 PA10/PA9) communication. -# Also, since it is using the GD32F103, please select Disable SWD at startup - -# Flash this firmware by copying "out/klipper.bin" to a SD card and -# turning on the printer with the card inserted. The firmware -# filename must end in ".bin" and must not match the last filename -# that was flashed. - -# See docs/Config_Reference.md for a description of parameters. - -[include ./macros/macros.cfg] -[include ./macros/TEST_SPEED.cfg] -[include ./macros/PARKING.cfg] -[include ./macros/MECHANICAL_GANTRY_CALIBRATION.cfg] -# Uncomment the following line if you're using an adxl345, and have it setup -# [include ./adxl-rp2040.cfg] - -[mcu] -# Obtain definition by "ls -l /dev/serial/by-id/" -serial: /dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0 -restart_method: command - -[printer] -kinematics: cartesian -max_velocity: 300 -max_accel: 3000 -max_accel_to_decel: 1500 -max_z_velocity: 5 -max_z_accel: 100 -# square_corner_velocity: 6.0 - -##################################################################### -# X/Y Stepper Settings -##################################################################### - -[stepper_x] -step_pin: PC2 -dir_pin: !PB9 -enable_pin: !PC3 -microsteps: 16 -rotation_distance: 40 -endstop_pin: tmc2209_stepper_x:virtual_endstop -position_endstop: 0 -position_max: 225 -homing_speed: 40 -homing_retract_dist: 0 - -[tmc2209 stepper_x] -uart_pin: PC1 -run_current: 0.860 -stealthchop_threshold: 0 -interpolate: False -sense_resistor: 0.150 -uart_address: 3 -driver_SGTHRS: 81 -diag_pin: PA5 - -[stepper_y] -step_pin: PB8 -dir_pin: PB7 -enable_pin: !PC3 -microsteps: 16 -rotation_distance: 40 -endstop_pin: tmc2209_stepper_y:virtual_endstop -position_endstop: 0 -position_max: 225 -homing_speed: 40 -homing_retract_dist: 0 - -[tmc2209 stepper_y] -uart_pin: PC0 -run_current: 0.900 -stealthchop_threshold: 0 -interpolate: False -sense_resistor: 0.150 -uart_address: 3 -driver_SGTHRS: 82 -diag_pin: PA6 - -##################################################################### -# Z Stepper Settings -##################################################################### - -[stepper_z] -step_pin: PB6 -dir_pin: !PB5 -enable_pin: !PC3 -microsteps: 16 -rotation_distance: 4 -endstop_pin: probe:z_virtual_endstop -position_min: -4 -position_max: 261 -homing_speed: 4 - -[tmc2209 stepper_z] -uart_pin: PA15 -run_current: 1.000 -stealthchop_threshold: 0 -interpolate: False -sense_resistor: 0.150 -uart_address: 3 -diag_pin: PA7 - -##################################################################### -# Extruder -##################################################################### - -[extruder] -step_pin: PB4 -dir_pin: !PB3 -enable_pin: !PC3 -microsteps: 16 -rotation_distance: 4.56 -nozzle_diameter: 0.400 -filament_diameter: 1.750 -heater_pin: PA1 -sensor_type: sovol_thermistor -sensor_pin: PC5 -min_temp: 0 -max_temp: 270 -min_extrude_temp: 190 -max_extrude_only_distance: 150.0 - -[tmc2209 extruder] -uart_pin: PC14 -run_current: 0.550 -stealthchop_threshold: 0 -interpolate: False -sense_resistor: 0.150 -uart_address: 3 - -##################################################################### -# Probe Related -##################################################################### - -[probe] -pin: PB1 -x_offset: 27 -y_offset: -20 -z_offset: 0 -speed: 7 -samples: 3 -samples_tolerance: 0.01 -samples_tolerance_retries: 10 - -[safe_z_home] -home_xy_position: 83,90 -speed: 60.0 -z_hop: 10 -z_hop_speed: 5 - -[bed_mesh] -speed: 120 -mesh_min: 30, 23 -mesh_max: 214, 214 -probe_count: 25 -algorithm: bicubic -fade_start: 1 -fade_end: 10 -fade_target: 0 - -##################################################################### -# Misc -##################################################################### - -# [input_shaper] -# shaper_freq_x: 46.948 -# shaper_type_x: mzv -# shaper_freq_y: 52.493 -# shaper_type_y: mzv -# shaper_type: ei - -[virtual_sdcard] -path: /home/pi/printer_data/gcodes - -[temperature_sensor mcu_temp] -sensor_type: temperature_mcu -min_temp: 25 -max_temp: 80 - -[temperature_sensor raspberry_pi] -sensor_type: temperature_host -min_temp: 25 -max_temp: 80 - -[thermistor sovol_thermistor] -temperature1: 25 -resistance1: 94162 -beta: 4160 - -[heater_bed] -heater_pin: PA2 -sensor_type: EPCOS 100K B57560G104F -sensor_pin: PC4 -min_temp: 0 -max_temp: 110 - -[fan] -pin: PA0 - -[display] -lcd_type: st7920 -cs_pin: PB12 -sclk_pin: PB13 -sid_pin: PB15 -encoder_pins: ^PB14, ^PB10 -click_pin: ^!PB2 - -#*# <---------------------- SAVE_CONFIG ----------------------> -#*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated. -#*# -#*# [extruder] -#*# control = pid -#*# pid_kp = 21.047 -#*# pid_ki = 1.477 -#*# pid_kd = 74.981 -#*# -#*# [heater_bed] -#*# control = pid -#*# pid_kp = 71.224 -#*# pid_ki = 1.341 -#*# pid_kd = 945.503 From 119c3134340b282f80eae007ae9328ad4dcd2d81 Mon Sep 17 00:00:00 2001 From: bassamanator Date: Mon, 27 Feb 2023 21:43:44 -0500 Subject: [PATCH 16/23] NOTE: users SHOULD pull in these changes. Removed test_speed.cfg import; macro is not ready for use. --- cfgs/TEST_SPEED.cfg | 1 + printer.cfg | 6 +----- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/cfgs/TEST_SPEED.cfg b/cfgs/TEST_SPEED.cfg index 25d8256..bfda9e2 100644 --- a/cfgs/TEST_SPEED.cfg +++ b/cfgs/TEST_SPEED.cfg @@ -1,3 +1,4 @@ +# NOTE This macro is not ready for use. โ˜ ๏ธโ˜ ๏ธโ˜ ๏ธ # Home, get position, throw around toolhead, home again. # If MCU stepper positions (first line in GET_POSITION) are greater than a full step different (your number of microsteps), then skipping occured. # We only measure to a full step to accomodate for endstop variance. diff --git a/printer.cfg b/printer.cfg index 0175120..3a0387a 100644 --- a/printer.cfg +++ b/printer.cfg @@ -1,14 +1,10 @@ # This file contains pin mappings for the stock Sovol SV06. # -# Using the wrong firmware, or wrong configuration, has the potential to destroy -# your 3D printer. -# -# โš ๏ธโšกโ˜ข๏ธ USE AT YOUR OWN RISK! YOU HAVE BEEN WARNED! โ˜ข๏ธโšกโš ๏ธ +# Find installation instructions at https://github.com/bassamanator/Sovol-SV06-firmware # # See https://www.klipper3d.org/Config_Reference.html for configuration reference. [include ./cfgs/macros.cfg] -[include ./cfgs/TEST_SPEED.cfg] [include ./cfgs/PARKING.cfg] [include ./cfgs/MECHANICAL_GANTRY_CALIBRATION.cfg] [include ./cfgs/beeper.cfg] From c02a3bc5cb7138c81f491cec95cf24abf80e5898 Mon Sep 17 00:00:00 2001 From: bassamanator Date: Mon, 27 Feb 2023 22:10:59 -0500 Subject: [PATCH 17/23] Added directory structure information. --- .vscode/settings.json | 4 +++- README.md | 33 ++++++++++++++++++++++++++++++++- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 86b593b..06c7957 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,5 +2,7 @@ "editor.tabSize": 4, "editor.insertSpaces": true, "editor.detectIndentation": false, - "git.mergeEditor": false + "git.mergeEditor": false, + "spellright.language": ["en-US-10-1."], + "spellright.documentTypes": ["markdown", "latex", "plaintext"] } diff --git a/README.md b/README.md index 86ae262..99937e0 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ To do: - [ ] Replace M109/M190 with `TEMPERATURE_WAIT`. - [ ] Get the Ellis `TEST_SPEED` macro working. -- [ ] Add information about directory structure. +- [x] Add information about directory structure. - [ ] Create FAQ section. - [ ] Finalize filament sensor config and merge into `master`. @@ -118,6 +118,37 @@ You can choose *either* of the 2 following methods. 5. `BED_MESH_CALIBRATE` 6. `SAVE_CONFIG` (once completed) +## Directory Structure + +This repository contains many files and folders. Some are *necessary* for this Klipper configuration to work, others are not. +- **Necessary** items are marked with a โœ…. +- Items that can *optionally* be deleted are marked with a โŒ. + +``` +โ”œโ”€โ”€ cfgs โœ… +โ”‚ย ย  โ”œโ”€โ”€ adxl-direct.cfg +โ”‚ย ย  โ”œโ”€โ”€ adxl-rp2040.cfg +โ”‚ย ย  โ”œโ”€โ”€ beeper.cfg +โ”‚ย ย  โ”œโ”€โ”€ macros.cfg +โ”‚ย ย  โ”œโ”€โ”€ MECHANICAL_GANTRY_CALIBRATION.cfg +โ”‚ย ย  โ”œโ”€โ”€ PARKING.cfg +โ”‚ย ย  โ””โ”€โ”€ TEST_SPEED.cfg [โ˜ ๏ธNot ready for useโ˜ ๏ธ] +โ”œโ”€โ”€ images โŒ +โ”‚ย ย  โ””โ”€โ”€ githubstar.gif +โ”œโ”€โ”€ misc โŒ +โ”‚ย ย  โ”œโ”€โ”€ cup-border.png +โ”‚ย ย  โ”œโ”€โ”€ klipper.bin +โ”‚ย ย  โ”œโ”€โ”€ logo_white_stroke.png +โ”‚ย ย  โ”œโ”€โ”€ M503-output.yml +โ”‚ย ย  โ”œโ”€โ”€ SuperSlicer_config_bundle.ini +โ”‚ย ย  โ”œโ”€โ”€ sv06-buildPlate.png +โ”‚ย ย  โ”œโ”€โ”€ SV06-buildPlate.stl +โ”‚ย ย  โ””โ”€โ”€ SV06-texture.svg +โ”œโ”€โ”€ moonraker.conf โœ… +โ”œโ”€โ”€ printer.cfg โœ… +โ””โ”€โ”€ README.md โŒ +``` + ## Ko-fi Support Me Ko-fi If you found my work useful, please consider buying me a [Ko-fi](https://ko-fi.com/bassamanator). From 80f1b4ad931c1f837ae2cc33000311d28a615863 Mon Sep 17 00:00:00 2001 From: bassamanator Date: Mon, 27 Feb 2023 22:20:46 -0500 Subject: [PATCH 18/23] Updated Before You Begin section. --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 99937e0..d5d4958 100644 --- a/README.md +++ b/README.md @@ -37,10 +37,11 @@ I work on this repository all the time and a lot of new features are coming. Wat ## Before You Begin -- 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. - Know what you're getting into by reading this documentation *fully!* +- There is an assumption that you are connected to your host Raspberry Pi via SSH, and that your printer motherboard is connected to the host via USB. +- 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. - 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 create a [Pull request](https://github.com/bassamanator/Sovol-SV06-firmware/pulls). +- 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 From 46066d1fe0325287c14eb5ad83b37236c2a24761 Mon Sep 17 00:00:00 2001 From: Bassam Husain <61985779+bassamanator@users.noreply.github.com> Date: Thu, 2 Mar 2023 10:39:42 -0500 Subject: [PATCH 19/23] Added another to-do item. NOTE: users need no pull these changes. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index d5d4958..5851b0a 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,7 @@ To do: - [x] Add information about directory structure. - [ ] Create FAQ section. - [ ] Finalize filament sensor config and merge into `master`. +- [ ] Create topic in Discussion section detailing how users should keep track of their own Klipper config using `git`. ## Stay Up-to-Date From 9263f3a912658a7474e7f866ee87bd41fe778e1c Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Wed, 8 Mar 2023 03:05:33 -0500 Subject: [PATCH 20/23] Implemented TEMPERATURE_WAIT in macros. NOTE: users should pull these changes. --- README.md | 9 +++++---- cfgs/macros.cfg | 22 ++++++++++++++++++++++ 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 5851b0a..70a8bc6 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # ๐Ÿšจ *One-Stop-Shop* Sovol SV06 Klipper Configuration -This repository contains the Klipper configuration and firmware for the Sovol SV06 3D printer. +This repository contains the Klipper configuration and firmware for the Sovol SV06 3D printer with completely *stock hardware*. I am creating these files for my personal use and cannot be held responsible for what it might do to your printer. @@ -19,14 +19,15 @@ I am creating these files for my personal use and cannot be held responsible for - Load/unload filament macros. - Purge line macro. -To do: +## To do: -- [ ] Replace M109/M190 with `TEMPERATURE_WAIT`. +- [x] Replace M109/M190 with `TEMPERATURE_WAIT`. - [ ] Get the Ellis `TEST_SPEED` macro working. - [x] Add information about directory structure. - [ ] Create FAQ section. +- [x] Get filament sensor working with hotend PCB. - [ ] Finalize filament sensor config and merge into `master`. -- [ ] Create topic in Discussion section detailing how users should keep track of their own Klipper config using `git`. +- [ ] Create topic in Discussion section detailing how users should keep this repository in sync with their own Klipper config using `git`. ## Stay Up-to-Date diff --git a/cfgs/macros.cfg b/cfgs/macros.cfg index 7962d60..f762c09 100644 --- a/cfgs/macros.cfg +++ b/cfgs/macros.cfg @@ -13,6 +13,28 @@ gcode: {action_raise_error('Pre purge prime length not found')} {% endif %} +[gcode_macro M109] +rename_existing: M99109 +gcode: + #Parameters + {% set s = params.S|float %} + + M104 {% for p in params %}{'%s%s' % (p, params[p])}{% endfor %} ; Set hotend temp + {% if s != 0 %} + TEMPERATURE_WAIT SENSOR=extruder MINIMUM={s} MAXIMUM={s+1} ; Wait for hotend temp (within 1 degree) + {% endif %} + +[gcode_macro M190] +rename_existing: M99190 +gcode: + #Parameters + {% set s = params.S|float %} + + M140 {% for p in params %}{'%s%s' % (p, params[p])}{% endfor %} ; Set bed temp + {% if s != 0 %} + TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM={s} MAXIMUM={s+1} ; Wait for bed temp (within 1 degree) + {% 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 From de56c25dcadd12220e2273c8e62dfa2b784d872a Mon Sep 17 00:00:00 2001 From: Marcelo Bello Date: Thu, 9 Mar 2023 11:02:15 -0300 Subject: [PATCH 21/23] Change git clone style to use https / avoid permission error On a fresh raspberrypi, users may find it easier to just do: git clone -b master --single-branch https://github.com/bassamanator/Sovol-SV06-firmware.git . --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 70a8bc6..f95c532 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,7 @@ You can choose *either* of the 2 following methods. 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 git@github.com:bassamanator/Sovol-SV06-firmware.git .` +3. `git clone -b master --single-branch https://github.com/bassamanator/Sovol-SV06-firmware.git .` ### Download the ZIP From 6492c67e31a70fe5a592c6f90881c3506b35db20 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Fri, 10 Mar 2023 04:46:19 -0500 Subject: [PATCH 22/23] Renamed macros.cfg to misc-macros.cfg. --- cfgs/{macros.cfg => misc-macros.cfg} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename cfgs/{macros.cfg => misc-macros.cfg} (100%) diff --git a/cfgs/macros.cfg b/cfgs/misc-macros.cfg similarity index 100% rename from cfgs/macros.cfg rename to cfgs/misc-macros.cfg From 6c63082072383cbb21c507c143ae6b00bf965096 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Fri, 10 Mar 2023 04:52:04 -0500 Subject: [PATCH 23/23] Moved many sections from printer.cfg to misc-macros.cfg. --- cfgs/misc-macros.cfg | 13 +++++++++++++ printer.cfg | 23 +++-------------------- 2 files changed, 16 insertions(+), 20 deletions(-) diff --git a/cfgs/misc-macros.cfg b/cfgs/misc-macros.cfg index f762c09..643707d 100644 --- a/cfgs/misc-macros.cfg +++ b/cfgs/misc-macros.cfg @@ -1,3 +1,16 @@ +[force_move] +enable_force_move: True + +[temperature_sensor raspberry_pi] +sensor_type: temperature_host + +[virtual_sdcard] +path: /home/pi/printer_data/gcodes + +# NOTE Cancel objects feature is enabled. If you're using a low powered device, comment out [exclude_object]. +# Also see [file_manager] section in moonraker.conf. +[exclude_object] + [pause_resume] [display_status] diff --git a/printer.cfg b/printer.cfg index 3a0387a..e7d0049 100644 --- a/printer.cfg +++ b/printer.cfg @@ -4,7 +4,7 @@ # # See https://www.klipper3d.org/Config_Reference.html for configuration reference. -[include ./cfgs/macros.cfg] +[include ./cfgs/misc-macros.cfg] [include ./cfgs/PARKING.cfg] [include ./cfgs/MECHANICAL_GANTRY_CALIBRATION.cfg] [include ./cfgs/beeper.cfg] @@ -128,9 +128,6 @@ pid_kd: 1343.571 min_temp: 0 max_temp: 110 -[fan] -pin: PA0 - [probe] pin: PB1 x_offset: 27 @@ -157,12 +154,6 @@ fade_start: 1 fade_end: 10 fade_target: 0 -[virtual_sdcard] -path: /home/pi/printer_data/gcodes - -[temperature_sensor raspberry_pi] -sensor_type: temperature_host - [display] lcd_type: st7920 cs_pin: PB12 @@ -196,13 +187,5 @@ speed: 50 horizontal_move_z: 10 screw_thread: CCW-M4 -# NOTE this is the pin for the filament switch, if you have one -# [filament_switch_sensor fil_sensor] -# switch_pin: PA4 # "Pulled-high" - -# NOTE Cancel objects feature is enabled. If you're using a low powered device, comment out [exclude_object]. -# Also see [file_manager] section in moonraker.conf. -[exclude_object] - -[force_move] -enable_force_move: True \ No newline at end of file +[fan] +pin: PA0