Compare commits
39 Commits
2275a7d2c1
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
515b423237 | ||
|
|
869bbffeb9 | ||
|
|
9e3ba15aee | ||
|
|
7d9cb1d8fb | ||
|
|
5267b5db80 | ||
|
|
f704ca26aa | ||
|
|
100308b81e | ||
|
|
720ad095f0 | ||
|
|
21ab5937be | ||
|
|
17f4c3a21e | ||
|
|
54195307bf | ||
|
|
75d7f241ba | ||
|
|
b622ca4663 | ||
|
|
e1bc37e009 | ||
|
|
e712f7b8a1 | ||
|
|
e00ff1d311 | ||
|
|
b02417e067 | ||
|
|
28a8d8a946 | ||
|
|
89904dc356 | ||
|
|
9b025cde73 | ||
|
|
a414f1a1c3 | ||
|
|
cf931af5cb | ||
|
|
bb4dd6a403 | ||
|
|
f29a29fc84 | ||
|
|
8c3d4a7dd8 | ||
|
|
e8436ad0c1 | ||
|
|
7dba6deed6 | ||
|
|
f174110561 | ||
|
|
6b156cb9ae | ||
|
|
116f6c9aa4 | ||
|
|
efdfd86954 | ||
|
|
34a57ff393 | ||
|
|
acb6549a08 | ||
|
|
4e3fc98cc7 | ||
|
|
c602f18e98 | ||
|
|
f27b569d0c | ||
|
|
d5e46edc5e | ||
|
|
2788b2f03a | ||
|
|
46b946983b |
1
.gitignore
vendored
@@ -1,7 +1,6 @@
|
||||
printer-*_*.cfg
|
||||
.moonraker.conf.bkp
|
||||
.directory
|
||||
moonraker.conf.backup
|
||||
.venv
|
||||
__pycache__
|
||||
crowsnest.conf.*
|
||||
|
||||
23
.vscode/settings.json
vendored
@@ -1,7 +1,5 @@
|
||||
{
|
||||
"editor.tabSize": 4,
|
||||
// "editor.formatOnSave": false,
|
||||
// "editor.defaultFormatter": null,
|
||||
"editor.insertSpaces": true,
|
||||
"editor.detectIndentation": false,
|
||||
"git.mergeEditor": false,
|
||||
@@ -20,20 +18,27 @@
|
||||
"Klipper",
|
||||
"Klipperized",
|
||||
"lrwxrwxrwx",
|
||||
"microsteps",
|
||||
"moonraker",
|
||||
"normalsize",
|
||||
"octahedroflake",
|
||||
"osskc",
|
||||
"Painis",
|
||||
"PARKBED",
|
||||
"PARKCENTER",
|
||||
"PARKFRONT",
|
||||
"PARKFRONTLOW",
|
||||
"PARKREAR",
|
||||
"pico",
|
||||
"Printables",
|
||||
"Prusa",
|
||||
"reformats",
|
||||
"runout",
|
||||
"scriptsize",
|
||||
"Sovol",
|
||||
"superslicer",
|
||||
"textcolor",
|
||||
"textit",
|
||||
"texttt"
|
||||
],
|
||||
"[markdown]": {
|
||||
@@ -62,4 +67,18 @@
|
||||
"titleBar.inactiveForeground": "#e7e7e799"
|
||||
},
|
||||
"peacock.color": "#512e0a"
|
||||
// "[html][jinja][jinja-html]": {
|
||||
// "editor.formatOnSave": false,
|
||||
// "editor.defaultFormatter": "monosans.djlint",
|
||||
// "editor.detectIndentation": true,
|
||||
// "editor.linkedEditing": true,
|
||||
// "editor.tabSize": 4,
|
||||
|
||||
// "djlint.enableLinting": true,
|
||||
// "djlint.profile": "jinja"
|
||||
// },
|
||||
// "djlint.showInstallError": true,
|
||||
// "djlint.useVenv": false,
|
||||
// "djlint.pythonPath": "/home/bassam/.local/share/uv/tools",
|
||||
// "djlint.formatLanguages": ["django-html", "jinja", "jinja-html"]
|
||||
}
|
||||
|
||||
483
README.md
@@ -1,20 +1,479 @@
|
||||
# 🚨 _One-Stop-Shop_ Klipper Configuration
|
||||
<p align="center">
|
||||
Please consider
|
||||
<a href="https://ko-fi.com/bassamanator" target="_blank">donating</a> to
|
||||
support my open source work ❤️
|
||||
</p>
|
||||
|
||||
## This branch contains my personal settings.
|
||||
|
||||
## Switch to a More Appropriate Branch
|
||||
# One-Stop-Shop Klipper Configuration
|
||||
|
||||
| Printer | Branch |
|
||||
| --------------------------- | ----------------------------------------------------------------------------------------- |
|
||||
| Sovol SV06 | [master](https://github.com/bassamanator/Sovol-SV06-firmware/tree/master) |
|
||||
| Sovol SV06 Skr-Mini-E3-V3.0 | [skr-mini-e3-v3](https://github.com/bassamanator/Sovol-SV06-firmware/tree/skr-mini-e3-v3) |
|
||||
| ------------------------------------------------------------- | ----------------------------------------------------------------------------------------- |
|
||||
| ${\normalsize{\textcolor{darkturquoise}{\text{Sovol SV06}}}}$ | ⚡ ${\scriptsize{\textcolor{darkturquoise}{\text{YOU ARE HERE}}}}$ ⚡ |
|
||||
| Sovol SV06 SKR-Mini-E3-V3.0 | [skr-mini-e3-v3](https://github.com/bassamanator/Sovol-SV06-firmware/tree/skr-mini-e3-v3) |
|
||||
| Sovol SV06 Fly-E3-Pro-V3 | [fly-e3-pro-v3](https://github.com/ElPainis/Fly-E3-Pro-v3) \*\* |
|
||||
| Sovol SV06 Plus | [sv06-plus](https://github.com/bassamanator/Sovol-SV06-firmware/tree/sv06-plus) |
|
||||
| All other printers | [any-printer](https://github.com/bassamanator/Sovol-SV06-firmware/tree/any-printer) |
|
||||
|
||||
# Speedrun
|
||||
${\small{\textit{** Maintained by ElPainis}}}$
|
||||
|
||||
<a href="https://youtu.be/jGplZnNoT4I?si=1e3BTfP3vhhEvGNs" target="_blank">
|
||||
<img src="https://img.youtube.com/vi/jGplZnNoT4I/maxresdefault.jpg" alt="Watch the video" width="100%"/>
|
||||
</a>
|
||||
> [!WARNING]
|
||||
> 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.
|
||||
|
||||
<img src="./images/octahedroflake.jpg" />
|
||||
## Outline
|
||||
|
||||
- [Features](#features)
|
||||
- [Stay Up-to-Date](#stay-up-to-date)
|
||||
- [Preface](#preface)
|
||||
- [Before You Begin](#before-you-begin)
|
||||
- [Klipper Installation](#klipper-installation)
|
||||
- [Flash Firmware](#flash-firmware)
|
||||
- [Download OSS Klipper Configuration](#download-oss-klipper-configuration)
|
||||
- [Initial Steps](#initial-steps)
|
||||
1. [Adjust Configuration with MCU Path](#adjust-configuration-with-mcu-path)
|
||||
2. [Configure Your Printer](#configure-your-printer)
|
||||
- [Adjust Your Slicer](#adjust-your-slicer)
|
||||
- [Support Me](#support-me)
|
||||
- [Directory Structure](#directory-structure)
|
||||
- [Special Considerations](#special-considerations)
|
||||
- [FAQ](#faq)
|
||||
- [Useful Resources](#useful-resources)
|
||||
- [Sovol Official Links](#sovol-official-links)
|
||||
- [Sources](#sources)
|
||||
|
||||
## Features
|
||||
|
||||
- 💥 This Klipper configuration is an _endpoint_, meaning that it contains **everything** that you could possibly need in order to have an excellent Klipper experience! 💥
|
||||
- Filament runout sensor usage implemented.
|
||||
- Minimum configuration settings for `Mainsail` and `Fluidd`.
|
||||
- Pre-configured configuration bundles based on the [Ellis SuperSlicer Print Profiles](https://github.com/AndrewEllis93/Ellis-SuperSlicer-Profiles):
|
||||
- SuperSlicer
|
||||
- PrusaSlicer
|
||||
- 🚀 OrcaSlicer 🚀
|
||||
- Printer profiles: `SV06/Plus`; `SV07/Plus`
|
||||
- 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.
|
||||
- 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.
|
||||
- `TEST_SPEED` macro. Find instructions [here](#how-do-i-use-the-test_speed-macro).
|
||||
- Klipper Adaptive Meshing & Purging (KAMP) integrated. Read about it [here](#what-do-i-need-to-know-about-kamp).
|
||||
|
||||
[🔼 Back to top](#outline)
|
||||
|
||||
## Stay Up-to-Date
|
||||
|
||||
${\normalsize{\textcolor{goldenrod}{\texttt{Star ⭐ this project.}}}}$
|
||||
|
||||
Watch for [updates](https://github.com/bassamanator/Sovol-SV06-firmware/discussions/37).
|
||||
|
||||
<img src="./misc/images/githubstar.gif" width="500" alt='github star'/>
|
||||
|
||||
[🔼 Back to top](#outline)
|
||||
|
||||
## 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 frustration, and fully read this documentation. 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.
|
||||
|
||||
In many ways, this entire repository can be considered _my opinion_ on the `3D printing experience` and this has been _my attempt_ to share that experience. Some factors, such as _accuracy_ and _testing_, have been at the forefront of my thoughts during this process. I hope you find this repository suitable. Cheers.
|
||||
|
||||
[🔼 Back to top](#outline)
|
||||
|
||||
## Before You Begin
|
||||
|
||||
- This entire page is a **9 minute read**. Save yourself _hours of troubleshooting_ and 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.
|
||||
- It is also assumed that the username on the host device is `pi`. If that is not the case, edit `moonraker.conf` and `cfgs/misc-macros.cfg` to change any mentions of `/home/pi` to `/home/yourUserName`.
|
||||
- Klipper _must_ be installed on the host beforehand. Easiest is to use [MainsailOS](https://github.com/mainsail-crew/mainsail/releases/latest). [KIAUH](https://github.com/th33xitus/kiauh) is another option.
|
||||
- Klipper _must_ be up to date.
|
||||
- In `Fluidd`, you can do this from `Settings` > `Software Updates`.
|
||||
- In `Mainsail`, you can do this from `Machine` > `Update Manager`.
|
||||
- Robert Redford's performance in _Spy Game (2001)_ was superb!
|
||||
- It is assumed that there is one instance of Klipper installed. If that is not the case, the steps in this guide will not work _perfectly_ 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.
|
||||
- I would recommend searching for the word `NOTE` in this configuration. There are roughly half a dozen short points amongst the various files that you should be aware of.
|
||||
- Consider [these](https://github.com/bassamanator/everything-sovol-sv06/blob/main/parts/README.md#printed-upgrades) printable parts, and also see my [Printables](https://www.printables.com/@bassamanator) page.
|
||||
|
||||
> [!TIP]
|
||||
> Most of the micro USB cables that you find at home are _unlikely_ to be data cables, and it is not possible to tell just by looking.
|
||||
|
||||
> [!CAUTION]
|
||||
> Make sure your printer is in good physical condition, because print and travel speeds will be _a lot faster_. Beginners would be wise to run through [these steps](https://github.com/bassamanator/everything-sovol-sv06/blob/main/initialsteps.md).
|
||||
|
||||
> [!CAUTION]
|
||||
> [Disable](https://github.com/bassamanator/everything-sovol-sv06/blob/main/howto.md#disable-usb-cable-5v-pin) the USB cable's 5V pin.
|
||||
|
||||
[🔼 Back to top](#outline)
|
||||
|
||||
## Klipper Installation
|
||||
|
||||
### Flash Firmware
|
||||
|
||||
💡 If you flashed Klipper onto your motherboard in the past, you can skip this step.
|
||||
|
||||
Please note:
|
||||
|
||||
- For the sake of simplicity, I will refer to the 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.
|
||||
- Flashing will only work if current firmware filename is _different from previous flashing procedure_. The `.bin` is also important.
|
||||
- You may find this [video](https://youtu.be/p6l253OJa34) useful.
|
||||
|
||||
> [!WARNING]
|
||||
> Many users have reported having issues flashing Klipper using the Sovol microSD card.
|
||||
|
||||
#### 1. Prepare the microSD Card for Flashing with These Parameters
|
||||
|
||||
- Size: `16GB` maximum.
|
||||
- File system: `FAT32`.
|
||||
- Allocation unit size: `4096 bytes`.
|
||||
- Must not contain any files _except_ the firmware file.
|
||||
|
||||
#### 2. Flashing Procedure
|
||||
|
||||
1. Disconnect any USB cables that might be connected to the motherboard.
|
||||
2. Copy `klipper.bin` to the microSD card.
|
||||
3. Make sure the printer is off.
|
||||
4. Insert the microSD card into printer.
|
||||
5. Turn on the printer and wait a minute (usually takes 10 seconds).
|
||||
6. Turn off the printer and remove the microSD.
|
||||
|
||||
> [!IMPORTANT]
|
||||
> ⏲️ At this point, it's not possible to tell with certainty whether your flash was successful, continue on with the guide.
|
||||
|
||||
[🔼 Back to top](#outline)
|
||||
|
||||
### Download OSS Klipper Configuration
|
||||
|
||||
#### Method 1: Clone the Repository
|
||||
|
||||
💡 Make sure `git` is installed (`sudo apt update && sudo apt install git`).
|
||||
|
||||
1. `ssh` into the Klipper host.
|
||||
2. `cd ~/printer_data/config`
|
||||
3. Empty entire `~/printer_data/config` folder.
|
||||
- In linux, you can delete files via `rm fileName` and directories via `rmdir directoryName`.
|
||||
- In linux, you can list files and folders via `ls -lah`.
|
||||
4. `git clone -b master --single-branch https://github.com/bassamanator/Sovol-SV06-firmware.git .` ⚠️ Don't miss the period!
|
||||
|
||||
#### 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. See `Step 2` in `Method 1`.
|
||||
3. The parent folder in the `ZIP` is `Sovol-SV06-firmware-master`. This is relevant in the next step.
|
||||
4. Extract **only** the _contents_ of the parent folder into `~/printer_data/config`.
|
||||
|
||||
[🔼 Back to top](#outline)
|
||||
|
||||
## Initial Steps
|
||||
|
||||
### Adjust Configuration with MCU Path
|
||||
|
||||
💡 Make sure the host and printer are connected via USB.
|
||||
|
||||
1. Find what port the `mcu` (printer motherboard) is connected to via _one_ of the following commands:
|
||||
|
||||
- `ls /dev/serial/by-id/*`
|
||||
- `ls /dev/serial/by-path/*`
|
||||
|
||||
1. The output will be something along the lines of
|
||||
- `/dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0`
|
||||
|
||||
2. Adjust the `[mcu]` section in `printer.cfg` accordingly.
|
||||
|
||||
```yaml
|
||||
# 📝 This is just an example
|
||||
[mcu]
|
||||
serial: /dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0
|
||||
restart_method: command
|
||||
```
|
||||
|
||||
3. Do a `FIRMWARE_RESTART` in the Klipper console.
|
||||
|
||||
If the Klipper flash that you did earlier was successful, and you've done everything else correctly, you should see no errors or warnings in the `Mainsail`/`Fluidd` dashboard. 🎉 **Your printer has been Klipperized!** 🎉
|
||||
|
||||
[🔼 Back to top](#outline)
|
||||
|
||||
### Configure Your Printer
|
||||
|
||||
❗☠️ **Your finger should be on the power switch for most of these steps** ☠️❗
|
||||
|
||||
❗☠️ **Power off if there is a collision/problem** ☠️❗
|
||||
|
||||
💡 The ${\small{\textcolor{red}{\texttt{EMERGENCY STOP}}}}$ button in your dashboard works faster than hitting the power switch.
|
||||
|
||||
💡 Do a practice emergency stop.
|
||||
|
||||
💡 I recommend no filament be loaded for any of these steps.
|
||||
|
||||
> [!NOTE]
|
||||
> You will be pasting/typing these commands into the `Mainsail`/`Fluidd` console.
|
||||
|
||||
1. Check to see if `X` and `Y` max positions can be reached, and adjust `position_max`, if necessary. You might be able to go further, which is great, but I recommend leaving a 2mm gap for safety.
|
||||
1. `G28`
|
||||
2. `G90`
|
||||
3. `G1 X223 F3000`
|
||||
4. `G1 Y223 F3000`
|
||||
2. Do a mechanical gantry calibration; `G34`. 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 against 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, and adjust `position_max`, if necessary.
|
||||
3. PID tune the bed. Ideally, all PID tuning should occur at the temperatures that you print most at.
|
||||
1. `PID_TEST_BED TEMP=70`
|
||||
2. `SAVE_CONFIG` (once completed)
|
||||
4. PID tune the extruder while part cooling fan runs at 25%.
|
||||
1. `PID_TEST_HOTEND TEMP=245`
|
||||
2. `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. `DO_PROBE_CALIBRATE`
|
||||
2. Follow `z_offset` setup in `Mainsail`/`Fluidd`.
|
||||
3. `SAVE_CONFIG` (once completed)
|
||||
6. Create a bed mesh.
|
||||
1. `DO_CREATE_MESH`
|
||||
2. `SAVE_CONFIG` (once completed)
|
||||
|
||||
🏁 If you've made it here, then your Klipperized printer is ready to print! 🏁
|
||||
|
||||
_But first_, adjust your slicer.
|
||||
|
||||
[🔼 Back to top](#outline)
|
||||
|
||||
## Adjust Your Slicer
|
||||
|
||||
> [!NOTE]
|
||||
> If you are using the slicer bundles found on this repo, you can skip this section.
|
||||
|
||||
### Start G-Code
|
||||
|
||||
It varies depending on your slicer. Find instructions [here](https://ellis3dp.com/Print-Tuning-Guide/articles/passing_slicer_variables.html#slicer-start-g-code).
|
||||
|
||||
### End G-Code
|
||||
|
||||
```
|
||||
PRINT_END
|
||||
```
|
||||
|
||||
### Line Purge
|
||||
|
||||
If you would like to print a purge line before your print starts, at the end of your start gcode, on a new line, add one of the following:
|
||||
|
||||
- `PURGE_LINE`; prints a standard purge line.
|
||||
- `LINE_PURGE`; prints KAMP's purge line.
|
||||
|
||||
> [!WARNING]
|
||||
> Do not attempt to use `LINE_PURGE` without reading [this section](#what-do-i-need-to-know-about-kamp).
|
||||
|
||||
```yaml
|
||||
# 📝 This is just an example Start G-Code
|
||||
PRINT_START ...
|
||||
PURGE_LINE
|
||||
```
|
||||
|
||||
[🔼 Back to top](#outline)
|
||||
|
||||
## Support Me
|
||||
|
||||
Please ⭐ star this repository!
|
||||
|
||||
Support [open source](https://en.wikipedia.org/wiki/Open_source), and buy me a [<img src="./misc/images/logo_white_stroke.png" height="20" alt='Ko-fi'/>](https://ko-fi.com/bassamanator).
|
||||
|
||||
[🔼 Back to top](#outline)
|
||||
|
||||
## 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 💠.
|
||||
<!-- tree -a -C -I '.directory' -L 1 -F -->
|
||||
|
||||
```sh
|
||||
/home/pi/printer_data/config
|
||||
├── cfgs/ ✅
|
||||
├── CODE_OF_CONDUCT.md 💠
|
||||
├── CONTRIBUTING.md 💠
|
||||
├── .git/ ✅❔
|
||||
├── .github/ 💠
|
||||
├── .gitignore ✅❔
|
||||
├── LICENSE 💠
|
||||
├── misc/ 💠
|
||||
├── moonraker.conf ✅
|
||||
├── osskc.cfg ✅
|
||||
├── printer.cfg ✅
|
||||
├── README.md 💠
|
||||
├── SECURITY.md 💠
|
||||
└── .vscode/ 💠
|
||||
```
|
||||
|
||||
[🔼 Back to top](#outline)
|
||||
|
||||
## Special Considerations
|
||||
|
||||
### Sequential printing
|
||||
|
||||
If enabled, cancelling, or resuming a print from pause, could lead to collisions with previously printed objects. In order to prevent collisions, in your slicer, ensure that objects are printed from the back of the build plate to the front.
|
||||
|
||||
In PrusaSlicer, please see Printer Settings > Notes, for extruder clearances.
|
||||
|
||||
### Renamed GCODE Commands
|
||||
|
||||
#### BED_MESH_CALIBRATE
|
||||
|
||||
Renamed to `_BED_MESH_CALIBRATE`.
|
||||
|
||||
### Errors
|
||||
|
||||
#### MCU 'mcu' shutdown: Timer too close
|
||||
|
||||
This error often occurs when the `mcu` is unable to generate the required `microsteps`. Lower power Klipper hosts might be especially susceptible. Reducing `microsteps` to `64`, or even `32` can resolve the issue.
|
||||
|
||||
[🔼 Back to top](#outline)
|
||||
|
||||
## FAQ
|
||||
|
||||
### What are some settings that I can change?
|
||||
|
||||
Edit the relevant file according to your needs.
|
||||
|
||||
| File | Section |
|
||||
| ---------------------- | ------------------------ |
|
||||
| `cfgs/misc-macros.cfg` | `[gcode_macro _globals]` |
|
||||
|
||||
| Variable | Disable | Enable | Notes |
|
||||
| ---------------------------------- | ------------- | -------------- | ---------------------------------------------- |
|
||||
| `variable_beeping_enabled` | `0` | `1` (default) |
|
||||
| `variable_filament_sensor_enabled` | `0` (default) | `1` |
|
||||
| `variable_kamp_enable` | `0` (default) | `1` | See [here](#what-do-i-need-to-know-about-kamp) |
|
||||
| `variable_bed_temp_over` | `0` | `10` (default) | Speeds up print start |
|
||||
| `variable_bed_temp_not_exact` | `0` | `1` (default) | Speeds up print start |
|
||||
|
||||
### Any differences between this configuration and Sovol's Marlin firmware?
|
||||
|
||||
| Property | Marlin | OSS Klipper Config |
|
||||
| ------------------------- | ------ | ------------------ |
|
||||
| `stepper_z` `run_current` | 0.800 | 0.900 |
|
||||
| `microsteps` | 16 | 128 |
|
||||
|
||||
### How do I import a configuration bundle into SuperSlicer/PrusaSlicer?
|
||||
|
||||
Please see this [discussion](https://github.com/bassamanator/Sovol-SV06-firmware/discussions/13).
|
||||
|
||||
### How do I print using SuperSlicer/PrusaSlicer?
|
||||
|
||||
Please see this [discussion](https://github.com/bassamanator/Sovol-SV06-firmware/discussions/14).
|
||||
|
||||
### When does beeping occur?
|
||||
|
||||
The printer will beep upon:
|
||||
|
||||
- Filament runout.
|
||||
- Filament change/`M600`.
|
||||
- Upon `PRINT_END`.
|
||||
- `MECHANICAL_GANTRY_CALIBRATION`/`G34`.
|
||||
|
||||
### I want to use a filament sensor. How do I set it up?
|
||||
|
||||
You can find information about the physical setup [here](https://github.com/bassamanator/everything-sovol-sv06#filament-sensor).
|
||||
|
||||
You can test the sensor via `QUERY_FILAMENT_SENSOR SENSOR=filament_sensor`.
|
||||
|
||||
### My filament runout sensor works, but I just started a print without any filament loaded. What gives?
|
||||
|
||||
A simple runout sensor can only detect a change in state. So, if you start a print without filament loaded, the printer will not know that there is no filament loaded. You should test your sensor by having filament loaded, starting a print, then cutting the filament. The expected behaviour is that the print will pause, and as long as you have beeping enabled, you will hear 3 annoying beeps.
|
||||
|
||||
### What happens when I put in `M600`/colour change at a certain layer?
|
||||
|
||||
1. The printer will beep 3 times (not annoyingly).
|
||||
2. Printing will stop.
|
||||
3. The printhead will park itself front center.
|
||||
4. The hotend will turn off, but the bed will remain hot.
|
||||
|
||||
### What happens when I pause a print?
|
||||
|
||||
Same behaviour as `M600`/colour change _except_ there won't be any beeping.
|
||||
|
||||
### What happens when filament runs out?
|
||||
|
||||
_If_ you have a working filament sensor, the same behaviour as `M600`/colour change will occur _except_ the beeps will be fairly annoying.
|
||||
|
||||
### How do I resume a print after a colour change or filament runout?
|
||||
|
||||
> [!WARNING]
|
||||
> Do not disable the stepper motors during this process!
|
||||
|
||||
The printhead is now parked front center waiting for you to insert filament. You will:
|
||||
|
||||
1. Heat up the hotend to the desired temperature.
|
||||
- Use your Klipper dashboard.
|
||||
2. Purge (push) some filament through the nozzle.
|
||||
- Use your Klipper dashboard, and extrude maybe 50mm (for a colour change you probably want to extrude more).
|
||||
- OR, you can push some filament by hand _making sure to first disengage the extruder's spring loaded arm_.
|
||||
3. Hit resume in your Klipper dashboard.
|
||||
|
||||
### What do I need to know about KAMP?
|
||||
|
||||
> [!WARNING]
|
||||
> No KAMP functionality can be used on low-powered devices such as the Raspberry Pi Zero.
|
||||
|
||||
> [!WARNING]
|
||||
> If KAMP is disabled, and there is no `default` mesh, `PRINT_START` will crash.
|
||||
|
||||
> [!IMPORTANT]
|
||||
> The [Label objects setting](https://docs.mainsail.xyz/overview/features/exclude-objects#enable-the-label-objects-setting-in-your-slicer) in your slicer must be enabled for KAMP to work.
|
||||
|
||||
> [!NOTE]
|
||||
> `LINE_PURGE` is useable _on appropriate devices_ even if KAMP is disabled.
|
||||
|
||||
This repo contains all the code from the KAMP repository, however, only the `adaptive meshing` and `LINE_PURGE` functionality of KAMP has been configured and tested for use. To enable other functionality, adjust `/cfgs/kamp/KAMP_Settings.cfg`.
|
||||
|
||||
Read [KAMP official docs](https://github.com/kyleisah/Klipper-Adaptive-Meshing-Purging) to learn more.
|
||||
|
||||
### How do I use the `TEST_SPEED` macro?
|
||||
|
||||
> [!WARNING]
|
||||
> This is for advanced users only, with well oiled machines. You can cause serious damage to your printer if you're not careful.
|
||||
|
||||
Find full instructions [here](https://ellis3dp.com/Print-Tuning-Guide/articles/determining_max_speeds_accels.html).
|
||||
|
||||
Some tips:
|
||||
|
||||
- Before running with `ITERATIONS=40` with an untested speed/accel value, run with `ITERATIONS=1`.
|
||||
- Pay close attention throughout the run, so that you can click ${\small{\textcolor{red}{\texttt{EMERGENCY STOP}}}}$ at a moment's notice.
|
||||
- This macro will simply help you determine the maximum speed your printhead and bed can reliably move at, not necessarily print at. The bottleneck for my SV06, for example, is the 15mm/s^2 that the hotend maxes out at (well under 200mm/s actual print speed).
|
||||
|
||||
### How do I compile my own firmware?
|
||||
|
||||
Please see this [discussion](https://github.com/bassamanator/Sovol-SV06-firmware/discussions/111).
|
||||
|
||||
[🔼 Back to top](#outline)
|
||||
|
||||
## 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)
|
||||
- [Simplify3D Print Quality Troubleshooting Guide](https://www.simplify3d.com/resources/print-quality-troubleshooting/)
|
||||
|
||||
[🔼 Back to top](#outline)
|
||||
|
||||
## Sovol Official Links
|
||||
|
||||
- [SV06 Marlin Source Code](https://github.com/Sovol3d/Sv06-Source-Code)
|
||||
- [SV06 Models](https://github.com/Sovol3d/SV06-Fully-Open-Source)
|
||||
- [SV06 Plus Marlin Source Code and Models](https://github.com/Sovol3d/SV06-PLUS)
|
||||
|
||||
[🔼 Back to top](#outline)
|
||||
|
||||
## Sources
|
||||
|
||||
- [https://www.klipper3d.org](https://www.klipper3d.org)
|
||||
- [Ellis' Print Tuning Guide](https://ellis3dp.com/Print-Tuning-Guide)
|
||||
- [Mechanical Gantry Calibration Macro](https://github.com/strayr/strayr-k-macros)
|
||||
- [SV06 printer.cfg](https://github.com/spinixguy/Sovol-SV06-firmware)
|
||||
- [SV06 Buildplate and Texture](https://www.printables.com/model/378915-sovol-sv06-buildplate-texture-and-model-for-prusas)
|
||||
- [Ellis' SuperSlicer Profiles](https://github.com/AndrewEllis93/Ellis-SuperSlicer-Profiles)
|
||||
- [Klipper Adaptive Meshing & Purging](https://github.com/kyleisah/Klipper-Adaptive-Meshing-Purging)
|
||||
- [PrusaSlicer Print Settings](https://github.com/mjonuschat/PrusaSlicer-Profiles)
|
||||
|
||||
[](https://ko-fi.com/H2H0HIHTH)
|
||||
|
||||
[🔼 Back to top](#outline)
|
||||
|
||||
@@ -1,52 +0,0 @@
|
||||
# Author FatalBulletHit, https://github.com/FatalBulletHit
|
||||
[gcode_macro GET_VARIABLE]
|
||||
gcode:
|
||||
{% set names = (params.NAME).split('.')|list %}
|
||||
{% set join = (params.JOIN)|default(1)|int %}
|
||||
|
||||
{% set _dummy0 = namespace( break = 0 ) %}
|
||||
{% set _dummy1 = namespace( out = printer[names|first] ) %}
|
||||
|
||||
{% for name in names if _dummy0.break == 0 %}
|
||||
{% if loop.index > 1 %}
|
||||
{% if name in _dummy1.out %}
|
||||
{% set _dummy1.out = _dummy1.out[name] %}
|
||||
{% elif name[0] in '0123456789' and _dummy1.out is iterable and _dummy1.out is not string and _dummy1.out is not mapping and _dummy1.out|length > name[0]|int %}
|
||||
{% set _dummy1.out = _dummy1.out[name|int] %}
|
||||
{% else %}
|
||||
{% set _dummy0.break = loop.index0 %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
{% if _dummy1.out is boolean %}
|
||||
{ action_respond_info('Type: boolean') }
|
||||
{% elif _dummy1.out is float %}
|
||||
{ action_respond_info('Type: float') }
|
||||
{% elif _dummy1.out is integer %}
|
||||
{ action_respond_info('Type: integer') }
|
||||
{% elif _dummy1.out is mapping %}
|
||||
{ action_respond_info('Type: mapping') }
|
||||
{% elif _dummy1.out is string %}
|
||||
{ action_respond_info('Type: string') }
|
||||
{% elif _dummy1.out is iterable %}
|
||||
{ action_respond_info('Type: iterable') }
|
||||
{% elif _dummy1.out is none %}
|
||||
{ action_respond_info('Type: none') }
|
||||
{% elif _dummy1.out is undefined %}
|
||||
{ action_respond_info('Type: undefined') }
|
||||
{% elif _dummy1.out is callable %}
|
||||
{ action_respond_info('Type: callable') }
|
||||
{% else %}
|
||||
{ action_respond_info('Type: unknown') }
|
||||
{% endif %}
|
||||
|
||||
{% if join and _dummy1.out is iterable and _dummy1.out is not string and _dummy1.out is not mapping %}
|
||||
{ action_respond_info('%s' % _dummy1.out|join("\n")) }
|
||||
{% else %}
|
||||
{ action_respond_info('%s' % _dummy1.out) }
|
||||
{% endif %}
|
||||
|
||||
{% if _dummy0.break != 0 %}
|
||||
{ action_respond_info('"printer.%s" does not contain "%s"!' % (names[0:_dummy0.break]|join('.'), names[_dummy0.break])) }
|
||||
{% endif %}
|
||||
@@ -5,13 +5,13 @@ timeout: 600
|
||||
enable_force_move: True
|
||||
|
||||
# NOTE If you're using a Raspberry Pi, you can uncomment the next 2 lines, optionally.
|
||||
#[temperature_sensor raspberry_pi]
|
||||
#sensor_type: temperature_host
|
||||
# [temperature_sensor raspberry_pi]
|
||||
# sensor_type: temperature_host
|
||||
|
||||
# NOTE If you're using a an Orange Pi, you can uncomment the next 3 lines, optionally.
|
||||
[temperature_sensor Orange_Pi]
|
||||
sensor_type: temperature_host
|
||||
sensor_path: /sys/class/thermal/thermal_zone0/temp
|
||||
# [temperature_sensor Orange_Pi]
|
||||
# sensor_type: temperature_host
|
||||
# sensor_path: /sys/class/thermal/thermal_zone0/temp
|
||||
|
||||
[virtual_sdcard]
|
||||
path: /home/pi/printer_data/gcodes
|
||||
@@ -30,10 +30,10 @@ gcode:
|
||||
|
||||
[gcode_macro _globals]
|
||||
# NOTE 0 = false; 1 = true
|
||||
variable_filament_sensor_enabled: 1 # NOTE Enable(1) or disable(0) the filament sensor, if one is connected
|
||||
variable_filament_sensor_enabled: 0 # NOTE Enable(1) or disable(0) the filament sensor, if one is connected
|
||||
variable_beeping_enabled: 1 # NOTE Enable(1) or disable(0) beeping everywhere except during gantry calibration
|
||||
variable_bed_temp_over: 10 # NOTE Start print if bed temperature is over by this amount, otherwise wait for temperature drop
|
||||
variable_bed_temp_not_exact: 1 # NOTE Start print if bed temperature is `target temperature - 1` but continue to heat until target is reached
|
||||
variable_bed_temp_over: 10 # NOTE Start print if bed temperature is over by this amount. Set to 0 to disable, meaning, wait for temperature to drop
|
||||
variable_bed_temp_not_exact: 1 # NOTE Start print if bed temperature is `target temperature - 1` (but continue to heat until target is reached)
|
||||
variable_kamp_enable: 0 # NOTE Enable(1) or disable(0) KAMP (adaptive mesh)
|
||||
variable_pre_purge_prime_length: 1.40
|
||||
gcode:
|
||||
@@ -77,7 +77,7 @@ gcode:
|
||||
[gcode_macro M190]
|
||||
rename_existing: M99190
|
||||
gcode:
|
||||
# Variables
|
||||
# Global variables/settings
|
||||
{% set bedtempNotExact = printer["gcode_macro _globals"].bed_temp_not_exact|default(1)|int %}
|
||||
|
||||
# Parameters
|
||||
|
||||
@@ -1,424 +0,0 @@
|
||||
# Timelapse klipper macro definition
|
||||
#
|
||||
# Copyright (C) 2021 Christoph Frei <fryakatkop@gmail.com>
|
||||
# Copyright (C) 2021 Alex Zellner <alexander.zellner@googlemail.com>
|
||||
#
|
||||
# This file may be distributed under the terms of the GNU GPLv3 license
|
||||
#
|
||||
# Macro version 1.14
|
||||
#
|
||||
|
||||
##### DO NOT CHANGE ANY MACRO!!! #####
|
||||
|
||||
##########################################################################
|
||||
# #
|
||||
# GET_TIMELAPSE_SETUP: Print the Timelapse setup to console #
|
||||
# #
|
||||
##########################################################################
|
||||
|
||||
[gcode_macro GET_TIMELAPSE_SETUP]
|
||||
description: Print the Timelapse setup
|
||||
gcode:
|
||||
{% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %}
|
||||
{% set output_txt = ["Timelapse Setup:"] %}
|
||||
{% set _dummy = output_txt.append("enable: %s" % tl.enable) %}
|
||||
{% set _dummy = output_txt.append("park: %s" % tl.park.enable) %}
|
||||
{% if tl.park.enable %}
|
||||
{% set _dummy = output_txt.append("park position: %s time: %s s" % (tl.park.pos, tl.park.time)) %}
|
||||
{% set _dummy = output_txt.append("park cord x:%s y:%s dz:%s" % (tl.park.coord.x, tl.park.coord.y, tl.park.coord.dz)) %}
|
||||
{% set _dummy = output_txt.append("travel speed: %s mm/s" % tl.speed.travel) %}
|
||||
{% endif %}
|
||||
{% set _dummy = output_txt.append("fw_retract: %s" % tl.extruder.fw_retract) %}
|
||||
{% if not tl.extruder.fw_retract %}
|
||||
{% set _dummy = output_txt.append("retract: %s mm speed: %s mm/s" % (tl.extruder.retract, tl.speed.retract)) %}
|
||||
{% set _dummy = output_txt.append("extrude: %s mm speed: %s mm/s" % (tl.extruder.extrude, tl.speed.extrude)) %}
|
||||
{% endif %}
|
||||
{% set _dummy = output_txt.append("verbose: %s" % tl.verbose) %}
|
||||
{action_respond_info(output_txt|join("\n"))}
|
||||
|
||||
################################################################################################
|
||||
# #
|
||||
# Use _SET_TIMELAPSE_SETUP [ENABLE=value] [VERBOSE=value] [PARK_ENABLE=value] [PARK_POS=value] #
|
||||
# [PARK_TIME=value] [CUSTOM_POS_X=value] [CUSTOM_POS_Y=value] #
|
||||
# [CUSTOM_POS_DZ=value][TRAVEL_SPEED=value] [RETRACT_SPEED=value] #
|
||||
# [EXTRUDE_SPEED=value] [EXTRUDE_DISTANCE=value] #
|
||||
# [RETRACT_DISTANCE=value] [FW_RETRACT=value] #
|
||||
# #
|
||||
################################################################################################
|
||||
|
||||
[gcode_macro _SET_TIMELAPSE_SETUP]
|
||||
description: Set user parameters for timelapse
|
||||
gcode:
|
||||
{% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %}
|
||||
##### get min and max bed size #####
|
||||
{% set min = printer.toolhead.axis_minimum %}
|
||||
{% set max = printer.toolhead.axis_maximum %}
|
||||
{% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch']
|
||||
else False %}
|
||||
{% set park = {'min' : {'x': (min.x / 1.42)|round(3) if round_bed else min.x|round(3),
|
||||
'y': (min.y / 1.42)|round(3) if round_bed else min.y|round(3)},
|
||||
'max' : {'x': (max.x / 1.42)|round(3) if round_bed else max.x|round(3),
|
||||
'y': (max.y / 1.42)|round(3) if round_bed else max.y|round(3)},
|
||||
'center': {'x': (max.x-(max.x-min.x)/2)|round(3),
|
||||
'y': (max.y-(max.y-min.y)/2)|round(3)}} %}
|
||||
##### set new values #####
|
||||
{% if params.ENABLE %}
|
||||
{% if params.ENABLE|lower is in ['true', 'false'] %}
|
||||
SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=enable VALUE={True if params.ENABLE|lower == 'true' else False}
|
||||
{% else %}
|
||||
{action_raise_error("ENABLE=%s not supported. Allowed values are [True, False]" % params.ENABLE|capitalize)}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% if params.VERBOSE %}
|
||||
{% if params.VERBOSE|lower is in ['true', 'false'] %}
|
||||
SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=verbose VALUE={True if params.VERBOSE|lower == 'true' else False}
|
||||
{% else %}
|
||||
{action_raise_error("VERBOSE=%s not supported. Allowed values are [True, False]" % params.VERBOSE|capitalize)}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% if params.CUSTOM_POS_X %}
|
||||
{% if params.CUSTOM_POS_X|float >= min.x and params.CUSTOM_POS_X|float <= max.x %}
|
||||
{% set _dummy = tl.park.custom.update({'x':params.CUSTOM_POS_X|float|round(3)}) %}
|
||||
{% else %}
|
||||
{action_raise_error("CUSTOM_POS_X=%s must be within [%s - %s]" % (params.CUSTOM_POS_X, min.x, max.x))}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% if params.CUSTOM_POS_Y %}
|
||||
{% if params.CUSTOM_POS_Y|float >= min.y and params.CUSTOM_POS_Y|float <= max.y %}
|
||||
{% set _dummy = tl.park.custom.update({'y':params.CUSTOM_POS_Y|float|round(3)}) %}
|
||||
{% else %}
|
||||
{action_raise_error("CUSTOM_POS_Y=%s must be within [%s - %s]" % (params.CUSTOM_POS_Y, min.y, max.y))}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% if params.CUSTOM_POS_DZ %}
|
||||
{% if params.CUSTOM_POS_DZ|float >= min.z and params.CUSTOM_POS_DZ|float <= max.z %}
|
||||
{% set _dummy = tl.park.custom.update({'dz':params.CUSTOM_POS_DZ|float|round(3)}) %}
|
||||
{% else %}
|
||||
{action_raise_error("CUSTOM_POS_DZ=%s must be within [%s - %s]" % (params.CUSTOM_POS_DZ, min.z, max.z))}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% if params.PARK_ENABLE %}
|
||||
{% if params.PARK_ENABLE|lower is in ['true', 'false'] %}
|
||||
{% set _dummy = tl.park.update({'enable':True if params.PARK_ENABLE|lower == 'true' else False}) %}
|
||||
{% else %}
|
||||
{action_raise_error("PARK_ENABLE=%s not supported. Allowed values are [True, False]" % params.PARK_ENABLE|capitalize)}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% if params.PARK_POS %}
|
||||
{% if params.PARK_POS|lower is in ['center','front_left','front_right','back_left','back_right','custom','x_only','y_only'] %}
|
||||
{% set dic = {'center' : {'x': park.center.x , 'y': park.center.y , 'dz': 1 },
|
||||
'front_left' : {'x': park.min.x , 'y': park.min.y , 'dz': 0 },
|
||||
'front_right' : {'x': park.max.x , 'y': park.min.y , 'dz': 0 },
|
||||
'back_left' : {'x': park.min.x , 'y': park.max.y , 'dz': 0 },
|
||||
'back_right' : {'x': park.max.x , 'y': park.max.y , 'dz': 0 },
|
||||
'custom' : {'x': tl.park.custom.x, 'y': tl.park.custom.y, 'dz': tl.park.custom.dz},
|
||||
'x_only' : {'x': tl.park.custom.x, 'y': 'none' , 'dz': tl.park.custom.dz},
|
||||
'y_only' : {'x': 'none' , 'y': tl.park.custom.y, 'dz': tl.park.custom.dz}} %}
|
||||
{% set _dummy = tl.park.update({'pos':params.PARK_POS|lower}) %}
|
||||
{% set _dummy = tl.park.update({'coord':dic[tl.park.pos]}) %}
|
||||
{% else %}
|
||||
{action_raise_error("PARK_POS=%s not supported. Allowed values are [CENTER, FRONT_LEFT, FRONT_RIGHT, BACK_LEFT, BACK_RIGHT, CUSTOM, X_ONLY, Y_ONLY]"
|
||||
% params.PARK_POS|upper)}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% if params.PARK_TIME %}
|
||||
{% if params.PARK_TIME|float >= 0.0 %}
|
||||
{% set _dummy = tl.park.update({'time':params.PARK_TIME|float|round(3)}) %}
|
||||
{% else %}
|
||||
{action_raise_error("PARK_TIME=%s must be a positive number" % params.PARK_TIME)}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=park VALUE="{tl.park}"
|
||||
{% if params.TRAVEL_SPEED %}
|
||||
{% if params.TRAVEL_SPEED|float > 0.0 %}
|
||||
{% set _dummy = tl.speed.update({'travel':params.TRAVEL_SPEED|float|round(3)}) %}
|
||||
{% else %}
|
||||
{action_raise_error("TRAVEL_SPEED=%s must be larger than 0" % params.TRAVEL_SPEED)}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% if params.RETRACT_SPEED %}
|
||||
{% if params.RETRACT_SPEED|float > 0.0 %}
|
||||
{% set _dummy = tl.speed.update({'retract':params.RETRACT_SPEED|float|round(3)}) %}
|
||||
{% else %}
|
||||
{action_raise_error("RETRACT_SPEED=%s must be larger than 0" % params.RETRACT_SPEED)}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% if params.EXTRUDE_SPEED %}
|
||||
{% if params.EXTRUDE_SPEED|float > 0.0 %}
|
||||
{% set _dummy = tl.speed.update({'extrude':params.EXTRUDE_SPEED|float|round(3)}) %}
|
||||
{% else %}
|
||||
{action_raise_error("EXTRUDE_SPEED=%s must be larger than 0" % params.EXTRUDE_SPEED)}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=speed VALUE="{tl.speed}"
|
||||
{% if params.EXTRUDE_DISTANCE %}
|
||||
{% if params.EXTRUDE_DISTANCE|float >= 0.0 %}
|
||||
{% set _dummy = tl.extruder.update({'extrude':params.EXTRUDE_DISTANCE|float|round(3)}) %}
|
||||
{% else %}
|
||||
{action_raise_error("EXTRUDE_DISTANCE=%s must be specified as positiv number" % params.EXTRUDE_DISTANCE)}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% if params.RETRACT_DISTANCE %}
|
||||
{% if params.RETRACT_DISTANCE|float >= 0.0 %}
|
||||
{% set _dummy = tl.extruder.update({'retract':params.RETRACT_DISTANCE|float|round(3)}) %}
|
||||
{% else %}
|
||||
{action_raise_error("RETRACT_DISTANCE=%s must be specified as positiv number" % params.RETRACT_DISTANCE)}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% if params.FW_RETRACT %}
|
||||
{% if params.FW_RETRACT|lower is in ['true', 'false'] %}
|
||||
{% if 'firmware_retraction' in printer.configfile.settings %}
|
||||
{% set _dummy = tl.extruder.update({'fw_retract': True if params.FW_RETRACT|lower == 'true' else False}) %}
|
||||
{% else %}
|
||||
{% set _dummy = tl.extruder.update({'fw_retract':False}) %}
|
||||
{% if params.FW_RETRACT|capitalize == 'True' %}
|
||||
{action_raise_error("[firmware_retraction] not defined in printer.cfg. Can not enable fw_retract")}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{action_raise_error("FW_RETRACT=%s not supported. Allowed values are [True, False]" % params.FW_RETRACT|capitalize)}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=extruder VALUE="{tl.extruder}"
|
||||
{% if printer.configfile.settings['gcode_macro pause'] is defined %}
|
||||
{% set _dummy = tl.macro.update({'pause': printer.configfile.settings['gcode_macro pause'].rename_existing}) %}
|
||||
{% endif %}
|
||||
{% if printer.configfile.settings['gcode_macro resume'] is defined %}
|
||||
{% set _dummy = tl.macro.update({'resume': printer.configfile.settings['gcode_macro resume'].rename_existing}) %}
|
||||
{% endif %}
|
||||
SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=macro VALUE="{tl.macro}"
|
||||
|
||||
##########################################################################
|
||||
# #
|
||||
# TIMELAPSE_TAKE_FRAME: take the next picture #
|
||||
# #
|
||||
##########################################################################
|
||||
|
||||
######################### definition #########################
|
||||
## enable: enable or disable the next frame. Valid inputs: [True, False]
|
||||
## takingframe: internal use. Valid inputs: [True, False]
|
||||
##
|
||||
## park.enable: enable or disable to park the head while taking a picture. Valid inputs: [True, False]
|
||||
## park.pos : used position for parking. Valid inputs: [center, front_left, front_right, back_left, back_right, custom, x_only, y_only]
|
||||
## park.time : used for the debug macro. Time in s
|
||||
## park.custom.x, park.custom.y: coordinates of the custom parkposition. Unit [mm]
|
||||
## park.custom.dz : custom z hop for the picture. Unit [mm]
|
||||
## park.coord : internal use
|
||||
##
|
||||
## extruder.fw_retract: enable disable fw retraction [True,False]
|
||||
## extruder.extrude : filament extruded at the end of park. Unit [mm]
|
||||
## extruder.retract : filament retract at the start of park. Unit [mm]
|
||||
##
|
||||
## speed.travel : used speed for travel from and to the park positon. Unit: [mm/min]
|
||||
## speed.retract: used speed for retract [mm/min]
|
||||
## speed.extrude: used speed for extrude [mm/min]
|
||||
##
|
||||
## verbose: Enable mesage output of TIMELAPSE_TAKE_FRAME
|
||||
##
|
||||
## restore.absolute.coordinates: internal use
|
||||
## restore.absolute.extrude : internal use
|
||||
## restore.speed : internal use
|
||||
## restore.e : internal use
|
||||
## restore.factor.speed : internal use
|
||||
## restore.factor.extrude : internal use
|
||||
##
|
||||
## macro.pause : internal use
|
||||
## macro.resume : internal use
|
||||
##
|
||||
## is_paused: internal use
|
||||
###############################################################
|
||||
[gcode_macro TIMELAPSE_TAKE_FRAME]
|
||||
description: Take Timelapse shoot
|
||||
variable_enable: False
|
||||
variable_takingframe: False
|
||||
variable_park: {'enable': False,
|
||||
'pos' : 'center',
|
||||
'time' : 0.1,
|
||||
'custom': {'x': 0, 'y': 0, 'dz': 0},
|
||||
'coord' : {'x': 0, 'y': 0, 'dz': 0}}
|
||||
variable_extruder: {'fw_retract': False,
|
||||
'retract': 1.0,
|
||||
'extrude': 1.0}
|
||||
variable_speed: {'travel': 100,
|
||||
'retract': 15,
|
||||
'extrude': 15}
|
||||
variable_verbose: True
|
||||
variable_restore: {'absolute': {'coordinates': True, 'extrude': True}, 'speed': 1500, 'e':0, 'factor': {'speed': 1.0, 'extrude': 1.0}}
|
||||
variable_macro: {'pause': 'PAUSE', 'resume': 'RESUME'}
|
||||
variable_is_paused: False
|
||||
gcode:
|
||||
{% set hyperlapse = True if params.HYPERLAPSE and params.HYPERLAPSE|lower =='true' else False %}
|
||||
{% if enable %}
|
||||
{% if (hyperlapse and printer['gcode_macro HYPERLAPSE'].run) or
|
||||
(not hyperlapse and not printer['gcode_macro HYPERLAPSE'].run) %}
|
||||
{% if park.enable %}
|
||||
{% set pos = {'x': 'X' + park.coord.x|string if park.pos != 'y_only' else '',
|
||||
'y': 'Y' + park.coord.y|string if park.pos != 'x_only' else '',
|
||||
'z': 'Z'+ [printer.gcode_move.gcode_position.z + park.coord.dz, printer.toolhead.axis_maximum.z]|min|string} %}
|
||||
{% set restore = {'absolute': {'coordinates': printer.gcode_move.absolute_coordinates,
|
||||
'extrude' : printer.gcode_move.absolute_extrude},
|
||||
'speed' : printer.gcode_move.speed,
|
||||
'e' : printer.gcode_move.gcode_position.e,
|
||||
'factor' : {'speed' : printer.gcode_move.speed_factor,
|
||||
'extrude': printer.gcode_move.extrude_factor}} %}
|
||||
SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=restore VALUE="{restore}"
|
||||
{% if not printer[printer.toolhead.extruder].can_extrude %}
|
||||
{% if verbose %}{action_respond_info("Timelapse: Warning, minimum extruder temperature not reached!")}{% endif %}
|
||||
{% else %}
|
||||
{% if extruder.fw_retract %}
|
||||
G10
|
||||
{% else %}
|
||||
M83 ; insure relative extrusion
|
||||
G0 E-{extruder.retract} F{speed.retract * 60}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=is_paused VALUE=True
|
||||
{macro.pause} ; execute the klipper PAUSE command
|
||||
SET_GCODE_OFFSET X=0 Y=0 ; this will insure that the head parks always at the same position in a multi setup
|
||||
G90 ; insure absolute move
|
||||
{% if "xyz" not in printer.toolhead.homed_axes %}
|
||||
{% if verbose %}{action_respond_info("Timelapse: Warning, axis not homed yet!")}{% endif %}
|
||||
{% else %}
|
||||
G0 {pos.x} {pos.y} {pos.z} F{speed.travel * 60}
|
||||
{% endif %}
|
||||
SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=takingframe VALUE=True
|
||||
UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_TAKE_FRAME DURATION=0.5
|
||||
M400
|
||||
{% endif %}
|
||||
_TIMELAPSE_NEW_FRAME HYPERLAPSE={hyperlapse}
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{% if verbose %}{action_respond_info("Timelapse: disabled, take frame ignored")}{% endif %}
|
||||
{% endif %}
|
||||
|
||||
[gcode_macro _TIMELAPSE_NEW_FRAME]
|
||||
description: action call for timelapse shoot. must be a seperate macro
|
||||
gcode:
|
||||
{action_call_remote_method("timelapse_newframe",
|
||||
macropark=printer['gcode_macro TIMELAPSE_TAKE_FRAME'].park,
|
||||
hyperlapse=params.HYPERLAPSE)}
|
||||
|
||||
[delayed_gcode _WAIT_TIMELAPSE_TAKE_FRAME]
|
||||
gcode:
|
||||
{% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %}
|
||||
{% set factor = {'speed': printer.gcode_move.speed_factor, 'extrude': printer.gcode_move.extrude_factor} %}
|
||||
{% if tl.takingframe %}
|
||||
UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_TAKE_FRAME DURATION=0.5
|
||||
{% else %}
|
||||
{tl.macro.resume} VELOCITY={tl.speed.travel} ; execute the klipper RESUME command
|
||||
SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=is_paused VALUE=False
|
||||
{% if not printer[printer.toolhead.extruder].can_extrude %}
|
||||
{action_respond_info("Timelapse: Warning minimum extruder temperature not reached!")}
|
||||
{% else %}
|
||||
{% if tl.extruder.fw_retract %}
|
||||
G11
|
||||
{% else %}
|
||||
G0 E{tl.extruder.extrude} F{tl.speed.extrude * 60}
|
||||
G0 F{tl.restore.speed}
|
||||
{% if tl.restore.absolute.extrude %}
|
||||
M82
|
||||
G92 E{tl.restore.e}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% if tl.restore.factor.speed != factor.speed %} M220 S{(factor.speed*100)|round(0)} {% endif %}
|
||||
{% if tl.restore.factor.extrude != factor.extrude %} M221 S{(factor.extrude*100)|round(0)} {% endif %}
|
||||
{% if not tl.restore.absolute.coordinates %} G91 {% endif %}
|
||||
{% endif %}
|
||||
|
||||
####################################################################################################
|
||||
# #
|
||||
# HYPERLAPSE: Starts or stops a Hyperlapse video #
|
||||
# Usage: HYPERLAPSE ACTION=START [CYCLE=time] starts a hyperlapse with cycle time (default 30 sec) #
|
||||
# HYPERLAPSE ACTION=STOP stops the hyperlapse recording #
|
||||
# #
|
||||
####################################################################################################
|
||||
|
||||
######################### definition #########################
|
||||
## cycle: cycle time in seconds
|
||||
## run: internal use [True/False]
|
||||
###############################################################
|
||||
[gcode_macro HYPERLAPSE]
|
||||
description: Start/Stop a hyperlapse recording
|
||||
variable_cycle: 0
|
||||
variable_run: False
|
||||
gcode:
|
||||
{% set cycle = params.CYCLE|default(30)|int %}
|
||||
{% if params.ACTION and params.ACTION|lower == 'start' %}
|
||||
{action_respond_info("Hyperlapse: frames started (Cycle %d sec)" % cycle)}
|
||||
SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=run VALUE=True
|
||||
SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=cycle VALUE={cycle}
|
||||
UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION={cycle}
|
||||
TIMELAPSE_TAKE_FRAME HYPERLAPSE=True
|
||||
{% elif params.ACTION and params.ACTION|lower == 'stop' %}
|
||||
{% if run %}{action_respond_info("Hyperlapse: frames stopped")}{% endif %}
|
||||
SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=run VALUE=False
|
||||
UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION=0
|
||||
{% else %}
|
||||
{action_raise_error("Hyperlapse: No valid input parameter
|
||||
Use:
|
||||
- HYPERLAPSE ACTION=START [CYCLE=time]
|
||||
- HYPERLAPSE ACTION=STOP")}
|
||||
{% endif %}
|
||||
|
||||
[delayed_gcode _HYPERLAPSE_LOOP]
|
||||
gcode:
|
||||
UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION={printer["gcode_macro HYPERLAPSE"].cycle}
|
||||
TIMELAPSE_TAKE_FRAME HYPERLAPSE=True
|
||||
|
||||
##########################################################################
|
||||
# #
|
||||
# TIMELAPSE_RENDER: Render the video at print end #
|
||||
# #
|
||||
##########################################################################
|
||||
|
||||
######################### definition #########################
|
||||
## render: internal use. Valid inputs: [True, False]
|
||||
## run_identifier: internal use. Valid input [0 .. 3]
|
||||
###############################################################
|
||||
[gcode_macro TIMELAPSE_RENDER]
|
||||
description: Render Timelapse video and wait for the result
|
||||
variable_render: False
|
||||
variable_run_identifier: 0
|
||||
gcode:
|
||||
{action_respond_info("Timelapse: Rendering started")}
|
||||
{action_call_remote_method("timelapse_render", byrendermacro="True")}
|
||||
SET_GCODE_VARIABLE MACRO=TIMELAPSE_RENDER VARIABLE=render VALUE=True
|
||||
{printer.configfile.settings['gcode_macro pause'].rename_existing} ; execute the klipper PAUSE command
|
||||
UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_RENDER DURATION=0.5
|
||||
|
||||
[delayed_gcode _WAIT_TIMELAPSE_RENDER]
|
||||
gcode:
|
||||
{% set ri = printer['gcode_macro TIMELAPSE_RENDER'].run_identifier % 4 %}
|
||||
SET_GCODE_VARIABLE MACRO=TIMELAPSE_RENDER VARIABLE=run_identifier VALUE={ri + 1}
|
||||
{% if printer['gcode_macro TIMELAPSE_RENDER'].render %}
|
||||
M117 Rendering {['-','\\','|','/'][ri]}
|
||||
UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_RENDER DURATION=0.5
|
||||
{% else %}
|
||||
{action_respond_info("Timelapse: Rendering finished")}
|
||||
M117
|
||||
{printer.configfile.settings['gcode_macro resume'].rename_existing} ; execute the klipper RESUME command
|
||||
{% endif %}
|
||||
|
||||
##########################################################################
|
||||
# #
|
||||
# TEST_STREAM_DELAY: Helper macro to find stream and park delay #
|
||||
# #
|
||||
##########################################################################
|
||||
|
||||
[gcode_macro TEST_STREAM_DELAY]
|
||||
description: Helper macro to find stream and park delay
|
||||
gcode:
|
||||
{% set min = printer.toolhead.axis_minimum %}
|
||||
{% set max = printer.toolhead.axis_maximum %}
|
||||
{% set act = printer.toolhead.position %}
|
||||
{% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %}
|
||||
{% if act.z > 5.0 %}
|
||||
G0 X{min.x + 5.0} F{tl.speed.travel|int * 60}
|
||||
G0 X{(max.x-min.x)/2}
|
||||
G4 P{tl.park.time|float * 1000}
|
||||
_TIMELAPSE_NEW_FRAME HYPERLAPSE=FALSE
|
||||
G0 X{max.x - 5.0}
|
||||
{% else %}
|
||||
{action_raise_error("Toolhead z %.3f to low. Please place head above z = 5.0" % act.z)}
|
||||
{% endif %}
|
||||
@@ -1,60 +0,0 @@
|
||||
#### crowsnest.conf
|
||||
#### This is a typical default config.
|
||||
#### Also used as default in mainsail / MainsailOS
|
||||
#### See:
|
||||
#### https://github.com/mainsail-crew/crowsnest/blob/master/README.md
|
||||
#### for details to configure to your needs.
|
||||
|
||||
|
||||
#####################################################################
|
||||
#### #####
|
||||
#### Information about ports and according URL's #####
|
||||
#### #####
|
||||
#####################################################################
|
||||
#### #####
|
||||
#### Port 8080 equals /webcam/?action=[stream/snapshot] #####
|
||||
#### Port 8081 equals /webcam2/?action=[stream/snapshot] #####
|
||||
#### Port 8082 equals /webcam3/?action=[stream/snapshot] #####
|
||||
#### Port 8083 equals /webcam4/?action=[stream/snapshot] #####
|
||||
#### #####
|
||||
#####################################################################
|
||||
#### RTSP Stream URL: ( if enabled and supported ) #####
|
||||
#### rtsp://<ip>:<rtsp_port>/stream.h264 #####
|
||||
#####################################################################
|
||||
|
||||
|
||||
[crowsnest]
|
||||
log_path: /home/pi/printer_data/logs/crowsnest.log
|
||||
log_level: verbose # Valid Options are quiet/verbose/debug
|
||||
delete_log: false # Deletes log on every restart, if set to true
|
||||
no_proxy: false
|
||||
|
||||
[cam 1]
|
||||
mode: ustreamer # ustreamer - Provides mjpg and snapshots. (All devices)
|
||||
# camera-streamer - Provides webrtc, mjpg and snapshots. (rpi + Raspi OS based only)
|
||||
enable_rtsp: false # If camera-streamer is used, this enables also usage of an rtsp server
|
||||
rtsp_port: 8554 # Set different ports for each device!
|
||||
port: 8080 # HTTP/MJPG Stream/Snapshot Port
|
||||
device: /dev/video0 # See Log for available ...
|
||||
# resolution: 640x480 # 4:3
|
||||
# resolution: 800x600 # 4:3
|
||||
# resolution: 960x720 # 4:3
|
||||
# resolution: 1024x768 # 4:3
|
||||
# resolution: 1152x864 # 4:3
|
||||
# resolution: 1280x960 # 4:3
|
||||
# resolution: 1400x1050 # 4:3
|
||||
# resolution: 1440x1080 # 4:3
|
||||
# resolution: 1600x1200 # 4:3
|
||||
# resolution: 1856x1392 # 4:3
|
||||
# resolution: 1920x1440 # 4:3
|
||||
# resolution: 640x360 # 16:9 nHD
|
||||
# resolution: 854x480 # 16:9 FWVGA
|
||||
# resolution: 960x540 # 16:9 qHD
|
||||
# resolution: 1024x576 # 16:9 WSVGA
|
||||
resolution: 1280x720 # 16:9 HD
|
||||
# resolution: 1366x768 # 16:9 FWXGA
|
||||
# resolution: 1600x900 # 16:9 HD+
|
||||
# resolution: 1920x1080 # 16:9 Full HD
|
||||
max_fps: 30 # If Hardware Supports this it will be forced, otherwise ignored/coerced.
|
||||
#custom_flags: # You can run the Stream Services with custom flags.
|
||||
#v4l2ctl: # Add v4l2-ctl parameters to setup your camera, see Log what your cam is capable of.
|
||||
|
Before Width: | Height: | Size: 72 KiB |
|
Before Width: | Height: | Size: 510 KiB |
@@ -1,63 +1,48 @@
|
||||
Recv: echo:; Linear Units:
|
||||
Recv: echo: G21 ; (mm)
|
||||
Recv: echo:; Temperature Units:
|
||||
Recv: echo: M149 C ; Units in Celsius
|
||||
Recv: echo:; Filament settings (Disabled):
|
||||
Recv: echo: M200 S0 D1.75
|
||||
Recv: echo:; Steps per unit:
|
||||
Recv: echo: M92 X80.00 Y80.00 Z800.00 E691.50
|
||||
Recv: echo:; Max feedrates (units/s):
|
||||
Recv: echo: M203 X200.00 Y200.00 Z12.00 E120.00
|
||||
Recv: echo:; Max Acceleration (units/s2):
|
||||
Recv: echo: M201 X1000.00 Y1000.00 Z200.00 E5000.00
|
||||
Recv: echo:; Acceleration (units/s2) (P<print-accel> R<retract-accel> T<travel-accel>):
|
||||
Recv: echo: M204 P1000.00 R1250.00 T1500.00
|
||||
Recv: echo:; Advanced (B<min_segment_time_us> S<min_feedrate> T<min_travel_feedrate> J<junc_dev>):
|
||||
Recv: echo: M205 B20000.00 S0.00 T0.00 J0.01
|
||||
Recv: echo:; Home offset:
|
||||
Recv: echo: M206 X0.00 Y0.00 Z0.00
|
||||
Recv: echo:; Unified Bed Leveling:
|
||||
Recv: echo: M420 S1 Z10.00 ; Leveling ON
|
||||
Recv: Unified Bed Leveling System v1.01 active
|
||||
Recv: echo:Active Mesh Slot 0
|
||||
Recv: echo:EEPROM can hold 2 meshes.
|
||||
Recv: echo:; X-Twist Correction:
|
||||
Recv: M423 A0.00 I110.00
|
||||
Recv: M423 X0 Z0.00
|
||||
Recv: M423 X1 Z0.00
|
||||
Recv: M423 X2 Z0.00
|
||||
Recv: echo:; Material heatup parameters:
|
||||
Recv: echo: M145 S0 H200.00 B60.00 F0
|
||||
Recv: echo: M145 S1 H240.00 B70.00 F0
|
||||
Recv: echo: M145 S2 H205.00 B45.00 F0
|
||||
Recv: echo: M145 S3 H260.00 B70.00 F0
|
||||
Recv: echo:; Hotend PID:
|
||||
Recv: echo: M301 P23.48 I2.99 D46.09
|
||||
Recv: echo:; Bed PID:
|
||||
Recv: echo: M304 P163.96 I28.03 D639.32
|
||||
Recv: echo:; User thermistors:
|
||||
Recv: echo: M305 P0 R4700.0 T94162.0 B4160.0 C0.000000000 ; HOTEND 0
|
||||
Recv: echo:; Power-loss recovery:
|
||||
Recv: echo: M413 S0 ; OFF
|
||||
Recv: echo:; Z-Probe Offset:
|
||||
Recv: echo: M851 X28.00 Y-20.00 Z-2.02 ; (mm)
|
||||
Recv: echo:; Stepper driver current:
|
||||
Recv: echo: M906 X860 Y900 Z1000
|
||||
Recv: echo: M906 T0 E550
|
||||
Recv: echo:; Hybrid Threshold:
|
||||
Recv: echo: M913 X183 Y183 Z41
|
||||
Recv: echo: M913 T0 E60
|
||||
Recv: echo:; StallGuard threshold:
|
||||
Recv: echo: M914 X65 Y68
|
||||
Recv: echo:; Driver stepping mode:
|
||||
Recv: echo: M569 S1 X Y Z
|
||||
Recv: echo: M569 S1 T0 E
|
||||
Recv: echo:; Input Shaping:
|
||||
Recv: echo: M593 X F40.00 D0.15
|
||||
Recv: echo: M593 Y F40.00 D0.15
|
||||
Recv: echo:; Linear Advance:
|
||||
Recv: echo: M900 K0.05
|
||||
Recv: echo:; Filament load/unload:
|
||||
Recv: echo: M603 L0.00 U50.00 ; (mm)
|
||||
Recv: echo:; Filament runout sensor:
|
||||
Recv: echo: M412 S0 ; Sensor OFF
|
||||
echo:; Linear Units:
|
||||
echo: G21 ; (mm)
|
||||
echo:; Temperature Units:
|
||||
echo: M149 C ; Units in Celsius
|
||||
echo:; Filament settings (Disabled):
|
||||
echo: M200 S0 D1.75
|
||||
echo:; Steps per unit:
|
||||
echo: M92 X80.00 Y80.00 Z800.00 E691.50
|
||||
echo:; Max feedrates (units/s):
|
||||
echo: M203 X500.00 Y500.00 Z10.00 E30.00
|
||||
echo:; Max Acceleration (units/s2):
|
||||
echo: M201 X500.00 Y500.00 Z100.00 E5000.00
|
||||
echo:; Acceleration (units/s2) (P<print-accel> R<retract-accel> T<travel-accel>):
|
||||
echo: M204 P500.00 R500.00 T1000.00
|
||||
echo:; Advanced (B<min_segment_time_us> S<min_feedrate> T<min_travel_feedrate> X<max_x_jerk> Y<max_y_jerk> Z<max_z_jerk> E<max_e_jerk>):
|
||||
echo: M205 B20000.00 S0.00 T0.00 X8.00 Y8.00 Z0.40 E5.00
|
||||
echo:; Home offset:
|
||||
echo: M206 X0.00 Y0.00 Z0.00
|
||||
echo:; Auto Bed Leveling:
|
||||
echo: M420 S0 Z10.00 ; Leveling OFF
|
||||
echo:; Material heatup parameters:
|
||||
echo: M145 S0 H185.00 B60.00 F255
|
||||
echo: M145 S1 H240.00 B80.00 F255
|
||||
echo:; Hotend PID:
|
||||
echo: M301 P15.95 I1.30 D48.96
|
||||
echo:; Bed PID:
|
||||
echo:echo: M304 P110.38 I6.12 D497.30
|
||||
echo:; User thermistors:
|
||||
echo: M305 P0 R4700.0 T94162.0 B4160.0 C0.000000000 ; HOTEND 0
|
||||
echo:; Power-loss recovery:
|
||||
echo: M413 S1 ; ON
|
||||
echo:; Z-Probe Offset:
|
||||
echo: M851 X25.00 Y-25.00 Z0.00 ; (mm)
|
||||
echo:; Stepper driver current:
|
||||
echo: M906 X860 Y900 Z800
|
||||
echo: M906 T0 E550
|
||||
echo:; Hybrid Threshold:
|
||||
echo: M913 X183 Y183 Z41
|
||||
echo: M913 T0 E60
|
||||
echo:; StallGuard threshold:
|
||||
echo: M914 X68 Y70
|
||||
echo:; Driver stepping mode:
|
||||
echo: M569 S1 X Y Z
|
||||
echo: M569 S1 T0 E
|
||||
echo:; Linear Advance:
|
||||
echo: M900 K0.04
|
||||
echo:; Filament load/unload:
|
||||
echo: M603 L0.00 U50.00 ; (mm)
|
||||
4483
misc/bundles-outdated/PrusaSlicer_config_bundle-2.9.1.ini
Normal file
@@ -23,8 +23,6 @@ You have to decide what camp you want to be apart off.
|
||||
|
||||
##### Update Klipper repo first
|
||||
|
||||
\*\* _For those coming from the_ ${\small{\textcolor{WildStrawberry}{\texttt{Before You B.egin}}}}$ _section (installing Klipper for the first time), complete_ **only** _this section_. No need to compile the firmware, etc.
|
||||
|
||||
It's always best to update the Klipper repository that lives on the host before compiling. This ensures that your `klipper.bin` will be as 'fresh' as possible.
|
||||
|
||||
- In `Fluidd`, you can do this from `Settings` > `Software Updates`.
|
||||
@@ -39,6 +37,10 @@ It's always best to update the Klipper repository that lives on the host before
|
||||
3. `make menuconfig`
|
||||
4. Set things up to look as follows:
|
||||

|
||||
|
||||
> [!NOTE]
|
||||
> New option added: `Optimize stepper code for 'step on both edges'`, enable it.
|
||||
|
||||
5. `make clean`
|
||||
- Clears `~/klipper/out/`
|
||||
6. `make`
|
||||
|
||||
BIN
misc/firmware-outdated/klipper-v0.12.0-289-g08a1c9f1.bin
Executable file
BIN
misc/firmware-outdated/klipper-v0.13.0-114-g841a9ca2f.bin
Executable file
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 93 KiB After Width: | Height: | Size: 93 KiB |
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
BIN
misc/images/make-menuconfig-v0.13.0-371-g7a723bdc.png
Normal file
|
After Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 83 KiB After Width: | Height: | Size: 83 KiB |
BIN
misc/klipper-v0.13.0-371-g7a723bdc.bin
Executable file
BIN
misc/orcaslicer-bundles/SV06 0.4 nozzle.orca_printer
Normal file
BIN
misc/orcaslicer-bundles/SV06 0.6 nozzle.orca_printer
Normal file
BIN
misc/orcaslicer-bundles/SV06 ACE 0.4 nozzle.orca_printer
Normal file
BIN
misc/orcaslicer-bundles/SV06 ACE 0.6 nozzle.orca_printer
Normal file
BIN
misc/orcaslicer-bundles/SV06 Plus 0.4 nozzle.orca_printer
Normal file
BIN
misc/orcaslicer-bundles/SV06 Plus 0.6 nozzle.orca_printer
Normal file
BIN
misc/orcaslicer-bundles/SV07 0.4 nozzle.orca_printer
Normal file
BIN
misc/orcaslicer-bundles/SV07 0.6 nozzle.orca_printer
Normal file
BIN
misc/orcaslicer-bundles/SV07 Plus 0.4 nozzle.orca_printer
Normal file
BIN
misc/orcaslicer-bundles/SV07 Plus 0.6 nozzle.orca_printer
Normal file
15
misc/orcaslicer-bundles/how-to-generate/README.md
Normal file
@@ -0,0 +1,15 @@
|
||||
## Converting PrusaSlicer/SuperSlicer config bundles to OrcaSlicer
|
||||
|
||||
OrcaSlicer configs can be converted from PrusaSlicer using [SuperSlicer_to_Orca_scripts](https://github.com/apparle/SuperSlicer_to_Orca_scripts). It is a fork of theophile's script with some enhancements which haven't been merged yet ([theophile/SuperSlicer_to_Orca_scripts#43](https://github.com/theophile/SuperSlicer_to_Orca_scripts/pull/43)). It does require a few perl modules which can be installed using `cpanminus` (or your favorite perl module manager).
|
||||
|
||||
Most of the script is automated, with the exception of `printer_model` field which must be manually specified with a `json`. This attribute is used by OrcaSlicer to load the appropriate build plate images & STLs.
|
||||
|
||||
```
|
||||
perl SuperSlicer_to_Orca_scripts/superslicer_to_orca.pl --input PrusaSlicer_config_bundle-2.9.2.ini --nozzle-size 0.4 --compatible_printers_condition KEEP --skip-link-system-printer --printer-models-json printer_models_conversion_mapping.json --output-config-bundle OrcaSlicer_config_bundle-2.9.2-DEV.zip
|
||||
```
|
||||
|
||||
## How to use OrcaSlicer bundle:
|
||||
|
||||
This config bundle can be imported into OrcaSlicer : `File > Import > Import configs...`
|
||||
|
||||
Note, OrcaSlicer reformats the `json` and adds some default attributes, so the imported files cannot be directly compared with the contents of the zipped bundle. But you can use json comparison tools like [https://www.jsondiff.com/](https://www.jsondiff.com/) to analyze the differences if needed.
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"SV06 0.4 nozzle": "Sovol SV06",
|
||||
"SV06 0.6 nozzle": "Sovol SV06",
|
||||
"SV06 ACE 0.4 nozzle": "Sovol SV06 ACE",
|
||||
"SV06 ACE 0.6 nozzle": "Sovol SV06 ACE",
|
||||
"SV06 Plus 0.4 nozzle": "Sovol SV06 Plus",
|
||||
"SV06 Plus 0.6 nozzle": "Sovol SV06 Plus",
|
||||
"SV07 0.4 nozzle": "Sovol SV07",
|
||||
"SV07 0.6 nozzle": "Sovol SV07",
|
||||
"SV07 Plus 0.4 nozzle": "Sovol SV07 Plus",
|
||||
"SV07 Plus 0.6 nozzle": "Sovol SV07 Plus"
|
||||
}
|
||||
@@ -39,22 +39,3 @@ path: ~/mainsail
|
||||
# NOTE Cancel objects feature is enabled. If you're using a low powered device, set to False.
|
||||
# Also see [exclude_object] section in printer.cfg.
|
||||
enable_object_processing: True
|
||||
|
||||
# Crowsnest update_manager entry
|
||||
[update_manager crowsnest]
|
||||
type: git_repo
|
||||
path: ~/crowsnest
|
||||
origin: https://github.com/mainsail-crew/crowsnest.git
|
||||
managed_services: crowsnest
|
||||
install_script: tools/pkglist.sh
|
||||
|
||||
[update_manager timelapse]
|
||||
type: git_repo
|
||||
primary_branch: main
|
||||
path: ~/moonraker-timelapse
|
||||
origin: https://github.com/mainsail-crew/moonraker-timelapse.git
|
||||
managed_services: klipper moonraker
|
||||
|
||||
[timelapse]
|
||||
output_path: ~/printer_data/timelapse/
|
||||
frame_path: /tmp/timelapse/printer
|
||||
|
||||
@@ -4,10 +4,8 @@
|
||||
[include ./cfgs/CALIBRATION.cfg]
|
||||
[include ./cfgs/kamp/KAMP_Settings.cfg]
|
||||
[include ./cfgs/TEST_SPEED.cfg]
|
||||
[include ./cfgs/GET_VARIABLE.cfg]
|
||||
[include ./cfgs/timelapse.cfg]
|
||||
|
||||
# NOTE Uncomment the ONE of the following lines if you're using an adxl345
|
||||
# [include ./cfgs/adxl-rp2040.cfg]
|
||||
# [include ./cfgs/adxl-rpi-pico-2x.cfg]
|
||||
# [include ./cfgs/adxl-rpi-direct.cfg]
|
||||
# [include ./cfgs/adxl-direct.cfg]
|
||||
|
||||
115
printer.cfg
@@ -8,15 +8,13 @@
|
||||
|
||||
[mcu]
|
||||
# NOTE Obtain definition by "ls -l /dev/serial/by-path/" or "ls -l /dev/serial/by-id/"
|
||||
#serial: /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2:1.0-port0
|
||||
#serial: /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.1:1.0-port0
|
||||
serial: /dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0
|
||||
serial: /dev/serial/by-path/platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2:1.0-port0
|
||||
restart_method: command
|
||||
|
||||
[printer]
|
||||
kinematics: cartesian
|
||||
max_velocity: 300
|
||||
max_accel: 11000
|
||||
max_velocity: 200
|
||||
max_accel: 3000
|
||||
max_z_velocity: 15
|
||||
max_z_accel: 45
|
||||
square_corner_velocity: 8.0
|
||||
@@ -39,10 +37,10 @@ homing_retract_dist: 0
|
||||
|
||||
[tmc2209 stepper_x]
|
||||
uart_pin: PC1
|
||||
run_current: 0.900
|
||||
run_current: 0.860
|
||||
stealthchop_threshold: 0
|
||||
interpolate: False
|
||||
sense_resistor: 0.110 # 0.150
|
||||
sense_resistor: 0.150
|
||||
uart_address: 3
|
||||
driver_SGTHRS: 81
|
||||
diag_pin: PA5
|
||||
@@ -64,7 +62,7 @@ uart_pin: PC0
|
||||
run_current: 0.900
|
||||
stealthchop_threshold: 0
|
||||
interpolate: False
|
||||
sense_resistor: 0.110 # 0.150
|
||||
sense_resistor: 0.150
|
||||
uart_address: 3
|
||||
driver_SGTHRS: 81
|
||||
diag_pin: PA6
|
||||
@@ -76,7 +74,7 @@ enable_pin: !PC3
|
||||
microsteps: 128
|
||||
rotation_distance: 4
|
||||
endstop_pin: probe:z_virtual_endstop
|
||||
position_min: -3
|
||||
position_min: -4
|
||||
position_max: 258 # NOTE You can adjust this if you have more room
|
||||
homing_speed: 5
|
||||
|
||||
@@ -85,7 +83,7 @@ uart_pin: PA15
|
||||
run_current: 0.900
|
||||
stealthchop_threshold: 0
|
||||
interpolate: False
|
||||
sense_resistor: 0.110 # 0.150
|
||||
sense_resistor: 0.150
|
||||
uart_address: 3
|
||||
diag_pin: PA7
|
||||
|
||||
@@ -104,11 +102,14 @@ filament_diameter: 1.750
|
||||
heater_pin: PA1
|
||||
sensor_type: EPCOS 100K B57560G104F
|
||||
sensor_pin: PC5
|
||||
control: pid
|
||||
pid_kd: 86.991
|
||||
pid_kp: 21.479
|
||||
pid_ki: 1.326
|
||||
min_temp: 0
|
||||
max_temp: 300
|
||||
max_extrude_only_distance: 150.0
|
||||
max_extrude_cross_section: 5 # NOTE Needed for KAMP purge
|
||||
pressure_advance: 0.031 # 0.0435 # 0.0465 # 0.044
|
||||
|
||||
[tmc2209 extruder]
|
||||
uart_pin: PC14
|
||||
@@ -126,6 +127,10 @@ uart_address: 3
|
||||
heater_pin: PA2
|
||||
sensor_type: EPCOS 100K B57560G104F
|
||||
sensor_pin: PC4
|
||||
control: pid
|
||||
pid_kp: 64.440
|
||||
pid_ki: 0.773
|
||||
pid_kd: 1343.571
|
||||
min_temp: 0
|
||||
max_temp: 110
|
||||
|
||||
@@ -137,7 +142,7 @@ max_temp: 110
|
||||
pin: PB1
|
||||
x_offset: 27
|
||||
y_offset: -20
|
||||
# z_offset: 0
|
||||
z_offset: 0
|
||||
samples: 3
|
||||
samples_result: median
|
||||
samples_tolerance: 0.01
|
||||
@@ -183,12 +188,6 @@ sid_pin: PB15
|
||||
encoder_pins: ^PB14, ^PB10
|
||||
click_pin: ^!PB2
|
||||
|
||||
[input_shaper]
|
||||
shaper_freq_x: 50.4 # 55.8 # 55.2 # 53.4 # 56.0 # 56.6 # 55.0 ; recommend accel <7500; 9200
|
||||
shaper_type_x: mzv
|
||||
shaper_freq_y: 41.4 # 42.4 # 43.2 # 45.4 # 48.4 ; recommend accel < 5000;5300
|
||||
shaper_type_y: mzv
|
||||
|
||||
[bed_screws]
|
||||
screw1_name: front left
|
||||
screw1: 26.5, 31
|
||||
@@ -230,83 +229,3 @@ runout_gcode:
|
||||
M117 Runout Detected
|
||||
{ action_respond_info("Runout Detected") }
|
||||
CONDITIONAL_BEEP i=3 dur=300 freq=400
|
||||
|
||||
#*# <---------------------- SAVE_CONFIG ---------------------->
|
||||
#*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated.
|
||||
#*#
|
||||
#*# [extruder]
|
||||
#*# control = pid
|
||||
#*# pid_kp = 29.273
|
||||
#*# pid_ki = 3.049
|
||||
#*# pid_kd = 70.256
|
||||
#*#
|
||||
#*# [heater_bed]
|
||||
#*# control = pid
|
||||
#*# pid_kp = 67.629
|
||||
#*# pid_ki = 1.338
|
||||
#*# pid_kd = 854.657
|
||||
#*#
|
||||
#*# [probe]
|
||||
#*# z_offset = 1.300
|
||||
#*#
|
||||
#*# [axis_twist_compensation]
|
||||
#*# z_compensations = 0.086615, -0.020885, -0.065729
|
||||
#*# compensation_start_x = 27.0
|
||||
#*# compensation_end_x = 195.0
|
||||
#*#
|
||||
#*# [bed_mesh default-1]
|
||||
#*# version = 1
|
||||
#*# points =
|
||||
#*# 0.038482, 0.061556, 0.047131, 0.009098, -0.055469
|
||||
#*# -0.033862, 0.002963, 0.008381, -0.014808, -0.099375
|
||||
#*# -0.095737, -0.047819, -0.040213, -0.062620, -0.132031
|
||||
#*# -0.102768, -0.048131, -0.042088, -0.064808, -0.124688
|
||||
#*# -0.036206, 0.030931, 0.037131, 0.011598, -0.052656
|
||||
#*# min_x = 27.0
|
||||
#*# max_x = 222.0
|
||||
#*# min_y = 6.0
|
||||
#*# max_y = 203.0
|
||||
#*# x_count = 5
|
||||
#*# y_count = 5
|
||||
#*# mesh_x_pps = 2
|
||||
#*# mesh_y_pps = 2
|
||||
#*# algo = lagrange
|
||||
#*# tension = 0.2
|
||||
#*#
|
||||
#*# [bed_mesh default-0]
|
||||
#*# version = 1
|
||||
#*# points =
|
||||
#*# 0.037145, 0.055020, 0.034770, -0.006886, -0.072291
|
||||
#*# -0.035980, -0.003730, 0.000395, -0.026104, -0.109323
|
||||
#*# -0.095512, -0.047480, -0.047261, -0.073292, -0.135573
|
||||
#*# -0.091918, -0.042793, -0.043824, -0.073136, -0.132760
|
||||
#*# -0.026449, 0.032520, 0.031801, -0.001886, -0.079010
|
||||
#*# min_x = 27.0
|
||||
#*# max_x = 222.0
|
||||
#*# min_y = 6.0
|
||||
#*# max_y = 203.0
|
||||
#*# x_count = 5
|
||||
#*# y_count = 5
|
||||
#*# mesh_x_pps = 2
|
||||
#*# mesh_y_pps = 2
|
||||
#*# algo = lagrange
|
||||
#*# tension = 0.2
|
||||
#*#
|
||||
#*# [bed_mesh default]
|
||||
#*# version = 1
|
||||
#*# points =
|
||||
#*# 0.029919, 0.051593, 0.042329, -0.005485, -0.076198
|
||||
#*# -0.035550, 0.010968, 0.015923, -0.012203, -0.101979
|
||||
#*# -0.095706, -0.038564, -0.032827, -0.059860, -0.134323
|
||||
#*# -0.098988, -0.036220, -0.031733, -0.060641, -0.127292
|
||||
#*# -0.035238, 0.039718, 0.042954, 0.004047, -0.067135
|
||||
#*# x_count = 5
|
||||
#*# y_count = 5
|
||||
#*# mesh_x_pps = 2
|
||||
#*# mesh_y_pps = 2
|
||||
#*# algo = lagrange
|
||||
#*# tension = 0.2
|
||||
#*# min_x = 27.0
|
||||
#*# max_x = 222.0
|
||||
#*# min_y = 6.0
|
||||
#*# max_y = 203.0
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
/home/pi/moonraker-timelapse/klipper_macro/timelapse.cfg
|
||||