mirror of
https://github.com/bassamanator/Sovol-SV06-firmware.git
synced 2025-11-08 21:41:15 +00:00
Compare commits
194 Commits
v0.1.0-sv0
...
v0.1.3-bet
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b7b32dd046 | ||
|
|
9265d9cc96 | ||
|
|
c4b3f64e1a | ||
|
|
fd7b9e3f46 | ||
|
|
178733e0f5 | ||
|
|
8f100d73f3 | ||
|
|
82d25743fc | ||
|
|
aa935b6d57 | ||
|
|
49ed59dc14 | ||
|
|
ace26b692f | ||
|
|
d97cc87dc6 | ||
|
|
f1614f477a | ||
|
|
67307f5679 | ||
|
|
2da06be82e | ||
|
|
8a8229f6e8 | ||
|
|
7908b3d052 | ||
|
|
bb90be25cc | ||
|
|
5f59d5bacb | ||
|
|
d6f03f7a2c | ||
|
|
d3cc53eafe | ||
|
|
28ba80dd29 | ||
|
|
82c02bbdbf | ||
|
|
f5c533a35d | ||
|
|
d405db4922 | ||
|
|
511fcbed57 | ||
|
|
12ed1d3a9f | ||
|
|
4cfbe14e59 | ||
|
|
2f79fc59e3 | ||
|
|
3c8a5d6a42 | ||
|
|
52c721226f | ||
|
|
089ad6a4bd | ||
|
|
9ee603e74d | ||
|
|
28ac5d5260 | ||
|
|
b22c8a0b02 | ||
|
|
7aecb64bca | ||
|
|
763304e128 | ||
|
|
9c79ca81bb | ||
|
|
5c8b1f0de9 | ||
|
|
ccdde22c57 | ||
|
|
66c19cd7d8 | ||
|
|
61eaab3221 | ||
|
|
cd59efe4c1 | ||
|
|
c327345a08 | ||
|
|
baf505113d | ||
|
|
f921823acf | ||
|
|
f385fe920e | ||
|
|
817a6771f6 | ||
|
|
fb7e7bcc6e | ||
|
|
a6afa97f88 | ||
|
|
a5f72beea4 | ||
|
|
6399c70309 | ||
|
|
9c9eb1b088 | ||
|
|
40d88fe907 | ||
|
|
5ada85f964 | ||
|
|
1e60090f1e | ||
|
|
fa43f570d7 | ||
|
|
7ea890627a | ||
|
|
ac5426e331 | ||
|
|
24a4262af2 | ||
|
|
be1711cb68 | ||
|
|
d5de6866da | ||
|
|
82a5603d1e | ||
|
|
ad4c893fbc | ||
|
|
a5a75f3c1e | ||
|
|
24610b1dee | ||
|
|
9d08c418c0 | ||
|
|
7112c53ad8 | ||
|
|
f0602b5cb2 | ||
|
|
5242dc7276 | ||
|
|
05dba3939e | ||
|
|
d0c43f3777 | ||
|
|
4dcd5e3840 | ||
|
|
53f6f75c85 | ||
|
|
d062ee5bcc | ||
|
|
aa8d3de2c7 | ||
|
|
b0d122a1c1 | ||
|
|
6ede727449 | ||
|
|
f4f0fd50bb | ||
|
|
6eedc4bd60 | ||
|
|
3a85c0e532 | ||
|
|
940ea48541 | ||
|
|
9f69a7d355 | ||
|
|
57e6755ced | ||
|
|
1cdcb4934b | ||
|
|
835e990d88 | ||
|
|
45434cde14 | ||
|
|
51fd3f0b19 | ||
|
|
4df5ef2db3 | ||
|
|
23d24aab17 | ||
|
|
43d067acab | ||
|
|
498e0d4a4d | ||
|
|
4a38d34a0e | ||
|
|
9b712df594 | ||
|
|
e888ac0882 | ||
|
|
323e8df221 | ||
|
|
40534f3788 | ||
|
|
5e342261c8 | ||
|
|
89fbb10154 | ||
|
|
1823d0ca37 | ||
|
|
6eb152e58d | ||
|
|
c1672c9a42 | ||
|
|
2e5764f295 | ||
|
|
581ff9da48 | ||
|
|
4ecb37cf9f | ||
|
|
8bfed9c573 | ||
|
|
7e5aeb6654 | ||
|
|
f5d3499da7 | ||
|
|
2c8a4e5aa0 | ||
|
|
b051707f52 | ||
|
|
807c91507a | ||
|
|
a30d367d1d | ||
|
|
b8d246762f | ||
|
|
9fc09eef43 | ||
|
|
02eb713930 | ||
|
|
5abaf73b9c | ||
|
|
a71ba1569a | ||
|
|
238091d860 | ||
|
|
f0729bfc2e | ||
|
|
9352cbc3d0 | ||
|
|
0ce30e2d23 | ||
|
|
bc612db077 | ||
|
|
ef774efde3 | ||
|
|
44a1db591b | ||
|
|
6dc119cf99 | ||
|
|
9e68610908 | ||
|
|
b3040f4244 | ||
|
|
8c6ebbca2c | ||
|
|
1f3707123a | ||
|
|
4c3ae83f19 | ||
|
|
953daefa32 | ||
|
|
d53a6d822a | ||
|
|
3f06eebe42 | ||
|
|
85b2ca15e8 | ||
|
|
688193903b | ||
|
|
7da9a83924 | ||
|
|
d0b426d5b0 | ||
|
|
3c98d99665 | ||
|
|
4b90c7abc5 | ||
|
|
0358cb6304 | ||
|
|
2c49bf8396 | ||
|
|
dc85ec05c6 | ||
|
|
cc57e07c62 | ||
|
|
e501bdac3f | ||
|
|
f810abf9f7 | ||
|
|
69071df396 | ||
|
|
daa07e37c0 | ||
|
|
758a3f8b77 | ||
|
|
c1427d9418 | ||
|
|
371e0d604a | ||
|
|
857a8fdd3b | ||
|
|
e2ec5b8d49 | ||
|
|
f9832b60c3 | ||
|
|
3b59b534c9 | ||
|
|
761650bf80 | ||
|
|
c89d69e678 | ||
|
|
5afbf002c2 | ||
|
|
5b5ce8df57 | ||
|
|
8346c79f35 | ||
|
|
1805a999b1 | ||
|
|
98a1cd7fe6 | ||
|
|
39131e0d66 | ||
|
|
060a9334ee | ||
|
|
c215540a0c | ||
|
|
862c45b88f | ||
|
|
a19df40bed | ||
|
|
57f4aa303f | ||
|
|
2ad0456132 | ||
|
|
64825fda41 | ||
|
|
5ba208b674 | ||
|
|
baa31179a3 | ||
|
|
6dafba0ab8 | ||
|
|
837f6d1e19 | ||
|
|
efddacb0cb | ||
|
|
40c32cab69 | ||
|
|
73f15169b6 | ||
|
|
ad78f3f759 | ||
|
|
d227fcb58f | ||
|
|
d08bbb7f23 | ||
|
|
c462eb819c | ||
|
|
4528151bc1 | ||
|
|
aff79ff8de | ||
|
|
f12e2f3382 | ||
|
|
a671161b99 | ||
|
|
cf3597f158 | ||
|
|
382b4c4159 | ||
|
|
dd71ed1320 | ||
|
|
e469e05a91 | ||
|
|
3c73cf3461 | ||
|
|
104c9fca75 | ||
|
|
5fcb29322d | ||
|
|
f4ce4165d5 | ||
|
|
5930d03add | ||
|
|
04fb184c86 | ||
|
|
2303b4422a |
34
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
34
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
---
|
||||||
|
name: Bug report
|
||||||
|
about: Create a report to help us improve
|
||||||
|
title: "[BUG]"
|
||||||
|
labels: ''
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Describe the bug**
|
||||||
|
A clear and concise description of what the bug is.
|
||||||
|
|
||||||
|
**To Reproduce**
|
||||||
|
Steps to reproduce the behavior:
|
||||||
|
1. Go to '...'
|
||||||
|
2. Click on '....'
|
||||||
|
3. Scroll down to '....'
|
||||||
|
4. See error
|
||||||
|
|
||||||
|
**Expected behavior**
|
||||||
|
A clear and concise description of what you expected to happen.
|
||||||
|
|
||||||
|
**Screenshots**
|
||||||
|
If applicable, add screenshots to help explain your problem.
|
||||||
|
|
||||||
|
**What kind of device are you using to host Klipper?**
|
||||||
|
- OS: [e.g. old laptop, PC, Raspberry Pi]
|
||||||
|
- Version: []
|
||||||
|
|
||||||
|
**How did you install Klipper?**
|
||||||
|
- Manual install, KIAUH, MainsailOS, FluiddPi, etc.
|
||||||
|
|
||||||
|
**Additional context**
|
||||||
|
Add any other context about the problem here.
|
||||||
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
name: Feature request
|
||||||
|
about: Suggest an idea for this project
|
||||||
|
title: ''
|
||||||
|
labels: ''
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Is your feature request related to a problem? Please describe.**
|
||||||
|
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||||
|
|
||||||
|
**Describe the solution you'd like**
|
||||||
|
A clear and concise description of what you want to happen.
|
||||||
|
|
||||||
|
**Describe alternatives you've considered**
|
||||||
|
A clear and concise description of any alternative solutions or features you've considered.
|
||||||
|
|
||||||
|
**Additional context**
|
||||||
|
Add any other context or screenshots about the feature request here.
|
||||||
30
.vscode/settings.json
vendored
30
.vscode/settings.json
vendored
@@ -4,5 +4,33 @@
|
|||||||
"editor.detectIndentation": false,
|
"editor.detectIndentation": false,
|
||||||
"git.mergeEditor": false,
|
"git.mergeEditor": false,
|
||||||
"spellright.language": ["en-GB-10-1."],
|
"spellright.language": ["en-GB-10-1."],
|
||||||
"spellright.documentTypes": ["markdown", "plaintext"]
|
"spellright.documentTypes": ["markdown", "plaintext"],
|
||||||
|
"cSpell.words": [
|
||||||
|
"ADXL",
|
||||||
|
"blanchas",
|
||||||
|
"cfgs",
|
||||||
|
"Fluidd",
|
||||||
|
"Fluiddpi",
|
||||||
|
"gcode",
|
||||||
|
"githubstar",
|
||||||
|
"hotend",
|
||||||
|
"KIAUH",
|
||||||
|
"Klipper",
|
||||||
|
"Klipperized",
|
||||||
|
"lrwxrwxrwx",
|
||||||
|
"moonraker",
|
||||||
|
"octahedroflake",
|
||||||
|
"PARKBED",
|
||||||
|
"PARKCENTER",
|
||||||
|
"PARKFRONT",
|
||||||
|
"PARKFRONTLOW",
|
||||||
|
"PARKREAR",
|
||||||
|
"pico",
|
||||||
|
"Prusa",
|
||||||
|
"runout",
|
||||||
|
"Sovol"
|
||||||
|
],
|
||||||
|
"[markdown]": {
|
||||||
|
"editor.formatOnSave": false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
128
CODE_OF_CONDUCT.md
Normal file
128
CODE_OF_CONDUCT.md
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
# Contributor Covenant Code of Conduct
|
||||||
|
|
||||||
|
## Our Pledge
|
||||||
|
|
||||||
|
We as members, contributors, and leaders pledge to make participation in our
|
||||||
|
community a harassment-free experience for everyone, regardless of age, body
|
||||||
|
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||||
|
identity and expression, level of experience, education, socio-economic status,
|
||||||
|
nationality, personal appearance, race, religion, or sexual identity
|
||||||
|
and orientation.
|
||||||
|
|
||||||
|
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||||
|
diverse, inclusive, and healthy community.
|
||||||
|
|
||||||
|
## Our Standards
|
||||||
|
|
||||||
|
Examples of behavior that contributes to a positive environment for our
|
||||||
|
community include:
|
||||||
|
|
||||||
|
* Demonstrating empathy and kindness toward other people
|
||||||
|
* Being respectful of differing opinions, viewpoints, and experiences
|
||||||
|
* Giving and gracefully accepting constructive feedback
|
||||||
|
* Accepting responsibility and apologizing to those affected by our mistakes,
|
||||||
|
and learning from the experience
|
||||||
|
* Focusing on what is best not just for us as individuals, but for the
|
||||||
|
overall community
|
||||||
|
|
||||||
|
Examples of unacceptable behavior include:
|
||||||
|
|
||||||
|
* The use of sexualized language or imagery, and sexual attention or
|
||||||
|
advances of any kind
|
||||||
|
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||||
|
* Public or private harassment
|
||||||
|
* Publishing others' private information, such as a physical or email
|
||||||
|
address, without their explicit permission
|
||||||
|
* Other conduct which could reasonably be considered inappropriate in a
|
||||||
|
professional setting
|
||||||
|
|
||||||
|
## Enforcement Responsibilities
|
||||||
|
|
||||||
|
Community leaders are responsible for clarifying and enforcing our standards of
|
||||||
|
acceptable behavior and will take appropriate and fair corrective action in
|
||||||
|
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||||
|
or harmful.
|
||||||
|
|
||||||
|
Community leaders have the right and responsibility to remove, edit, or reject
|
||||||
|
comments, commits, code, wiki edits, issues, and other contributions that are
|
||||||
|
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
||||||
|
decisions when appropriate.
|
||||||
|
|
||||||
|
## Scope
|
||||||
|
|
||||||
|
This Code of Conduct applies within all community spaces, and also applies when
|
||||||
|
an individual is officially representing the community in public spaces.
|
||||||
|
Examples of representing our community include using an official e-mail address,
|
||||||
|
posting via an official social media account, or acting as an appointed
|
||||||
|
representative at an online or offline event.
|
||||||
|
|
||||||
|
## Enforcement
|
||||||
|
|
||||||
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||||
|
reported to the community leaders responsible for enforcement at
|
||||||
|
bassamanator.2cj4t@simplelogin.com.
|
||||||
|
All complaints will be reviewed and investigated promptly and fairly.
|
||||||
|
|
||||||
|
All community leaders are obligated to respect the privacy and security of the
|
||||||
|
reporter of any incident.
|
||||||
|
|
||||||
|
## Enforcement Guidelines
|
||||||
|
|
||||||
|
Community leaders will follow these Community Impact Guidelines in determining
|
||||||
|
the consequences for any action they deem in violation of this Code of Conduct:
|
||||||
|
|
||||||
|
### 1. Correction
|
||||||
|
|
||||||
|
**Community Impact**: Use of inappropriate language or other behavior deemed
|
||||||
|
unprofessional or unwelcome in the community.
|
||||||
|
|
||||||
|
**Consequence**: A private, written warning from community leaders, providing
|
||||||
|
clarity around the nature of the violation and an explanation of why the
|
||||||
|
behavior was inappropriate. A public apology may be requested.
|
||||||
|
|
||||||
|
### 2. Warning
|
||||||
|
|
||||||
|
**Community Impact**: A violation through a single incident or series
|
||||||
|
of actions.
|
||||||
|
|
||||||
|
**Consequence**: A warning with consequences for continued behavior. No
|
||||||
|
interaction with the people involved, including unsolicited interaction with
|
||||||
|
those enforcing the Code of Conduct, for a specified period of time. This
|
||||||
|
includes avoiding interactions in community spaces as well as external channels
|
||||||
|
like social media. Violating these terms may lead to a temporary or
|
||||||
|
permanent ban.
|
||||||
|
|
||||||
|
### 3. Temporary Ban
|
||||||
|
|
||||||
|
**Community Impact**: A serious violation of community standards, including
|
||||||
|
sustained inappropriate behavior.
|
||||||
|
|
||||||
|
**Consequence**: A temporary ban from any sort of interaction or public
|
||||||
|
communication with the community for a specified period of time. No public or
|
||||||
|
private interaction with the people involved, including unsolicited interaction
|
||||||
|
with those enforcing the Code of Conduct, is allowed during this period.
|
||||||
|
Violating these terms may lead to a permanent ban.
|
||||||
|
|
||||||
|
### 4. Permanent Ban
|
||||||
|
|
||||||
|
**Community Impact**: Demonstrating a pattern of violation of community
|
||||||
|
standards, including sustained inappropriate behavior, harassment of an
|
||||||
|
individual, or aggression toward or disparagement of classes of individuals.
|
||||||
|
|
||||||
|
**Consequence**: A permanent ban from any sort of public interaction within
|
||||||
|
the community.
|
||||||
|
|
||||||
|
## Attribution
|
||||||
|
|
||||||
|
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||||
|
version 2.0, available at
|
||||||
|
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
|
||||||
|
|
||||||
|
Community Impact Guidelines were inspired by [Mozilla's code of conduct
|
||||||
|
enforcement ladder](https://github.com/mozilla/diversity).
|
||||||
|
|
||||||
|
[homepage]: https://www.contributor-covenant.org
|
||||||
|
|
||||||
|
For answers to common questions about this code of conduct, see the FAQ at
|
||||||
|
https://www.contributor-covenant.org/faq. Translations are available at
|
||||||
|
https://www.contributor-covenant.org/translations.
|
||||||
8
CONTRIBUTING.md
Normal file
8
CONTRIBUTING.md
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
# Contribution Guidelines
|
||||||
|
|
||||||
|
When contributing, please ...
|
||||||
|
- provide a clear and concise explanation of your pull request.
|
||||||
|
- try to make small changes, ie, make many small pull requests as opposed to a single large pull request. This allows me to check your work more quickly, thus merge more quickly.
|
||||||
|
- try to follow the patterns I've already established.
|
||||||
|
|
||||||
|
Thank you.
|
||||||
328
README.md
328
README.md
@@ -1,13 +1,40 @@
|
|||||||
# 🚨 *One-Stop-Shop* Sovol SV06 Klipper Configuration
|
# 🚨 _One-Stop-Shop_ Klipper Configuration
|
||||||
|
|
||||||
This repository contains the Klipper configuration and firmware for the Sovol SV06 3D printer with completely *stock hardware*.
|
This branch contains the Klipper configuration and firmware for the **Sovol SV06** 3D printer.
|
||||||
|
|
||||||
|
| Printer | Branch |
|
||||||
|
| --------------------------- | ----------------------------------------------------------------------------------------- |
|
||||||
|
| Sovol SV06 | ✨**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 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) |
|
||||||
|
|
||||||
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.
|
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.
|
||||||
|
|
||||||
# Highlights
|
## Outline
|
||||||
|
|
||||||
- 💥 This Klipper configuration is an *endpoint*, meaning that it contains **everything** that you could possibly need in order to have an excellent Klipper experience! 💥
|
- [Features](#features)
|
||||||
- `NEW` <img src="./images/party_blob.gif" width="20" alt=''/> Filament runout sensor usage implemented. <img src="./images/party_blob.gif" width="20" alt=''/>
|
- [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)
|
||||||
|
- [Directory Structure](#directory-structure)
|
||||||
|
- [Support Me](#support-me)
|
||||||
|
- [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! 💥
|
||||||
|
- <img src="./images/party_blob.gif" width="20" alt=''/> Filament runout sensor usage implemented. <img src="./images/party_blob.gif" width="20" alt=''/>
|
||||||
- Minimum configuration settings for Mainsail/Fluiddpi to work.
|
- 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 ([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.
|
- 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.
|
- Bed model and texture to use in SuperSlicer/PrusaSlicer.
|
||||||
@@ -18,87 +45,102 @@ I am creating these files for my personal use and cannot be held responsible for
|
|||||||
- Load/unload filament macros.
|
- Load/unload filament macros.
|
||||||
- Purge line macro.
|
- Purge line macro.
|
||||||
|
|
||||||
## To do:
|
|
||||||
|
|
||||||
- [x] Replace M109/M190 with `TEMPERATURE_WAIT`.
|
|
||||||
- [ ] Get the Ellis `TEST_SPEED` macro working.
|
|
||||||
- [x] Add information about directory structure.
|
|
||||||
- [x] Create FAQ section.
|
|
||||||
- [x] Get filament sensor working with hotend PCB.
|
|
||||||
- [x] Finalize filament sensor config and merge into `master`.
|
|
||||||
- [ ] Create topic in Discussion section detailing how users should keep this repository in sync with their own Klipper config using `git`.
|
|
||||||
- [ ] Explain `PAUSE`/`RESUME` extruder behaviour.
|
|
||||||
- [ ] Integrate KAMP (Klipper Adaptive Meshing and Purging).
|
|
||||||
- [x] Add `BEEP` when filament needs changing/`M600`.
|
|
||||||
|
|
||||||
## Stay Up-to-Date
|
## 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:
|
Watch for releases and updates.
|
||||||
|
|
||||||
<img src="./images/githubstar.gif" width="500" alt='Raspberry Pi'/>
|
<img src="./images/githubstar.gif" width="500" alt='Raspberry Pi'/>
|
||||||
|
|
||||||
# Installation Steps
|
## 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 all documentation found on this page. Also note that Klipper is not a _must_, and is not for everyone. You can stick with Marlin, and have a fine 3D printing experience.
|
||||||
|
|
||||||
## Before You Begin
|
## Before You Begin
|
||||||
|
|
||||||
- Know what you're getting into by reading this documentation *fully!*
|
- Read this documentation _fully!_
|
||||||
- It is assumed that you are connected to your host Raspberry Pi (or other host device) via SSH, and that your printer motherboard is connected to the host via USB.
|
- Make sure your printer is in good physical condition, because print and travel speeds will be _a lot faster_ than they were before. Consider yourself warned.
|
||||||
|
- Follow the steps in order.
|
||||||
|
- If an error was reported at a step, do no proceed to the next step.
|
||||||
|
- It is assumed that you are connected to your host Raspberry Pi (or other host device) via SSH, and that your printer motherboard is connected to the host via a data USB cable. Note that most of the micro USB cables that you find at home are _unlikely_ to be data cables, and it's not possible to tell just by looking.
|
||||||
- It is also assumed that the username on the host device is `pi`. If that is not the case, you will have to manually edit `moonraker.conf` and `cfgs/misc-macros.cfg` and change any mentions of `/home/pi` to `/home/yourUserName`.
|
- It is also assumed that the username on the host device is `pi`. If that is not the case, you will have to manually edit `moonraker.conf` and `cfgs/misc-macros.cfg` and change any mentions of `/home/pi` to `/home/yourUserName`.
|
||||||
- Klipper *must* be installed on the host Raspberry Pi for everything to work. Easiest is to use a [FluiddPi](https://docs.fluidd.xyz/installation/fluiddpi#download) or [MainsailOS](https://github.com/mainsail-crew/mainsail/releases/latest) image.
|
- 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) (⚠️ `FluiddPI` is not under active maintenance) or [MainsailOS](https://github.com/mainsail-crew/mainsail/releases/latest) image. Alternatively, you can install `Fluidd` or `Mainsail` via [KIAUH](https://github.com/th33xitus/kiauh).
|
||||||
- It is assumed that there is one instance of Klipper installed. If you have multiple instances of Klipper installed, via `KIAUH` for example, then this guide is not for you. You can still use all the configs of course, but the steps in this guide will not work for you.
|
- Robert Redford's performance in _Spy Game (2001)_ was superb!
|
||||||
|
- It is assumed that there is one instance of Klipper installed. If you have multiple instances of Klipper installed, via `KIAUH` for example, then this guide is not for you. You can still use all the configs of course, but the steps in this guide will likely not work for you.
|
||||||
- Your question has probably been answered already, but if it hasn't, please post in the [Discussion](https://github.com/bassamanator/Sovol-SV06-firmware/discussions) section.
|
- Your question has probably been answered already, but if it hasn't, please post in the [Discussion](https://github.com/bassamanator/Sovol-SV06-firmware/discussions) section.
|
||||||
- If you see any errors, or encounter any issues, please create an [Issue](https://github.com/bassamanator/Sovol-SV06-firmware/issues/new), or a [Pull request](https://github.com/bassamanator/Sovol-SV06-firmware/pulls).
|
|
||||||
- I would recommend searching for the word `NOTE` in this repository. There are roughly half a dozen short points amongst the various files that you should be aware of if you're using this configuration.
|
- 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
|
## Klipper Installation
|
||||||
|
|
||||||
💡 *If you have already flashed klipper onto your motherboard in the past, you can skip this step.*
|
### Flash Firmware
|
||||||
|
|
||||||
💡 For the sake of simplicity, I will refer to the klipper firmware file as `klipper.bin` even though the actual filename is something along the lines of `klipper-v0.11.0-148-g52f4e20c.bin`.
|
💡 _If you have already flashed klipper onto your motherboard in the past, you can skip this step._
|
||||||
|
|
||||||
### Prepare the microSD Card for Flashing
|
Please note:
|
||||||
|
|
||||||
- Size: `8GB`. According to Sovol, the largest size that you can use is `16GB`.
|
- For the sake of simplicity, I will refer to the klipper firmware file as `klipper.bin` even though the actual filename is something along the lines of `klipper-v0.11.0-148-g52f4e20c.bin`.
|
||||||
|
- The firmware file is located in the `misc` folder.
|
||||||
|
- Flashing will only work if current firmware filename is _different from previous flashing procedure_. The `.bin` is also important.
|
||||||
|
- 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`.
|
- File system: `FAT32`.
|
||||||
- Must not contain any files *except* the firmware file.
|
- Allocation unit size: `4096 bytes`.
|
||||||
|
- Must not contain any files _except_ the firmware file.
|
||||||
|
|
||||||
### Flashing Procedure
|
#### 2. Flashing Procedure
|
||||||
|
|
||||||
1. Disconnect any USB cables that might be connected to the motherboard.
|
1. Disconnect any USB cables that might be connected to the motherboard.
|
||||||
2. Copy `klipper.bin` to the microSD card.
|
2. Copy `klipper.bin` to the microSD card.
|
||||||
3. Make sure the printer is off.
|
3. Make sure the printer is off.
|
||||||
4. Insert the microSD card into printer.
|
4. Insert the microSD card into printer.
|
||||||
4. Turn on the printer and wait a minute (usually takes 10 seconds).
|
5. Turn on the printer and wait a minute (usually takes 10 seconds).
|
||||||
5. Turn off the printer and remove the microSD.
|
6. Turn off the printer and remove the microSD.
|
||||||
|
|
||||||
You may find this [video](https://youtu.be/p6l253OJa34) useful.
|
You may find this [video](https://youtu.be/p6l253OJa34) useful.
|
||||||
|
|
||||||
⚠️ **Caveat**: Flashing will only work if current firmware filename is *different from previous flashing procedure*. The `.bin` is also important.
|
### Download OSS Klipper Configuration
|
||||||
|
|
||||||
## Download Klipper Configuration
|
You can choose _either_ of the 2 following methods.
|
||||||
|
|
||||||
You can choose *either* of the 2 following methods.
|
#### Method 1: Clone the Repository
|
||||||
|
|
||||||
### Clone the Repository
|
|
||||||
|
|
||||||
1. `cd ~/printer_data/config`
|
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`.
|
2. Empty entire `~/printer_data/config` folder.
|
||||||
3. `git clone -b master --single-branch https://github.com/bassamanator/Sovol-SV06-firmware.git .`
|
- In linux, you can delete files via `rm fileName` and directories via `rmdir directoryName`.
|
||||||
|
3. `git clone -b master --single-branch https://github.com/bassamanator/Sovol-SV06-firmware.git .` ⚠️ Don't miss the period!
|
||||||
|
|
||||||
### Download the ZIP
|
#### Method 2: Download the ZIP
|
||||||
|
|
||||||
1. [Download](https://github.com/bassamanator/Sovol-SV06-firmware/archive/refs/heads/master.zip) the `ZIP` file containing the Klipper configuration.
|
1. [Download](https://github.com/bassamanator/Sovol-SV06-firmware/archive/refs/heads/master.zip) the `ZIP` file containing the Klipper configuration.
|
||||||
2. The parent folder in the `ZIP` is `Sovol-SV06-firmware-master`. This is relevant in the next step.
|
2. See `Step 2` in `Method 1`.
|
||||||
3. Extract **only** the *contents* of the parent folder into `~/printer_data/config`.
|
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`.
|
||||||
|
|
||||||
## Initial Steps
|
## Initial Steps
|
||||||
|
|
||||||
### Step 1
|
### Adjust Configuration with MCU Path
|
||||||
|
|
||||||
1. Find what port the `mcu` (SV06 motherboard) is connected to via `ls -l /dev/serial/by-id/`.
|
1. Find what port the `mcu` (printer motherboard) is connected to via `ls -l /dev/serial/by-id/` or `ls -l /dev/serial/by-path/`.
|
||||||
|
1. The output will be something along the lines of
|
||||||
|
`lrwxrwxrwx 13 root root 22 Apr 11:10 usb-1a86_USB2.0-Serial-if00-port0 -> ../../ttyUSB0`.
|
||||||
|
2. `usb-1a86_USB2.0-Serial-if00-port0` is the relevant part.
|
||||||
|
3. Therefore, the full path to your `mcu` is either `/dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0` or `/dev/serial/by-path/usb-1a86_USB2.0-Serial-if00-port0`, depending on the command you used to find the `mcu`.
|
||||||
2. Adjust the `[mcu]` section in `printer.cfg` accordingly.
|
2. Adjust the `[mcu]` section in `printer.cfg` accordingly.
|
||||||
|
This is just an _example_ `mcu` section:
|
||||||
|
|
||||||
### Step 2
|
```
|
||||||
|
[mcu]
|
||||||
|
serial: /dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0
|
||||||
|
restart_method: command
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Do a `FIRMWARE_RESTART`.
|
||||||
|
|
||||||
|
If you've done everything correctly, you should see no errors or warnings in your Mainsail/Fluidd dashboard.
|
||||||
|
|
||||||
|
### Configure Your Printer
|
||||||
|
|
||||||
❗☠️ **Your finger should be on the power switch for most of these steps** ☠️❗
|
❗☠️ **Your finger should be on the power switch for most of these steps** ☠️❗
|
||||||
|
|
||||||
@@ -106,70 +148,96 @@ You can choose *either* of the 2 following methods.
|
|||||||
|
|
||||||
💡 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.
|
💡 Find explanations for gcode commands at [https://marlinfw.org/](https://marlinfw.org/) and [https://www.klipper3d.org/](https://www.klipper3d.org/G-Codes.html).
|
||||||
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.
|
|
||||||
2. Do a `G34`; mechanical gantry calibration. After the controlled collision against the beam at the top, there will be a 10 second pause for you to verify that both sides of the gantry are pressed up agaisnt the `stoppers` at the top. You will hear a succession of beeps.
|
You will be pasting/typing these commands into the Mainsail/Fluidd console.
|
||||||
1. Figure out your `Z` `position_max` by baby stepping your way up to the beam. The range is 250 to 261 from what I've seen, could be even higher for you. Adjust `position_max`, if necessary. I can go all the way to 258 over and over again, however, I would not print anything higher than 255 probably.
|
|
||||||
3. Pid tune the bed, but first move the printhead to the center. Ideally, all Pid tuning should occur at the temperatures that you print most at.
|
1. 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`
|
1. `G28`
|
||||||
2. `G1 X111 Y111 Z40 F6000`
|
2. `G90`
|
||||||
3. `PID_CALIBRATE HEATER=heater_bed TARGET=70`
|
3. `G1 X223 F3000`
|
||||||
4. `SAVE_CONFIG` (once completed)
|
4. `G1 Y223 F3000`
|
||||||
4. Pid tune the extruder while part cooling fan runs at 25%.
|
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. `G28`
|
1. Figure out your `Z` `position_max` by baby stepping your way up to the beam, and adjust `position_max`, if necessary.
|
||||||
2. `G1 X111 Y111 Z10 F6000`
|
3. PID tune the bed. Ideally, all PID tuning should occur at the temperatures that you print most at.
|
||||||
3. `M106 S64`
|
1. `PID_TEST_BED TEMP=70`
|
||||||
4. `PID_CALIBRATE HEATER=extruder TARGET=245`
|
2. `SAVE_CONFIG` (once completed)
|
||||||
5. `SAVE_CONFIG` (once completed)
|
4. PID tune the extruder while part cooling fan runs at 25%.
|
||||||
5. Adjust `z_offset`. Make sure your nozzle if very clean. Paper test [reference](https://www.klipper3d.org/Bed_Level.html?h=probe_calibrate#the-paper-test).
|
1. `PID_TEST_HOTEND TEMP=245`
|
||||||
1. `SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET=60`
|
2. `SAVE_CONFIG` (once completed)
|
||||||
2. `SET_HEATER_TEMPERATURE HEATER=extruder TARGET=180`
|
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).
|
||||||
3. Proceed to next steps after both temperatures have been reached.
|
1. `DO_PROBE_CALIBRATE`
|
||||||
4. `G28`
|
2. Follow `z_offset` setup in Mainsail/Fluidd.
|
||||||
5. `PROBE_CALIBRATE`
|
3. `SAVE_CONFIG` (once completed)
|
||||||
6. `SAVE_CONFIG` (once completed)
|
|
||||||
6. Create a bed mesh.
|
6. Create a bed mesh.
|
||||||
1. `SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET=60`
|
1. `DO_CREATE_MESH`
|
||||||
2. `SET_HEATER_TEMPERATURE HEATER=extruder TARGET=180`
|
2. `SAVE_CONFIG` (once completed)
|
||||||
3. Proceed to next steps after both temperatures have been reached.
|
|
||||||
4. `G28`
|
If you've made it here, then your printer has been Klipperized, and is ready to print!
|
||||||
5. `BED_MESH_CALIBRATE`
|
|
||||||
6. `SAVE_CONFIG` (once completed)
|
But first, adjust your slicer.
|
||||||
|
|
||||||
|
## Adjust Your Slicer
|
||||||
|
|
||||||
|
You need to adjust the start and end gcode in your slicer. The relevant macros are `PRINT_START` and `PRINT_END`. Find instructions [here](https://ellis3dp.com/Print-Tuning-Guide/articles/passing_slicer_variables.html#slicer-start-g-code).
|
||||||
|
|
||||||
|
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 `PURGE_LINE`. Here's an example:
|
||||||
|
|
||||||
|
```
|
||||||
|
PRINT_START BED=[first_layer_bed_temperature] HOTEND={first_layer_temperature[initial_extruder]+extruder_temperature_offset[initial_extruder]} CHAMBER=[chamber_temperature]
|
||||||
|
PURGE_LINE
|
||||||
|
```
|
||||||
|
|
||||||
## Directory Structure
|
## Directory Structure
|
||||||
|
|
||||||
This repository contains many files and folders. Some are *necessary* for this Klipper configuration to work, others are not.
|
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 ✅.
|
- **Necessary** items are marked with a ✅.
|
||||||
- Items that can *optionally* be deleted are marked with a ❌.
|
- Items that can _optionally_ be deleted are marked with a ❌.
|
||||||
|
|
||||||
```
|
```
|
||||||
├── cfgs ✅
|
├── cfgs ✅
|
||||||
│ ├── adxl-direct.cfg
|
│ ├── adxl-direct.cfg
|
||||||
│ ├── adxl-rp2040.cfg
|
│ ├── adxl-rp2040.cfg
|
||||||
│ ├── beeper.cfg
|
│ ├── adxl-rpi-pico-2x.cfg
|
||||||
│ ├── misc-macros.cfg
|
│ ├── MECHANICAL_GANTRY_CALIBRATION.cfg
|
||||||
│ ├── MECHANICAL_GANTRY_CALIBRATION.cfg
|
│ ├── misc-macros.cfg
|
||||||
│ ├── PARKING.cfg
|
│ ├── PARKING.cfg
|
||||||
│ └── TEST_SPEED.cfg [☠️Not ready for use☠️]
|
│ └── TEST_SPEED.cfg
|
||||||
|
├── CODE_OF_CONDUCT.md ❌
|
||||||
|
├── CONTRIBUTING.md ❌
|
||||||
|
├── .github ❌
|
||||||
|
│ ├── FUNDING.yml
|
||||||
|
│ └── ISSUE_TEMPLATE
|
||||||
|
│ ├── bug_report.md
|
||||||
|
│ └── feature_request.md
|
||||||
|
├── .gitignore ❌
|
||||||
├── images ❌
|
├── images ❌
|
||||||
│ └── githubstar.gif
|
│ ├── cup-border.png
|
||||||
|
│ ├── githubstar.gif
|
||||||
|
│ ├── heart.gif
|
||||||
|
│ ├── logo_white_stroke.png
|
||||||
|
│ └── party_blob.gif
|
||||||
├── misc ❌
|
├── misc ❌
|
||||||
│ ├── cup-border.png
|
│ ├── klipper-v0.11.0-148-g52f4e20c.bin
|
||||||
│ ├── klipper.bin
|
│ ├── M503-output.yml
|
||||||
│ ├── logo_white_stroke.png
|
│ ├── marlin-SV06V2.0.0A_2.24.bin
|
||||||
│ ├── M503-output.yml
|
│ ├── SuperSlicer_config_bundle.ini
|
||||||
│ ├── SuperSlicer_config_bundle.ini
|
│ ├── sv06-buildPlate.png
|
||||||
│ ├── sv06-buildPlate.png
|
│ ├── SV06-buildPlate.stl
|
||||||
│ ├── SV06-buildPlate.stl
|
│ └── SV06-texture.svg
|
||||||
│ └── SV06-texture.svg
|
|
||||||
├── moonraker.conf ✅
|
├── moonraker.conf ✅
|
||||||
├── printer.cfg ✅
|
├── printer.cfg ✅
|
||||||
└── README.md ❌
|
├── README.md ❌
|
||||||
|
└── .vscode ❌
|
||||||
|
└── settings.json
|
||||||
```
|
```
|
||||||
|
|
||||||
## <img src="./misc/cup-border.png" width="30" alt='Ko-fi'/> Support Me <img src="./misc/cup-border.png" width="30" alt='Ko-fi'/>
|
## Support Me
|
||||||
|
|
||||||
<img src="./images/heart.gif" width="17" alt=''/> If you found my work useful, please consider buying me a [<img src="./misc/logo_white_stroke.png" height="20" alt='Ko-fi'/>](https://ko-fi.com/bassamanator).
|
Please ⭐ star ⭐ this repository!
|
||||||
|
|
||||||
|
If you found my work useful, please consider buying me a [<img src="./images/logo_white_stroke.png" height="20" alt='Ko-fi'/>](https://ko-fi.com/bassamanator).
|
||||||
|
|
||||||
## FAQ
|
## FAQ
|
||||||
|
|
||||||
@@ -184,6 +252,7 @@ Please see [this discussion](https://github.com/bassamanator/Sovol-SV06-firmware
|
|||||||
##### When does beeping occur?
|
##### When does beeping occur?
|
||||||
|
|
||||||
The printer will beep upon:
|
The printer will beep upon:
|
||||||
|
|
||||||
- Filament runout.
|
- Filament runout.
|
||||||
- Filament change/`M600`.
|
- Filament change/`M600`.
|
||||||
- Upon `PRINT_END`.
|
- Upon `PRINT_END`.
|
||||||
@@ -191,43 +260,74 @@ The printer will beep upon:
|
|||||||
|
|
||||||
##### How do I disable beeping?
|
##### How do I disable beeping?
|
||||||
|
|
||||||
Make the following changes according to your needs. All beeping will be disabled *except* during gantry calibration.
|
Make the following changes according to your needs. All beeping will be disabled _except_ during gantry calibration.
|
||||||
|
|
||||||
| File | `cfgs/misc-macros.cfg` |
|
| File | `cfgs/misc-macros.cfg` |
|
||||||
| - | - |
|
| --------------- | -------------------------- |
|
||||||
| Section | `[gcode_macro _globals]` |
|
| Section | `[gcode_macro _globals]` |
|
||||||
| Variable | `variable_beeping_enabled` |
|
| Variable | `variable_beeping_enabled` |
|
||||||
| Disable beeping | `0` |
|
| Disable beeping | `0` |
|
||||||
| Enable beeping | `1` |
|
| Enable beeping | `1` |
|
||||||
|
|
||||||
##### I want to use a filament sensor. How do I set it up?
|
##### 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 find information about the physical setup [here](https://github.com/bassamanator/everything-sovol-sv06#filament-sensor).
|
||||||
|
|
||||||
##### I have a simple filament sensor connected. How do I enable/disable it?
|
##### I have a simple filament sensor connected. How do I enable/disable it?
|
||||||
|
|
||||||
Make the following changes according to your needs.
|
Make the following changes according to your needs.
|
||||||
|
|
||||||
| File | `cfgs/misc-macros.cfg` |
|
| File | `cfgs/misc-macros.cfg` |
|
||||||
| - | - |
|
| -------------- | ---------------------------------- |
|
||||||
| Section | `[gcode_macro _globals]` |
|
| Section | `[gcode_macro _globals]` |
|
||||||
| Variable | `variable_filament_sensor_enabled` |
|
| Variable | `variable_filament_sensor_enabled` |
|
||||||
| Disable sensor | `0` |
|
| Disable sensor | `0` |
|
||||||
| Enable sensor | `1` |
|
| Enable sensor | `1` |
|
||||||
|
|
||||||
##### My filament runout sensor works, but I just started a print without any filament loaded. What gives?
|
##### 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.
|
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?
|
||||||
|
|
||||||
|
⚠️ _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.
|
||||||
|
|
||||||
## Useful Resources
|
## Useful Resources
|
||||||
|
|
||||||
- [Everything Sovol SV06](https://github.com/bassamanator/everything-sovol-sv06)
|
- [Everything Sovol SV06](https://github.com/bassamanator/everything-sovol-sv06)
|
||||||
- [RP2040-Zero ADXL345 Connection Klipper](https://github.com/bassamanator/rp2040-zero-adxl345-klipper)
|
- [RP2040-Zero ADXL345 Connection Klipper](https://github.com/bassamanator/rp2040-zero-adxl345-klipper)
|
||||||
- ⭐⭐⭐ [Ellis' Print Tuning Guide](https://ellis3dp.com/Print-Tuning-Guide)
|
- ⭐⭐⭐⭐⭐ [Ellis' Print Tuning Guide](https://ellis3dp.com/Print-Tuning-Guide)
|
||||||
|
- [Simplify3D Print Quality Troubleshooting Guide](https://www.simplify3d.com/resources/print-quality-troubleshooting/)
|
||||||
|
|
||||||
## Links
|
## Sovol Official Links
|
||||||
|
|
||||||
- [SV06 Official Marlin Source Code](https://github.com/Sovol3d/Sv06-Source-Code)
|
- [SV06 Marlin Source Code](https://github.com/Sovol3d/Sv06-Source-Code)
|
||||||
- [SV06 Official Models](https://github.com/Sovol3d/SV06-Fully-Open-Source)
|
- [SV06 Models](https://github.com/Sovol3d/SV06-Fully-Open-Source)
|
||||||
|
- [SV06 Plus Marlin Source Code and Models](https://github.com/Sovol3d/SV06-PLUS)
|
||||||
|
|
||||||
## Sources
|
## Sources
|
||||||
|
|
||||||
@@ -235,7 +335,7 @@ A simple runout sensor can only detect a change in state. So, if you start a pri
|
|||||||
- https://ellis3dp.com/Print-Tuning-Guide
|
- https://ellis3dp.com/Print-Tuning-Guide
|
||||||
- https://github.com/strayr/strayr-k-macros
|
- https://github.com/strayr/strayr-k-macros
|
||||||
- https://docs.vorondesign.com/build/software/miniE3_v20_klipper.html
|
- 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://www.printables.com/model/378915-sovol-sv06-buildplate-texture-and-model-for-prusas
|
- https://www.printables.com/model/378915-sovol-sv06-buildplate-texture-and-model-for-prusas
|
||||||
- https://github.com/AndrewEllis93/Ellis-SuperSlicer-Profiles
|
- https://github.com/AndrewEllis93/Ellis-SuperSlicer-Profiles
|
||||||
|
|
||||||
|
|||||||
49
cfgs/CALIBRATION.cfg
Normal file
49
cfgs/CALIBRATION.cfg
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
[gcode_macro PID_TEST_BED]
|
||||||
|
gcode:
|
||||||
|
# Parameters
|
||||||
|
{% set TARGETTEMP = params.TEMP|default(70)|int %}
|
||||||
|
|
||||||
|
{% set max_x = printer.configfile.config["stepper_x"]["position_max"]|float %}
|
||||||
|
{% set max_y = printer.configfile.config["stepper_y"]["position_max"]|float %}
|
||||||
|
G28
|
||||||
|
G90
|
||||||
|
G1 X{max_x/2} Y{max_y/2} Z40 F6000
|
||||||
|
PID_CALIBRATE HEATER=heater_bed TARGET={TARGETTEMP}
|
||||||
|
|
||||||
|
[gcode_macro PID_TEST_HOTEND]
|
||||||
|
gcode:
|
||||||
|
# Parameters
|
||||||
|
{% set TARGETTEMP = params.TEMP|default(245)|int %}
|
||||||
|
|
||||||
|
{% set max_x = printer.configfile.config["stepper_x"]["position_max"]|float %}
|
||||||
|
{% set max_y = printer.configfile.config["stepper_y"]["position_max"]|float %}
|
||||||
|
G28
|
||||||
|
G90
|
||||||
|
G1 X{max_x/2} Y{max_y/2} Z10 F6000
|
||||||
|
M106 S64
|
||||||
|
PID_CALIBRATE HEATER=extruder TARGET={TARGETTEMP}
|
||||||
|
|
||||||
|
# TODO test this
|
||||||
|
[gcode_macro PID_TEST_ALL]
|
||||||
|
gcode:
|
||||||
|
PID_TEST_BED
|
||||||
|
PID_TEST_HOTEND
|
||||||
|
SAVE_CONFIG
|
||||||
|
|
||||||
|
[gcode_macro DO_PROBE_CALIBRATE]
|
||||||
|
gcode:
|
||||||
|
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET=60
|
||||||
|
SET_HEATER_TEMPERATURE HEATER=extruder TARGET=180
|
||||||
|
TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM=60
|
||||||
|
TEMPERATURE_WAIT SENSOR=extruder MINIMUM=180
|
||||||
|
G28
|
||||||
|
PROBE_CALIBRATE
|
||||||
|
|
||||||
|
[gcode_macro DO_CREATE_MESH]
|
||||||
|
gcode:
|
||||||
|
SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET=60
|
||||||
|
SET_HEATER_TEMPERATURE HEATER=extruder TARGET=180
|
||||||
|
TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM=60
|
||||||
|
TEMPERATURE_WAIT SENSOR=extruder MINIMUM=180
|
||||||
|
G28
|
||||||
|
_BED_MESH_CALIBRATE
|
||||||
43
cfgs/adxl-rpi-pico-2x.cfg
Normal file
43
cfgs/adxl-rpi-pico-2x.cfg
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
#####################################################################
|
||||||
|
# Config that supports a print head and a bed sensor at the same time
|
||||||
|
# This requires a Raspberry Pi Pico.
|
||||||
|
# Instructions: https://klipper.discourse.group/t/raspberry-pi-pico-adxl345-portable-resonance-measurement/1757/9
|
||||||
|
# TLDR Instructions: The two sensors should use the spi0a (GPIO 0-3) and spi1a (GPIO 9-12) buses, respectively.
|
||||||
|
#
|
||||||
|
# Recommended mounts:
|
||||||
|
# https://www.printables.com/model/385334-sovol-sv06-adxl345-mount-printhead-and-bed
|
||||||
|
#
|
||||||
|
# ADXL345 related Settings
|
||||||
|
# https://www.klipper3d.org/Measuring_Resonances.html#adxl345
|
||||||
|
#####################################################################
|
||||||
|
|
||||||
|
[mcu RP2040]
|
||||||
|
baud: 115200
|
||||||
|
restart_method: command
|
||||||
|
# Obtain definition by "ls -l /dev/serial/by-id/"
|
||||||
|
serial: /dev/serial/by-id/usb-Klipper_rp2040_E66138935F154C28-if00
|
||||||
|
|
||||||
|
[adxl345 head]
|
||||||
|
cs_pin: RP2040:gpio1
|
||||||
|
spi_bus: spi0a
|
||||||
|
# update axes_map if your sensor is oriented differently. Note the print on your sensor.
|
||||||
|
# -y, -z, x means that
|
||||||
|
# - the x axis of your printer corresponds to the sensor's negative y axis
|
||||||
|
# - the y axis of your printer corresponds to the sensor's negative z axis
|
||||||
|
# - the z axis of your printer corresponds to the sensor's x axis
|
||||||
|
axes_map: -y, -z, x
|
||||||
|
|
||||||
|
[adxl345 bed]
|
||||||
|
cs_pin: RP2040:gpio9
|
||||||
|
spi_bus: spi1a
|
||||||
|
|
||||||
|
[resonance_tester]
|
||||||
|
accel_chip_x: adxl345 head
|
||||||
|
accel_chip_y: adxl345 bed
|
||||||
|
probe_points: 111.5, 111.5, 20
|
||||||
|
|
||||||
|
[gcode_macro ADX]
|
||||||
|
description: Shortcut to ACCELEROMETER_QUERY for both sensors
|
||||||
|
gcode:
|
||||||
|
ACCELEROMETER_QUERY CHIP=head
|
||||||
|
ACCELEROMETER_QUERY CHIP=bed
|
||||||
104
cfgs/kamp/Adaptive_Meshing.cfg
Normal file
104
cfgs/kamp/Adaptive_Meshing.cfg
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
# # # Klipper Adaptive Meshing # # #
|
||||||
|
|
||||||
|
# Heads up! If you have any other BED_MESH_CALIBRATE macros defined elsewhere in your config, you will need to comment out / remove them for this to work. (Klicky/Euclid Probe)
|
||||||
|
# You will also need to be sure that [exclude_object] is defined in printer.cfg, and your slicer is labeling objects.
|
||||||
|
# This macro will parse information from objects in your gcode to define a min and max mesh area to probe, creating an adaptive mesh!
|
||||||
|
# This macro will not increase probe_count values in your [bed_mesh] config. If you want richer meshes, be sure to increase probe_count. We recommend at least 5,5.
|
||||||
|
|
||||||
|
[gcode_macro BED_MESH_CALIBRATE]
|
||||||
|
rename_existing: _BED_MESH_CALIBRATE
|
||||||
|
gcode:
|
||||||
|
|
||||||
|
{% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %} # Gather all object points
|
||||||
|
{% set bed_mesh_min = printer.configfile.settings.bed_mesh.mesh_min %} # Get bed mesh min from printer.cfg
|
||||||
|
{% set bed_mesh_max = printer.configfile.settings.bed_mesh.mesh_max %} # Get bed mesh max from printer.cfg
|
||||||
|
{% set probe_count = printer.configfile.settings.bed_mesh.probe_count %} # Get probe count from printer.cfg
|
||||||
|
{% set verbose_enable = printer["gcode_macro _KAMP_Settings"].verbose_enable | abs %} # Pull verbose setting from _KAMP_Settings
|
||||||
|
{% set mesh_margin = printer["gcode_macro _KAMP_Settings"].mesh_margin | float %} # Pull mesh margin setting from _KAMP_Settings
|
||||||
|
{% set fuzz_amount = printer["gcode_macro _KAMP_Settings"].fuzz_amount | float %} # Pull fuzz amount setting from _KAMP_Settings
|
||||||
|
{% set probe_count = probe_count if probe_count|length > 1 else probe_count * 2 %} # If probe count is only a single number, convert it to 2. E.g. probe_count:7 = 7,7
|
||||||
|
{% set max_probe_point_distance_x = ( bed_mesh_max[0] - bed_mesh_min[0] ) / (probe_count[0] - 1) %} # Determine max probe point distance
|
||||||
|
{% set max_probe_point_distance_y = ( bed_mesh_max[1] - bed_mesh_min[1] ) / (probe_count[1] - 1) %} # Determine max probe point distance
|
||||||
|
{% set x_min = all_points | map(attribute=0) | min | default(bed_mesh_min[0]) %} # Set x_min from smallest object x point
|
||||||
|
{% set y_min = all_points | map(attribute=1) | min | default(bed_mesh_min[1]) %} # Set y_min from smallest object y point
|
||||||
|
{% set x_max = all_points | map(attribute=0) | max | default(bed_mesh_max[0]) %} # Set x_max from largest object x point
|
||||||
|
{% set y_max = all_points | map(attribute=1) | max | default(bed_mesh_max[1]) %} # Set y_max from largest object y point
|
||||||
|
|
||||||
|
{% set fuzz_range = range((0) | int, (fuzz_amount * 100) | int + 1) %} # Set fuzz_range between 0 and fuzz_amount
|
||||||
|
{% set adapted_x_min = (bed_mesh_min[0] + fuzz_amount - mesh_margin, x_min) | max - (fuzz_range | random / 100.0) %} # Adapt x_min to margin and fuzz constraints
|
||||||
|
{% set adapted_y_min = (bed_mesh_min[1] + fuzz_amount - mesh_margin, y_min) | max - (fuzz_range | random / 100.0) %} # Adapt y_min to margin and fuzz constraints
|
||||||
|
{% set adapted_x_max = (bed_mesh_max[0] - fuzz_amount + mesh_margin, x_max) | min + (fuzz_range | random / 100.0) %} # Adapt x_max to margin and fuzz constraints
|
||||||
|
{% set adapted_y_max = (bed_mesh_max[1] - fuzz_amount + mesh_margin, y_max) | min + (fuzz_range | random / 100.0) %} # Adapt y_max to margin and fuzz constraints
|
||||||
|
|
||||||
|
{% set points_x = (((adapted_x_max - adapted_x_min) / max_probe_point_distance_x) | round(method='ceil') | int) + 1 %} # Define probe_count's x point count and round up
|
||||||
|
{% set points_y = (((adapted_y_max - adapted_y_min) / max_probe_point_distance_y) | round(method='ceil') | int) + 1 %} # Define probe_count's y point count and round up
|
||||||
|
|
||||||
|
{% if (([points_x, points_y]|max) > 6) %} #
|
||||||
|
{% set algorithm = "bicubic" %} #
|
||||||
|
{% set min_points = 4 %} #
|
||||||
|
{% else %} # Calculate if algorithm should be bicubic or lagrange
|
||||||
|
{% set algorithm = "lagrange" %} #
|
||||||
|
{% set min_points = 3 %} #
|
||||||
|
{% endif %} #
|
||||||
|
|
||||||
|
{% set points_x = [points_x, min_points]|max %} # Set probe_count's x points to fit the calculated algorithm
|
||||||
|
{% set points_y = [points_y, min_points]|max %} # Set probe_count's y points to fit the calculated algorithm
|
||||||
|
{% set points_x = [points_x, probe_count[0]]|min %}
|
||||||
|
{% set points_y = [points_y, probe_count[1]]|min %}
|
||||||
|
|
||||||
|
{% if verbose_enable == True %} # If verbose is enabled, print information about KAMP's calculations
|
||||||
|
|
||||||
|
{ action_respond_info( "Algorithm: {}.".format(
|
||||||
|
(algorithm),
|
||||||
|
)) }
|
||||||
|
|
||||||
|
{ action_respond_info("Default probe count: {},{}.".format(
|
||||||
|
(probe_count[0]),
|
||||||
|
(probe_count[1]),
|
||||||
|
)) }
|
||||||
|
|
||||||
|
{ action_respond_info("Adapted probe count: {},{}.".format(
|
||||||
|
(points_x),
|
||||||
|
(points_y),
|
||||||
|
)) }
|
||||||
|
|
||||||
|
{action_respond_info("Default mesh bounds: {}, {}.".format(
|
||||||
|
(bed_mesh_min[0],bed_mesh_min[1]),
|
||||||
|
(bed_mesh_max[0],bed_mesh_max[1]),
|
||||||
|
)) }
|
||||||
|
|
||||||
|
{% if mesh_margin > 0 %}
|
||||||
|
{action_respond_info("Mesh margin is {}, mesh bounds extended by {}mm.".format(
|
||||||
|
(mesh_margin),
|
||||||
|
(mesh_margin),
|
||||||
|
)) }
|
||||||
|
{% else %}
|
||||||
|
{action_respond_info("Mesh margin is 0, margin not increased.")}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if fuzz_amount > 0 %}
|
||||||
|
{action_respond_info("Mesh point fuzzing enabled, points fuzzed up to {}mm.".format(
|
||||||
|
(fuzz_amount),
|
||||||
|
)) }
|
||||||
|
{% else %}
|
||||||
|
{action_respond_info("Fuzz amount is 0, mesh points not fuzzed.")}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{ action_respond_info("Adapted mesh bounds: {}, {}.".format(
|
||||||
|
(adapted_x_min, adapted_y_min),
|
||||||
|
(adapted_x_max, adapted_y_max),
|
||||||
|
)) }
|
||||||
|
|
||||||
|
{action_respond_info("KAMP adjustments successful. Happy KAMPing!")}
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if probe_dock_enable == True %}
|
||||||
|
{attach_macro} # Attach/deploy a probe if the probe is stored somewhere outside of the print area
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
_BED_MESH_CALIBRATE mesh_min={adapted_x_min},{adapted_y_min} mesh_max={adapted_x_max},{adapted_y_max} ALGORITHM={algorithm} PROBE_COUNT={points_x},{points_y}
|
||||||
|
|
||||||
|
{% if probe_dock_enable == True %}
|
||||||
|
{detach_macro} # Detach/stow a probe if the probe is stored somewhere outside of the print area
|
||||||
|
{% endif %} # End of verbose
|
||||||
31
cfgs/kamp/KAMP_Settings.cfg
Normal file
31
cfgs/kamp/KAMP_Settings.cfg
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
# Below you can include specific configuration files depending on what you want KAMP to do:
|
||||||
|
|
||||||
|
[include ./Adaptive_Meshing.cfg] # Include to enable adaptive meshing configuration.
|
||||||
|
# [include ./KAMP/Line_Purge.cfg] # Include to enable adaptive line purging configuration.
|
||||||
|
|
||||||
|
[gcode_macro _KAMP_Settings]
|
||||||
|
description: This macro contains all adjustable settings for KAMP
|
||||||
|
|
||||||
|
# The following variables are settings for KAMP as a whole.
|
||||||
|
variable_verbose_enable: True # Set to True to enable KAMP information output when running. This is useful for debugging.
|
||||||
|
|
||||||
|
# The following variables are for adjusting adaptive mesh settings for KAMP.
|
||||||
|
variable_mesh_margin: 0 # Expands the mesh size in millimeters if desired. Leave at 0 to disable.
|
||||||
|
variable_fuzz_amount: 0 # Slightly randomizes mesh points to spread out wear from nozzle-based probes. Leave at 0 to disable.
|
||||||
|
|
||||||
|
# The following variables are for those with a dockable probe like Klicky, Euclid, etc. # ---------------- Attach Macro | Detach Macro
|
||||||
|
variable_probe_dock_enable: False # Set to True to enable the usage of a dockable probe. # ---------------------------------------------
|
||||||
|
variable_attach_macro: 'Attach_Probe' # The macro that is used to attach the probe. # Klicky Probe: 'Attach_Probe' | 'Dock_Probe'
|
||||||
|
variable_detach_macro: 'Dock_Probe' # The macro that is used to store the probe. # Euclid Probe: 'Deploy_Probe' | 'Stow_Probe'
|
||||||
|
# Legacy Gcode: 'M401' | 'M402'
|
||||||
|
|
||||||
|
# The following variables are for adjusting adaptive purge settings for KAMP.
|
||||||
|
variable_purge_height: 0.8 # Z position of nozzle during purge, default is 0.8.
|
||||||
|
variable_tip_distance: 0 # Distance between tip of filament and nozzle before purge. Should be similar to PRINT_END final retract amount.
|
||||||
|
variable_purge_margin: 10 # Distance the purge will be in front of the print area, default is 10.
|
||||||
|
variable_purge_amount: 30 # Amount of filament to be purged prior to printing.
|
||||||
|
variable_flow_rate: 12 # Flow rate of purge in mm3/s. Default is 12.
|
||||||
|
|
||||||
|
gcode: # Gcode section left intentionally blank. Do not disturb.
|
||||||
|
|
||||||
|
{action_respond_info(" Running the KAMP_Settings macro does nothing, it is only used for storing KAMP settings. ")}
|
||||||
113
cfgs/kamp/Line_Purge.cfg
Normal file
113
cfgs/kamp/Line_Purge.cfg
Normal file
@@ -0,0 +1,113 @@
|
|||||||
|
[gcode_macro LINE_PURGE]
|
||||||
|
description: A purge macro that adapts to be near your actual printed objects
|
||||||
|
gcode:
|
||||||
|
# Get relevant printer params
|
||||||
|
{% set travel_speed = (printer.toolhead.max_velocity) * 60 | float %}
|
||||||
|
{% set cross_section = printer.configfile.settings.extruder.max_extrude_cross_section | float %}
|
||||||
|
|
||||||
|
# Use firmware retraction if it is defined
|
||||||
|
{% if printer.firmware_retraction is defined %}
|
||||||
|
{% set RETRACT = G10 | string %}
|
||||||
|
{% set UNRETRACT = G11 | string %}
|
||||||
|
{% else %}
|
||||||
|
{% set RETRACT = 'G1 E-.5 F2100' | string %}
|
||||||
|
{% set UNRETRACT = 'G1 E.5 F2100' | string %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
# Get purge settings from _Kamp_Settings
|
||||||
|
{% set verbose_enable = printer["gcode_macro _KAMP_Settings"].verbose_enable | abs %}
|
||||||
|
{% set purge_height = printer["gcode_macro _KAMP_Settings"].purge_height | float %}
|
||||||
|
{% set tip_distance = printer["gcode_macro _KAMP_Settings"].tip_distance | float %}
|
||||||
|
{% set purge_margin = printer["gcode_macro _KAMP_Settings"].purge_margin | float %}
|
||||||
|
{% set purge_amount = printer["gcode_macro _KAMP_Settings"].purge_amount | float %}
|
||||||
|
{% set flow_rate = printer["gcode_macro _KAMP_Settings"].flow_rate | float %}
|
||||||
|
|
||||||
|
|
||||||
|
# Calculate purge origins and centers from objects
|
||||||
|
{% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %} # Get all object points
|
||||||
|
{% set purge_x_min = (all_points | map(attribute=0) | min | default(0)) %} # Object x min
|
||||||
|
{% set purge_x_max = (all_points | map(attribute=0) | max | default(0)) %} # Object x max
|
||||||
|
{% set purge_y_min = (all_points | map(attribute=1) | min | default(0)) %} # Object y min
|
||||||
|
{% set purge_y_max = (all_points | map(attribute=1) | max | default(0)) %} # Object y max
|
||||||
|
|
||||||
|
{% set purge_x_center = ([((purge_x_max + purge_x_min) / 2) - (purge_amount / 2), 0] | max) %} # Create center point of purge line relative to print on X axis
|
||||||
|
{% set purge_y_center = ([((purge_y_max + purge_y_min) / 2) - (purge_amount / 2), 0] | max) %} # Create center point of purge line relative to print on Y axis
|
||||||
|
|
||||||
|
{% set purge_x_origin = ([purge_x_min - purge_margin, 0] | max) %} # Add margin to x min, compare to 0, and choose the larger
|
||||||
|
{% set purge_y_origin = ([purge_y_min - purge_margin, 0] | max) %} # Add margin to y min, compare to 0, and choose the larger
|
||||||
|
|
||||||
|
# Calculate purge speed
|
||||||
|
{% set purge_move_speed = (flow_rate / cross_section) * 60 | float %}
|
||||||
|
|
||||||
|
{% if cross_section != 5 %}
|
||||||
|
|
||||||
|
{action_respond_info("[Extruder] max_extrude_cross_section is not configured correctly, please set it to 5. Purge skipped.")}
|
||||||
|
|
||||||
|
{% else %}
|
||||||
|
|
||||||
|
{% if verbose_enable == True %}
|
||||||
|
|
||||||
|
{action_respond_info("Moving filament tip {}mms".format(
|
||||||
|
(tip_distance),
|
||||||
|
)) }
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if printer.firmware_retraction is defined %}
|
||||||
|
{action_respond_info("KAMP purge is using firmware retraction.")}
|
||||||
|
{% else %}
|
||||||
|
{action_respond_info("KAMP purge is not using firmware retraction, it is recommended to configure it.")}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if purge_y_origin > 0 %}
|
||||||
|
|
||||||
|
{action_respond_info("KAMP purge starting at {}, {} and purging {}mm of filament, requested flow rate is {}mm/s3.".format(
|
||||||
|
(purge_x_center),
|
||||||
|
(purge_y_origin),
|
||||||
|
(purge_amount),
|
||||||
|
(flow_rate),
|
||||||
|
)) }
|
||||||
|
|
||||||
|
{% else %}
|
||||||
|
|
||||||
|
{action_respond_info("KAMP purge starting at {}, {} and purging {}mm of filament, requested flow rate is {}mm/s3.".format(
|
||||||
|
(purge_x_origin),
|
||||||
|
(purge_y_center),
|
||||||
|
(purge_amount),
|
||||||
|
(flow_rate),
|
||||||
|
)) }
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if purge_y_origin > 0 %} # If there's room on Y, purge along X axis in front of print area
|
||||||
|
|
||||||
|
G92 E0 # Reset extruder
|
||||||
|
G0 F{travel_speed} # Set travel speed
|
||||||
|
G90 # Absolute positioning
|
||||||
|
G0 X{purge_x_center} Y{purge_y_origin} # Move to purge position
|
||||||
|
G0 Z{purge_height} # Move to purge Z height
|
||||||
|
M83 # Relative extrusion mode
|
||||||
|
G1 E{tip_distance} F{purge_move_speed} # Move filament tip
|
||||||
|
G1 X{purge_x_center + purge_amount} E{purge_amount} F{purge_move_speed} # Purge line
|
||||||
|
{RETRACT} # Retract
|
||||||
|
G92 E0 # Reset extruder distance
|
||||||
|
M82 # Absolute extrusion mode
|
||||||
|
G0 Z{purge_height * 2} F{travel_speed} # Z hop
|
||||||
|
|
||||||
|
{% else %} # If there's room on X, purge along Y axis to the left of print area
|
||||||
|
|
||||||
|
G92 E0 # Reset extruder
|
||||||
|
G0 F{travel_speed} # Set travel speed
|
||||||
|
G90 # Absolute positioning
|
||||||
|
G0 X{purge_x_origin} Y{purge_y_center} # Move to purge position
|
||||||
|
G0 Z{purge_height} # Move to purge Z height
|
||||||
|
M83 # Relative extrusion mode
|
||||||
|
G1 E{tip_distance} F{purge_move_speed} # Move filament tip
|
||||||
|
G1 Y{purge_y_center + purge_amount} E{purge_amount} F{purge_move_speed} # Purge line
|
||||||
|
{RETRACT} # Retract
|
||||||
|
G92 E0 # Reset extruder distance
|
||||||
|
M82 # Absolute extrusion mode
|
||||||
|
G0 Z{purge_height * 2} F{travel_speed} # Z hop
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
@@ -1,8 +1,14 @@
|
|||||||
[force_move]
|
[force_move]
|
||||||
enable_force_move: True
|
enable_force_move: True
|
||||||
|
|
||||||
[temperature_sensor raspberry_pi]
|
# NOTE If you're using a Raspberry Pi, you can uncomment the next 2 lines, optionally.
|
||||||
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
|
||||||
|
|
||||||
[virtual_sdcard]
|
[virtual_sdcard]
|
||||||
path: /home/pi/printer_data/gcodes
|
path: /home/pi/printer_data/gcodes
|
||||||
@@ -22,11 +28,11 @@ gcode:
|
|||||||
[gcode_macro _globals]
|
[gcode_macro _globals]
|
||||||
variable_filament_sensor_enabled: 0 # 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_beeping_enabled: 1 # NOTE Enable(1) or disable(0) beeping everywhere except during gantry calibration
|
||||||
variable_pre_purge_prime_length: 1.4
|
variable_bed_temp_over: 10 # NOTE Start print if bed temperature is over by this amount, otherwise wait for temperature drop
|
||||||
|
variable_kamp_enable: 1 # NOTE Enable(1) or disable(0) KAMP (adaptive mesh)
|
||||||
|
variable_pre_purge_prime_length: 1.40
|
||||||
gcode:
|
gcode:
|
||||||
SET_GCODE_VARIABLE MACRO=_globals VARIABLE=pre_purge_prime_length VALUE={ variable_pre_purge_prime_length }
|
# Don't delete this section
|
||||||
SET_GCODE_VARIABLE MACRO=_globals VARIABLE=filament_sensor_enabled VALUE={ variable_filament_sensor_enabled }
|
|
||||||
SET_GCODE_VARIABLE MACRO=_globals VARIABLE=beeping_enabled VALUE={ variable_beeping_enabled }
|
|
||||||
|
|
||||||
[gcode_macro CONDITIONAL_BEEP]
|
[gcode_macro CONDITIONAL_BEEP]
|
||||||
gcode:
|
gcode:
|
||||||
@@ -75,17 +81,31 @@ gcode:
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
[gcode_macro PURGE_LINE]
|
[gcode_macro PURGE_LINE]
|
||||||
# https://github.com/JoeCat1207/V0.1-Purge-line-SuperSlicer/blob/main/Purgeline.txt
|
|
||||||
# https://github.com/VoronDesign/Voron-Switchwire/blob/200cdae033c59ef81f67c4235469da7ca66d53a1/Firmware/skr_mini_e3_v2_config.cfg
|
|
||||||
gcode:
|
gcode:
|
||||||
{% set PRE_PURGE_PRIME_LENGTH=printer["gcode_macro _globals"].pre_purge_prime_length|default(1.40)|float %}
|
{% set PRE_PURGE_PRIME_LENGTH=printer["gcode_macro _globals"].pre_purge_prime_length|default(1.40)|float %}
|
||||||
ADJUST_FILAMENT_SENSOR_STATUS ENABLE=1
|
ADJUST_FILAMENT_SENSOR_STATUS ENABLE=1
|
||||||
G0 Y0 X0 F4000 ; go to tongue of print bed
|
|
||||||
G1 Z0.4 F500.0 ; move bed to nozzle
|
# Misc variables
|
||||||
|
{% set extrudeAmount = 26.6 %}
|
||||||
|
{% set movementLength = 100.0 %}
|
||||||
|
{% set movementSpeed = 15 * 60 %}
|
||||||
|
{% set xStart = 0.5 %}
|
||||||
|
{% set yStart = 0.5 %}
|
||||||
|
|
||||||
|
# Set safe speeds
|
||||||
|
{% set maxVelocity = printer.configfile.settings.printer.max_velocity|default(200)|int %}
|
||||||
|
{% set maxVelocityAdjusted = (0.95 * maxVelocity * 60)|int %}
|
||||||
|
|
||||||
G92 E0.0 ; reset extruder
|
G92 E0.0 ; reset extruder
|
||||||
|
G90 ; Absolute positioning
|
||||||
|
G0 X{xStart} Y{yStart} F{maxVelocityAdjusted} ; move to purge position
|
||||||
|
G1 Z0.4 F500.0 ; move to purge height
|
||||||
|
M83 ; Relative extrusion mode
|
||||||
G1 E{PRE_PURGE_PRIME_LENGTH} F500 ; pre-purge prime LENGTH SHOULD MATCH YOUR PRINT_END RETRACT
|
G1 E{PRE_PURGE_PRIME_LENGTH} F500 ; pre-purge prime LENGTH SHOULD MATCH YOUR PRINT_END RETRACT
|
||||||
G1 Y140 E35.0 F1200.0 ; intro line 1
|
G1 X{xStart + movementLength} E{extrudeAmount} F{movementSpeed} ; intro line 1
|
||||||
|
|
||||||
G92 E0.0 ; reset extruder
|
G92 E0.0 ; reset extruder
|
||||||
|
M82 ; Absolute extrusion mode
|
||||||
G1 Z5.0 ; move nozzle to prevent scratch
|
G1 Z5.0 ; move nozzle to prevent scratch
|
||||||
|
|
||||||
[gcode_macro CANCEL_PRINT]
|
[gcode_macro CANCEL_PRINT]
|
||||||
@@ -99,37 +119,82 @@ gcode:
|
|||||||
|
|
||||||
[gcode_macro PRINT_START]
|
[gcode_macro PRINT_START]
|
||||||
gcode:
|
gcode:
|
||||||
|
ADJUST_FILAMENT_SENSOR_STATUS ENABLE=1
|
||||||
# Parameters
|
# Parameters
|
||||||
{% set bedtemp = params.BED|int %}
|
{% set bedtemp = params.BED|int %}
|
||||||
{% set hotendtemp = params.HOTEND|int %}
|
{% set hotendtemp = params.HOTEND|int %}
|
||||||
{% set chambertemp = params.CHAMBER|default(0)|int %}
|
{% set chambertemp = params.CHAMBER|default(0)|int %}
|
||||||
|
|
||||||
ADJUST_FILAMENT_SENSOR_STATUS ENABLE=1
|
# Other variables
|
||||||
|
{% set bedtempSlicer = bedtemp %}
|
||||||
|
{% set bedtempOver = printer["gcode_macro _globals"].bed_temp_over|default(0)|int %}
|
||||||
|
{% set maxVelocity = printer.configfile.settings.printer.max_velocity|default(200)|int %}
|
||||||
|
{% set maxVelocityAdjusted = (0.90 * maxVelocity * 60)|int %}
|
||||||
|
{% set kampEnabled=printer["gcode_macro _globals"].kamp_enable|default(0)|int %}
|
||||||
|
|
||||||
|
{% if printer.configfile.settings.safe_z_home %}
|
||||||
|
{% set startX = printer.configfile.settings.safe_z_home.home_xy_position[0]|float %}
|
||||||
|
{% set startY = printer.configfile.settings.safe_z_home.home_xy_position[1]|float %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% set bedtempAlmost = ((bedtemp - 2, 0, printer.heater_bed.temperature|int)|max, bedtemp)|max %}
|
||||||
|
{% set hotendtempStepOne = ((hotendtemp, printer[printer.toolhead.extruder].temperature|int)|min, 150)|max %}
|
||||||
|
{% set hotendtempStepTwo = ((hotendtemp, printer[printer.toolhead.extruder].temperature|int)|min, 170)|max %}
|
||||||
|
|
||||||
|
# If bed-temp-almost is higher than bed-temp by a maximum of bed-temp-over
|
||||||
|
{% if bedtempAlmost > bedtemp %}
|
||||||
|
{% if (bedtempAlmost - bedtempOver) <= bedtemp %}
|
||||||
|
{% set bedtemp = bedtempAlmost %}
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
G90 ; absolute positioning
|
||||||
|
M140 S{bedtempAlmost} ; set & don't wait for bed temp
|
||||||
|
M104 S{hotendtempStepOne} ; set & don't wait for hotend temp
|
||||||
G28 X Y
|
G28 X Y
|
||||||
# <insert your routines here>
|
{% if printer.configfile.settings.safe_z_home %}
|
||||||
M140 S{bedtemp} ; set & don't wait for bed temp
|
G1 X{startX} Y{startY} F{maxVelocityAdjusted}
|
||||||
M104 S{hotendtemp} ; set & don't wait for hotend temp
|
{% endif %}
|
||||||
|
|
||||||
M190 S{bedtemp} ; set & wait for bed temp
|
M190 S{bedtempAlmost} ; set & wait for bed temp
|
||||||
# TEMPERATURE_WAIT SENSOR="temperature_sensor chamber" MINIMUM={chambertemp} ; wait for chamber temp
|
{% if kampEnabled == 0 %}
|
||||||
# <insert your routines here>
|
M104 S{hotendtempStepTwo} ; set & don't wait for hotend temp
|
||||||
M109 S{hotendtemp} ; set & wait for hotend temp
|
{% endif %}
|
||||||
# <insert your routines here>
|
M190 S{bedtemp} ; set & wait for bed temp
|
||||||
G28 Z ; final z homing
|
M140 S{bedtempSlicer} ; set & don't wait for bed temp ; set temp to sliced setting regardless
|
||||||
BED_MESH_PROFILE LOAD=default
|
|
||||||
G1 Z20 F3000 ; move nozzle away from bed
|
{% if kampEnabled == 0 %}
|
||||||
|
BED_MESH_PROFILE LOAD=default ; NOTE if not using a mesh, comment out this line
|
||||||
|
M104 S{hotendtemp} ; set & don't wait for hotend temp
|
||||||
|
G28 Z ; final z homing
|
||||||
|
{% else %}
|
||||||
|
G28 Z ; final z homing
|
||||||
|
BED_MESH_CALIBRATE ; KAMP mesh
|
||||||
|
M104 S{hotendtemp} ; set & don't wait for hotend temp
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
G1 X0 Y0 F{maxVelocityAdjusted}
|
||||||
|
M109 S{hotendtemp} ; set & wait for hotend temp
|
||||||
|
|
||||||
|
G1 Z20 F3000 ; move nozzle away from bed
|
||||||
|
|
||||||
[gcode_macro PRINT_END]
|
[gcode_macro PRINT_END]
|
||||||
gcode:
|
gcode:
|
||||||
ADJUST_FILAMENT_SENSOR_STATUS ENABLE=0
|
ADJUST_FILAMENT_SENSOR_STATUS ENABLE=0
|
||||||
CONDITIONAL_BEEP I=2 DUR=30 FREQ=8500 ; NOTE Comment out this line to stop the beeps at the end of a print
|
CONDITIONAL_BEEP I=2 DUR=30 FREQ=8500
|
||||||
{% set PRE_PURGE_PRIME_LENGTH=printer["gcode_macro _globals"].pre_purge_prime_length|default(1.40)|float %}
|
{% set PRE_PURGE_PRIME_LENGTH=printer["gcode_macro _globals"].pre_purge_prime_length|default(1.40)|float %}
|
||||||
|
|
||||||
M400 ; wait for buffer to clear
|
M400 ; wait for buffer to clear
|
||||||
G92 E0 ; zero the extruder
|
G92 E0 ; zero the extruder
|
||||||
G1 E-{PRE_PURGE_PRIME_LENGTH} F400 ; retract filament
|
G1 E-{PRE_PURGE_PRIME_LENGTH} F400 ; retract filament
|
||||||
G91 ; relative positioning
|
G91 ; relative positioning
|
||||||
|
|
||||||
|
# Set safe speeds
|
||||||
|
{% set zVelocity = printer.configfile.settings.printer.max_z_velocity|default(15)|int %}
|
||||||
|
{% set maxVelocity = printer.configfile.settings.printer.max_velocity|default(200)|int %}
|
||||||
|
{% set zVelocityAdjusted = (0.95 * zVelocity * 60)|int %}
|
||||||
|
{% set maxVelocityAdjusted = (0.95 * maxVelocity * 60)|int %}
|
||||||
|
|
||||||
# Get Boundaries
|
# Get Boundaries
|
||||||
{% set max_x = printer.configfile.config["stepper_x"]["position_max"]|float %}
|
{% set max_x = printer.configfile.config["stepper_x"]["position_max"]|float %}
|
||||||
{% set max_y = printer.configfile.config["stepper_y"]["position_max"]|float %}
|
{% set max_y = printer.configfile.config["stepper_y"]["position_max"]|float %}
|
||||||
@@ -155,8 +220,8 @@ gcode:
|
|||||||
{% set z_safe = max_z - printer.toolhead.position.z %}
|
{% set z_safe = max_z - printer.toolhead.position.z %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
G0 Z{z_safe} F2000 ; move nozzle up
|
G0 Z{z_safe} F{zVelocityAdjusted} ; move nozzle up
|
||||||
G0 X{x_safe} Y{y_safe} F9000 ; move nozzle to remove stringing
|
G0 X{x_safe} Y{y_safe} F{maxVelocityAdjusted} ; move nozzle to remove stringing
|
||||||
TURN_OFF_HEATERS
|
TURN_OFF_HEATERS
|
||||||
M107 ; turn off fan
|
M107 ; turn off fan
|
||||||
G90 ; absolute positioning
|
G90 ; absolute positioning
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
10
osskc.cfg
Normal file
10
osskc.cfg
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
[include ./cfgs/misc-macros.cfg]
|
||||||
|
[include ./cfgs/PARKING.cfg]
|
||||||
|
[include ./cfgs/MECHANICAL_GANTRY_CALIBRATION.cfg]
|
||||||
|
[include ./cfgs/CALIBRATION.cfg]
|
||||||
|
[include ./cfgs/kamp/KAMP_Settings.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-direct.cfg]
|
||||||
42
printer.cfg
42
printer.cfg
@@ -4,17 +4,11 @@
|
|||||||
#
|
#
|
||||||
# See https://www.klipper3d.org/Config_Reference.html for configuration reference.
|
# See https://www.klipper3d.org/Config_Reference.html for configuration reference.
|
||||||
|
|
||||||
[include ./cfgs/misc-macros.cfg]
|
[include ./osskc.cfg]
|
||||||
[include ./cfgs/PARKING.cfg]
|
|
||||||
[include ./cfgs/MECHANICAL_GANTRY_CALIBRATION.cfg]
|
|
||||||
|
|
||||||
# NOTE Uncomment the ONE of the following lines if you're using an adxl345
|
|
||||||
# [include ./cfgs/adxl-rp2040.cfg]
|
|
||||||
# [include ./cfgs/adxl-direct.cfg]
|
|
||||||
|
|
||||||
[mcu]
|
[mcu]
|
||||||
# NOTE Obtain definition by "ls -l /dev/serial/by-id/"
|
# NOTE Obtain definition by "ls -l /dev/serial/by-path/" or "ls -l /dev/serial/by-id/"
|
||||||
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
|
restart_method: command
|
||||||
|
|
||||||
[printer]
|
[printer]
|
||||||
@@ -23,6 +17,7 @@ max_velocity: 200
|
|||||||
max_accel: 3000
|
max_accel: 3000
|
||||||
max_z_velocity: 15
|
max_z_velocity: 15
|
||||||
max_z_accel: 45
|
max_z_accel: 45
|
||||||
|
square_corner_velocity: 8.0
|
||||||
|
|
||||||
#####################################################################
|
#####################################################################
|
||||||
# X/Y/Z Stepper Settings
|
# X/Y/Z Stepper Settings
|
||||||
@@ -32,7 +27,7 @@ max_z_accel: 45
|
|||||||
step_pin: PC2
|
step_pin: PC2
|
||||||
dir_pin: !PB9
|
dir_pin: !PB9
|
||||||
enable_pin: !PC3
|
enable_pin: !PC3
|
||||||
microsteps: 64
|
microsteps: 128
|
||||||
rotation_distance: 40
|
rotation_distance: 40
|
||||||
endstop_pin: tmc2209_stepper_x:virtual_endstop
|
endstop_pin: tmc2209_stepper_x:virtual_endstop
|
||||||
position_endstop: 0
|
position_endstop: 0
|
||||||
@@ -54,7 +49,7 @@ diag_pin: PA5
|
|||||||
step_pin: PB8
|
step_pin: PB8
|
||||||
dir_pin: PB7
|
dir_pin: PB7
|
||||||
enable_pin: !PC3
|
enable_pin: !PC3
|
||||||
microsteps: 64
|
microsteps: 128
|
||||||
rotation_distance: 40
|
rotation_distance: 40
|
||||||
endstop_pin: tmc2209_stepper_y:virtual_endstop
|
endstop_pin: tmc2209_stepper_y:virtual_endstop
|
||||||
position_endstop: 0
|
position_endstop: 0
|
||||||
@@ -76,7 +71,7 @@ diag_pin: PA6
|
|||||||
step_pin: PB6
|
step_pin: PB6
|
||||||
dir_pin: !PB5
|
dir_pin: !PB5
|
||||||
enable_pin: !PC3
|
enable_pin: !PC3
|
||||||
microsteps: 64
|
microsteps: 128
|
||||||
rotation_distance: 4
|
rotation_distance: 4
|
||||||
endstop_pin: probe:z_virtual_endstop
|
endstop_pin: probe:z_virtual_endstop
|
||||||
position_min: -4
|
position_min: -4
|
||||||
@@ -100,7 +95,7 @@ diag_pin: PA7
|
|||||||
step_pin: PB4
|
step_pin: PB4
|
||||||
dir_pin: !PB3
|
dir_pin: !PB3
|
||||||
enable_pin: !PC3
|
enable_pin: !PC3
|
||||||
microsteps: 64
|
microsteps: 128
|
||||||
rotation_distance: 4.65 # NOTE Calibrate e-steps and adjust https://www.klipper3d.org/Rotation_Distance.html
|
rotation_distance: 4.65 # NOTE Calibrate e-steps and adjust https://www.klipper3d.org/Rotation_Distance.html
|
||||||
nozzle_diameter: 0.400
|
nozzle_diameter: 0.400
|
||||||
filament_diameter: 1.750
|
filament_diameter: 1.750
|
||||||
@@ -188,27 +183,26 @@ encoder_pins: ^PB14, ^PB10
|
|||||||
click_pin: ^!PB2
|
click_pin: ^!PB2
|
||||||
|
|
||||||
[bed_screws]
|
[bed_screws]
|
||||||
screw1: 26.5, 31
|
|
||||||
screw1_name: front left
|
screw1_name: front left
|
||||||
screw2: 196.75, 31
|
screw1: 26.5, 31
|
||||||
screw2_name: front right
|
screw2_name: front right
|
||||||
screw3: 196.75, 201
|
screw2: 196.75, 31
|
||||||
screw3_name: back right
|
screw3_name: back right
|
||||||
screw4: 26.5, 201
|
screw3: 196.75, 201
|
||||||
screw4_name: back left
|
screw4_name: back left
|
||||||
|
screw4: 26.5, 201
|
||||||
|
|
||||||
[screws_tilt_adjust]
|
[screws_tilt_adjust]
|
||||||
screw1: 111.5, 116.5
|
|
||||||
screw1_name: center
|
screw1_name: center
|
||||||
screw2: 26.5, 31
|
screw1: 84.50, 135
|
||||||
screw2_name: front left
|
screw2_name: front left
|
||||||
screw3: 196.75, 31
|
screw2: 0, 51
|
||||||
screw3_name: front right
|
screw3_name: front right
|
||||||
screw4: 196.75, 201
|
screw3: 169.75, 51
|
||||||
screw4_name: back right
|
screw4_name: back right
|
||||||
screw5: 26.5, 201
|
screw4: 169.75, 221
|
||||||
screw5_name: back left
|
screw5_name: back left
|
||||||
speed: 50
|
screw5: 0, 221
|
||||||
horizontal_move_z: 10
|
horizontal_move_z: 10
|
||||||
screw_thread: CCW-M4
|
screw_thread: CCW-M4
|
||||||
|
|
||||||
@@ -224,6 +218,8 @@ switch_pin: !PA4 # "Pulled-high"
|
|||||||
pause_on_runout: True
|
pause_on_runout: True
|
||||||
insert_gcode:
|
insert_gcode:
|
||||||
M117 Insert Detected
|
M117 Insert Detected
|
||||||
|
{ action_respond_info("Insert Detected") }
|
||||||
runout_gcode:
|
runout_gcode:
|
||||||
M117 Runout Detected
|
M117 Runout Detected
|
||||||
|
{ action_respond_info("Runout Detected") }
|
||||||
CONDITIONAL_BEEP i=3 dur=300 freq=400
|
CONDITIONAL_BEEP i=3 dur=300 freq=400
|
||||||
|
|||||||
Reference in New Issue
Block a user