This commit is contained in:
2025-03-16 03:22:40 +03:00
commit f6d104b882
38 changed files with 3767 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
printer-*.cfg
KAMP

116
.moonraker.conf.bkp Normal file
View File

@@ -0,0 +1,116 @@
[server]
host = 0.0.0.0
port = 7125
klippy_uds_address = /home/biqu/printer_data/comms/klippy.sock
[authorization]
trusted_clients =
10.0.0.0/8
127.0.0.0/8
169.254.0.0/16
172.16.0.0/12
192.168.0.0/16
FE80::/10
::1/128
cors_domains =
*.lan
*.local
*://localhost
*://localhost:*
*://my.mainsail.xyz
*://app.fluidd.xyz
[octoprint_compat]
[history]
[file_manager]
enable_object_processing = True
[timelapse]
ffmpeg_binary_path = /usr/bin/ffmpeg
[update_manager]
channel = stable
refresh_interval = 168
[power MainPower]
type = klipper_device
object_name = output_pin ps_on
initial_state = on
[update_manager klipper_tmc_autotune]
type = git_repo
channel = dev
path = ~/klipper_tmc_autotune
origin = https://github.com/andrewmcgr/klipper_tmc_autotune.git
managed_services = klipper
primary_branch = main
install_script = install.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
[update_manager mainsail-config]
type = git_repo
primary_branch = master
path = ~/mainsail-config
origin = https://github.com/mainsail-crew/mainsail-config.git
managed_services = klipper
[update_manager mainsail]
type = web
channel = stable
repo = mainsail-crew/mainsail
path = ~/mainsail
[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 sonar]
type = git_repo
path = ~/sonar
origin = https://github.com/mainsail-crew/sonar.git
primary_branch = main
managed_services = sonar
install_script = tools/install.sh
[update_manager katapult]
type = git_repo
origin = https://github.com/Arksine/katapult.git
path = ~/katapult
is_system_service = False
[update_manager KlipperScreen]
type = git_repo
path = ~/KlipperScreen
origin = https://github.com/KlipperScreen/KlipperScreen.git
virtualenv = ~/.KlipperScreen-env
requirements = scripts/KlipperScreen-requirements.txt
system_dependencies = scripts/system-dependencies.json
managed_services = KlipperScreen
[update_manager Klipper-Adaptive-Meshing-Purging]
type = git_repo
channel = dev
path = ~/Klipper-Adaptive-Meshing-Purging
origin = https://github.com/kyleisah/Klipper-Adaptive-Meshing-Purging.git
managed_services = klipper
primary_branch = main
[update_manager moonraker-telegram-bot]
install_script = scripts/install.sh
requirements = scripts/requirements.txt
env = /home/biqu/moonraker-telegram-bot-env/bin/python
origin = https://github.com/nlef/moonraker-telegram-bot.git
path = /home/biqu/moonraker-telegram-bot
type = git_repo

36
KAMP_Settings.cfg Normal file
View File

@@ -0,0 +1,36 @@
# Below you can include specific configuration files depending on what you want KAMP to do:
[include ./KAMP/Adaptive_Meshing.cfg] # Include to enable adaptive meshing configuration.
# [include ./KAMP/Line_Purge.cfg] # Include to enable adaptive line purging configuration.
[include ./KAMP/Voron_Purge.cfg] # Include to enable adaptive Voron logo purging configuration.
[include ./KAMP/Smart_Park.cfg] # Include to enable the Smart Park function, which parks the printhead near the print area for final heating.
[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: 1 # 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: 10 # Distance between tip of filament and nozzle before purge. Should be similar to PRINT_END final retract amount.
variable_purge_margin: 12 # 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.
# The following variables are for adjusting the Smart Park feature for KAMP, which will park the printhead near the print area at a specified height.
variable_smart_park_height: 10 # Z position for Smart Park, default is 10.
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. ")}

12
KlipperScreen.conf Normal file
View File

@@ -0,0 +1,12 @@
# To use this KlipperScreen panel, create a symlink:
# $MOONRAKER_OBICO_HOME/scripts/klipper_screen_obico_panel.py -> $KLIPPER_SCREEN_HOME/panels/obico.py
[menu __main more obico]
name: Obico
icon: network
panel: obico
#~# --- Do not edit below this line. This section is auto generated --- #~#
#~#
#~# [main]
#~# print_sort_dir = date_desc
#~# language = ru
#~#

60
crowsnest.conf Normal file
View File

@@ -0,0 +1,60 @@
#### 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/biqu/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 xy]
#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/v4l/by-path/platform-5101000.usb-usb-0:1.3:1.0-video-index0 # See Log for available ...
#resolution: 1280x720 #640x480 # widthxheight format 2048x1536
#max_fps: 15 # 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.
[cam head]
#mode: ustreamer
mode: MJPG
port: 8081
#device: /dev/v4l/by-path/platform-5101000.usb-usb-0:1.1:1.0-video-index0
device: /dev/v4l/by-id/usb-DSJ_UC60_Video_200901010001-video-index0
resolution: 1600x1200 #176x144, 320x240, 352x288, 640x480, 640x360, 640x400, 800x600, 1024x768, 1280x720, 1280x960, 1600x1200, 1920x1080, 2048x1536, 2560x1440, 2592x1944
max_fps: 15
v4l2ctl: focus_auto=0 #brightness=-10, backlight_compensation=0
#[cam bed_cam]
#mode: ustreamer
#port: 8080
#device: /dev/video0 # The CSI
#resolution: 1600x1200 #176x144, 320x240, 352x288, 640x480, 640x360, 640x400, 800x600, 1024x768, 1280x720, 1280x960, 1600x1200, 1920x1080, 2048x1536, 2560x1440, 2592x1944
#max_fps: 15
#custom_flags: --format=UYVY

55
firmware/.CAN Normal file
View File

@@ -0,0 +1,55 @@
# CONFIG_LOW_LEVEL_OPTIONS is not set
CONFIG_MACH_AVR=y
# CONFIG_MACH_ATSAM is not set
# CONFIG_MACH_ATSAMD is not set
# CONFIG_MACH_LPC176X is not set
# CONFIG_MACH_STM32 is not set
# CONFIG_MACH_HC32F460 is not set
# CONFIG_MACH_RPXXXX is not set
# CONFIG_MACH_PRU is not set
# CONFIG_MACH_AR100 is not set
# CONFIG_MACH_LINUX is not set
# CONFIG_MACH_SIMU is not set
CONFIG_AVR_SELECT=y
CONFIG_BOARD_DIRECTORY="avr"
CONFIG_MACH_atmega2560=y
# CONFIG_MACH_atmega1280 is not set
# CONFIG_MACH_at90usb1286 is not set
# CONFIG_MACH_at90usb646 is not set
# CONFIG_MACH_atmega32u4 is not set
# CONFIG_MACH_atmega1284p is not set
# CONFIG_MACH_atmega644p is not set
# CONFIG_MACH_atmega328p is not set
# CONFIG_MACH_atmega328 is not set
# CONFIG_MACH_atmega168 is not set
CONFIG_MCU="atmega2560"
CONFIG_AVRDUDE_PROTOCOL="wiring"
CONFIG_CLOCK_FREQ=16000000
CONFIG_AVR_CLKPR=-1
CONFIG_AVR_STACK_SIZE=256
CONFIG_AVR_WATCHDOG=y
CONFIG_SERIAL=y
CONFIG_SERIAL_BAUD_U2X=y
CONFIG_SERIAL_PORT=0
CONFIG_SERIAL_BAUD=250000
CONFIG_USB_VENDOR_ID=0x1d50
CONFIG_USB_DEVICE_ID=0x614e
CONFIG_USB_SERIAL_NUMBER="12345"
CONFIG_WANT_GPIO_BITBANGING=y
CONFIG_WANT_DISPLAYS=y
CONFIG_WANT_SENSORS=y
CONFIG_WANT_LIS2DW=y
CONFIG_WANT_LDC1612=y
CONFIG_WANT_HX71X=y
CONFIG_WANT_ADS1220=y
CONFIG_WANT_SOFTWARE_I2C=y
CONFIG_WANT_SOFTWARE_SPI=y
CONFIG_NEED_SENSOR_BULK=y
CONFIG_CANBUS_FREQUENCY=1000000
CONFIG_HAVE_GPIO=y
CONFIG_HAVE_GPIO_ADC=y
CONFIG_HAVE_GPIO_SPI=y
CONFIG_HAVE_GPIO_I2C=y
CONFIG_HAVE_GPIO_HARD_PWM=y
CONFIG_HAVE_STRICT_TIMING=y
CONFIG_INLINE_STEPPER_HACK=y

View File

@@ -0,0 +1,78 @@
CONFIG_LOW_LEVEL_OPTIONS=y
# CONFIG_MACH_LPC176X is not set
CONFIG_MACH_STM32=y
# CONFIG_MACH_RPXXXX is not set
CONFIG_BOARD_DIRECTORY="stm32"
CONFIG_MCU="stm32f072xb"
CONFIG_CLOCK_FREQ=48000000
CONFIG_FLASH_SIZE=0x20000
CONFIG_FLASH_BOOT_ADDRESS=0x8000000
CONFIG_RAM_START=0x20000000
CONFIG_RAM_SIZE=0x4000
CONFIG_STACK_SIZE=512
CONFIG_FLASH_APPLICATION_ADDRESS=0x8002000
CONFIG_FLASH_START=0x8000000
CONFIG_LAUNCH_APP_ADDRESS=0x8002000
CONFIG_BLOCK_SIZE=64
CONFIG_STM32_SELECT=y
# CONFIG_MACH_STM32F103 is not set
# CONFIG_MACH_STM32F207 is not set
# CONFIG_MACH_STM32F401 is not set
# CONFIG_MACH_STM32F405 is not set
# CONFIG_MACH_STM32F407 is not set
# CONFIG_MACH_STM32F429 is not set
# CONFIG_MACH_STM32F446 is not set
# CONFIG_MACH_STM32F031 is not set
# CONFIG_MACH_STM32F042 is not set
# CONFIG_MACH_STM32F070 is not set
CONFIG_MACH_STM32F072=y
# CONFIG_MACH_STM32G0B0 is not set
# CONFIG_MACH_STM32G0B1 is not set
# CONFIG_MACH_STM32H723 is not set
# CONFIG_MACH_STM32H743 is not set
CONFIG_MACH_STM32F0=y
CONFIG_MACH_STM32F0x2=y
CONFIG_HAVE_STM32_USBFS=y
CONFIG_HAVE_STM32_CANBUS=y
CONFIG_STM32_DFU_ROM_ADDRESS=0
# CONFIG_STM32_FLASH_START_0000 is not set
CONFIG_STM32_FLASH_START_2000=y
# CONFIG_STM32_FLASH_START_1000 is not set
# CONFIG_STM32_FLASH_START_4000 is not set
CONFIG_ARMCM_RAM_VECTORTABLE=y
CONFIG_STM32_CLOCK_REF_8M=y
# CONFIG_STM32_CLOCK_REF_12M is not set
# CONFIG_STM32_CLOCK_REF_16M is not set
# CONFIG_STM32_CLOCK_REF_20M is not set
# CONFIG_STM32_CLOCK_REF_25M is not set
# CONFIG_STM32_CLOCK_REF_32M is not set
# CONFIG_STM32_CLOCK_REF_INTERNAL is not set
CONFIG_CLOCK_REF_FREQ=8000000
CONFIG_STM32F0_TRIM=16
# CONFIG_STM32_USB_PA11_PA12 is not set
# CONFIG_STM32_SERIAL_USART1 is not set
# CONFIG_STM32_SERIAL_USART1_ALT_PB7_PB6 is not set
# CONFIG_STM32_SERIAL_USART2 is not set
# CONFIG_STM32_SERIAL_USART2_ALT_PA15_PA14 is not set
# CONFIG_STM32_CANBUS_PA11_PA12 is not set
# CONFIG_STM32_CANBUS_PA11_PB9 is not set
CONFIG_STM32_MMENU_CANBUS_PB8_PB9=y
# CONFIG_STM32_MMENU_CANBUS_PD0_PD1 is not set
CONFIG_STM32_CANBUS_PB8_PB9=y
CONFIG_STM32_APP_START_2000=y
# CONFIG_STM32_APP_START_1000 is not set
CONFIG_USB_VENDOR_ID=0x1d50
CONFIG_USB_DEVICE_ID=0x6177
CONFIG_USB_SERIAL_NUMBER="12345"
CONFIG_CANSERIAL=y
CONFIG_CANBUS=y
CONFIG_CANBUS_FREQUENCY=1000000
CONFIG_CANBUS_FILTER=y
CONFIG_INITIAL_PINS=""
CONFIG_ENABLE_DOUBLE_RESET=y
# CONFIG_ENABLE_BUTTON is not set
CONFIG_ENABLE_LED=y
CONFIG_STATUS_LED_PIN="PC13"
CONFIG_BUILD_DEPLOYER=y
CONFIG_HAVE_CHIPID=y
CONFIG_KATAPULT_VERSION="v0.0.1-91-g604b7e5"

View File

@@ -0,0 +1,43 @@
CONFIG_LOW_LEVEL_OPTIONS=y
CONFIG_MACH_LPC176X=y
# CONFIG_MACH_STM32 is not set
# CONFIG_MACH_RPXXXX is not set
CONFIG_LPC_SELECT=y
CONFIG_BOARD_DIRECTORY="lpc176x"
CONFIG_MACH_LPC1768=y
# CONFIG_MACH_LPC1769 is not set
CONFIG_MCU="lpc1768"
CONFIG_CLOCK_FREQ=100000000
CONFIG_FLASH_SIZE=0x80000
CONFIG_FLASH_BOOT_ADDRESS=0x0
CONFIG_RAM_START=0x10000000
CONFIG_RAM_SIZE=0x7ee0
CONFIG_STACK_SIZE=512
CONFIG_LPC_FLASH_START_0000=y
# CONFIG_LPC_FLASH_START_4000 is not set
CONFIG_FLASH_APPLICATION_ADDRESS=0x0000
CONFIG_LPC_USB=y
# CONFIG_LPC_SERIAL_UART0_P03_P02 is not set
# CONFIG_LPC_SERIAL_UART3_P429_P428 is not set
CONFIG_FLASH_START=0x0000
CONFIG_LAUNCH_APP_ADDRESS=0x4000
CONFIG_BLOCK_SIZE=64
CONFIG_USBSERIAL=y
CONFIG_USB=y
CONFIG_USB_VENDOR_ID=0x1d50
CONFIG_USB_DEVICE_ID=0x6177
CONFIG_USB_SERIAL_NUMBER_CHIPID=y
CONFIG_USB_SERIAL_NUMBER="12345"
#
# USB ids
#
# end of USB ids
CONFIG_CANBUS_FREQUENCY=1000000
CONFIG_INITIAL_PINS=""
CONFIG_ENABLE_DOUBLE_RESET=y
# CONFIG_ENABLE_BUTTON is not set
# CONFIG_ENABLE_LED is not set
CONFIG_HAVE_CHIPID=y
CONFIG_KATAPULT_VERSION="v0.0.1-91-g604b7e5"

121
firmware/octopus-pro.config Normal file
View File

@@ -0,0 +1,121 @@
CONFIG_LOW_LEVEL_OPTIONS=y
# CONFIG_MACH_AVR is not set
# CONFIG_MACH_ATSAM is not set
# CONFIG_MACH_ATSAMD is not set
# CONFIG_MACH_LPC176X is not set
CONFIG_MACH_STM32=y
# CONFIG_MACH_HC32F460 is not set
# CONFIG_MACH_RPXXXX is not set
# CONFIG_MACH_PRU is not set
# CONFIG_MACH_AR100 is not set
# CONFIG_MACH_LINUX is not set
# CONFIG_MACH_SIMU is not set
CONFIG_BOARD_DIRECTORY="stm32"
CONFIG_MCU="stm32h723xx"
CONFIG_CLOCK_FREQ=400000000
CONFIG_FLASH_SIZE=0x40000
CONFIG_FLASH_BOOT_ADDRESS=0x8000000
CONFIG_RAM_START=0x20000000
CONFIG_RAM_SIZE=0x20000
CONFIG_STACK_SIZE=512
CONFIG_FLASH_APPLICATION_ADDRESS=0x8020000
CONFIG_STM32_SELECT=y
# CONFIG_MACH_STM32F103 is not set
# CONFIG_MACH_STM32F207 is not set
# CONFIG_MACH_STM32F401 is not set
# CONFIG_MACH_STM32F405 is not set
# CONFIG_MACH_STM32F407 is not set
# CONFIG_MACH_STM32F429 is not set
# CONFIG_MACH_STM32F446 is not set
# CONFIG_MACH_STM32F765 is not set
# CONFIG_MACH_STM32F031 is not set
# CONFIG_MACH_STM32F042 is not set
# CONFIG_MACH_STM32F070 is not set
# CONFIG_MACH_STM32F072 is not set
# CONFIG_MACH_STM32G070 is not set
# CONFIG_MACH_STM32G071 is not set
# CONFIG_MACH_STM32G0B0 is not set
# CONFIG_MACH_STM32G0B1 is not set
# CONFIG_MACH_STM32G431 is not set
# CONFIG_MACH_STM32G474 is not set
CONFIG_MACH_STM32H723=y
# CONFIG_MACH_STM32H743 is not set
# CONFIG_MACH_STM32H750 is not set
# CONFIG_MACH_STM32L412 is not set
# CONFIG_MACH_N32G452 is not set
# CONFIG_MACH_N32G455 is not set
CONFIG_MACH_STM32H7=y
CONFIG_HAVE_STM32_USBOTG=y
CONFIG_HAVE_STM32_FDCANBUS=y
CONFIG_HAVE_STM32_USBCANBUS=y
CONFIG_STM32_DFU_ROM_ADDRESS=0x1ff09800
CONFIG_STM32_FLASH_START_20000=y
# CONFIG_STM32_FLASH_START_0000 is not set
# CONFIG_STM32_CLOCK_REF_8M is not set
# CONFIG_STM32_CLOCK_REF_12M is not set
# CONFIG_STM32_CLOCK_REF_16M is not set
# CONFIG_STM32_CLOCK_REF_20M is not set
# CONFIG_STM32_CLOCK_REF_24M is not set
CONFIG_STM32_CLOCK_REF_25M=y
# CONFIG_STM32_CLOCK_REF_INTERNAL is not set
CONFIG_CLOCK_REF_FREQ=25000000
CONFIG_STM32F0_TRIM=16
# CONFIG_STM32_USB_PA11_PA12 is not set
# CONFIG_STM32_SERIAL_USART1 is not set
# CONFIG_STM32_SERIAL_USART1_ALT_PB7_PB6 is not set
# CONFIG_STM32_SERIAL_USART2 is not set
# CONFIG_STM32_SERIAL_USART2_ALT_PD6_PD5 is not set
# CONFIG_STM32_SERIAL_USART3 is not set
# CONFIG_STM32_SERIAL_USART3_ALT_PD9_PD8 is not set
# CONFIG_STM32_SERIAL_UART4 is not set
# CONFIG_STM32_CANBUS_PA11_PA12 is not set
# CONFIG_STM32_CANBUS_PA11_PB9 is not set
# CONFIG_STM32_MMENU_CANBUS_PB8_PB9 is not set
# CONFIG_STM32_MMENU_CANBUS_PB12_PB13 is not set
# CONFIG_STM32_MMENU_CANBUS_PD0_PD1 is not set
# CONFIG_STM32_MMENU_CANBUS_PB0_PB1 is not set
# CONFIG_STM32_MMENU_CANBUS_PD12_PD13 is not set
# CONFIG_STM32_MMENU_CANBUS_PC2_PC3 is not set
CONFIG_STM32_USBCANBUS_PA11_PA12=y
# CONFIG_STM32_CMENU_CANBUS_PB8_PB9 is not set
# CONFIG_STM32_CMENU_CANBUS_PB12_PB13 is not set
CONFIG_STM32_CMENU_CANBUS_PD0_PD1=y
# CONFIG_STM32_CMENU_CANBUS_PB0_PB1 is not set
# CONFIG_STM32_CMENU_CANBUS_PD12_PD13 is not set
# CONFIG_STM32_CMENU_CANBUS_PC2_PC3 is not set
CONFIG_STM32_CANBUS_PD0_PD1=y
CONFIG_USBCANBUS=y
CONFIG_USB=y
CONFIG_USB_VENDOR_ID=0x1d50
CONFIG_USB_DEVICE_ID=0x614e
CONFIG_USB_SERIAL_NUMBER_CHIPID=y
CONFIG_USB_SERIAL_NUMBER="12345"
#
# USB ids
#
# end of USB ids
CONFIG_WANT_GPIO_BITBANGING=y
CONFIG_WANT_DISPLAYS=y
CONFIG_WANT_SENSORS=y
CONFIG_WANT_LIS2DW=y
CONFIG_WANT_LDC1612=y
CONFIG_WANT_HX71X=y
CONFIG_WANT_ADS1220=y
CONFIG_WANT_SOFTWARE_I2C=y
CONFIG_WANT_SOFTWARE_SPI=y
CONFIG_NEED_SENSOR_BULK=y
CONFIG_CANBUS=y
CONFIG_CANBUS_FREQUENCY=1000000
CONFIG_INITIAL_PINS="PE11"
CONFIG_HAVE_GPIO=y
CONFIG_HAVE_GPIO_ADC=y
CONFIG_HAVE_GPIO_SPI=y
CONFIG_HAVE_GPIO_I2C=y
CONFIG_HAVE_GPIO_HARD_PWM=y
CONFIG_HAVE_STRICT_TIMING=y
CONFIG_HAVE_CHIPID=y
CONFIG_HAVE_STEPPER_BOTH_EDGE=y
CONFIG_HAVE_BOOTLOADER_REQUEST=y
CONFIG_INLINE_STEPPER_HACK=y

70
firmware/rp_sb2209.CAN Normal file
View File

@@ -0,0 +1,70 @@
CONFIG_LOW_LEVEL_OPTIONS=y
# CONFIG_MACH_AVR is not set
# CONFIG_MACH_ATSAM is not set
# CONFIG_MACH_ATSAMD is not set
# CONFIG_MACH_LPC176X is not set
# CONFIG_MACH_STM32 is not set
# CONFIG_MACH_HC32F460 is not set
CONFIG_MACH_RPXXXX=y
# CONFIG_MACH_PRU is not set
# CONFIG_MACH_AR100 is not set
# CONFIG_MACH_LINUX is not set
# CONFIG_MACH_SIMU is not set
CONFIG_BOARD_DIRECTORY="rp2040"
CONFIG_MCU="rp2040"
CONFIG_CLOCK_FREQ=12000000
CONFIG_FLASH_SIZE=0x200000
CONFIG_FLASH_BOOT_ADDRESS=0x10000100
CONFIG_RAM_START=0x20000000
CONFIG_RAM_SIZE=0x42000
CONFIG_STACK_SIZE=512
CONFIG_FLASH_APPLICATION_ADDRESS=0x10004000
CONFIG_RPXXXX_SELECT=y
CONFIG_MACH_RP2040=y
# CONFIG_MACH_RP2350 is not set
CONFIG_RPXXXX_HAVE_BOOTLOADER=y
# CONFIG_RPXXXX_FLASH_START_0100 is not set
CONFIG_RPXXXX_FLASH_START_4000=y
CONFIG_RP2040_STAGE2_FILE="boot2_w25q080.S"
CONFIG_RP2040_STAGE2_CLKDIV=2
# CONFIG_RPXXXX_USB is not set
# CONFIG_RPXXXX_SERIAL_UART0_PINS_0_1 is not set
# CONFIG_RPXXXX_SERIAL_UART0_PINS_12_13 is not set
# CONFIG_RPXXXX_SERIAL_UART0_PINS_16_17 is not set
# CONFIG_RPXXXX_SERIAL_UART0_PINS_28_29 is not set
# CONFIG_RPXXXX_SERIAL_UART1_PINS_4_5 is not set
# CONFIG_RPXXXX_SERIAL_UART1_PINS_8_9 is not set
# CONFIG_RPXXXX_SERIAL_UART1_PINS_20_21 is not set
# CONFIG_RPXXXX_SERIAL_UART1_PINS_24_25 is not set
CONFIG_RPXXXX_CANBUS=y
# CONFIG_RPXXXX_USBCANBUS is not set
CONFIG_RPXXXX_CANBUS_GPIO_RX=4
CONFIG_RPXXXX_CANBUS_GPIO_TX=5
CONFIG_USB_VENDOR_ID=0x1d50
CONFIG_USB_DEVICE_ID=0x614e
CONFIG_USB_SERIAL_NUMBER="12345"
CONFIG_WANT_GPIO_BITBANGING=y
CONFIG_WANT_DISPLAYS=y
CONFIG_WANT_SENSORS=y
CONFIG_WANT_LIS2DW=y
CONFIG_WANT_LDC1612=y
CONFIG_WANT_HX71X=y
CONFIG_WANT_ADS1220=y
CONFIG_WANT_SOFTWARE_I2C=y
CONFIG_WANT_SOFTWARE_SPI=y
CONFIG_NEED_SENSOR_BULK=y
CONFIG_CANSERIAL=y
CONFIG_CANBUS=y
CONFIG_CANBUS_FREQUENCY=1000000
CONFIG_CANBUS_FILTER=y
CONFIG_INITIAL_PINS="!gpio6"
CONFIG_HAVE_GPIO=y
CONFIG_HAVE_GPIO_ADC=y
CONFIG_HAVE_GPIO_SPI=y
CONFIG_HAVE_GPIO_I2C=y
CONFIG_HAVE_GPIO_HARD_PWM=y
CONFIG_HAVE_STRICT_TIMING=y
CONFIG_HAVE_CHIPID=y
CONFIG_HAVE_STEPPER_BOTH_EDGE=y
CONFIG_HAVE_BOOTLOADER_REQUEST=y
CONFIG_INLINE_STEPPER_HACK=y

105
firmware/sht36_v2.CAN Normal file
View File

@@ -0,0 +1,105 @@
CONFIG_LOW_LEVEL_OPTIONS=y
# CONFIG_MACH_AVR is not set
# CONFIG_MACH_ATSAM is not set
# CONFIG_MACH_ATSAMD is not set
# CONFIG_MACH_LPC176X is not set
CONFIG_MACH_STM32=y
# CONFIG_MACH_HC32F460 is not set
# CONFIG_MACH_RPXXXX is not set
# CONFIG_MACH_PRU is not set
# CONFIG_MACH_AR100 is not set
# CONFIG_MACH_LINUX is not set
# CONFIG_MACH_SIMU is not set
CONFIG_BOARD_DIRECTORY="stm32"
CONFIG_MCU="stm32f072xb"
CONFIG_CLOCK_FREQ=48000000
CONFIG_FLASH_SIZE=0x20000
CONFIG_FLASH_BOOT_ADDRESS=0x8000000
CONFIG_RAM_START=0x20000000
CONFIG_RAM_SIZE=0x4000
CONFIG_STACK_SIZE=512
CONFIG_FLASH_APPLICATION_ADDRESS=0x8002000
CONFIG_STM32_SELECT=y
# CONFIG_MACH_STM32F103 is not set
# CONFIG_MACH_STM32F207 is not set
# CONFIG_MACH_STM32F401 is not set
# CONFIG_MACH_STM32F405 is not set
# CONFIG_MACH_STM32F407 is not set
# CONFIG_MACH_STM32F429 is not set
# CONFIG_MACH_STM32F446 is not set
# CONFIG_MACH_STM32F765 is not set
# CONFIG_MACH_STM32F031 is not set
# CONFIG_MACH_STM32F042 is not set
# CONFIG_MACH_STM32F070 is not set
CONFIG_MACH_STM32F072=y
# CONFIG_MACH_STM32G070 is not set
# CONFIG_MACH_STM32G071 is not set
# CONFIG_MACH_STM32G0B0 is not set
# CONFIG_MACH_STM32G0B1 is not set
# CONFIG_MACH_STM32G431 is not set
# CONFIG_MACH_STM32G474 is not set
# CONFIG_MACH_STM32H723 is not set
# CONFIG_MACH_STM32H743 is not set
# CONFIG_MACH_STM32H750 is not set
# CONFIG_MACH_STM32L412 is not set
# CONFIG_MACH_N32G452 is not set
# CONFIG_MACH_N32G455 is not set
CONFIG_MACH_STM32F0=y
CONFIG_MACH_STM32F0x2=y
CONFIG_HAVE_STM32_USBFS=y
CONFIG_HAVE_STM32_CANBUS=y
CONFIG_HAVE_STM32_USBCANBUS=y
CONFIG_STM32_DFU_ROM_ADDRESS=0
CONFIG_STM32_FLASH_START_2000=y
# CONFIG_STM32_FLASH_START_1000 is not set
# CONFIG_STM32_FLASH_START_4000 is not set
# CONFIG_STM32_FLASH_START_0000 is not set
CONFIG_ARMCM_RAM_VECTORTABLE=y
CONFIG_STM32_CLOCK_REF_8M=y
# CONFIG_STM32_CLOCK_REF_12M is not set
# CONFIG_STM32_CLOCK_REF_16M is not set
# CONFIG_STM32_CLOCK_REF_20M is not set
# CONFIG_STM32_CLOCK_REF_24M is not set
# CONFIG_STM32_CLOCK_REF_25M is not set
# CONFIG_STM32_CLOCK_REF_INTERNAL is not set
CONFIG_CLOCK_REF_FREQ=8000000
CONFIG_STM32F0_TRIM=16
# CONFIG_STM32_USB_PA11_PA12 is not set
# CONFIG_STM32_SERIAL_USART1 is not set
# CONFIG_STM32_SERIAL_USART1_ALT_PB7_PB6 is not set
# CONFIG_STM32_SERIAL_USART2 is not set
# CONFIG_STM32_SERIAL_USART2_ALT_PA15_PA14 is not set
# CONFIG_STM32_CANBUS_PA11_PA12 is not set
# CONFIG_STM32_CANBUS_PA11_PB9 is not set
CONFIG_STM32_MMENU_CANBUS_PB8_PB9=y
# CONFIG_STM32_MMENU_CANBUS_PD0_PD1 is not set
# CONFIG_STM32_USBCANBUS_PA11_PA12 is not set
CONFIG_STM32_CANBUS_PB8_PB9=y
CONFIG_USB_VENDOR_ID=0x1d50
CONFIG_USB_DEVICE_ID=0x614e
CONFIG_USB_SERIAL_NUMBER="12345"
CONFIG_WANT_GPIO_BITBANGING=y
CONFIG_WANT_DISPLAYS=y
CONFIG_WANT_SENSORS=y
CONFIG_WANT_LIS2DW=y
CONFIG_WANT_LDC1612=y
CONFIG_WANT_HX71X=y
CONFIG_WANT_ADS1220=y
CONFIG_WANT_SOFTWARE_I2C=y
CONFIG_WANT_SOFTWARE_SPI=y
CONFIG_NEED_SENSOR_BULK=y
CONFIG_CANSERIAL=y
CONFIG_CANBUS=y
CONFIG_CANBUS_FREQUENCY=1000000
CONFIG_CANBUS_FILTER=y
CONFIG_INITIAL_PINS="!PC13"
CONFIG_HAVE_GPIO=y
CONFIG_HAVE_GPIO_ADC=y
CONFIG_HAVE_GPIO_SPI=y
CONFIG_HAVE_GPIO_I2C=y
CONFIG_HAVE_GPIO_HARD_PWM=y
CONFIG_HAVE_STRICT_TIMING=y
CONFIG_HAVE_CHIPID=y
CONFIG_HAVE_STEPPER_BOTH_EDGE=y
CONFIG_HAVE_BOOTLOADER_REQUEST=y
CONFIG_INLINE_STEPPER_HACK=y

55
firmware/sht36_v2.CAN.old Normal file
View File

@@ -0,0 +1,55 @@
# CONFIG_LOW_LEVEL_OPTIONS is not set
CONFIG_MACH_AVR=y
# CONFIG_MACH_ATSAM is not set
# CONFIG_MACH_ATSAMD is not set
# CONFIG_MACH_LPC176X is not set
# CONFIG_MACH_STM32 is not set
# CONFIG_MACH_HC32F460 is not set
# CONFIG_MACH_RPXXXX is not set
# CONFIG_MACH_PRU is not set
# CONFIG_MACH_AR100 is not set
# CONFIG_MACH_LINUX is not set
# CONFIG_MACH_SIMU is not set
CONFIG_AVR_SELECT=y
CONFIG_BOARD_DIRECTORY="avr"
CONFIG_MACH_atmega2560=y
# CONFIG_MACH_atmega1280 is not set
# CONFIG_MACH_at90usb1286 is not set
# CONFIG_MACH_at90usb646 is not set
# CONFIG_MACH_atmega32u4 is not set
# CONFIG_MACH_atmega1284p is not set
# CONFIG_MACH_atmega644p is not set
# CONFIG_MACH_atmega328p is not set
# CONFIG_MACH_atmega328 is not set
# CONFIG_MACH_atmega168 is not set
CONFIG_MCU="atmega2560"
CONFIG_AVRDUDE_PROTOCOL="wiring"
CONFIG_CLOCK_FREQ=16000000
CONFIG_AVR_CLKPR=-1
CONFIG_AVR_STACK_SIZE=256
CONFIG_AVR_WATCHDOG=y
CONFIG_SERIAL=y
CONFIG_SERIAL_BAUD_U2X=y
CONFIG_SERIAL_PORT=0
CONFIG_SERIAL_BAUD=250000
CONFIG_USB_VENDOR_ID=0x1d50
CONFIG_USB_DEVICE_ID=0x614e
CONFIG_USB_SERIAL_NUMBER="12345"
CONFIG_WANT_GPIO_BITBANGING=y
CONFIG_WANT_DISPLAYS=y
CONFIG_WANT_SENSORS=y
CONFIG_WANT_LIS2DW=y
CONFIG_WANT_LDC1612=y
CONFIG_WANT_HX71X=y
CONFIG_WANT_ADS1220=y
CONFIG_WANT_SOFTWARE_I2C=y
CONFIG_WANT_SOFTWARE_SPI=y
CONFIG_NEED_SENSOR_BULK=y
CONFIG_CANBUS_FREQUENCY=1000000
CONFIG_HAVE_GPIO=y
CONFIG_HAVE_GPIO_ADC=y
CONFIG_HAVE_GPIO_SPI=y
CONFIG_HAVE_GPIO_I2C=y
CONFIG_HAVE_GPIO_HARD_PWM=y
CONFIG_HAVE_STRICT_TIMING=y
CONFIG_INLINE_STEPPER_HACK=y

51
firmware/update_fw.sh Executable file
View File

@@ -0,0 +1,51 @@
#!/bin/bash
#Полезные комманды
#make menuconfig KCONFIG_CONFIG=/home/biqu/printer_data/config/firmware/config.manta723.CAN
#make flash FLASH_DEVICE=0483:df11
#python3 flash_can.py -i can0 -u 6c3c86ee0b29 -f ~/firmware/octopus_klipper.bin
#python3 ~/katapult/scripts/flashtool.py -i can0 -q
#Toolheads
#rp_sb2209=350f10596216
#sht36_v2=8ce295109ef0
toolhed_name=rp_sb2209
toolhed_uuid=350f10596216
mcu_uuid=afcf80281237
mcu_path=/dev/serial/by-id/usb-katapult_stm32h723xx_320006001751313431393536-if00
config_path=/home/biqu/printer_data/config/firmware/
mkdir -p ~/firmware
sudo service klipper stop
cd ~/klipper
make clean
make -j4 KCONFIG_CONFIG="${config_path}octopus-pro.config"
mv ~/klipper/out/klipper.bin ~/firmware/octopus_klipper.bin
make clean
toolhead_config="${config_path}/${used_toolhed}.CAN"
make -j4 KCONFIG_CONFIG=$toolhead_config
mv ~/klipper/out/klipper.bin ~/firmware/toolhead_klipper.bin
cd ~/katapult/scripts
# Update MCU Octopus Pro
echo "Start update MCU Octopus Pro"
python3 ~/katapult/scripts/flashtool.py -i can0 -u $mcu_uuid -r
python3 flash_can.py -f ~/firmware/octopus_klipper.bin -d $mcu_path
sleep 2
#read -p "MCU Manta M5P firmware flashed, please check above for any errors. Press [Enter] to continue, or [Ctrl+C] to abort"
#echo "Finish update MCU octopus"
# Update Toolhead MCU
echo "Start update Toolhead MCU"
python3 flash_can.py -i can0 -u $toolhed_uuid -f ~/firmware/toolhead_klipper.bin
sleep 2
#read -p "MCU EBB36 firmware flashed, please check above for any errors. Press [Enter] to continue, or [Ctrl+C] to abort"
#echo "Finish update MCU EBB36"
python3 ~/katapult/scripts/flashtool.py -i can0 -q
sudo service klipper start

40
firmware/update_fw.sh.old Executable file
View File

@@ -0,0 +1,40 @@
#!/bin/bash
mkdir -p ~/firmware
sudo service klipper stop
cd ~/klipper
make clean
#make menuconfig KCONFIG_CONFIG=/home/biqu/printer_data/config/firmware/config.manta723.CAN
make -j4 KCONFIG_CONFIG=/home/biqu/printer_data/config/firmware/octopus-pro.config
#make flash FLASH_DEVICE=0483:df11
mv ~/klipper/out/klipper.bin ~/firmware/octopus_klipper.bin
make clean
#make menuconfig KCONFIG_CONFIG=/home/biqu/printer_data/config/firmware/rp_sb2209.CAN
make -j4 KCONFIG_CONFIG=/home/biqu/printer_data/config/firmware/rp_sb2209.CAN
mv ~/klipper/out/klipper.bin ~/firmware/toolhead_klipper.bin
cd ~/katapult/scripts
# Update MCU Octopus Pro
echo "Start update MCU Octopus Pro"
#echo ""
#python3 flash_can.py -i can0 -u 6c3c86ee0b29 -f ~/firmware/octopus_klipper.bin
python3 ~/katapult/scripts/flashtool.py -i can0 -u afcf80281237 -r
python3 flash_can.py -f ~/firmware/octopus_klipper.bin -d /dev/serial/by-id/usb-katapult_stm32h723xx_320006001751313431393536-if00
sleep 2
#read -p "MCU Manta M5P firmware flashed, please check above for any errors. Press [Enter] to continue, or [Ctrl+C] to abort"
#echo "Finish update MCU octopus"
# Update Toolhead MCU
echo "Start update Toolhead MCU"
#echo ""
python3 flash_can.py -i can0 -u 350f10596216 -f ~/firmware/toolhead_klipper.bin
sleep 2
#read -p "MCU EBB36 firmware flashed, please check above for any errors. Press [Enter] to continue, or [Ctrl+C] to abort"
#echo "Finish update MCU EBB36"
#echo ""
sudo service klipper start

124
hbb.cfg Normal file
View File

@@ -0,0 +1,124 @@
[mcu HBB]
serial: /dev/serial/by-id/usb-Klipper_rp2040_45474E621A87A43A-if00
[neopixel HBB_LED]
pin: HBB: gpio20
chain_count: 7
color_order: GRB
initial_RED: 0.4
initial_GREEN: 0.4
initial_BLUE: 0.4
[gcode_macro _hbb_varible]
variable_in_progress_key_1: False
variable_in_progress_key_2: False
variable_in_progress_key_3: False
variable_in_progress_key_4: False
variable_in_progress_key_5: False
variable_in_progress_key_6: False
variable_in_progress_key_7: False
variable_status: {
'ready': {'r': 0.4, 'g': 0.4, 'b': 0.4, 'w': 0.0},
'in_progress': {'r': 0.0, 'g': 0.04, 'b': 0.0, 'w': 0.0},
'busy': {'r': 0.4, 'g': 0.0, 'b': 0.0, 'w': 0.0},
'prepare': {'r': 0.4, 'g': 0.4, 'b': 0.0, 'w': 0.0},
'disabled': {'r': 0.0, 'g': 0.0, 'b': 0.0, 'w': 0.0}
}
variable_num_count: 7
gcode:
[gcode_macro _set_status]
gcode:
{% set key_num = params.KEY_NUM|int %}
{% set status = params.STATUS|string %}
{% set led = printer["gcode_macro _hbb_varible"]['status'][status] %}
SET_LED LED=HBB_LED RED={led.r} GREEN={led.g} BLUE={led.b} INDEX={key_num}
[gcode_macro _default_release]
gcode:
{% set key_num = params.KEY_NUM|int %}
{% set macro = params.MACRO|string %}
{% set in_progress = printer["gcode_macro _hbb_varible"]['in_progress_key_{}'.format(key_num)] %}
{% if in_progress == False %}
SET_GCODE_VARIABLE MACRO=_hbb_varible VARIABLE=in_progress_key_{key_num} VALUE=True
_set_status KEY_NUM={key_num} STATUS=in_progress
{macro}
_set_status KEY_NUM={key_num} STATUS=ready
SET_GCODE_VARIABLE MACRO=_hbb_varible VARIABLE=in_progress_key_{key_num} VALUE=False
{% endif %}
#[delayed_gcode init_hbb]
#initial_duration: 1
#gcode:
#{% set hbb_varible = printer["gcode_macro _hbb_varible"] %}
#{% set num_count = printer["gcode_macro _hbb_varible"].num_count | int %}
#{% for key_index in range(1, num_count+1) %}
#_set_status KEY_NUM=key_index STATUS=ready
#{% endfor %}
[gcode_button hbb_key_1]
pin: HBB: gpio25
press_gcode:
release_gcode:
{% set key_num = 1 %}
{% set in_progress = printer["gcode_macro _hbb_varible"].in_progress_key_1 %}
_default_release KEY_NUM={key_num} MACRO="LOAD_FILAMENT"
[gcode_button hbb_key_2]
pin: HBB: gpio26
press_gcode:
release_gcode:
{% set key_num = 2 %}
{% set in_progress = printer["gcode_macro _hbb_varible"].in_progress_key_2 %}
_default_release KEY_NUM={key_num} MACRO="UNLOAD_FILAMENT"
[gcode_button hbb_key_3]
pin: HBB: gpio27
press_gcode:
release_gcode:
{% set key_num = 3 %}
{% set in_progress = printer["gcode_macro _hbb_varible"].in_progress_key_3 %}
_set_status KEY_NUM={key_num} STATUS=disabled
[gcode_button hbb_key_4]
pin: HBB: gpio19
press_gcode:
release_gcode:
{% set key_num = 4 %}
{% set in_progress = printer["gcode_macro _hbb_varible"].in_progress_key_4 %}
_default_release KEY_NUM={key_num} MACRO="G32"
[gcode_button hbb_key_5]
pin: HBB: gpio18
press_gcode:
release_gcode:
{% set key_num = 5 %}
{% set in_progress = printer["gcode_macro _hbb_varible"].in_progress_key_5 %}
_set_status KEY_NUM={key_num} STATUS=disabled
[gcode_button hbb_key_6]
pin: HBB: gpio13
press_gcode:
release_gcode:
{% set key_num = 6 %}
{% set in_progress = printer["gcode_macro _hbb_varible"].in_progress_key_6 %}
_default_release KEY_NUM={key_num} MACRO="PARKFRONT"
[gcode_button hbb_key_7]
pin: HBB: gpio12
press_gcode:
release_gcode:
{% set key_num = 7 %}
{% set in_progress = printer["gcode_macro _hbb_varible"].in_progress_key_7 %}
_default_release KEY_NUM={key_num} MACRO="PARKCENTER"

View File

@@ -0,0 +1,164 @@
[gcode_macro BED_MESH_CALIBRATE]
variable_buffer: 20
rename_existing: _BED_MESH_CALIBRATE
; Do not change any of the existing values below.
variable_last_area_start_x: -1 ; Do not change
variable_last_area_start_y: -1 ; Do not change
variable_last_area_end_x: -1 ; Do not change
variable_last_area_end_y: -1 ; Do not change
variable_probing:False
gcode:
STATUS_MESHING
SET_GCODE_VARIABLE MACRO=_KNOMI_STATUS VARIABLE=probing VALUE=True
{% if params.FORCE_NEW_MESH != null %}
{ action_respond_info("Force New Mesh: %s" % (params.FORCE_NEW_MESH)) }
{% endif %}
{% if printer["bed_mesh"].profile_name == '' %}
{ action_respond_info("No existing bed mesh found.") }
{% set last_area_end_x=-1 %}
{% endif %}
{% if printer.toolhead.homed_axes != "xyz" %}
G28
{% endif %}
{% set klicky_available = printer['gcode_macro _Probe_Variables'] != null %}
{% set euclid_available = printer['gcode_macro EuclidProbe'] != null %}; Requires v5 macros https://github.com/nionio6915/Euclid_Probe/blob/main/Firmware_Examples/Klipper/00-euclid_exampleV5.cfg
{% if params.PRINT_MIN %}
{ action_respond_info("print_min: %s" % params.PRINT_MIN) }
{ action_respond_info("print_max: %s" % params.PRINT_MAX) }
{% set blTouchConfig = printer['configfile'].config["bltouch"] %}
{% if blTouchConfig %}
{% set OffsetX = blTouchConfig.x_offset|default(0)|float %}
{% set OffsetY = blTouchConfig.y_offset|default(0)|float %}
{% endif %}
{% set probeConfig = printer['configfile'].config["probe"] %}
{% if probeConfig %}
{% set OffsetX = probeConfig.x_offset|default(0)|float %}
{% set OffsetY = probeConfig.y_offset|default(0)|float %}
{% endif %}
{% set print_min_x = params.PRINT_MIN.split(",")[0]|float %}
{% set print_min_y = params.PRINT_MIN.split(",")[1]|float %}
{% set print_max_x = params.PRINT_MAX.split(",")[0]|float %}
{% set print_max_y = params.PRINT_MAX.split(",")[1]|float %}
{% if last_area_start_x > 0 %}
{ action_respond_info("last_bed_mesh: %s,%s %s,%s" % (last_area_start_x, last_area_start_y, last_area_end_x, last_area_end_y)) }
{% endif %}
{% if (params.FORCE_NEW_MESH != null) or (print_min_x < last_area_start_x) or (print_max_x > last_area_end_x) or (print_min_y < last_area_start_y) or (print_max_y > last_area_end_y) %}
{% if klicky_available %}
_CheckProbe action=query
Attach_Probe
{% elif euclid_available %}
DEPLOY_PROBE
{% endif %}
{% if (print_min_x < print_max_x) and (print_min_y < print_max_y) %}
# Get bed_mesh config (probe count, mesh_min and mesh_max for x and y
{% set bedMeshConfig = printer['configfile'].config["bed_mesh"] %}
{% set minimum_probe_count = 3 %}
{% if bedMeshConfig.algorithm == "bicubic" %}
{% set minimum_probe_count = 5 %}
{% endif %}
{% set probe_count = bedMeshConfig.probe_count.split(",") %}
{% set probe_count_x = probe_count[0]|int %}
{% if probe_count.__len__() > 1 %}
{% set probe_count_y = probe_count[1]|int %}
{% else %}
{% set probe_count_y = probe_count_x|int %}
{% endif %}
{% set relative_reference_index = bedMeshConfig.relative_reference_index %}
{% set mesh_min_x = bedMeshConfig.mesh_min.split(",")[0]|float %}
{% set mesh_min_y = bedMeshConfig.mesh_min.split(",")[1]|float %}
{% set mesh_max_x = bedMeshConfig.mesh_max.split(",")[0]|float %}
{% set mesh_max_y = bedMeshConfig.mesh_max.split(",")[1]|float %}
# If print area X is smaller than 50% of the bed size, change to to 3 probe counts for X instead of the default
{% if print_max_x - print_min_x < (mesh_max_x - mesh_min_x) * 0.50 %}
{% set probe_count_x = minimum_probe_count %}
{% endif %}
# If print area Y is smaller than 50% of the bed size, change to to 3 probe counts for Y instead of the default
{% if print_max_y - print_min_y < (mesh_max_y - mesh_min_y) * 0.50 %}
{% set probe_count_y = minimum_probe_count %}
{% endif %}
{% if print_min_x - buffer >= mesh_min_x %}
{% set mesh_min_x = print_min_x - buffer %}
{% endif %}
{% if print_min_y - buffer >= mesh_min_y %}
{% set mesh_min_y = print_min_y - buffer %}
{% endif %}
{% if print_max_x + buffer <= mesh_max_x %}
{% set mesh_max_x = print_max_x + buffer %}
{% endif %}
{% if print_max_y + buffer <= mesh_max_y %}
{% set mesh_max_y = print_max_y + buffer %}
{% endif %}
{ action_respond_info("mesh_min: %s,%s" % (mesh_min_x, mesh_min_y)) }
{ action_respond_info("mesh_max: %s,%s" % (mesh_max_x, mesh_max_y)) }
{ action_respond_info("probe_count: %s,%s" % (probe_count_x,probe_count_y)) }
; Set variables so they're available outside of macro
SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=last_area_start_x VALUE={print_min_x}
SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=last_area_start_y VALUE={print_min_y}
SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=last_area_end_x VALUE={print_max_x}
SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=last_area_end_y VALUE={print_max_y}
{% if printer["gcode_macro status_meshing"] != null %}
status_meshing
{% endif %}
{% if relative_reference_index == 0 or relative_reference_index == null %}
_BED_MESH_CALIBRATE mesh_min={mesh_min_x},{mesh_min_y} mesh_max={mesh_max_x},{mesh_max_y} probe_count={probe_count_x},{probe_count_y}
{% else %}
{% set relative_reference_index = ((probe_count_x * probe_count_y - 1) / 2)|int %}
{ action_respond_info("relative_reference_index: %s" % relative_reference_index) }
_BED_MESH_CALIBRATE mesh_min={mesh_min_x},{mesh_min_y} mesh_max={mesh_max_x},{mesh_max_y} probe_count={probe_count_x},{probe_count_y} relative_reference_index={relative_reference_index}
{% endif %}
{% else %}
{% if printer["gcode_macro status_meshing"] != null %}
status_meshing
{% endif %}
_BED_MESH_CALIBRATE
{% endif %}
{% if klicky_available %}
Dock_Probe
{% elif euclid_available %}
STOW_PROBE
{% endif %}
{% else %}
{ action_respond_info("No need to recreate Bed Mesh since it's same as current mesh or smaller") }
{% endif %}
{% else %}
{% if klicky_available %}
_CheckProbe action=query
Attach_Probe
{% elif euclid_available %}
STOW_PROBE
{% endif %}
{% if printer["gcode_macro status_meshing"] != null %}
STATUS_MESHING
{% endif %}
_BED_MESH_CALIBRATE
{% if klicky_available %}
Dock_Probe
{% endif %}
{% if euclid_available %}
STOW_PROBE
{% endif %}
{% endif %}
{% if printer["gcode_macro status_ready"] != null %}
STATUS_READY
{% endif %}
SET_GCODE_VARIABLE MACRO=_KNOMI_STATUS VARIABLE=probing VALUE=False

262
macros/calibrate_flow.cfg Normal file
View File

@@ -0,0 +1,262 @@
#########################################
###### FLOW MULTIPLIER CALIBRATION ######
#########################################
# Written by Frix_x#0161 #
# @version: 1.5
# CHANGELOG:
# v1.5: moved the install notes into a proper markdown file in: doc > features > flow_calibration.md
# v1.4: fix issue when extrude_factor is != 1
# v1.3: fix the logging
# v1.2: fix for those using absolute extrusion that leads to an error
# v1.1: added part cooling fan control and some speed optimizations
# v1.0: first flow calibration macro
# -------------------------------------------------------------------------------------------------------------------------
# If you want to use it into your own config, please install it as a standalone macro as described in the
# installation section of this file: doc > features > flow_calibration.md
# -------------------------------------------------------------------------------------------------------------------------
### What is it ? ###
# The main reason for this set of macros is to get a filament and slicer agnostic way to calibrate the flow extrusion multiplier.
# The goal is to make it easy to set, share and use it.
# This macro is parametric and most of the values can be adjusted with their respective input parameters.
# It can be called without any parameters - in which case the default values would be used - or with any combination of parameters as desired.
# Feel free to ping me on Discord (Frix_x#0161) if you need help or have any comments to improve it :)
# https://github.com/yomgui1/klipper-voron-config/blob/main/doc/features/flow_calibration.md?ysclid=lzuo22xrfl138875688
# ===========================================================================================================
# DO NOT MODIFY THOSE VARIABLES (they are used internaly by the flow calibration macro)
[gcode_macro _FLOW_CALIB_VARIABLES]
variable_last_shell_thickness: 0.0
variable_last_evalue: 0.0
gcode:
[gcode_macro FLOW_MULTIPLIER_CALIBRATION]
description: Print a small tower to calibrate the extrusion flow multiplier by measuring the shell
gcode:
#
# PARAMETERS
#
{% set do_raft = params.DO_RAFT|default(1)|int %} # whether to print a raft or not
{% set do_retract = params.DO_RECTRACT|default(0)|int %} # whether to enable retract/unrectract on travel moves
{% set print_size = params.PRINT_SIZE|default(40)|int %} # size of the printed object on the build plate
{% set print_height = params.HEIGHT|default(15)|int %} # height of the printed object
{% set corner_radius = params.CORNER_RADIUS|default(8)|int %} # radius of the corners to smooth the shell and toolpath
{% set number_of_perimeters = params.PERIMETERS|default(2)|int %} # number of perimeters to print the shell
{% set fan_speed = params.FAN_SPEED|default(20)|int %} # part cooling fan speed in percent (0-100)
{% set e_multiplier = params.EXTRUSION_MULTIPLIER|default(1.00)|float %} # extrusion multiplier for the shell
{% set filament_diameter = params.FILAMENT_DIAMETER|default(1.75)|float %} # filament diameter
{% set extrusion_width = params.EXTRUSION_WIDTH|default(0.4)|float %} # extrusion width goal for one line
{% set layer_height = params.LAYER_HEIGHT|default(0.2)|float %} # layer height for the print
{% set retract_length = params.RETRACT_LENGTH|default(0.5)|float %} # how much to retract when traveling between print moves
{% set initial_purge = params.PURGE_MM|default(1)|int %} # mm of filament to purge before printing. set to 0 to disable
{% set z_hop_height = 2 * layer_height %}
{% set feedrate_print = params.CONTROL_SPEED|default(100)|int * 60 %} # print feedrate
{% set feedrate_travel = params.TRAVEL_SPEED|default(200)|int * 60 %} # travel feedrate between print moves
{% set feedrate_raft = params.RAFT_SPEED|default(60)|int * 60 %} # print feedrate for printing raft
{% set feedrate_z = params.Z_LIFT_SPEED|default(20)|int * 60 %} # z axis travel feedrate
{% set feedrate_retract = params.RETRACT_SPEED|default(50)|int * 60 %} # retract and deretract feedrate
#
# COMPUTED VALUES
#
{% set e_per_mm = ((extrusion_width - layer_height) * layer_height + 3.14159 * (layer_height / 2)**2) / (3.14159 * (filament_diameter / 2)**2) %} # computed E factor (similar to Slic3r/PrusaSlicer/SuperSlicer)
{% set spacing = extrusion_width - layer_height * (1 - 3.14159 / 4) %} # line spacing during the print
{% set shell_thickness = extrusion_width + (number_of_perimeters|float - 1) * spacing %} # theoric shell thickness
{% set max_x = printer.toolhead.axis_maximum.x|float %}
{% set max_y = printer.toolhead.axis_maximum.y|float %}
{% set x_start = max_x / 2 - print_size / 2 %}
{% set y_start = max_y / 2 - print_size / 2 %}
{% set x_end = x_start + print_size %}
{% set y_end = y_start + print_size %}
{% set num_raft_lines = ([print_size, max_x]|min / spacing)|round(0, 'floor')|int %}
{% set raft_size = num_raft_lines * spacing %}
#
# STARTING...
#
{action_respond_info("")}
{action_respond_info("Starting extrusion flow calibration print")}
{action_respond_info("This operation can not be interrupted by normal means. Hit the \"emergency stop\" button to stop it if needed")}
{action_respond_info("")}
{action_respond_info("Exrusion multiplier used: %.4f" % e_multiplier)}
{action_respond_info("Number of perimeters to print: %d" % number_of_perimeters)}
{action_respond_info("THEORIC SHELL THICKNESS: %.4f" % shell_thickness)}
{action_respond_info("")}
{action_respond_info("Measure the shell thickness using a caliper or micrometer. Then call the computation macro with the measured value:")}
{action_respond_info("COMPUTE_FLOW_MULTIPLIER MEASURED_THICKNESS=xxx.xxx")}
{action_respond_info("")}
SAVE_GCODE_STATE NAME=STATE_FLOW_MULTIPLIER_CALIBRATION
#
# set variables for later computation
#
SET_GCODE_VARIABLE MACRO=_FLOW_CALIB_VARIABLES VARIABLE=last_shell_thickness VALUE={shell_thickness}
SET_GCODE_VARIABLE MACRO=_FLOW_CALIB_VARIABLES VARIABLE=last_evalue VALUE={e_multiplier}
#
# purging before raft
#
G90
M83
G92 E0.0
G0 X{x_start} Y{y_start - 5} Z{layer_height} F{feedrate_travel} # move at the start position to do a purge line
G91 # use relative coordinates for the prime line
G1 E{initial_purge} F{5 * 60}
G1 X{raft_size} E{raft_size * e_per_mm * 1.5} F{feedrate_raft / 2} # print prime line
G1 Y-{extrusion_width} E{extrusion_width * e_per_mm} F{feedrate_raft / 2} # move to next line
G1 X-{raft_size} E{raft_size * e_per_mm} F{feedrate_raft / 2} # print second prime line
G1 E-{retract_length} F{feedrate_retract} # retract
G0 Z{z_hop_height} F{feedrate_z} # z-hop
G90 # back to absolute coordinates
G0 X{x_start} Y{y_start} F{feedrate_travel} # move to start position
G1 Z{layer_height} F{feedrate_z} # move to print height
G1 E{retract_length} F{feedrate_retract} # unretract
# set extrude_factor
M221 S{e_multiplier * 100}
#
# print the raft
#
{% if do_raft == 1 %}
G91 # use relative coordinates for the raft
{% for curr_raft_line in range(1, num_raft_lines + 2) %}
# print a raft line with alternating direction
G1 Y{loop.cycle(1.0, -1.0) * raft_size} E{raft_size * e_per_mm} F{feedrate_raft}
# spacing move
{% if not loop.last %}
G1 X{spacing} E{spacing * e_per_mm} F{feedrate_raft}
{% endif %}
{% endfor %}
G1 E-{retract_length} F{feedrate_retract} # retract
G0 Z{z_hop_height} F{feedrate_z} # z-hop
G90 # back to absolute coordinates
{% endif %}
#
# print the shell
#
G90
M106 S{fan_speed * 255 / 100}
# for each layer
{% for curr_layer in range(1, (print_height / layer_height)|round|int) %}
G0 X{x_start + corner_radius} Y{y_start} F{feedrate_travel} # move to XY start position
G1 Z{(curr_layer * layer_height) + (layer_height if do_raft == 1 else 0)} F{feedrate_z} # move to Z start position
# print one layer of the shell (in a for loop to do all the perimeters of one layer)
{% for perim_num in range(number_of_perimeters) %}
# compute values for the current perimeter (offset and radius)
{% set perim_offset = perim_num * spacing %}
{% set perim_radius = corner_radius - (perim_num * spacing) %}
# start position of the current perimeter
G1 X{x_start + corner_radius} Y{y_start + perim_offset} F{feedrate_travel}
{% if do_retract == 1 %}
G1 E{retract_length} F{feedrate_retract} # unretract
{% endif %}
# print the perimeter using the offset and radius computed
G1 X{x_end - corner_radius} Y{y_start + perim_offset} E{(print_size - (2 * corner_radius)) * e_per_mm} F{feedrate_print}
G3 X{x_end - perim_offset} Y{y_start + corner_radius} J{perim_radius} E{(3.14159 / 2) * perim_radius * e_per_mm} F{feedrate_print}
G1 X{x_end - perim_offset} Y{y_end - corner_radius} E{(print_size - (2 * corner_radius)) * e_per_mm} F{feedrate_print}
G3 X{x_end - corner_radius} Y{y_end - perim_offset} I-{perim_radius} E{(3.14159 / 2) * perim_radius * e_per_mm} F{feedrate_print}
G1 X{x_start + corner_radius} Y{y_end - perim_offset} E{(print_size - (2 * corner_radius)) * e_per_mm} F{feedrate_print}
G3 X{x_start + perim_offset} Y{y_end - corner_radius} J-{perim_radius} E{(3.14159 / 2) * perim_radius * e_per_mm} F{feedrate_print}
G1 X{x_start + perim_offset} Y{y_start + corner_radius} E{(print_size - (2 * corner_radius)) * e_per_mm} F{feedrate_print}
G3 X{x_start + corner_radius} Y{y_start + perim_offset} I{perim_radius} E{(3.14159 / 2) * perim_radius * e_per_mm} F{feedrate_print}
{% if do_retract == 1 %}
G1 E-{retract_length} F{feedrate_retract} # retract
{% endif %}
{% endfor %}
{% if do_retract == 1 %}
G91
G0 Z{z_hop_height} F{feedrate_z}
G90
{% endif %}
{% endfor %}
#
# retract and move away
#
G1 E-{retract_length} F{feedrate_retract}
G91
G0 Z20 F{feedrate_travel}
RESTORE_GCODE_STATE NAME=STATE_FLOW_MULTIPLIER_CALIBRATION
[gcode_macro COMPUTE_FLOW_MULTIPLIER]
description: Compute a new flow multiplier by using the measured shell thickness on the calibration print
gcode:
{% set evalue = params.OLD_EXTRUSION_MULTIPLIER|default(0.0)|float %} # extrusion multiplier used for the calibration print
{% set theorical_thickness = params.THEORICAL_THICKNESS|default(0.0)|float %} # theorical shell thickness
{% set measured_thickness = params.MEASURED_THICKNESS|default(0.0)|float %} # measured shell thickness on the calibration print
# if there is no OLD_EXTRUSION_MULTIPLIER passed as param, get the one from the last print calib run
{% if evalue == 0.0 %}
{% set last_evalue = printer["gcode_macro _FLOW_CALIB_VARIABLES"].last_evalue %}
# then, if there is also no evalue saved from the last run, alert user
{% if last_evalue == 0.0 %}
{action_respond_info("It seems that no calibration print was run prior to this (or a restart of Klipper occured).")}
{action_respond_info("You can still manually use it by calling again this macro like that:")}
{action_respond_info("COMPUTE_FLOW_MULTIPLIER OLD_EXTRUSION_MULTIPLIER=xxx.xxx THEORICAL_THICKNESS=xxx.xxx MEASURED_THICKNESS=xxx.xxx")}
{action_raise_error("not enough data to perform the computation of the new flow !")}
{% else %}
{% set final_evalue = last_evalue %}
{action_respond_info("Using OLD_EXTRUSION_MULTIPLIER: %.3f" % final_evalue)}
{% endif %}
{% else %}
{% set final_evalue = evalue %}
{action_respond_info("Using OLD_EXTRUSION_MULTIPLIER: %.3f" % final_evalue)}
{% endif %}
# similarly, if there is no THEORICAL_THICKNESS passed as param, get the one from the last print calib run
{% if theorical_thickness == 0.0 %}
{% set last_shell_thickness = printer["gcode_macro _FLOW_CALIB_VARIABLES"].last_shell_thickness %}
# then, if there is also no evalue saved from the last run, alert user
{% if last_shell_thickness == 0.0 %}
{action_respond_info("It seems that no calibration print was run prior to this (or a restart of Klipper occured).")}
{action_respond_info("You can still manually use it by calling again this macro like that:")}
{action_respond_info("COMPUTE_FLOW_MULTIPLIER OLD_EXTRUSION_MULTIPLIER=xxx.xxx THEORICAL_THICKNESS=xxx.xxx MEASURED_THICKNESS=xxx.xxx")}
{action_raise_error("not enough data to perform the computation of the new flow !")}
{% else %}
{% set final_theorical_thickness = last_shell_thickness %}
{action_respond_info("Using THEORICAL_THICKNESS: %.3f" % final_theorical_thickness)}
{% endif %}
{% else %}
{% set final_theorical_thickness = theorical_thickness %}
{action_respond_info("Using THEORICAL_THICKNESS: %.3f" % final_theorical_thickness)}
{% endif %}
# use the measured thickness from the user to compute a new flow value
{% if measured_thickness == 0.0 %}
{action_respond_info("You must use a caliper or micrometer to measure the calibration print shell thickness and call this macro with the measured value !!!")}
{action_respond_info("COMPUTE_FLOW_MULTIPLIER MEASURED_THICKNESS=xxx.xxx")}
{action_raise_error("not enough data to perform the computation of the new flow !")}
{% else %}
{% set new_evalue = final_theorical_thickness * final_evalue / measured_thickness %}
{action_respond_info("NEW COMPUTED FLOW VALUE: %.3f" % new_evalue)}
{action_respond_info("Use this new value as extrusion multiplier in your slicer of choice")}
{action_respond_info("")}
{% endif %}

174
macros/homing.cfg Normal file
View File

@@ -0,0 +1,174 @@
[gcode_macro MOVE_UP]
variable_set_kinematic_z: 20
variable_up_z: 10
gcode:
SAVE_GCODE_STATE NAME=my_move_up_state
{% if not 'z' in printer.toolhead.homed_axes %}
SET_KINEMATIC_POSITION Z={set_kinematic_z}
{% endif %}
G91
G0 Z{up_z} F1200
RESTORE_GCODE_STATE NAME=my_move_up_state
[gcode_macro _HOME_X]
variable_homing_current: 0.49
variable_start_retract: 15
gcode:
# Always use consistent run_current on A/B steppers during sensorless homing
{% set RUN_CURRENT_X = printer.configfile.settings['tmc2240 stepper_x'].run_current|float %}
{% set RUN_CURRENT_Y = printer.configfile.settings['tmc2240 stepper_y'].run_current|float %}
SET_TMC_CURRENT STEPPER=stepper_x CURRENT={homing_current}
SET_TMC_CURRENT STEPPER=stepper_y CURRENT={homing_current}
M117 Homing X...
SET_KINEMATIC_POSITION X={start_retract}
G91
G1 X-{start_retract} F1200
M400
G28 X
G91
G1 X-40 F1200
#G4 P500
M117
SET_TMC_CURRENT STEPPER=stepper_x CURRENT={RUN_CURRENT_X}
SET_TMC_CURRENT STEPPER=stepper_y CURRENT={RUN_CURRENT_Y}
[gcode_macro _HOME_Y]
variable_homing_current: 0.49
variable_start_retract: 15
gcode:
# Set current for sensorless homing
{% set RUN_CURRENT_X = printer.configfile.settings['tmc2240 stepper_x'].run_current|float %}
{% set RUN_CURRENT_Y = printer.configfile.settings['tmc2240 stepper_y'].run_current|float %}
SET_TMC_CURRENT STEPPER=stepper_x CURRENT={homing_current}
SET_TMC_CURRENT STEPPER=stepper_y CURRENT={homing_current}
#SET_TMC_FIELD FIELD=SGT STEPPER=stepper_x VALUE=1
#G4 P1000
M117 Homing Y...
SET_KINEMATIC_POSITION Y={start_retract}
G91
G1 Y-{start_retract} F1200
M400
G28 Y
G91
G1 Y-10 F1200
#G4 P500
M117
# Set current during print
SET_TMC_CURRENT STEPPER=stepper_x CURRENT={RUN_CURRENT_X}
SET_TMC_CURRENT STEPPER=stepper_y CURRENT={RUN_CURRENT_Y}
[homing_override]
axes: xyz
gcode:
{% set home_all = 'X' not in params and 'Y' not in params and 'Z' not in params %}
{% set move_x = params.X|default(printer.toolhead.axis_maximum.y/2)|int %}
{% set move_y = params.Y|default(printer.toolhead.axis_maximum.y/2)|int %}
{% if params.Z == '' %}
{% set move_z = 10 %}
{% else %}
{% set move_z = params.Z|default(10)|int %}
{% endif %}
SET_GCODE_VARIABLE MACRO=_KNOMI_STATUS VARIABLE=homing VALUE=True
STATUS_HOMING
{% if home_all or 'X' or 'Y' in params %}
INIT_TMC STEPPER=stepper_y
INIT_TMC STEPPER=stepper_x
{% endif %}
{% if home_all or 'Z' in params %}
BED_MESH_CLEAR
MOVE_UP
{% endif %}
{% if home_all or 'X' in params %}
_HOME_X
{% endif %}
{% if home_all or 'Y' in params %}
_HOME_Y
{% endif %}
G90
{% if home_all or 'Z' in params %}
G1 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_maximum.y/2} F12000 #probe point
G28 Z
G1 Z{move_z} F1200
{% endif %}
#{ action_respond_info("Move X,Y => {},{}".format(params.X,params.Y)) }
{% if params.X %}
G1 X{move_x} F12000
{% endif %}
{% if params.Y %}
G1 Y{move_y} F12000
{% endif %}
STATUS_OFF
SET_GCODE_VARIABLE MACRO=_KNOMI_STATUS VARIABLE=homing VALUE=False
[gcode_macro CG28]
gcode:
{% if "xyz" not in printer.toolhead.homed_axes %}
G28
{% endif %}
[gcode_macro PARKFRONT]
gcode:
CG28 ; home if not already homed
SAVE_GCODE_STATE NAME=PARKFRONT
G90 ; absolute positioning
G0 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} Z{printer.toolhead.axis_maximum.z/2} F6000
RESTORE_GCODE_STATE NAME=PARKFRONT
[gcode_macro PARKFRONTLOW]
gcode:
CG28 ; home if not already homed
SAVE_GCODE_STATE NAME=PARKFRONT
G90 ; absolute positioning
G0 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} Z20 F6000
RESTORE_GCODE_STATE NAME=PARKFRONT
[gcode_macro PARKREAR]
gcode:
CG28 ; home if not already homed
SAVE_GCODE_STATE NAME=PARKREAR
G90 ; absolute positioning
G0 X{printer.toolhead.axis_minimum.x+10} Y{printer.toolhead.axis_maximum.y-10} Z{printer.toolhead.axis_maximum.z-50} F6000
RESTORE_GCODE_STATE NAME=PARKREAR
[gcode_macro PARKCENTER]
gcode:
CG28 ; home if not already homed
SAVE_GCODE_STATE NAME=PARKCENTER
G90 ; absolute positioning
G0 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_maximum.y/2} Z{printer.toolhead.axis_maximum.z/2} F6000
RESTORE_GCODE_STATE NAME=PARKCENTER
[gcode_macro PARKBED]
gcode:
CG28 ; home if not already homed
SAVE_GCODE_STATE NAME=PARKBED
G90 ; absolute positioning
G0 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_maximum.y/2} Z15 F6000
RESTORE_GCODE_STATE NAME=PARKBED

174
macros/homing.cfg.old Normal file
View File

@@ -0,0 +1,174 @@
[gcode_macro MOVE_UP]
variable_set_kinematic_z: 20
variable_up_z: 10
gcode:
SAVE_GCODE_STATE NAME=my_move_up_state
{% if not 'z' in printer.toolhead.homed_axes %}
SET_KINEMATIC_POSITION Z={set_kinematic_z}
{% endif %}
G91
G0 Z{up_z} F1200
RESTORE_GCODE_STATE NAME=my_move_up_state
[gcode_macro _HOME_X]
variable_homing_current: 0.65
variable_start_retract: 15
gcode:
# Always use consistent run_current on A/B steppers during sensorless homing
{% set RUN_CURRENT_X = printer.configfile.settings['tmc2240 stepper_x'].run_current|float %}
{% set RUN_CURRENT_Y = printer.configfile.settings['tmc2240 stepper_y'].run_current|float %}
SET_TMC_CURRENT STEPPER=stepper_x CURRENT={homing_current}
SET_TMC_CURRENT STEPPER=stepper_y CURRENT={homing_current}
M117 Homing X...
SET_KINEMATIC_POSITION X={start_retract}
G91
G1 X-{start_retract} F1200
M400
G28 X
G91
G1 X-60 F1200
#G4 P500
M117
SET_TMC_CURRENT STEPPER=stepper_x CURRENT={RUN_CURRENT_X}
SET_TMC_CURRENT STEPPER=stepper_y CURRENT={RUN_CURRENT_Y}
[gcode_macro _HOME_Y]
variable_homing_current: 0.65
variable_start_retract: 15
gcode:
# Set current for sensorless homing
{% set RUN_CURRENT_X = printer.configfile.settings['tmc2240 stepper_x'].run_current|float %}
{% set RUN_CURRENT_Y = printer.configfile.settings['tmc2240 stepper_y'].run_current|float %}
SET_TMC_CURRENT STEPPER=stepper_x CURRENT={homing_current}
SET_TMC_CURRENT STEPPER=stepper_y CURRENT={homing_current}
#SET_TMC_FIELD FIELD=SGT STEPPER=stepper_x VALUE=1
#G4 P1000
M117 Homing Y...
SET_KINEMATIC_POSITION Y={start_retract}
G91
G1 Y-{start_retract} F1200
M400
G28 Y
G91
G1 Y-10 F1200
#G4 P500
M117
# Set current during print
SET_TMC_CURRENT STEPPER=stepper_x CURRENT={RUN_CURRENT_X}
SET_TMC_CURRENT STEPPER=stepper_y CURRENT={RUN_CURRENT_Y}
[homing_override]
axes: xyz
gcode:
{% set home_all = 'X' not in params and 'Y' not in params and 'Z' not in params %}
{% set move_x = params.X|default(printer.toolhead.axis_maximum.y/2)|int %}
{% set move_y = params.Y|default(printer.toolhead.axis_maximum.y/2)|int %}
{% if params.Z == '' %}
{% set move_z = 10 %}
{% else %}
{% set move_z = params.Z|default(10)|int %}
{% endif %}
SET_GCODE_VARIABLE MACRO=_KNOMI_STATUS VARIABLE=homing VALUE=True
STATUS_HOMING
{% if home_all or 'X' or 'Y' in params %}
INIT_TMC STEPPER=stepper_y
INIT_TMC STEPPER=stepper_x
{% endif %}
{% if home_all or 'Z' in params %}
BED_MESH_CLEAR
MOVE_UP
{% endif %}
{% if home_all or 'X' in params %}
_HOME_X
{% endif %}
{% if home_all or 'Y' in params %}
_HOME_Y
{% endif %}
G90
{% if home_all or 'Z' in params %}
G1 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_maximum.y/2} F12000 #probe point
G28 Z
G1 Z{move_z} F1200
{% endif %}
#{ action_respond_info("Move X,Y => {},{}".format(params.X,params.Y)) }
{% if params.X %}
G1 X{move_x} F12000
{% endif %}
{% if params.Y %}
G1 Y{move_y} F12000
{% endif %}
STATUS_OFF
SET_GCODE_VARIABLE MACRO=_KNOMI_STATUS VARIABLE=homing VALUE=False
[gcode_macro CG28]
gcode:
{% if "xyz" not in printer.toolhead.homed_axes %}
G28
{% endif %}
[gcode_macro PARKFRONT]
gcode:
CG28 ; home if not already homed
SAVE_GCODE_STATE NAME=PARKFRONT
G90 ; absolute positioning
G0 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} Z{printer.toolhead.axis_maximum.z/2} F6000
RESTORE_GCODE_STATE NAME=PARKFRONT
[gcode_macro PARKFRONTLOW]
gcode:
CG28 ; home if not already homed
SAVE_GCODE_STATE NAME=PARKFRONT
G90 ; absolute positioning
G0 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} Z20 F6000
RESTORE_GCODE_STATE NAME=PARKFRONT
[gcode_macro PARKREAR]
gcode:
CG28 ; home if not already homed
SAVE_GCODE_STATE NAME=PARKREAR
G90 ; absolute positioning
G0 X{printer.toolhead.axis_minimum.x+10} Y{printer.toolhead.axis_maximum.y-10} Z{printer.toolhead.axis_maximum.z-50} F6000
RESTORE_GCODE_STATE NAME=PARKREAR
[gcode_macro PARKCENTER]
gcode:
CG28 ; home if not already homed
SAVE_GCODE_STATE NAME=PARKCENTER
G90 ; absolute positioning
G0 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_maximum.y/2} Z{printer.toolhead.axis_maximum.z/2} F6000
RESTORE_GCODE_STATE NAME=PARKCENTER
[gcode_macro PARKBED]
gcode:
CG28 ; home if not already homed
SAVE_GCODE_STATE NAME=PARKBED
G90 ; absolute positioning
G0 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_maximum.y/2} Z15 F6000
RESTORE_GCODE_STATE NAME=PARKBED

552
macros/main.cfg Normal file
View File

@@ -0,0 +1,552 @@
[include stealthburner_leds.cfg]
[gcode_macro _KNOMI_STATUS]
variable_homing: False
variable_probing: False
variable_qgling: False
variable_heating_nozzle: False
variable_heating_bed: False
gcode:
[include homing.cfg]
#[include private.cfg]
#[include nozzle_scrub.cfg]
[include ../KAMP_Settings.cfg]
#[include ../KAMP/KAMP_Settings.cfg]
[include tools.cfg]
[delayed_gcode init_printer]
initial_duration: 1
gcode:
STATUS_READY
SET_FAN_SPEED FAN=SoC SPEED=0.3
#SET_FILAMENT_SENSOR SENSOR=SFS_T0 ENABLE=0
[delayed_gcode _INIT_TIMELAPSE_CHECK_TIME]
initial_duration: 1
gcode: SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=check_time VALUE=0.5
[gcode_button ps_lose]
pin: PC2
press_gcode:
{ action_respond_info("Power lose!") }
SHUTDOWN
[gcode_macro SHUTDOWN]
gcode:
SET_PIN PIN=ps_on VALUE=0
{action_respond_info('action:poweroff')}
{action_call_remote_method("shutdown_machine")}
[gcode_macro _CHAMBER_LED_OFF]
gcode:
SET_LED LED="chamber_leds" RED=0 GREEN=0 BLUE=0 SYNC=0 TRANSMIT=1
[gcode_macro _CHAMBER_LED_ON]
gcode:
SET_LED LED="chamber_leds" RED=1 GREEN=1 BLUE=1 SYNC=0 TRANSMIT=1
[gcode_macro _LED_SWITCH]
gcode:
{% set color_data = printer["neopixel chamber_leds"].color_data %}
{% if color_data[0][0] or color_data[0][1] or color_data[0][2] %}
SET_LED LED="chamber_leds" RED=0 GREEN=0 BLUE=0 SYNC=0 TRANSMIT=1
{% else %}
SET_LED LED="chamber_leds" RED=1 GREEN=1 BLUE=1 SYNC=0 TRANSMIT=1
{% endif %}
[gcode_button ps_double_click]
pin: !PG13
press_gcode:
{ action_respond_info("Double click!") }
_LED_SWITCH
[gcode_button ps_triple_click]
pin: !PG12
press_gcode:
{ action_respond_info("Triple click!") }
{ action_emergency_stop() }
[gcode_macro START_BED_MESH_CALIBRATE]
#rename_existing: _BED_MESH_CALIBRATE
gcode:
STATUS_MESHING
SET_GCODE_VARIABLE MACRO=_KNOMI_STATUS VARIABLE=probing VALUE=True
BED_MESH_CALIBRATE
SET_GCODE_VARIABLE MACRO=_KNOMI_STATUS VARIABLE=probing VALUE=False
STATUS_READY
[gcode_macro QUAD_GANTRY_LEVEL]
rename_existing: QUAD_GANTRY_LEVEL_BASE
gcode:
SET_GCODE_VARIABLE MACRO=_KNOMI_STATUS VARIABLE=qgling VALUE=True
STATUS_LEVELING
QUAD_GANTRY_LEVEL_BASE
STATUS_READY
SET_GCODE_VARIABLE MACRO=_KNOMI_STATUS VARIABLE=qgling VALUE=False
[gcode_macro G32]
gcode:
M117 Homing
BED_MESH_CLEAR
G28
QUAD_GANTRY_LEVEL
STATUS_CALIBRATING_Z
#G0 X350 Y350 Z30 F3600
G28 Z
G0 Z10 F3600
STATUS_READY
M117
[gcode_macro SFS_ENABLE]
description: Enable smart filament sensor
gcode:
M117 ENABLING the Smart Filament Sensor
G92 E0
#SET_FILAMENT_SENSOR SENSOR=SFS_T0 ENABLE=1
[gcode_macro SFS_DISABLE]
description: Disable smart filament sensor
gcode:
M117 DISABLING the Smart Filament Sensor
G92 E0
#SET_FILAMENT_SENSOR SENSOR=SFS_T0 ENABLE=0
[gcode_macro PRINT_START]
gcode:
_CHAMBER_LED_ON
#PRINT_MIN={first_layer_print_min[0]},{first_layer_print_min[1]} PRINT_MAX={first_layer_print_max[0]},{first_layer_print_max[1]}
{% set BED_TEMP = params.BED|default(60)|float %}
{% set EXTRUDER_TEMP = params.EXTRUDER|default(210)|float %}
{% set CHAMBER = params.CHAMBER|default(35)|float %}
{% if params.BED_TYPE %}
INIT_BED_TYPE BED_TYPE="{params.BED_TYPE}"
{% endif %}
SAVE_GCODE_STATE NAME=start
M117 Starting...
M140 S{BED_TEMP}
M141 S{CHAMBER}
M109 S150
M190 S{BED_TEMP}
BED_MESH_CLEAR
G90 # Use absolute coordinates
#SET_GCODE_OFFSET Z=0.0
G32
#{% if not 'xyz' in printer.toolhead.homed_axes %}
#G32 ; home all axes
#{% elif not printer.quad_gantry_level.applied %}
#QUAD_GANTRY_LEVEL
#{% else %}
#G28 Z10
#{% endif %}
START_BED_MESH_CALIBRATE #PRINT_MIN={params.PRINT_MIN} PRINT_MAX={params.PRINT_MAX} FORCE_NEW_MESH=True
#M191 S{CHAMBER}
Smart_Park
M117 Heating...
#M190 S{BED_TEMP}
M109 S{EXTRUDER_TEMP} ; M109 heat and wait for it to reach temp
SFS_ENABLE
M117
STATUS_CLEANING
VORON_PURGE
STATUS_PRINTING
RESTORE_GCODE_STATE NAME=start
SKEW_PROFILE LOAD=default
#SET_SKEW XY=140.56,141.21,99.82
[gcode_macro PRINT_END]
# Use PRINT_END for the slicer ending script - please customise for your slicer of choice
variable_retract_amount: 16 #
variable_park_speed: 6000 #3600
variable_park_xy: [350,350]
variable_up_z: 4 #12
gcode:
{% set max_velocity = printer.configfile.settings['extruder'].max_extrude_only_velocity * 60 %}
STATUS_BUSY
SET_SKEW CLEAR=1
M400 ; wait for buffer to clear
G92 E0 ; zero the extruder
G1 E-{retract_amount} F3600 ; retract filament {max_velocity}
G91 ; relative positioning
G0 Z1.00 X20.0 Y20.0 F20000 ; move nozzle to remove stringing
TURN_OFF_HEATERS
M107 ; turn off fan
G1 Z{up_z} F3000 ; move nozzle up 2mm
G90 ; absolute positioning
G0 X{park_xy[0]} Y{park_xy[1]} F{park_speed} ; park nozzle at rear
#BED_MESH_CLEAR
SFS_DISABLE
#M141 S35
SET_STEPPER_ENABLE STEPPER=extruder ENABLE=0 #disable stepper
STATUS_OFF
SET_VELOCITY_DEFAULT
INIT_BED_TYPE BED_TYPE="None"
M400
TIMELAPSE_TAKE_FRAME
[gcode_macro SET_VELOCITY_DEFAULT]
gcode:
SET_VELOCITY_LIMIT ACCEL={printer.configfile.settings.printer.max_accel}
SET_VELOCITY_LIMIT ACCEL_TO_DECEL={printer.configfile.settings.printer.max_accel / 2}
SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY={printer.configfile.settings.printer.square_corner_velocity}
[gcode_macro M141]
gcode:
{% set s = params.S|default(0)|float %}
SET_TEMPERATURE_FAN_TARGET temperature_fan=chamber target={s}
[gcode_macro M191]
gcode:
{% set s = params.S|default(0)|float %}
M141 S{s}
TEMPERATURE_WAIT SENSOR="temperature_fan chamber" MINIMUM={s}
[gcode_macro M600]
gcode:
#LCDRGB R=0 G=1 B=0 ; Turn LCD green
PAUSE ; Pause
[gcode_macro PAUSE]
rename_existing: BASE_PAUSE
gcode:
# Parameters
{% set z = params.Z|default(10)|int %} ; z hop amount
{% if printer['pause_resume'].is_paused|int == 0 %}
SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE={z} ; set z hop variable for reference in resume macro
SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=etemp VALUE={printer['extruder'].target} ; set hotend temp variable for reference in resume macro
SFS_DISABLE ; disable filament sensor
SAVE_GCODE_STATE NAME=PAUSE ; save current print position for resume
BASE_PAUSE ; pause print
{% if (printer.gcode_move.position.z + z) < printer.toolhead.axis_maximum.z %} ; check that zhop doesn't exceed z max
G91 ; relative positioning
G1 Z{z} F900 ; raise Z up by z hop amount
{% else %}
{ action_respond_info("Pause zhop exceeds maximum Z height.") } ; if z max is exceeded, show message and set zhop value for resume to 0
SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=zhop VALUE=0
{% endif %}
G90 ; absolute positioning
G1 X{printer.toolhead.axis_maximum.x/2} Y{printer.toolhead.axis_minimum.y+5} F6000 ; park toolhead at front center
SAVE_GCODE_STATE NAME=PAUSEPARK ; save parked position in case toolhead is moved during the pause (otherwise the return zhop can error)
M104 S0 ; turn off hotend
SET_IDLE_TIMEOUT TIMEOUT=43200 ; set timeout to 12 hours
{% endif %}
[gcode_macro RESUME]
rename_existing: BASE_RESUME
variable_zhop: 0
variable_etemp: 0
gcode:
# Parameters
{% set e = params.E|default(2.5)|int %}
{% if printer['pause_resume'].is_paused|int == 1 %}
SFS_ENABLE ; enable filament sensor
#RESETRGB ; reset LCD color
SET_IDLE_TIMEOUT TIMEOUT={printer.configfile.settings.idle_timeout.timeout} ; set timeout back to configured value
{% if etemp > 0 %}
M109 S{etemp|int} ; wait for hotend to heat back up
{% endif %}
RESTORE_GCODE_STATE NAME=PAUSEPARK MOVE=1 MOVE_SPEED=100 ; go back to parked position in case toolhead was moved during pause (otherwise the return zhop can error)
G91 ; relative positioning
M83 ; relative extruder positioning
{% if printer[printer.toolhead.extruder].temperature >= printer.configfile.settings.extruder.min_extrude_temp %}
G1 Z{zhop * -1} E{e} F900 ; prime nozzle by E, lower Z back down
{% else %}
G1 Z{zhop * -1} F900 ; lower Z back down without priming (just in case we are testing the macro with cold hotend)
{% endif %}
RESTORE_GCODE_STATE NAME=PAUSE MOVE=1 MOVE_SPEED=60 ; restore position
BASE_RESUME ; resume print
{% endif %}
[gcode_macro CANCEL_PRINT]
description: Cancel the actual running print
rename_existing: CANCEL_PRINT_BASE
gcode:
SET_IDLE_TIMEOUT TIMEOUT={printer.configfile.settings.idle_timeout.timeout} ;
CLEAR_PAUSE
SDCARD_RESET_FILE
PRINT_END
CANCEL_PRINT_BASE
[gcode_macro DUMP_PARAMETERS]
gcode:
{% for name1 in printer %}
{% for name2 in printer[name1] %}
{ action_respond_info("printer['%s'].%s = %s" % (name1, name2, printer[name1][name2])) }
{% else %}
{ action_respond_info("printer['%s'] = %s" % (name1, printer[name1])) }
{% endfor %}
{% endfor %}
[gcode_macro M109]
rename_existing: M99109
gcode:
SET_GCODE_VARIABLE MACRO=_KNOMI_STATUS VARIABLE=heating_nozzle VALUE=True
STATUS_HEATING
{% set s = params.S|float %}
{% if s != 0 %}
M104 {% for p in params %}{'%s%s' % (p, params[p])}{% endfor %} ; Set hotend temp
TEMPERATURE_WAIT SENSOR=extruder MINIMUM={s} MAXIMUM={s+1} ; Wait for hotend temp (within 1 degree)
{% endif %}
SET_GCODE_VARIABLE MACRO=_KNOMI_STATUS VARIABLE=heating_nozzle VALUE=False
STATUS_OFF
[gcode_macro M190]
rename_existing: M99190
gcode:
SET_GCODE_VARIABLE MACRO=_KNOMI_STATUS VARIABLE=heating_bed VALUE=True
STATUS_HEATING
{% set s = params.S|float %}
{% if s != 0 %}
M140 {% for p in params %}{'%s%s' % (p, params[p])}{% endfor %} ; Set bed temp
TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM={s} MAXIMUM={s+1} ; Wait for bed temp (within 1 degree)
{% endif %}
SET_GCODE_VARIABLE MACRO=_KNOMI_STATUS VARIABLE=heating_bed VALUE=False
STATUS_OFF
[gcode_macro DISABLE_XY]
gcode:
SET_STEPPER_ENABLE STEPPER=stepper_x ENABLE=0
SET_STEPPER_ENABLE STEPPER=stepper_y ENABLE=0
[gcode_macro INIT_BED_TYPE]
variable_bed_z_offset: 0
variable_bed_types: { 'Textured PEI Plate': 0.00, 'None': 0 }
gcode:
{% set bed_type = params.BED_TYPE|default("None") %}
{% set new_bed_z_offset = bed_types[bed_type] %}
{% if bed_z_offset != 0 %}
SET_GCODE_OFFSET Z_ADJUST={0-bed_z_offset|float}
SET_GCODE_VARIABLE MACRO=INIT_BED_TYPE VARIABLE=bed_z_offset VALUE=0
{% endif %}
{ action_respond_info("Selected bed type: {}".format(bed_type)) }
{ action_respond_info("Used bed z offset: {}".format(bed_z_offset)) }
{% if new_bed_z_offset %}
{ action_respond_info("Use bed type {} with z offset {}".format(bed_type, new_bed_z_offset)) }
SET_GCODE_VARIABLE MACRO=INIT_BED_TYPE VARIABLE=bed_z_offset VALUE={new_bed_z_offset}
SET_GCODE_OFFSET Z_ADJUST={new_bed_z_offset}
{% endif %}
[gcode_macro LOAD_FILAMENT]
variable_load_distance: 72
variable_purge_distance: 0
gcode:
{% set speed = params.SPEED|default(300) %}
{% set max_velocity = printer.configfile.settings['extruder'].max_extrude_only_velocity * 60 %}
SAVE_GCODE_STATE NAME=load_state
G91
G92 E0
G1 E{load_distance} F{max_velocity} # fast-load
G1 E{purge_distance} F{speed} # purge
RESTORE_GCODE_STATE NAME=load_state
[gcode_macro UNLOAD_FILAMENT]
variable_unload_distance: 76
variable_purge_distance: 0
gcode:
{% set speed = params.SPEED|default(300) %}
{% set max_velocity = printer.configfile.settings['extruder'].max_extrude_only_velocity * 60 %}
SAVE_GCODE_STATE NAME=unload_state
G91
G92 E0
G1 E{purge_distance} F{speed} # purge
G1 E-{unload_distance} F{max_velocity} # fast-unload
RESTORE_GCODE_STATE NAME=unload_state
[gcode_macro test_speed_fast]
gcode:
G28 X0 Y0
GET_POSITION
G1 X0 Y0 F27000
G1 X350 Y350 F27000
G1 X0 Y0 F27000
G1 X350 Y350 F27000
G1 X0 Y350 F36000
G1 X350 Y0 F27000
G1 X0 Y350 F27000
G1 X350 Y0 F27000
G1 X0 Y350 F27000
G1 X0 Y0 F36000
G1 X350 Y0 F36000
G1 X350 Y350 F36000
G1 X0 Y350 F36000
G1 X0 Y0 F36000
#DISABLE_XY
G28 X0 Y0
GET_POSITION
[gcode_macro TEST_SPEED]
# Home, get position, throw around toolhead, home again.
# If MCU stepper positions (first line in GET_POSITION) are greater than a full step different (your number of microsteps), then skipping occured.
# We only measure to a full step to accomodate for endstop variance.
# Example: TEST_SPEED SPEED=300 ACCEL=5000 ITERATIONS=10
# https://github.com/AndrewEllis93/Print-Tuning-Guide/blob/main/articles/determining_max_speeds_accels.md
description: Test for max speed and acceleration parameters for the printer. Procedure: Home -> ReadPositionFromMCU -> MovesToolhead@Vel&Accel -> Home -> ReadPositionfromMCU
gcode:
# Speed
{% set speed = params.SPEED|default(printer.configfile.settings.printer.max_velocity)|int %}
# Iterations
{% set iterations = params.ITERATIONS|default(5)|int %}
# Acceleration
{% set accel = params.ACCEL|default(printer.configfile.settings.printer.max_accel)|int %}
# Minimum Cruise Ratio
{% set min_cruise_ratio = params.MIN_CRUISE_RATIO|default(0.5)|float %}
# Bounding inset for large pattern (helps prevent slamming the toolhead into the sides after small skips, and helps to account for machines with imperfectly set dimensions)
{% set bound = params.BOUND|default(20)|int %}
# Size for small pattern box
{% set smallpatternsize = SMALLPATTERNSIZE|default(20)|int %}
# Large pattern
# Max positions, inset by BOUND
{% set x_min = printer.toolhead.axis_minimum.x + bound %}
{% set x_max = printer.toolhead.axis_maximum.x - bound %}
{% set y_min = printer.toolhead.axis_minimum.y + bound %}
{% set y_max = printer.toolhead.axis_maximum.y - bound %}
# Small pattern at center
# Find X/Y center point
{% set x_center = (printer.toolhead.axis_minimum.x|float + printer.toolhead.axis_maximum.x|float ) / 2 %}
{% set y_center = (printer.toolhead.axis_minimum.y|float + printer.toolhead.axis_maximum.y|float ) / 2 %}
# Set small pattern box around center point
{% set x_center_min = x_center - (smallpatternsize/2) %}
{% set x_center_max = x_center + (smallpatternsize/2) %}
{% set y_center_min = y_center - (smallpatternsize/2) %}
{% set y_center_max = y_center + (smallpatternsize/2) %}
# Save current gcode state (absolute/relative, etc)
SAVE_GCODE_STATE NAME=TEST_SPEED
# Output parameters to g-code terminal
{ action_respond_info("TEST_SPEED: starting %d iterations at speed %d, accel %d" % (iterations, speed, accel)) }
# Home and get position for comparison later:
M400 # Finish moves - https://github.com/AndrewEllis93/Print-Tuning-Guide/issues/66
G28
# QGL if not already QGLd (only if QGL section exists in config)
{% if printer.configfile.settings.quad_gantry_level %}
{% if printer.quad_gantry_level.applied == False %}
QUAD_GANTRY_LEVEL
G28 Z
{% endif %}
{% endif %}
# Move 50mm away from max position and home again (to help with hall effect endstop accuracy - https://github.com/AndrewEllis93/Print-Tuning-Guide/issues/24)
G90
G1 X{printer.toolhead.axis_maximum.x-50} Y{printer.toolhead.axis_maximum.y-50} F{30*60}
M400 # Finish moves - https://github.com/AndrewEllis93/Print-Tuning-Guide/issues/66
G28 X Y
G0 X{printer.toolhead.axis_maximum.x-1} Y{printer.toolhead.axis_maximum.y-1} F{30*60}
G4 P1000
GET_POSITION
# Go to starting position
G0 X{x_min} Y{y_min} Z{bound + 10} F{speed*60}
# Set new limits
{% if printer.configfile.settings.printer.minimum_cruise_ratio is defined %}
SET_VELOCITY_LIMIT VELOCITY={speed} ACCEL={accel} MINIMUM_CRUISE_RATIO={min_cruise_ratio}
{% else %}
SET_VELOCITY_LIMIT VELOCITY={speed} ACCEL={accel} ACCEL_TO_DECEL={accel / 2}
{% endif %}
{% for i in range(iterations) %}
# Large pattern diagonals
G0 X{x_min} Y{y_min} F{speed*60}
G0 X{x_max} Y{y_max} F{speed*60}
G0 X{x_min} Y{y_min} F{speed*60}
G0 X{x_max} Y{y_min} F{speed*60}
G0 X{x_min} Y{y_max} F{speed*60}
G0 X{x_max} Y{y_min} F{speed*60}
# Large pattern box
G0 X{x_min} Y{y_min} F{speed*60}
G0 X{x_min} Y{y_max} F{speed*60}
G0 X{x_max} Y{y_max} F{speed*60}
G0 X{x_max} Y{y_min} F{speed*60}
# Small pattern diagonals
G0 X{x_center_min} Y{y_center_min} F{speed*60}
G0 X{x_center_max} Y{y_center_max} F{speed*60}
G0 X{x_center_min} Y{y_center_min} F{speed*60}
G0 X{x_center_max} Y{y_center_min} F{speed*60}
G0 X{x_center_min} Y{y_center_max} F{speed*60}
G0 X{x_center_max} Y{y_center_min} F{speed*60}
# Small pattern box
G0 X{x_center_min} Y{y_center_min} F{speed*60}
G0 X{x_center_min} Y{y_center_max} F{speed*60}
G0 X{x_center_max} Y{y_center_max} F{speed*60}
G0 X{x_center_max} Y{y_center_min} F{speed*60}
{% endfor %}
# Restore max speed/accel/accel_to_decel to their configured values
{% if printer.configfile.settings.printer.minimum_cruise_ratio is defined %}
SET_VELOCITY_LIMIT VELOCITY={printer.configfile.settings.printer.max_velocity} ACCEL={printer.configfile.settings.printer.max_accel} MINIMUM_CRUISE_RATIO={printer.configfile.settings.printer.minimum_cruise_ratio}
{% else %}
SET_VELOCITY_LIMIT VELOCITY={printer.configfile.settings.printer.max_velocity} ACCEL={printer.configfile.settings.printer.max_accel} ACCEL_TO_DECEL={printer.configfile.settings.printer.max_accel_to_decel}
{% endif %}
# Re-home and get position again for comparison:
M400 # Finish moves - https://github.com/AndrewEllis93/Print-Tuning-Guide/issues/66
G28 # This is a full G28 to fix an issue with CoreXZ - https://github.com/AndrewEllis93/Print-Tuning-Guide/issues/12
# Go to XY home positions (in case your homing override leaves it elsewhere)
G90
G0 X{printer.toolhead.axis_maximum.x-1} Y{printer.toolhead.axis_maximum.y-1} F{30*60}
G4 P1000
GET_POSITION
# Restore previous gcode state (absolute/relative, etc)
RESTORE_GCODE_STATE NAME=TEST_SPEED
[gcode_macro test]
gcode:
{% set iterations = params.ITERATIONS|default(5)|int %}
;G32
SAVE_GCODE_STATE NAME=TEST
G1 Z10
;SET_VELOCITY_LIMIT ACCEL=8000
SET_VELOCITY_LIMIT ACCEL=10000 SQUARE_CORNER_VELOCITY=12
{% for i in range(iterations) %}
G1 F18000
G1 X300 Y300
G1 X150 Y50
{% endfor %}
SET_VELOCITY_DEFAULT
RESTORE_GCODE_STATE NAME=TEST
[gcode_macro _bot_data]
variable_lapse_video_size: 0
variable_lapse_filename: 'None'
variable_lapse_path: 'None'
gcode:
M118 Setting bot lapse variables

158
macros/nozzle_scrub.cfg Normal file
View File

@@ -0,0 +1,158 @@
[gcode_macro clean_nozzle]
variable_location_bucket_rear: True
variable_enable_purge: True
# These parameters define your filament purging. The retract variable is used to retract right after purging to prevent unnecessary
# oozing. Some filament are particularly oozy and may continue to ooze out of the nozzle for a second or two after retracting. The
# ooze dwell variable makes allowance for this. Update as necessary. If you decided to not enable purge, you can ignore this section.
variable_purge_len: 20 ; Amount of filament, in mm, to purge.
variable_purge_spd: 150 ; Speed, in mm/min, of the purge.
variable_purge_temp_min: 200 ; Minimum nozzle temperature to permit a purge. Otherwise, purge will not occur.
variable_purge_ret: 2 ; Retract length, in mm, after purging to prevent slight oozing. Adjust as necessary.
variable_ooze_dwell: 4 ; Dwell/wait time, in seconds, after purging and retracting.
# Adjust this so that your nozzle scrubs within the brush. Currently defaulted to be a lot higher for safety. Be careful not to go too low!
variable_brush_top: 0
# These parameters define your scrubbing, travel speeds, safe z clearance and how many times you want to wipe. Update as necessary. Wipe
# direction is randomized based off whether the left or right bucket is randomly selected in the purge & scrubbing routine.
variable_clearance_z: 5 ; When traveling, but not cleaning, the clearance along the z-axis between nozzle and brush.
variable_wipe_qty: 3 ; Number of complete (A complete wipe: left, right, left OR right, left, right) wipes.
variable_prep_spd_xy: 3000 ; Travel (not cleaning) speed along x and y-axis in mm/min.
variable_prep_spd_z: 1500 ; Travel (not cleaning) speed along z axis in mm/min.
variable_wipe_spd_xy: 5000 ; Nozzle wipe speed in mm/min.
# These parameters define the size of the brush. Update as necessary. A visual reference is provided below. Note that orientation of
# parameters remain the same whether bucket is at rear or front.
#
# ← brush_width →
# _________________ ↑
# | | ↑ If you chose location_bucket_rear = True, Y position is acquired
# brush_start (x) | | brush_depth from your stepper_y position_max. Adjust your brush physically in
# |_________________| ↓ Y so that the nozzle scrubs within the brush.
# (y) ↓
# brush_front
# __________________________________________________________
# PRINTER FRONT
#
#
variable_brush_start: 75
# This value is defaulted from brush location in CAD (rear left). Change if your brush width is different.
variable_brush_width: 52
## These are only used if location_bucket_rear is False. You specify a custom location in y axis for your brush - see diagram above. ##
variable_brush_front: 0
variable_brush_depth: 2
# These parameters define the size of your purge bucket. Update as necessary. If you decided to not enable purge, you can ignore
# this section. A visual reference is provided below. Note that orientation of parameters remain the same whether bucket is at rear
# or front.
#
# bucket_gap
# ← ---- →
# __________________________________________
# | | | |
# | | | |
# bucket_start (x) | |______| |
# | | | |
# | | | |
# |_________________|. . . |_________________|
# ← ------------- → ← ------------- →
# bucket_left_width bucket_right_width
# _______________________________________________________________________________________
# PRINTER FRONT
#
## For V2.4 350mm build, uncomment below
variable_bucket_left_width: 92
# These values are defaulted from bucket geometry in CAD (rear left location). Change only if you're using a custom bucket.
variable_bucket_right_width: 40
variable_bucket_gap: 22
# For V1.8, you may need to measure where your bucket start is and input into bucket_start. Otherwise, a value of 0 is for a default
# installation of purge bucket at rear left.
variable_bucket_start: 0
variable_bucket_pos: 1
gcode:
STATUS_CLEANING
# First, check if the axes are homed.
{% if "xyz" in printer.toolhead.homed_axes %}
## Save the gcode state in this macro instance.
SAVE_GCODE_STATE NAME=clean_nozzle
## Set to absolute positioning.
G90
## Grab max position of Y-axis from config to use in setting a fixed y position for location_bucket_rear = True.
{% set Ry = printer.configfile.config["stepper_y"]["position_max"]|float %}
## Check if user enabled purge option or not.
{% if enable_purge %}
### Randomly select left or right bin for purge. 0 = left, 1 = right
SET_GCODE_VARIABLE MACRO=clean_nozzle VARIABLE=bucket_pos VALUE={(range(2) | random)}
### Raise Z for travel.
G1 Z{brush_top + clearance_z} F{prep_spd_z}
### Check if user chose to use rear location.
{% if location_bucket_rear %}
G1 Y{Ry} F{prep_spd_xy}
{% else %}
G1 Y{brush_front + (brush_depth / 2)} F{prep_spd_xy}
{% endif %}
### Position for purge. Randomly selects middle of left or right bucket. It references from the middle of the left bucket.
G1 X{bucket_start + (bucket_left_width / (2 - bucket_pos)) + (bucket_pos * bucket_gap) + (bucket_pos * (bucket_right_width / 2))}
### Perform purge if the temp is up to min temp. If not, it will skip and continue executing rest of macro. Small retract after
### purging to minimize any persistent oozing at 5x purge_spd. G4 dwell is in milliseconds, hence * 1000 in formula.
{% if printer.extruder.temperature >= purge_temp_min %}
M83 ; relative mode
G1 E{purge_len} F{purge_spd}
G1 E-{purge_ret} F{purge_spd * 5}
G4 P{ooze_dwell * 1000}
G92 E0 ; reset extruder
{% endif %}
{% endif %}
## Position for wipe. Either left or right of brush based off bucket_pos to avoid unnecessary travel.
G1 Z{brush_top + clearance_z} F{prep_spd_z}
G1 X{brush_start + (brush_width * bucket_pos)} F{prep_spd_xy}
## Check if user chose to use rear location.
{% if location_bucket_rear %}
G1 Y{Ry}
{% else %}
G1 Y{brush_front + (brush_depth / 2)}
{% endif %}
## Move nozzle down into brush.
G1 Z{brush_top} F{prep_spd_z}
## Perform wipe. Wipe direction based off bucket_pos for cool random scrubby routine.
{% for wipes in range(1, (wipe_qty + 1)) %}
G1 X{brush_start + (brush_width * (1 - bucket_pos))} F{wipe_spd_xy}
G1 X{brush_start + (brush_width * bucket_pos)} F{wipe_spd_xy}
{% endfor %}
## Clear from area.
M117 Cleaned!
G1 Z{brush_top + clearance_z} F{prep_spd_z}
G1 X{bucket_start + (bucket_left_width / 4)} F{prep_spd_xy} #bugfix for right side mounted buckets
## Restore the gcode state to how it was before the macro.
RESTORE_GCODE_STATE NAME=clean_nozzle
{% else %}
## raise error will stop any macros that clean_nozzle is referenced in from proceeding for safety.
{ action_raise_error("Please home your axes!") }
M117 Please home first!
{% endif %}
STATUS_READY

View File

@@ -0,0 +1,254 @@
# Macros for setting the status leds on the Voron StealthBurner toolhead (or for any neopixel-type leds).
#
# You will need to configure a neopixel (or other addressable led, such as dotstar). See
# https://www.klipper3d.org/Config_Reference.html#neopixel for configuration details.
#####################################
# INSTRUCTIONS #
#####################################
# How to use all this stuff:
#
# 1. Copy this .cfg file into your Klipper config directory and then add [include stealthburner_leds.cfg]
# to the top of your printer.cfg in order to register the LEDs and macros with Klipper.
# 2. Define your LEDs by editing [neopixel sb_leds] below and entering the data pin from your control board
# as well as the color order.
#
# Note: RGB and RGBW are different and must be defined explicitly. RGB and RGBW are also not able to
# be mix-and-matched in the same chain. A separate data line would be needed for proper functioning.
#
# RGBW LEDs will have a visible yellow-ish phosphor section to the chip. If your LEDs do not have
# this yellow portion, you have RGB LEDs.
#
# 3. Save your config and restart Klipper.
#
# Note: We set RED and BLUE to 1.0 to make it easier for users and supporters to detect
# misconfigurations or miswiring. The default color format is for Neopixels with a dedicated
# white LED. On startup, all three SB LEDs should light up.
#
# If you get random colors across your LEDs, change the color_order to GRB and restart. Then
# omit the W for each suggested color_order in the next paragraph.
#
# If you get MAGENTA, your color order is correct. If you get CYAN, you need to use RGBW. If
# you get YELLOW, you need to use BRGW (note that BRG is only supported in the latest Klipper
# version).
#
# 4. Once you have confirmed that the LEDs are set up correctly, you must now decide where you want
# these macros called up...which means adding them to your existing gcode macros. NOTHING will happen
# unless you add the STATUS_????? macros to your existing gcode macros.
#
# Example: add STATUS_LEVELING to the beginning of your QGL gcode macro, and then add STATUS_READY
# to the end of it to set the logo LED and nozzle LEDs back to the `ready` state.
#
# Example: add STATUS_CLEANING to the beginning of your nozzle-cleaning macro, and then STATUS_READY
# to the end of it to return the LEDs back to `ready` state.
#
# 5. Feel free to change colors of each macro, create new ones if you have a need to. The macros provided below
# are just an example of what is possible. If you want to try some more complex animations, you will most
# likely have to use WLED with Moonraker and a small micro-controller
#
#####################################
# END INSTRUCTRUCTIONS #
#####################################
[neopixel sb_leds]
#pin: EBBCan:gpio16 #sht:RGBLED
#pin: EXP1_6
# The pin connected to the neopixel. This parameter must be provided.
chain_count: 3
# The number of Neopixel chips that are "daisy chained" to the
# provided pin. The default is 1 (which indicates only a single
# Neopixel is connected to the pin).
color_order: GRBW
# Set the pixel order required by the LED hardware. Options are GRB,
# RGB, GRBW, or RGBW. The default is GRB.
initial_RED: 1.0
initial_GREEN: 0.0
initial_BLUE: 1.0
initial_WHITE: 0.0
# Sets the initial LED color of the Neopixel. Each value should be
# between 0.0 and 1.0. The WHITE option is only available on RGBW
# LEDs. The default for each color is 0.#
# Most configuration for the macros can be done by modifying the variables in the _sb_vars macro
# at the start of this file.
##########
# MACROS #
##########
# The following status macros are available (these go inside of your macros):
#
# STATUS_READY
# STATUS_OFF
# STATUS_BUSY
# STATUS_HEATING
# STATUS_LEVELING
# STATUS_HOMING
# STATUS_CLEANING
# STATUS_MESHING
# STATUS_CALIBRATING_Z
#
# With additional macros for basic control:
#
# SET_NOZZLE_LEDS_ON
# SET_LOGO_LEDS_OFF
# SET_NOZZLE_LEDS_OFF
#
# Contributed by Voron discord users wile.e, Tetsunosuke, and etherwalker
[gcode_macro _sb_vars]
# User settings for the StealthBurner status leds. You can change the status colors and led
# configurations for the logo and nozzle here.
variable_colors: {
'logo': { # Colors for logo states
'busy': {'r': 0.4, 'g': 0.0, 'b': 0.0, 'w': 0.0},
'cleaning': {'r': 0.0, 'g': 0.02, 'b': 0.5, 'w': 0.0},
'calibrating_z': {'r': 0.8, 'g': 0., 'b': 0.35, 'w': 0.0},
'heating': {'r': 0.3, 'g': 0.18, 'b': 0.0, 'w': 0.0},
'homing': {'r': 0.0, 'g': 0.6, 'b': 0.2, 'w': 0.0},
'leveling': {'r': 0.5, 'g': 0.1, 'b': 0.4, 'w': 0.0},
'meshing': {'r': 0.2, 'g': 1.0, 'b': 0.0, 'w': 0.0},
'off': {'r': 0.0, 'g': 0.0, 'b': 0.0, 'w': 0.0},
'printing': {'r': 1.0, 'g': 0.0, 'b': 0.0, 'w': 0.0},
'standby': {'r': 0.01, 'g': 0.01, 'b': 0.01, 'w': 0.1},
},
'nozzle': { # Colors for nozzle states
'heating': {'r': 0.8, 'g': 0.35, 'b': 0.0, 'w':0.0},
'off': {'r': 0.0, 'g': 0.0, 'b': 0.0, 'w': 0.0},
'on': {'r': 0.8, 'g': 0.8, 'b': 0.8, 'w':1.0},
'standby': {'r': 0.6, 'g': 0.0, 'b': 0.0, 'w':0.0},
},
'thermal': {
'hot': {'r': 1.0, 'g': 0.0, 'b': 0.0, 'w': 0.0},
'cold': {'r': 0.3, 'g': 0.0, 'b': 0.3, 'w': 0.0}
}
}
variable_logo_led_name: "sb_leds"
# The name of the addressable LED chain that contains the logo LED(s)
variable_logo_idx: "1"
# A comma-separated list of indexes LEDs in the logo
variable_nozzle_led_name: "sb_leds"
# The name of the addressable LED chain that contains the nozzle LED(s). This will
# typically be the same LED chain as the logo.
variable_nozzle_idx: "2,3"
# A comma-separated list of indexes of LEDs in the nozzle
gcode:
# This section is required. Do Not Delete.
[gcode_macro _set_sb_leds]
gcode:
{% set red = params.RED|default(0)|float %}
{% set green = params.GREEN|default(0)|float %}
{% set blue = params.BLUE|default(0)|float %}
{% set white = params.WHITE|default(0)|float %}
{% set led = params.LED|string %}
{% set idx = (params.IDX|string).split(',') %}
{% set transmit_last = params.TRANSMIT|default(1) %}
{% for led_index in idx %}
{% set transmit=transmit_last if loop.last else 0 %}
set_led led={led} red={red} green={green} blue={blue} white={white} index={led_index} transmit={transmit}
{% endfor %}
[gcode_macro _set_sb_leds_by_name]
gcode:
{% set leds_name = params.LEDS %}
{% set color_name = params.COLOR %}
{% set color = printer["gcode_macro _sb_vars"].colors[leds_name][color_name] %}
{% set led = printer["gcode_macro _sb_vars"][leds_name + "_led_name"] %}
{% set idx = printer["gcode_macro _sb_vars"][leds_name + "_idx"] %}
{% set transmit = params.TRANSMIT|default(1) %}
_set_sb_leds led={led} red={color.r} green={color.g} blue={color.b} white={color.w} idx="{idx}" transmit={transmit}
[gcode_macro _set_logo_leds]
gcode:
{% set red = params.RED|default(0)|float %}
{% set green = params.GREEN|default(0)|float %}
{% set blue = params.BLUE|default(0)|float %}
{% set white = params.WHITE|default(0)|float %}
{% set led = printer["gcode_macro _sb_vars"].logo_led_name %}
{% set idx = printer["gcode_macro _sb_vars"].logo_idx %}
{% set transmit=params.TRANSMIT|default(1) %}
_set_sb_leds led={led} red={red} green={green} blue={blue} white={white} idx="{idx}" transmit={transmit}
[gcode_macro _set_nozzle_leds]
gcode:
{% set red = params.RED|default(0)|float %}
{% set green = params.GREEN|default(0)|float %}
{% set blue = params.BLUE|default(0)|float %}
{% set white = params.WHITE|default(0)|float %}
{% set led = printer["gcode_macro _sb_vars"].nozzle_led_name %}
{% set idx = printer["gcode_macro _sb_vars"].nozzle_idx %}
{% set transmit=params.TRANSMIT|default(1) %}
_set_sb_leds led={led} red={red} green={green} blue={blue} white={white} idx="{idx}" transmit={transmit}
[gcode_macro set_logo_leds_off]
gcode:
{% set transmit=params.TRANSMIT|default(1) %}
_set_logo_leds red=0 blue=0 green=0 white=0 transmit={transmit}
[gcode_macro set_nozzle_leds_on]
gcode:
{% set transmit=params.TRANSMIT|default(1) %}
_set_sb_leds_by_name leds="nozzle" color="on" transmit={transmit}
[gcode_macro set_nozzle_leds_off]
gcode:
{% set transmit=params.TRANSMIT|default(1) %}
_set_sb_leds_by_name leds="nozzle" color="off" transmit={transmit}
[gcode_macro status_off]
gcode:
set_logo_leds_off transmit=0
set_nozzle_leds_off
[gcode_macro status_ready]
gcode:
_set_sb_leds_by_name leds="logo" color="standby" transmit=0
_set_sb_leds_by_name leds="nozzle" color="standby" transmit=1
[gcode_macro status_busy]
gcode:
_set_sb_leds_by_name leds="logo" color="busy" transmit=0
set_nozzle_leds_on
[gcode_macro status_heating]
gcode:
_set_sb_leds_by_name leds="logo" color="heating" transmit=0
_set_sb_leds_by_name leds="nozzle" color="heating" transmit=1
[gcode_macro status_leveling]
gcode:
_set_sb_leds_by_name leds="logo" color="leveling" transmit=0
set_nozzle_leds_on
[gcode_macro status_homing]
gcode:
_set_sb_leds_by_name leds="logo" color="homing" transmit=0
set_nozzle_leds_on
[gcode_macro status_cleaning]
gcode:
_set_sb_leds_by_name leds="logo" color="cleaning" transmit=0
set_nozzle_leds_on
[gcode_macro status_meshing]
gcode:
_set_sb_leds_by_name leds="logo" color="meshing" transmit=0
set_nozzle_leds_on
[gcode_macro status_calibrating_z]
gcode:
_set_sb_leds_by_name leds="logo" color="calibrating_z" transmit=0
set_nozzle_leds_on
[gcode_macro status_printing]
gcode:
_set_sb_leds_by_name leds="logo" color="printing" transmit=0
set_nozzle_leds_on

91
macros/tools.cfg Normal file
View File

@@ -0,0 +1,91 @@
#Аргументы
#NAME (строка) — отфильтруйте результаты по названию (отображайте только переменные с названиями, содержащими эту строку)
#VALUE (строка) — отфильтруйте результаты по значению (отображайте только значения, содержащие это значение)
#SHOW_CFG (целое число, 0-1) — установите значение 1, чтобы включить в вывод всю конфигурацию. По умолчанию 0 (конфигурация отфильтровывается)
#Примеры
#DUMP_VARIABLES: Возвращает все переменные (за исключением printer['configfile'].config и printer['configfile'].settings, так как они содержат всю конфигурацию).
#DUMP_VARIABLES NAME=stepper: Возвращает все переменные, в имени которых есть строка stepper.
#DUMP_VARIABLES VALUE=extruder : Возвращает все переменные, в значении которых есть строка extruder.
#DUMP_VARIABLES NAME=stepper VALUE=extruder : Возвращает все переменные, в названии которых есть строка stepper и в значении которых есть строка extruder.
#DUMP_VARIABLES SHOW_CFG=1 : Возвращает все переменные, включая конфигурацию.
[gcode_macro DUMP_VARIABLES]
gcode:
{% set filter_name = params.NAME|default('')|string|lower %}
{% set filter_value = params.VALUE|default('')|string|lower %}
{% set show_cfg = params.SHOW_CFG|default(0)|int %}
{% set out = [] %}
{% for key1 in printer %}
{% for key2 in printer[key1] %}
{% if (show_cfg or not (key1|lower == 'configfile' and key2|lower in ['config', 'settings'])) and (filter_name in key1|lower or filter_name in key2|lower) and filter_value in printer[key1][key2]|string|lower %}
{% set dummy = out.append("printer['%s'].%s = %s" % (key1, key2, printer[key1][key2])) %}
{% endif %}
{% else %}
{% if filter_name in key1|lower and filter_value in printer[key1]|string|lower %}
{% set dummy = out.append("printer['%s'] = %s" % (key1, printer[key1])) %}
{% endif %}
{% endfor %}
{% endfor %}
{action_respond_info(out|join("\n"))}
#Аргументы
#NAME (строка) (обязательно) — укажите имя переменной, которую вы хотите получить.
#Примеры
#GET_VARIABLE NAME=toolhead: Возвращает значение и тип переменной printer.toolhead.
#GET_VARIABLE NAME=bed_mesh.profiles.default.points.1.0: Возвращает значение и тип переменной printer.bed_mesh.profiles.default.points[1][0].
[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 %}

1
mainsail.cfg Symbolic link
View File

@@ -0,0 +1 @@
/home/biqu/mainsail-config/client.cfg

View File

@@ -0,0 +1,9 @@
[update_manager moonraker-obico]
type: git_repo
path: /home/biqu/moonraker-obico
origin: https://github.com/TheSpaghettiDetective/moonraker-obico.git
env: /home/biqu/moonraker-obico/../moonraker-obico-env/bin/python
requirements: requirements.txt
install_script: install.sh
managed_services:
moonraker-obico

34
moonraker-obico.cfg Normal file
View File

@@ -0,0 +1,34 @@
[server]
url = https://app.obico.io
[moonraker]
host = 127.0.0.1
port = 7125
# api_key = <grab one or set trusted hosts in moonraker>
[webcam]
disable_video_streaming = False
# CAUTION: Don't modify the settings below unless you know what you are doing
# In most cases webcam configuration will be automatically retrived from moonraker
#
# Lower target_fps if ffmpeg is using too much CPU. Capped at 25 for Pro users (including self-hosted) and 5 for Free users
# target_fps = 25
#
snapshot_url = http://127.0.0.1:8080/?action=snapshot
stream_url = http://127.0.0.1:8080/?action=stream
# flip_h = False
# flip_v = False
# rotation = 0
# aspect_ratio_169 = False
[logging]
path = /home/biqu/printer_data/logs/moonraker-obico.log
# level = INFO
[tunnel]
# CAUTION: Don't modify the settings below unless you know what you are doing
# dest_host = 127.0.0.1
dest_port = 80
# dest_is_ssl = False

120
moonraker.conf Normal file
View File

@@ -0,0 +1,120 @@
[server]
host: 0.0.0.0
port: 7125
klippy_uds_address: /home/biqu/printer_data/comms/klippy.sock
[authorization]
trusted_clients:
10.0.0.0/8
127.0.0.0/8
169.254.0.0/16
172.16.0.0/12
192.168.0.0/16
FE80::/10
::1/128
cors_domains:
*.lan
*.local
*://localhost
*://localhost:*
*://my.mainsail.xyz
*://app.fluidd.xyz
[octoprint_compat]
[history]
[file_manager]
enable_object_processing: True
[timelapse]
#snapshoturl: http://192.168.1.31/capture
#output_path: /mnt/microsd/video
#frame_path: /mnt/microsd/video/tmp/
ffmpeg_binary_path: /usr/bin/ffmpeg
[update_manager]
channel: stable
refresh_interval: 168
[power MainPower]
type: klipper_device
object_name: output_pin ps_on
initial_state: on
[update_manager klipper_tmc_autotune]
type: git_repo
channel: dev
path: ~/klipper_tmc_autotune
origin: https://github.com/andrewmcgr/klipper_tmc_autotune.git
managed_services: klipper
primary_branch: main
install_script: install.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
[update_manager mainsail-config]
type: git_repo
primary_branch: master
path: ~/mainsail-config
origin: https://github.com/mainsail-crew/mainsail-config.git
managed_services: klipper
[update_manager mainsail]
type: web
channel: stable
repo: mainsail-crew/mainsail
path: ~/mainsail
# 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
# Sonar update_manager entry
[update_manager sonar]
type: git_repo
path: ~/sonar
origin: https://github.com/mainsail-crew/sonar.git
primary_branch: main
managed_services: sonar
install_script: tools/install.sh
[update_manager katapult]
type: git_repo
origin: https://github.com/Arksine/katapult.git
path: ~/katapult
is_system_service: False
[update_manager KlipperScreen]
type: git_repo
path: ~/KlipperScreen
origin: https://github.com/KlipperScreen/KlipperScreen.git
virtualenv: ~/.KlipperScreen-env
requirements: scripts/KlipperScreen-requirements.txt
system_dependencies: scripts/system-dependencies.json
managed_services: KlipperScreen
[update_manager Klipper-Adaptive-Meshing-Purging]
type: git_repo
channel: dev
path: ~/Klipper-Adaptive-Meshing-Purging
origin: https://github.com/kyleisah/Klipper-Adaptive-Meshing-Purging.git
managed_services: klipper
primary_branch: main
[update_manager moonraker-telegram-bot]
install_script: scripts/install.sh
requirements: scripts/requirements.txt
env: /home/biqu/moonraker-telegram-bot-env/bin/python
origin: https://github.com/nlef/moonraker-telegram-bot.git
path: /home/biqu/moonraker-telegram-bot
type: git_repo

1
moonraker_obico_macros.cfg Symbolic link
View File

@@ -0,0 +1 @@
/home/biqu/moonraker-obico/scripts/../include_cfgs/moonraker_obico_macros.cfg

46
nevermore.cfg Normal file
View File

@@ -0,0 +1,46 @@
## This is a simple include for the Nevermore. To use it with your printer, edit
## the pin definition in line 16 so it matches your printer.
## What you get:
## - a generic fan "Nevermore" which is adjustable in GCODE and in Mainsail/Fluidd
## - Commands in your 12864-controller to turn the fan on/off or adjust in 10%-steps
## - a Macro to turn the fan off some time after the print.
##
## Slicer integration: Add "SET_FAN_SPEED FAN=Nevermore SPEED=1" in your start-macro
## (or less fan depending on your needs, like SPEED=0.8)
## in your end print code, add "UPDATE_DELAYED_GCODE ID=filter_off DURATION=180"
## this keeps your Nevermore running for 180s after the print finishes to clean the chamber a bit more.
[fan_generic Nevermore]
## Nevermore - FAN5 on Octopus
## Adjust if you use a different board or a different terminal.
pin: PD15
[menu __main __control __nevermoreonoff]
type: command
name: Nevermore {'ON' if printer['fan_generic Nevermore'].speed > 0 else 'OFF'}
enable: {'fan_generic Nevermore' in printer}
gcode:
TOGGLE_NEVERMORE
[menu __main __control __filterspeed]
type: input
enable: {'fan_generic Nevermore' in printer}
name: Filter %: {'%3d' % (menu.input*100)}%
input: {printer["fan_generic Nevermore"].speed}
input_min: 0
input_max: 1
input_step: 0.1
gcode:
SET_FAN_SPEED FAN=Nevermore SPEED={menu.input}
[delayed_gcode filter_off]
gcode:
SET_FAN_SPEED FAN=Nevermore SPEED=0
[gcode_macro TOGGLE_NEVERMORE]
gcode:
{% if printer['fan_generic Nevermore'].speed > 0 %}
SET_FAN_SPEED FAN=Nevermore SPEED=0
{% else %}
SET_FAN_SPEED FAN=Nevermore SPEED=1
{% endif %}

203
octopus_pro_1.1.cfg Normal file
View File

@@ -0,0 +1,203 @@
[mcu]
canbus_uuid: afcf80281237
[temperature_sensor OctopusPro]
sensor_type: temperature_mcu
[output_pin ps_on]
pin: PE11
value: 1
shutdown_value: 1
#####################################################################
# X/Y Stepper Settings
#####################################################################
## ldo-42sth48-2004mah
## X Stepper on Motor0 (B Motor)
[stepper_x]
enable_pin: !PF14
step_pin: PF13
dir_pin: PF12
microsteps: 128
endstop_pin: tmc2240_stepper_x:virtual_endstop
[tmc2240 stepper_x]
interpolate: True
cs_pin: PC4
spi_software_sclk_pin: PA5
spi_software_mosi_pin: PA7
spi_software_miso_pin: PA6
diag0_pin: ^!PG6
driver_SGT: 2 #1-3 # -64 is most sensitive value, 63 is least sensitive
run_current: 1.25 #1.25
stealthchop_threshold: 0
#stealthchop_threshold: 999999
## Y Stepper on Motor2 (A Motor)
[stepper_y]
enable_pin: !PG5
step_pin: PF11
dir_pin: PG3
microsteps: 128
endstop_pin: tmc2240_stepper_y:virtual_endstop
[tmc2240 stepper_y]
interpolate: True
cs_pin: PC6
spi_software_sclk_pin: PA5
spi_software_mosi_pin: PA7
spi_software_miso_pin: PA6
diag0_pin: ^!PG10
driver_SGT: 2 #2-3 #range is -64 to +63
run_current: 1.25 #1.25
stealthchop_threshold: 0
#stealthchop_threshold: 999999
[autotune_tmc stepper_x]
motor: ldo-42sth48-2004mah
extra_hysteresis: 4
sgt: 2
[autotune_tmc stepper_y]
motor: ldo-42sth48-2004mah
extra_hysteresis: 4
sgt: 2
#####################################################################
# Z Stepper Settings
#####################################################################
## Z0 Stepper - Front Left on MOTOR4
[stepper_z]
enable_pin: !PG2
step_pin: PF9
dir_pin: PF10
microsteps: 128 #128
endstop_pin: probe:z_virtual_endstop
[tmc2209 stepper_z]
uart_pin: PF2
interpolate: True
run_current: 0.8
#sense_resistor: 0.110
#stealthchop_threshold: 999999
## Z1 Stepper - Rear Left on Motor5
[stepper_z1]
enable_pin: !PF1
step_pin: PC13
dir_pin: !PF0
microsteps: 128
[tmc2209 stepper_z1]
uart_pin: PE4
interpolate: True
run_current: 0.8
#sense_resistor: 0.110
#stealthchop_threshold: 999999
## Z2 Stepper - Rear Right on Motor6
[stepper_z2]
enable_pin: !PD4
step_pin: PE2
dir_pin: PE3
microsteps: 128
[tmc2209 stepper_z2]
uart_pin: PE1
interpolate: True
run_current: 0.8
#sense_resistor: 0.110
#stealthchop_threshold: 999999
## Z3 Stepper - Fron Right on Motor7
[stepper_z3]
enable_pin: !PE0
step_pin: PE6
dir_pin: !PA14
microsteps: 128
[tmc2209 stepper_z3]
uart_pin: PD3
interpolate: True
run_current: 0.8
#sense_resistor: 0.110
#stealthchop_threshold: 999999
[autotune_tmc stepper_z]
motor: ldo-42sth48-2004ac
[autotune_tmc stepper_z1]
motor: ldo-42sth48-2004ac
[autotune_tmc stepper_z2]
motor: ldo-42sth48-2004ac
[autotune_tmc stepper_z3]
motor: ldo-42sth48-2004ac
#####################################################################
# Bed Heater
#####################################################################
[heater_bed]
heater_pin: PA0
sensor_type: Generic 3950
sensor_pin: PF3
#max_power: 0.6
#####################################################################
# Fans
#####################################################################
[controller_fan stepper_drivers_fan]
pin: PA8
stepper: stepper_x, stepper_y
idle_speed: 0
fan_speed: 0.6
[heater_fan Nevermore]
pin: PE5
heater_temp: 90
max_power: 1.0
kick_start_time: 0.5
heater: heater_bed
fan_speed: 1
[temperature_fan chamber]
pin: PD14
max_power: 1.0
shutdown_speed: 0.0
kick_start_time: 5.0
cycle_time:0.01
off_below:0.1
hardware_pwm: True
sensor_type: ATC Semitec 104NT-4-R025H42G
sensor_pin: PF4
min_temp: 0
max_temp: 70
target_temp: 40
control: watermark
gcode_id: C
[multi_pin soc_pin]
pins: PD12, PD13
[fan_generic SoC]
pin: multi_pin: soc_pin
max_power: 1
#####################################################################
# LED Control
#####################################################################
[neopixel chamber_leds]
pin: PB10
chain_count: 50 #50
color_order: GRB
initial_RED: 1.0
initial_GREEN: 1.0
initial_BLUE: 1.0
initial_WHITE: 0.0

229
printer.cfg Normal file
View File

@@ -0,0 +1,229 @@
[include mainsail.cfg]
[include timelapse.cfg]
#[include hbb.cfg]
[mcu host]
serial: /tmp/klipper_host_mcu
[temperature_sensor BttPi2]
sensor_type: temperature_host
[include octopus_pro_1.1.cfg]
[include toolhead_sb.cfg]
#[include toolhead_sht36v2.cfg]
[printer]
kinematics: corexy
max_velocity: 500
max_accel: 8000 #Max 4000
max_z_velocity: 15 #Max 15 for 12V TMC Drivers, can increase for 24V
max_z_accel: 350
square_corner_velocity: 5.0
[force_move]
enable_force_move: true
[respond]
default_type: echo
default_prefix: echo:
[exclude_object]
[gcode_arcs]
resolution: 0.1
[skew_correction]
#####################################################################
# X/Y Stepper Settings
#####################################################################
## X Stepper on Motor1(B Motor)
[stepper_x]
rotation_distance: 40 #39.8
full_steps_per_rotation:400
position_min: 0
position_endstop: 355 #355
position_max: 355 #355
homing_speed: 80 #25 #Max 100
#homing_retract_dist: 10
homing_retract_dist: 0
homing_positive_dir: true
## Y Stepper on Motor2 (A Motor)
[stepper_y]
full_steps_per_rotation:400
rotation_distance: 40 #39.8
position_min: 0
position_endstop: 355
position_max: 355
homing_speed: 100 #25 #Max 100
#homing_retract_dist: 5
homing_retract_dist: 0
homing_positive_dir: true
#####################################################################
# Z Stepper Settings
#####################################################################
## Z0 Stepper - Front Left on MOTOR3_A
[stepper_z]
rotation_distance: 40
gear_ratio: 80:16
position_max: 300
position_min: -20
homing_speed: 15
second_homing_speed: 3
homing_retract_dist: 3
[stepper_z1]
rotation_distance: 40
gear_ratio: 80:16
[stepper_z2]
rotation_distance: 40
gear_ratio: 80:16
[stepper_z3]
rotation_distance: 40
gear_ratio: 80:16
#####################################################################
# Heater
#####################################################################
[verify_heater heater_bed]
max_error: 120
check_gain_time: 60
hysteresis: 5
heating_gain: 2
[verify_heater extruder]
#max_error: 120
check_gain_time: 30
#hysteresis: 5
#heating_gain: 2
#####################################################################
# Bed Heater
#####################################################################
[heater_bed]
min_temp: 0
max_temp: 120
control: pid
pid_kp: 55.796
pid_ki: 2.797
pid_kd: 278.281
#####################################################################
# Probe
#####################################################################
[probe]
x_offset: 0
y_offset: 0
#z_offset: -0.825
lift_speed: 15 #10
speed: 3.0 #5
samples: 3
samples_result: median
sample_retract_dist: 3
samples_tolerance: 0.005
samples_tolerance_retries: 6
activate_gcode:
{% set PROBE_TEMP = 150 %}
{% set MAX_TEMP = PROBE_TEMP + 5 %}
{% set ACTUAL_TEMP = printer.extruder.temperature %}
{% set TARGET_TEMP = printer.extruder.target %}
{% if TARGET_TEMP > PROBE_TEMP %}
{ action_respond_info('Extruder temperature target of %.1fC is too high, lowering to %.1fC' % (TARGET_TEMP, PROBE_TEMP)) }
M109 S{ PROBE_TEMP }
{% else %}
# Temperature target is already low enough, but nozzle may still be too hot.
{% if ACTUAL_TEMP > MAX_TEMP %}
{ action_respond_info('Extruder temperature %.1fC is still too high, waiting until below %.1fC' % (ACTUAL_TEMP, MAX_TEMP)) }
TEMPERATURE_WAIT SENSOR=extruder MAXIMUM={ MAX_TEMP }
{% endif %}
{% endif %}
#####################################################################
# Homing and Gantry Adjustment Routines
#####################################################################
[idle_timeout]
timeout: 1800
gcode:
#_CHAMBER_LED_OFF
[quad_gantry_level]
gantry_corners:
-60,10
410,420
points:
#50,50
#50,300
#300,300
#300,50
50,50
50,300
300,300
300,50
speed: 500
horizontal_move_z: 6
retries: 10
retry_tolerance: 0.0075
max_adjust: 15
[bed_mesh]
speed: 450
horizontal_move_z: 5
#mesh_min: 40, 40
#mesh_max: 310,310
mesh_min: 35, 30
mesh_max: 316,308
fade_start: 0.6
fade_end: 10.0
probe_count: 5,5 # Values should be odd, so one point is directly at bed center
algorithm: bicubic
#relative_reference_index: 12 #40 #12 # Update when changing probe_count, to ((x points * y points) - 1) / 2. (the center point)
[include macros/main.cfg]
[include moonraker_obico_macros.cfg]
#*# <---------------------- SAVE_CONFIG ---------------------->
#*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated.
#*#
#*# [skew_correction default]
#*# xy_skew = -0.002120454472795053
#*# xz_skew = 0.0
#*# yz_skew = 0.0
#*#
#*# [probe]
#*# z_offset = -0.890
#*#
#*# [bed_mesh default]
#*# version = 1
#*# points =
#*# 0.010937, -0.010313, 0.022500
#*# 0.036562, 0.007812, 0.023750
#*# 0.033437, 0.001562, 0.022500
#*# x_count = 3
#*# y_count = 3
#*# mesh_x_pps = 2
#*# mesh_y_pps = 2
#*# algo = lagrange
#*# tension = 0.2
#*# min_x = 133.45799999999997
#*# max_x = 217.19799999999998
#*# min_y = 146.587
#*# max_y = 202.78699999999998

17
rapido_ace.cfg Normal file
View File

@@ -0,0 +1,17 @@
[extruder]
#Classic Ziegler-Nichols PID parameters:
#pid_kp: 41.785
#pid_ki: 25.323
#pid_kd: 17.237
##Pessen Integral Rule PID parameters:
#pid_kp: 48.749
#pid_ki: 36.930
#pid_kd: 24.131
#Some Overshoot PID parameters:
#pid_kp: 22.982
#№pid_ki: 13.928
#pid_kd: 25.027
#No Overshoot PID parameters:
pid_kp: 13.928
pid_ki: 8.441
pid_kd: 15.168

5
rapido_v2.cfg Normal file
View File

@@ -0,0 +1,5 @@
[extruder]
control: pid
pid_Kp: 26.171
pid_Ki: 2.684
pid_Kd: 63.793

17
sonar.conf Normal file
View File

@@ -0,0 +1,17 @@
#### Sonar - A WiFi Keepalive daemon
####
#### Written by Stephan Wendel aka KwadFan <me@stephanwe.de>
#### Copyright 2022
#### https://github.com/mainsail-crew/sonar
####
#### This File is distributed under GPLv3
####
[sonar]
enable: false # false to disable till next reboot (will stop again if not set to true)
debug_log: false # if set to true, sonar will log ever ping with triptime and date/time
persistant_log: false # If true logs in /var/log/sonar.log, false logs to systemd
target: auto # IP Address, URL or auto as ping target
count: 3 # How often should be pinged?
interval: 60 # Ping again after X seconds
restart_treshold: 10 # If failed, restart WiFi after X seconds

22
telegram.conf Normal file
View File

@@ -0,0 +1,22 @@
# Please refer to the wiki(https://github.com/nlef/moonraker-telegram-bot/wiki) for detailed information on how to configure the bot
[bot]
server: localhost
bot_token: 6179338772:AAGjgcT186TxlyuUM6lYfeymKLBaSYy-TZw
chat_id: 438453744
[camera]
host: http://localhost/webcam2/?action=stream #http://192.168.1.33:81/stream
flip_vertically: true
flip_horizontally: true
[progress_notification]
percent: 5
height: 5
time: 30
#[timelapse]
#cleanup: true
#height: 0.2
#time: 5
#target_fps: 30

1
timelapse.cfg Symbolic link
View File

@@ -0,0 +1 @@
/home/biqu/moonraker-timelapse/klipper_macro/timelapse.cfg

161
toolhead_sb.cfg Normal file
View File

@@ -0,0 +1,161 @@
# SB RapidoV2 G2E
[include rapido_v2.cfg]
[mcu EBBCan]
canbus_uuid: 350f10596216
[firmware_retraction]
retract_length: 0.4
# The length of filament (in mm) to retract when G10 is activated,
# and to unretract when G11 is activated (but see
# unretract_extra_length below). The default is 0 mm.
retract_speed: 30
# The speed of retraction, in mm/s. The default is 20 mm/s.
#unretract_extra_length: 0
# The length (in mm) of *additional* filament to add when
# unretracting.
unretract_speed: 30
# The speed of unretraction, in mm/s. The default is 10 mm/s.
[adxl345]
cs_pin: EBBCan:gpio1
spi_software_sclk_pin: EBBCan:gpio2
spi_software_mosi_pin: EBBCan:gpio0
spi_software_miso_pin: EBBCan:gpio3
axes_map: z,-y,x
[resonance_tester]
probe_points: 177.5, 177.5, 50
accel_chip: adxl345
min_freq: 15
max_freq: 120
accel_per_hz: 125
hz_per_sec: 1
[input_shaper]
shaper_type_x: mzv
shaper_freq_x: 51
shaper_type_y: mzv
shaper_freq_y: 41.6
[temperature_sensor SB2209]
sensor_type: temperature_mcu
sensor_mcu: EBBCan
#####################################################################
# Extruder
#####################################################################
[extruder]
step_pin: EBBCan:gpio18
dir_pin: EBBCan:gpio19
enable_pin: !EBBCan:gpio17
microsteps: 16
rotation_distance: 46.64 #G2E
gear_ratio: 9:1 #G2E
full_steps_per_rotation: 200 #200 for 1.8 degree, 400 for 0.9 degree
nozzle_diameter: 0.400
filament_diameter: 1.750
heater_pin: EBBCan:gpio7
#sensor_type: ATC Semitec 104NT-4-R025H42G
#sensor_pin: EBBCan:gpio27
#sensor_type: PT1000
#sensor_pin: EBBCan:gpio27
#pullup_resistor: 1000
sensor_type: MAX31865
sensor_pin: EBBCan:gpio9
spi_software_sclk_pin: EBBCan:gpio10
spi_software_mosi_pin: EBBCan:gpio8
spi_software_miso_pin: EBBCan:gpio11
rtd_nominal_r: 1000
rtd_reference_r: 4300
rtd_num_of_wires: 2
min_temp: 20
max_temp: 350
max_power: 1.0
max_extrude_only_distance: 300
max_extrude_cross_section: 5
min_extrude_temp: 20
control: pid
pid_Kp: 26.171
pid_Ki: 2.684
pid_Kd: 63.793
[tmc2209 extruder]
uart_pin: EBBCan:gpio20
interpolate: false
run_current: 0.65 #0.6
#sense_resistor: 0.110
#stealthchop_threshold: 0 # 999999
[autotune_tmc extruder]
motor: ldo-36sth20-1004ahg-9T
#####################################################################
# Probe
#####################################################################
[probe]
pin: ^!EBBCan:gpio24
#####################################################################
# Fan Control
#####################################################################
[fan]
hardware_pwm: True
off_below: 0.05
# Время (в секундах), необходимое для запуска вентилятора на полной скорости при первом включении
# или увеличении ее более чем на 50% (помогает запустить вентилятор). Значение по умолчанию равно 0,100 секунды.
#kick_start_time: 0.200
#kick_start_time: 0.5
# Время (в секундах), затрачиваемое на каждый цикл подачи питания на вентилятор с помощью ШИМ.
# Рекомендуется, чтобы это значение составляло 10 миллисекунд или более при использовании программного управления ШИМ.
# Значение по умолчанию равно 0,010 секунды.
#cycle_time: 0.01
pin: EBBCan:gpio15
tachometer_pin: EBBCan:gpio12
tachometer_poll_interval: 0.0005 #0.0005
#tachometer_ppr: 1
[heater_fan hotend_fan]
## Hotend Fan - CNC_FAN1
pin: EBBCan:gpio14
#max_power: 1.0
#kick_start_time: 0.5
heater: extruder
## If you are experiencing back flow, you can reduce fan_speed
#fan_speed: 1.0
[temperature_fan EbbFan]
pin: EBBCan:gpio6
max_power: 1.0
shutdown_speed: 0.0
#kick_start_time: 5.0
#cycle_time:0.01
#off_below:0.1
sensor_type: Generic 3950
sensor_pin: EBBCan:gpio28
min_temp: 0
max_temp: 100
target_temp: 60.0
control: watermark
#gcode_id: C
#####################################################################
# LED Control
#####################################################################
[neopixel sb_leds]
pin: EBBCan:gpio16

104
toolhead_sht36v2.cfg Normal file
View File

@@ -0,0 +1,104 @@
[mcu sht]
canbus_uuid: 8ce295109ef0
[firmware_retraction]
retract_length: 0.4
retract_speed: 30
unretract_speed: 30
[adxl345]
cs_pin: sht:PA9
spi_bus: spi2
#axes_map: z,-y,x
[resonance_tester]
probe_points: 177.5, 177.5, 50
accel_chip: adxl345
min_freq: 15
max_freq: 120
accel_per_hz: 125
hz_per_sec: 1
[input_shaper]
shaper_type_x: mzv
shaper_freq_x: 51
shaper_type_y: mzv
shaper_freq_y: 41.6
[temperature_sensor sht36_v2]
sensor_type: temperature_mcu
sensor_mcu: sht
#####################################################################
# Extruder
#####################################################################
[extruder]
step_pin: sht:PB4
dir_pin: sht:PB3
enable_pin: !sht:PA15
microsteps: 16
rotation_distance: 53.494165
gear_ratio: 44:10, 37:17
full_steps_per_rotation: 200 #200 for 1.8 degree, 400 for 0.9 degree
nozzle_diameter: 0.400
filament_diameter: 1.750
heater_pin: sht:PA8
sensor_type: PT1000
sensor_pin: sht:PA3
pullup_resistor: 1100
min_temp: 20
max_temp: 350
max_power: 1.0
max_extrude_only_distance: 300
max_extrude_cross_section: 5
min_extrude_temp: 20
control: pid
pid_Kp: 26.171
pid_Ki: 2.684
pid_Kd: 63.793
[tmc2209 extruder]
uart_pin: sht:PB5
#diag_pin: sht:PB6
interpolate: false
run_current: 0.65 #0.6
#sense_resistor: 0.110
#stealthchop_threshold: 0 # 999999
[autotune_tmc extruder]
motor: ldo-36sth20-1004ahg
#####################################################################
# Probe
#####################################################################
[probe]
pin: ^!sht:PA2
#####################################################################
# Fan Control
#####################################################################
[fan]
#hardware_pwm: True
#kick_start_time: 0.25
#cycle_time: 0.15
off_below: 0.05
pin: sht:PB11
[heater_fan hotend_fan]
pin: sht:PB10
heater: extruder
#####################################################################
# LED Control
#####################################################################
[neopixel sb_leds]
pin: sht:PB0