The sample count and associated settings are no longer in the
screws_tilt_adjust config section - they are now in the probe config
section. Remove them from the guide.
Reported by @theopensourcerer.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Some print start scripts may extrude at a position slightly higher
than the first z layer height. Tweak the backwards z test to reduce
the chance of the tuning test ending prematurely.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
PR #1970 introduced a new parameter, controlling the default behavior of the safe_z_home-module. To avoid unexpected changes, the default of the move_to_previous is now defaulted to False.
Signed-off-by: Nils Friedchen <Nils.Friedchen@googlemail.com>
If '[stepper_x]' and/or '[stepper_y]' have a 'position_min' that is
non-zero, and '[safe_z_home] home_xy_position' is '0,0'; then the 'G28'
command will _not_ move to '0,0'; but stay at 'position_min' during the
Z endstop test.
This fix corrects this issue.
Signed-off-by: Jason S. McMullan <jason.mcmullan@gmail.com>
Below off_below the fan will be turned off. When configured correctly this
can prevent stalling, which may lead to overheating and failed fans. To
simplify calibration and use of this setting, off_below is applied in the
input duty cycle domain, prior to any scaling due to e.g. max_power.
Signed-off-by: Nicholas Seckar <nseckar@gmail.com>
When enabling "low level options" in Kconfig, selecting a chip that is
20Mhz capable would result in 20Mhz being the default. A 16Mhz speed
is the preferred default, so list that first in the menu.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The FIOSET and FIOCLR registers may not set an initial value if the
pin is not in an output mode. So, use FIOPIN to set the initial
value.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
When reducing the maximum speed due to the max_accel_to_decel setting,
move velocity limits must still be propagated. Otherwise, the
trapezoid move planner may produce moves with velocity jumps.
Signed-off-by: Dmitry Butyugin <dmbutyugin@google.com>
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Since the previous config file was laid out only for TMC2208 drivers and was missing most other pins, I made a comprehensive configuration file, with hardware names for all available functionality.
Signed-off-by: Tobias Weiß <t.weiss@bk.ru>
Once a hop is performed, it will only be re-issued if the z-axis has been
moved in the meantime. Usually it is only moved by a z-homing so doing so
will cause safe_z_home to do the hop on the next homing action.
When z-axis is homed, x and y positions are known. When setting this
boolean option, these are set back to their last positions.
Whenever a hop is specified it is re-issued after the Z axis has been
homed. This is especially necessary when a pressure-based probe is used.
Also, the module decides if a hop is necessary, based on either a known
Z position or a flag that is set whenever the motors are disabled.
Signed-off-by: Nils Friedchen <Nils.Friedchen@googlemail.com>
Previously, when a sercom pin specified the mcu (myname:PIN), it would result in a pin enumeration error.
Signed-off-by: John Jardine <john@gprime.net>
The usbfs receive buffers must also have space for the 2 byte crc at
the end of a transmission. This fixes an error that could lead to
lost messages from mcu to host (resulting in bytes_invalid increasing
in stats) on the stm32f103.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
As per 18e6772010
This lowers the voltage and thus brings the stepper motor temperature to
an acceptable level. Beforehand, motors would get very hot.
Signed-off-by: Piotr Usewicz <piotr@layer22.com>
The SKR mini E3 is marketed as being for the Ender 3, so it makes
sense for the example electronics config to be more similar to the
Ender 3 config.
Reported by @TheDogee.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
R Still missing, also might be somewhat dirty since code is converted
into G1 commands.
Signed-off-by: Aleksej Vasiljkovic <achmed21@gmail.com>
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
It appears the usbotg controller can get confused if the usb irq
handler runs while processing a usb request. Disable usb irqs during
usb processing to avoid this.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Use the XFRC interrupt instead of TXFE. Don't mask/unmask the tx
interrupts during runtime. This fixes some race conditions where a tx
notification may have previously gotten lost.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Now that the lpc176x code uses the armcm_boot mechanism, it is no
longer necessary for SystemInit to be externally visible.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Now that the stm32f1 code uses the armcm_boot mechanism, it is no
longer necessary for SystemInit to be externally visible.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Now that the stm32f4 code uses the armcm_boot mechanism, it is no
longer necessary for SystemInit to be externally visible.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
It appears that the faster micro-controllers may have their transfer
speeds limited by the host USB controller. Rerun the usb transfer
benchmarks using a high-speed hub.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
During a "drip feed" move, both the move's maximum speed and maximum
acceleration may be limited by the kinematics.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The ADC pins (on at least the sam3x8e) need to be configured in input
mode with the internal pullups disabled in order to get accurate ADC
readings.
Reported by @bryanboettcher.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Rename the linker script so the build does not have any conflicts with
the armcm_boot.d dependency file.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Replace the custom encoding with a hex encoding. This makes it a
little easier to inspect the CTR conversions.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Store the CTR requests in compile_time_request.txt with the null
characters removed. This makes it slightly easier to inspect the CTR
conversions.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add basic ARM Cortex-M C init code and build linker scripts to
src/generic/ code. This can be used to simplify the various ARM board
code.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add a general build rule to precompile *.lds.S files to *.ld files.
Remove the custom rules in src/atsamd/Makefile and src/stm32/Makefile.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add a sample-lcd.cfg with the defintions for several common "reprap"
style LCD displays that use the EXP1/EXP2 plugs. Update several
config files to add EXP1/EXP2 board aliases.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add a helper class for tracking gpio outputs that are synchronized to
bus updates on a particular command queue.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
On fast MCUs (like the SAMD51) it is possible for the gpio to toggle
faster than the st7920 can accept. Add a small delay around the clock
rise signal.
Signed-off-by: Lars R. Hansen <popshansen@hotmail.com>
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Rework the spi_config commands so that bus configuration and shutdown
message configuration is done separately from the main "config_spi"
command. This makes the spi configuration more flexible. It's now
possible to use software spi without a CS pin. It's now possible to
define multiple SPI messages to send on a shutdown event.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Now that the stm32f1 code has been merged into the stm32 code, there
is no longer a need to use the upstream stm32f1 "hal" code.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Now that the stm32f1 code has been merged into the stm32 code, there
is no longer a need to keep the stm32f1/ directory.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Rename the clock.c file to stm32f4.c to make it more clear that the
code is specific to the stm32f4 chips.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Now that the code in stm32f4/ can handle both stm32f1 and stm32f4
chips, rename the directory to just "stm32".
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
use SET_GCODE_OFFSET's MOVE=1 parameter in the z offset menu.
Less confusing for people who think nothing happened.
Signed-off-by: John "Fess" Fessenden <fess@fess.org>
Update the stm32f1 code to the latest from ST. Merge the
lib/cmsis-stm32f1/ and lib/hal-stm32f1/ into a single lib/stm32f1/
directory. Document all the differences from the pristine upstream
code.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
It's not necessary to fully build up the look-ahead queue prior to
starting a "drip move" homing operation. Instead, allow the
look-ahead queue to flush normally.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
If the homing move is exceptionally long, it could take a long time
for the host to process the look-ahead queue. Delay the print_time
calculation until moves are ready to be sent.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Rename the commands.
The main reason for this change is to force a micro-controller code
updated (due to important bugfix in 7fefe52d).
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
If the move is not added to the move queue, then the SF_LAST_DIR
setting must not be changed. Otherwise, it could result in an
incorrect direction being set on the stepper after a homing operation.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The popular "LPC17xx-DFU-Bootloader" alters the LPC_UART0->FDR
register, so be sure to reset it back to its default when using serial
in Klipper.
Reported by @b-vs.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The current z_hop support did not work correctly with common slicers
that change Z height between retract and unretract, and it did not
work correctly with slicers that issue a retract at the end of a print
and then at the beginning of the next print.
The z_hop support is therefore being removed until these issues can be
fixed.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Don't default to a Z location of 10, as that could cause damage if the
probe's z_offset is greater than 10. Instead, use the "retract
distance" method that is used for normal multi-sample probing.
Update the PROBE_ACCURACY command parameter names to use the same
parameter names as the PROBE command.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Now that homing is implemented via "drip moves", it is no longer
necessary for the stepcompress code to have special homing logic.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Now that homing is implemented via "drip moves", it is no longer
necessary to move the print_time backwards.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Now that homing is implemented via "drip moves", it is no longer
necessary to round the homing speed and it is no longer necessary to
add a delay for cpu processing time.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Rework the low-level implementation of homing movement. The existing
mechanism buffers all homing movement into the micro-controller prior
to starting the home. Replace with a system that buffers all movement
into the host look-ahead buffer and then "drip feed" those moves to
the micro-controllers. Then clear the host look-ahead buffer when all
endstops trigger.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Finish Moves needs be a hard requirement for the event gcodes, as it eliminates the possiblility of an event firing while the gcode is executing.
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
It really helps to see a snapshot of available printer variables when building menus and macros. The list of variables always depends on what printer config you have.
Signed-off-by: Janar Sööt <janar.soot@gmail.com>
This moves skew_correction configuration out of printer.cfg. It is now dynamically set by the SET_SKEW gcode.
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
Add support for enabling the stepper via the communication channel.
This improves support for boards with a shared enable line.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
A print_time of zero may translate to a negative clock on a secondary
micro-controller, which would cause an internal error. Change the
code to pass a real print_time or None if it is not needed.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Only the tmc2208 driver needs special read register translation logic.
Rework the code so a default implementation is available for all the
other drivers.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Move the serial command wrapper class from serialhdl.py to mcu.py.
This will allow that class to better support higher level
functionality.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Introduce a main send_with_response() helper function and use it
during identify and the setup of clocksync.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
An extra to execute gcode when a hardware button is pressed or released. Uses the jinja2 templating system.
Inspired by pull request #545 from Miguel Moitinho miguel@moitinho.net and pull request #1098 from Paulo Drugos paulodrugos@gmail.com
Signed-off-by: Alec Plumb <alec@etherwalker.com>
Add PROBE_SPEED, SAMPLES, SAMPLE_RETRACT_DIST, SAMPLES_TOLERANCE,
SAMPLES_TOLERANCE_RETRIES, and SAMPLES_RESULT parameters to the PROBE
command (and to commands that indirectly invoke a probe).
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Commit 1096075d changed CONFIG_CLOCK_FREQ to the actual cpu frequency,
but that commit failed to update adc.c accordingly. That made the adc
run 4 times slower. Make the corresponding change to adc.c.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Make sure to configure DRVCONF with SDOFF=0 prior to writing DRVCTRL
as that field controls access to that register.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Support retrying Z_TILT_ADJUST a configurable number of times
to a configurable tolerance both in the config or as parameters.
- By default keeps original behavior of no retries.
- Adds parameters RETRIES and RETRY_TOLERANCE to QUAD_GANTRY_LEVEL gcode.
- adds config options retries and retry_tolerance to uad_gantry_level]
- issues an error if we are getting worse intead of approaching tolerance
- issues an error if retries were requested but we did not reach the tolerance
in the specified number of retries
the minimum change should be a single z step for those
probing 2 points for 2 stepper motors and 3 for 3 stepper motors.
at one point it was suggested to use the amount of z adjustment instead of the
range of the probed points as a trigger for retry. I've chosen not to do this.
using z adustment in these cases means the minimum unit of change is related to
the angle created by the probed points and the distance to stepper motor and
can be more than a couple steps which is rather unintuitive.
for the case when someone is using more probed points than z steppers the
probed points range will have some fixed minimum value that can't be reduced
which is also unintuitive but that case should idealy be the rarer case, and
the user can learn to set a higher tolerance that matches their probing setup.
Signed-off-by: John "Fess" Fessenden <fess@fess.org>
Support retrying QUAD_GANTRY_LEVEL a configurable number of times
to a configurable tolerance both in the config or as parameters.
- By default keeps original behavior of no retries.
- Adds parameters RETRIES and RETRY_TOLERANCE to QUAD_GANTRY_LEVEL gcode.
- adds config options retries and retry_tolerance to `[quad_gantry_level]`
- issues an error if we are getting worse intead of approaching tolerance
- issues an error if retries were requested but we did not reach the tolerance
in the specified number of retries
Signed-off-by: John "Fess" Fessenden <fess@fess.org>
No need to describe the SET_TMC_CURRENT command in the
example-extras.cfg - it's describe in docs/G-Codes.md and is now
supported on all tmc drivers.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
List all the configurable parameters in the tmc5160 example block and
use similar wording as the other tmc drivers.
Also, don't allow DEDGE to be configured as it would just break the
current code.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Introduce TMCMicrostepHelper and TMCStealthchopHelper helper code that
uses the mcu_tmc interface. Update the callers to use these new
helpers.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Perform the register initialization directly from TMCCommandHelper and
perform it during the "connect" phase. This unifies the register
setup for the TMC2130, TMC2208, TMC2660, and TMC5160.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Use a get_register() method instead of get_response(). This makes the
tmc2660 class more similar to other TMC drivers. It also enables
DUMP_TMC to dump all the readable content.
Also, use the tmc2130.get_config_microsteps() helper.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Reduce the delay in send_with_response() by introducing a reactor
mutex to wake the main thread when the response is obtained.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Allow the callers of process_batch() to directly inspect the gcode
mutex. Those callers can then directly invoke run_script().
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
If commands are slowly fed to the printer it could cause the number of
queued commands to grow without bound. Be sure to pause the incoming
command stream even if the lookahead queue is empty.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Now that EndstopError and gcode.error use the same underlying
Exception object, it is no longer necessary to translate an error.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Introduce a homing.CommandError and use that as the basis for both
gcode and EndstopError exceptions.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add a section describing PROBE_ACCURACY, describing probe location
bias, and describing probe temperature bias.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Factor out _calc_mean() and _calc_median() functions and call from
both run_probe() and cmd_PROBE_ACCURACY().
This also fixes a subtle error in the run_probe() median function - on
some kinematics the x and y position can change on a z move so the x
and y should be taken from the z probe values actually used.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This changes the config file so that the configuration of
multi-samples is now done in the [probe] (and [bltouch]) section
instead of the various delta, bed_mesh, z_tilt, etc. config sections.
With this change, PROBE and PROBE_CALIBRATE commands now also utilize
multi-sampling.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Now that the extruder, display, heater_fan, output_pin, and servo
classes have get_status() methods, it is no longer necessary to
override them in the menu code.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add "gcode_position" named tuple to gcode.get_status(). Add a
"position" named tuple to toolhead.get_status().
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add action_respond_info(), action_respond_error(), and
action_emergency_stop() callables to the get_status() return
dictionary. This allows gcode macros to directly invoke these
actions.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
These action commands prevent Octoprint from sending extra gcodes that can interfere with Klipper's pause/resume control.
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
Reformat some of the comments. Add section headers. Don't comment
out the config sections (so that it is more clear what needs to be
copied to the main config).
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The SET_GCODE_OFFSET command could cause unwanted behavior when an
offset is applied to the following g-code command. (In particular,
when the following command is an extrude only move - as in
issue #1289.)
Don't apply the offset immediately. Instead, add support for a MOVE=1
parameter which will schedule a move to apply the given offset.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Prior to the BLTouch v3, the recommended command times were 700us
(pin_down), 1200us (touch_mode), 1500us (pin_up), 1800us (self_test),
and 2200us (reset). However, the recommended Marlin timing (via servo
"angles") was 647.111, 1162.667, 1472, 1781.333, and 2193.778us.
As of the BLTouch v3, the recommended times are now 650, 1165, 1475,
1780, and 2190us. The v3 continues to recommended Marlin timings of
647.111, 1162.667, 1472, 1781.333, and 2193.778us.
Update Klipper to use the new BL-Touch v3 recommended timing. The new
timings are required for the BL-Touch v3 and they are closer to what
the Marlin firmware has historically used.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Improve the precision of soft pwm pulses by allowing the host to
directly specify the clock duration of the pulse. This improvement in
precision may be noticeable when controller servos (and bltouch).
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Mark methods internal to gcode.py with an underscore so that it is
easier to see which functions are purely helper functions.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
There are reports that SPI does not work correctly on the Fysetc F6 if
the PB0 (sdcard cs enable line) isn't pulled high. Update the default
config to enable that line.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
"The z_tilt_adjust was coded to require 3 points because the original
intent was for railcore-xl and voron. Since then, a number of users
have started using z_tilt_adjust for prusa i3 style printers with dual z
steppers. That's fine, but we just haven't gotten around to removing
the superfluous check in the code." -- Kevin O'Connor
remove that check.
Signed-off-by: John "Fess" Fessenden <fess@fess.org>
Factor out minimum required points check for ProbePointsHelper
in prep for setting different values for quad_gantry_level
and z_tilt_adjust
Signed-off-by: John "Fess" Fessenden <fess@fess.org>
Use /tmp/klippy.log in the install script - all the documentation
currently uses that file location.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
"Feed Filament" menu item value was off-screen that made this item useless. So I changed its name to just "Feed". Users shall easily guess that this item is for filament feeding because this item is located in "Filament" menu.
Signed-off-by: Alexander Fadeev <alfsoft@gmail.com>
This config is based on the existing Ender 3 example config but some of
the directions for the steppers have been reversed. It works for me so
far, but feel free to modify.
Signed-off-by: Billy Jones <billyajones@gmail.com>
Minor updates to the kit-zav3d-2019.cfg to make it look more like
other config files: specify the micro-controller type, use the
klipper3d.org site for documentation links, avoid using SAVE_CONFIG
sections in the example configs, add config to printers.test.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
safety feature that prevents quad_gantry_level from trying to do a
correction that might break things - if your probe fires early for
whatever reason and tries to do an 8mm correction in one corner instead
we abort if a correction is over a configurable limit by default 4mm
configurable via `max_adjust` parameter in the config
Signed-off-by: John "Fess" Fessenden <fess@fess.org>
In particular trying to keep the output from a single quad_gantry_level
so that it fits in the octoprint terminal window without the need to
scroll
Signed-off-by: John "Fess" Fessenden <fess@fess.org>
Add an html template so that each page has a navbar at the top and a
sidebar on the left with an auto-generated table of contents.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Replace the Overview.md document description with a list of documents
and a brief description of their contents. The goal is to make it
easier for users to find information.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Adding gcode command for setting the target temperature of temperature_fan.
Example gcode: SET_TEMPERATURE_FAN_TARGET temperature_fan=chamber target=35.0
Signed-off-by: Martin Nowroth <madnoth@gmail.com>
The parameter to the M221 command should be the ratio of the nominal to
measured filament area, rather than the ratio of the diameters. Since we
are taking the ratio, most of the area calculation cancels out.
Fixes#1535.
Signed-off-by: Len Trigg <lenbok@gmail.com>
Using .. in the markdown link can confuse some document processors.
Use an absolute link to github instead.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
There's a security bulletin for Jinja2 v2.10 (CVE-2019-10906). This
wont impact Klipper, but best to upgrade the package requirements to
avoid getting security alerts.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The servo pins (P9_14/P9_16) are muxed to the SOCs hardware PWM unit
driven by a 13MHz GP timer. They have to be driven by the linux host
mcu. This commits adds hardware PWM support using the linux sysfs
user space interface.
The servo pins can be specified as "replicape:servo0" and
"replicape:servo1". Removes the "servo0_enable", "servo1_enable"
configuration parameters.
Fixes#1105.
Signed-off-by: Janne Grunau <janne-3d@jannau.net>
The replicape servo pins (P9_14/P9_16) are muxed to the SOCs hardware
PWM unit driven by a 13MHz GP timer. They have to be driven by the
linux host mcu. This commits adds hardware PWM support using the linux
sysfs user space interface.
Signed-off-by: Janne Grunau <janne-3d@jannau.net>
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Place all of the host software python requirements into a config file.
This makes it easier to update the python requirements without having
to update several installation scripts.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The sampling time of the ADC was too slow (239 ADC clock cycles), causing the reading of the next ADC channel to have cross talk as per issue #1261. Sampling time updated to 41 ADC clock cycles.
Signed-off-by: Marco D'Alessio <marco@wrecklab.com>
It appears the PRU timer will not trigger on a match of exactly zero.
If the next timer happened to be set to exactly zero, it could cause
software timers to get stuck and result in "move queue empty" errors.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
It appears some host machines may not recognize that the USB device
has disconnected upon start of bootloader mode. Explicitly disable
USB and add a 5ms delay to help signal the host of the upcoming
change.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Due to the corexy kinematics, the individual steppers may have a
velocity of sqrt(2) times faster than the cartesian velocity _and_ can
have an acceleration of sqrt(2) times faster. Make sure to calculate
in the higher acceleration.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Adjust the HEND default, which was faulty after the the fields update, remove disallowance of setting CS
Signed-off-by: Florian Heilmann <Florian.Heilmann@gmx.net>
Allows configuration files to include other configuration files using
[include filename.cfg] syntax. Klippy loads include files in the
position of the include header; subsequent definitions override
included values. Supports wildcards (e.g. [include macros/*.cfg).
Allows included files to include other files but blocks recursion.
Signed-off-by: Greg Lauckhart <greg@lauckhart.com>
Adds parameter for bed meshes to be adjusted relative to a probed point
during calibration. This allows the probe z offset to be ignored for
probes that are not stable over time (for example, the thermal drift of
inductive probes). An endstop other than the probe is then necessary to
determine the bed-nozzle offset.
Signed-off-by: Matt Baker <baker.matt.j@gmail.com>
menu: Show current positions based on gcode positions
Added "move_[xyze]pos" properties to the "gcode" object for use in menus.
The new properties track the toolhead's position in gcode coordinates,
taking gcode and bed leveling offsets into account.
This position is equal to the value returned by M114 gcode.
Changes the move menus to show current position based on gcode
position. This allows gcode offsets and bed leveling offsets
to be taken into account, and prevents unexpected toolhead
movements when moving it using the menu.
Signed-off-by: Robert Konklewski <nythil@gmail.com>
Commit b9b03dd0 had a typo in the flag updating. The typo could
result in corruption of the stepper state.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Now that enumerations are available, any variable named "pin" can only
be used to describe a gpio pin. Rename the end_stop_state "pin"
parameter to "pin_value". Also, rename "end_stop_query" command to
"end_stop_query_state" to notify users to upgrade both host and mcu
code.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Instead of waiting one second after entering bootloader mode, wait for
the device file to reappear. This should make the flashing more
resilient to slight timing difference in the OS.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Make it clear that the name of the constant being defined is a string.
When the value being defined is also a string, use a new
DECL_CONSTANT_STR() macro.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Avoid transmitting lists of message ids for commands and responses -
gzip doesn't do a good job of compressing them.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
If the stepper is stopped by the endstop code, then ignore any further
stepper moves until a reset_step_clock command is received.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Default to running dfu-util via sudo as most machines will not have
the user setup with permissions to access the raw usb device.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The z_adjust offset provided to adjust_steppers is calculated given the
steppers adjust exactly according to the given x_adjust/y_adjust. As the
algorithm eliminates an offset that is common to all steppers, this offset
must be taken into account in the final correction.
Signed-off-by: Arne Jansen <arne@die-jansens.de>
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add support for entering the "stm32duino" bootloader via the arduino
1200 baud USB request. Add supprot for flashing over USB via the
"make flash" command.
Rename the existing "make flash" command to "make serialflash".
Default to using a bootloader in Kconfig.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add a script to help flash Klipper over USB. This tool can instruct
Klipper to enter into bootloader mode and it can help track changes in
device name during that transition.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The z_offset calculation should have been calculated from the probe
height to the measured bed position.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Use the field names from the trinamic specification. This makes the
field similar to all the other driver_XXX config options.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
sense_resistor is now a mandatory parameter for tmc2660 blocks. Duet2 users should use a value of 0.051
Signed-off-by: Florian Heilmann <Florian.Heilmann@gmx.net>
Don't immediately raise an error if the heating_gain check fails.
Instead, just transition to the normal max_error check. This should
make the code less likely to raise an error should the heater have a
slow approach to the target temperature.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Allow the first check_gain_time interval to only require a
heating_gain relative to the lowest observed temperature during that
interval. This makes the code less likely to raise a spurious error
when the heater is enabled while the heater temperature is dropping.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Don't reset the error counter if the reported temperature is
significantly above the target temperature. This may help catch cases
where the temperature sensor reports random values.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Using the Duet2 config as a base for your own config will no longer turn
on all heaters and fans at full power during the (almost inevitable) MCU
shutdown that will occur during initial Klipper setup.
Signed-off-by: Benoit Miller <github@benoitmiller.ca>
It's rare to use all of a target's prerequisites in a recipe - replace
most cases with $< (the target's first prerequisite).
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Commit e18501d0 broke the build for targets that added objects to
klipper.elf via adding dependencies. Rework the build so that it is
possible to add objects to klipper.elf via a new OBJS_klipper.elf
makefile variable.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Some of the samd21 chips have limited memory - change the code to
reduce the size of global variables.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Use a local linker script instead of the linker script provided by
Atmel. This will allow Klipper to use dynamic memory allocation.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Don't use the list of dependencies in the klipper.elf build. This
allows the arch makefiles to add separate dependencies to klipper.elf.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This implementation includes a BaseSensor class that all underlying sensor implementations should subclass.
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
Move the OctoPrint "stay connected" during error configuration step to
its own paragraph. Hopefully this will make it less likely that users
skip this step.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Support reading a "gcode_id" parameter from heater/sensor config
sections.
Signed-off-by: Douglas Hammond <wizhippo@gmail.com>
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Instead of directly turning off motors, heaters, and fans from
gcode.py, raise a new event and allow the heater, fan, and toolhead to
handle the event as needed.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Commit cf6c5e6f did not fix the shared heater case - a set_temp()
request takes the extruder id, not the heater id (nor the gcode sensor
id).
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The gcode.py code should not peek into the heater classes to obtain
the gcode_id. Instead, introduce a new get_gcode_sensors() so that
the gcode.py code does not need to.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
When setting a temperature, lookup the heater via
self.heaters.lookup_heater() and do not use the gcode ids. This fixes
temperature setting when multiple extruders share the same heater.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The 'bed_shape' option has been removed. The user will enter a 'bed_radius' if they have a round be, otherwise they should enter 'min_point' and 'max_point'. When the bed is round the user should supply a 'round_probe_count' option, otherwise just 'probe_count'.
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
Most samd boards have the crystal and it does improve the clock
accuracy, so default to enabling it.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add support for using the internal clocks (with USB clock recovery
mode if available) on the SAMD21. Don't use the internal clock if the
external crystal is requested (instead use the PLL synced to the
external 32Khz signal).
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add support for USB clock recovery mode if an external 32Khz crystal
is not in use. If using an external crystal, then don't use the
internal 48Mhz DFLL48Mhz clock (just use the PLLs synced to the
external 32Khz signal).
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The SAMD51 ADC is only clocked on rising edges (vs both rising and
falling edges on the SAMD21) and it has a greater minimum frequency
than the SAMD21. So, increase the ADC clock.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Use the field helper to simplify the bit manipulation in the driver.
This also enables the extended DUMP_TMC output.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Raise a printer.config_error() on an invalid register_command() call.
This error is easier to handle for the vast majority of callers.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Implementation of "PROBE_ACCURACY" to measure the maximum, minimum,
average and standard deviation of a probe.
Signed-off-by: Rui Caridade <rui.mcbc@gmail.com>
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The cpu is almost always 16Mhz and the serial port is almost always
UART0, so no need to prompt in the normal case.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Now that the internal DWT timer is used for software timers, there is
no need to clock the peripherals at a higher clock speed. Clock all
peripherals at 48Mhz and simplify the clock generation code.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Clearing the watchdog while it is in progress can cause bus stalls on
the SAMD21. It appears that clearing the watchdog on the SAMD51 can
cause lockups of the watchdog device.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
These two options don't provide any value and it is causing confustion
with some users. Remove the buttons.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Support added for filament diameter sensor. Sample configuration parameters added to example-extras.cfg.
Signed-off-by: Mustafa YILDIZ <mydiz@hotmail.com>
Adds the ability to register a custom/generic heater through a new extra called heater_generic.
This takes a gcode_id that is reported by M105. Adds a new command to set the temperature for any heater using the syntax:
SET_HEATER_TEMPERATURE HEATER=<heater_name> TARGET=<target_temp>
Signed-off-by: John Jardine <john@gprime.net>
Example config file for a stock 250mm build VORON2 printer that
matches the manual diagrams exactly for the controller layout and pins
used.
Signed-off-by: Ben Warren <boffdroid@gmail.com>
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Marlin examples use the "ATC Semitec 104GT-2" thermistor for the CR10,
CR10S, and CR10mini. Reported by @dovcharov.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
- When using absolute extrusion the gcode position e-axis position is now captured on PAUSE and restored in RESUME with a call to the G92 handler.
- Add a get_status() function that returns a dictionary with an 'is_paused' key.
- Do not allow consective calls to PAUSE or RESUME to exectue. Also do not allow a RESUME to executed without a previous PAUSE.
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
The sram matrix configuration is, bizarrely, configured with a slow
default. It will typically add an extra wait state to every memory
access. Set the matrix sram controller to improve the performance.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Avoid using the "low-level" library timing utilities. This is in
preparation for using SysTick as part of the timer implementation.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The ARM CortexM3 (and later) chips almost always have a 32bit timer in
the "Debug and Watch Trace" (DWT) unit which resides within the cpu
core itself. This timer is generally faster to access than timers
located on the chip's peripheral bus. When combined with the standard
ARM SysTick timer it provides a (generally) portable mechanism to
implement Klipper's software timer mechanism. It's generally also
faster than using the vendor specific timers.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Commit f4d323ad changed the handling of the self.speed variable, and
it inadvertently changed the default startup speed. Return to the
default of 25mm/s.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
In the normal case, a regular pin_up command should be sufficient to
raise the probe. (Should the regular pin_up fail, the code can issue
a "reset" command during the retry.)
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Commit c3efcd9c moved the config_spi setup to a build_config callback.
It's also necessary to move the config_thermocouple to a build_config
callback as well.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add helper function for reading current, microsteps, and stealthchop
settings from the config file. Use these helpers in both the tmc2130
and tmc2208 modules.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Move these helper functions to the FieldHelper class so that they can
be used by other Trinamic drivers.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Report values of TMC2208 register fields in DUMP_TMC command to help in
tuning and diagnostics.
This also adds functions to refer to register fields by name for TMC drivers
and register mappings for TMC2208.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Signed-off-by: Dmitry Frolov <dmitry.frolov@gmail.com>
Stopping the connect sequence can make it difficult to get the bltouch
out of an error state. Allow the connect to proceed, ideally if the
bltouch stays in an error state it will be detected during the first
probe attempt.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
I noticed Octoprint was disconnecting after a while, and after reading the logs, I came across this error:
```
Unhandled exception during run
Traceback (most recent call last):
File "/home/pi/klipper/klippy/klippy.py", line 171, in run
self.reactor.run()
File "/home/pi/klipper/klippy/reactor.py", line 176, in run
g_next.switch()
File "/home/pi/klipper/klippy/reactor.py", line 203, in _dispatch_loop
timeout = self._check_timers(eventtime)
File "/home/pi/klipper/klippy/reactor.py", line 82, in _check_timers
t.waketime = t.callback(eventtime)
File "/home/pi/klipper/klippy/extras/idle_timeout.py", line 62, in timeout_handler
return self.check_idle_timeout(eventtime)
File "/home/pi/klipper/klippy/extras/idle_timeout.py", line 59, in check_idle_timeout
return self.transition_idle_state(eventtime)
File "/home/pi/klipper/klippy/extras/idle_timeout.py", line 35, in transition_idle_state
logging.exception("idle timeout gcode execution")
NameError: global name 'logging' is not defined
```
I therefore added the missing import.
Signed-off-by: Samori Gorse <samori.gorse+github@gmail.com>
Add updates to example-extras.cfg and G-Codes.md documenting pause_resume. Also add M600 (filament change) to sample-macros.cfg.
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
This module adds PAUSE and RESUME gcodes that can programatically determine if the gcode is printing from virtual sd or over the serial connection. It also captures the current toolhead position and gcode feedrate on pause, and recovers that position and feedrate on resume.
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
- Add is_active() member function to return the active printing status of the virtual sdcard
- M27 now reports current file position when file has been opened. See http://marlinfw.org/docs/gcode/M027.html
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
Move the definition of SERIAL_BAUD to the main src/Kconfig file. Only
show this as an option if the user selects the ability to configure
low-level options.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add support for performing linear interpolation between a set of
measured temperature/resistance pairs.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Move the low-level PrinterADCtoTemperature() class from thermistor.py
to adc_temperature.py and use it from the Linear() class.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
We want the duration of each command to be an exact multiple of
SIGNAL_PERIOD. The durations might not be exact if the bltouch is on
a secondary mcu. Account for this in send_cmd().
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Rework the undocumented test_sensor_pin config option into a
pin_up_touch_mode_reports_triggered option and document it.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Query the bltouch state during the pin_up command to try and verify
that the probe does actually retract. This may be useful to detect if
the bltouch enters into an "error" state.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The BLTouch is more accurate when probing in "pin_down" mode than
"touch_mode" (at least on some hardware). Rework the code to use that
mode.
When probing in pin_down mode, the BLTouch can go into an error state
if a pin_up is not sent immediately after a touch signal. Rework the
pin_up code to reduce the time it takes to transmit the command.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Introduce a sync_print_time() method and update send_cmd() to track
the duration of bltouch commands.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Verify that there is always some movement during a probing operation.
This is normally done by the homing.py code (via its verify_movement
check), but that check may not be enabled when z_virtual_endstop is
used. So, always enable the check in the bltouch.py code.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Separate the thermistor math from the heater temperature callback
system. This may make it easier for debugging.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The lpc176x ADC is extremely noisy. Implement a 5 order median filter
on each ADC read to weed out obviously incorrect readings.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Order the adc config code so that a shutdown from gpio_adc_setup()
doesn't result in analog_in_shutdown() running on a 'struct analog_in'
that hasn't yet been configured.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Only update the status message with the first error report.
Subsequent errors are often the result of the first error and
reporting the last error can be misleading.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Make sure to explicitly cast to 32bit integers when doing math on
16bit integers that require the extra precision as the AVR uses a
16bit int.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Make sure to not query the given endstop until after the start of the
requested operation. This ensures that the operation has started
prior to querying the status of that operation.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Make sure the endstop checking is started prior to any movement. This
helps ensure the verify_movement check is accurate.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Whenever a stepper driver or a heater becomes active, it is desirable to turn on a fan cooling the associated parts on the controller board. This module implements such a fan that turns on whenever a stepper or specified heater turns on, decelerates to a configurable speed when all of the watched parts turn off, and returns to an off-speed, when a user-defined timeout is met.
Signed-off-by: Nils Friedchen <Nils.Friedchen@googlemail.com>
This is my current config file for Fysect F6 + TMC2208 running on my
Ender 3 with stock creality display.
Signed-off-by: Simone Bonacini <bonacini.simone@gmail.com>
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Convert all users of the printer_state("connect") handler to register
a "klippy:connect" event handler instead.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Convert all users of the printer_state("ready") handler to register a
"klippy:ready" event handler instead.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Convert all users of the printer_state("disconnect") handler to
register a "klippy:disconnect" event handler instead.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Convert all users of the printer_state("shutdown") handler to register
a "klippy:shutdown" event handler instead.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
- changes that make easier to use menu as module UI
- new helper method for delayed callbacks
- method for getting the menu instance from display
- new action for sending menu:action events
- allow_without_selection option for cards
Signed-off-by: Janar Sööt <janar.soot@gmail.com>
- long press with timer (button release is not needed anymore)
- initial support for edit mode long press gcode
Signed-off-by: Janar Sööt <janar.soot@gmail.com>
The sam3 i2c code and the linux code use a 7-bit i2c address, while
the avr, lpc176x, and samd21 i2c code uses an 8-bit address with the
least significant bit always zero. A similar issue occurred in the
host code (sx1509.py and replicape.py use 7-bit addresses while
uc1701.py and mcp4451.py use 8-bit addresses).
Consistently use 7-bit addresses in all the code. This breaks
compatibility between host and mcu software, so make a change to the
config_i2c command to force users to synchronize software updates.
This also breaks common Smoothieboard configs, so update the mcp4451
code to validate the i2c_address.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Most of the peripherals on the sam4e8e are similar to the ones on the
sam3x8e mcu. Merge the code together and use just one code directory.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Remove the 'pin' and 'afec' variables from 'struct gpio_adc'. This is
in preparation to merge the sam3x8e and sam4e8e code.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Use internal.h in a similar way to the internal.h in sam3x8e. Also,
move the twi pin definitions from internal.h to i2c.c (as they are only
used there).
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
These two files from atmel have different licenses than the other
files. Neither files provide any real value, so just remove them to
avoid any confusion.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
As discussed in #1057, the default loading- and unloading procedure does
not behave as expected. Setting the extruder to relative mode fixes this.
Signed-off-by: Nils Friedchen <Nils.Friedchen@googlemail.com>
Add note that `under power` may be related to communication issues.
Signed-off-by: Wilfried Goesgens <dothebart@citadel.org>
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add documentation on howto configure the BL-Touch device with
Klipper. A second paragraph addresses possible issues with BL-Touches
Signed-off-by: Wilfried Goesgens <dothebart@citadel.org>
If an SPI device is shared among many devices, then all the device's
CS pins should be set high prior to setting up the clk pin.
(Otherwise, there's a chance a device could interpret the clk pin
setup as part of a transmission.)
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Limit speed and acceleration of extrude only moves to just the
max_extrude_only_velocity and max_extrude_only_accel config settings.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
If a requested value is higher than the configured maximum, then just
limit the value to the configured maximum instead of raising an error.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Pass the gpio id instead of the bank/pin to gpio_peripheral(). This
is in keeping with other ARM ports.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
I have made one change to `gcode.py` to support quoted parameter
values.
I have added support for the basic `M118` command (see
https://reprap.org/wiki/G-code#M118:_Echo_message_on_host). I have
also added a `RESPOND` command that takes extended parameters.
`ECHO` might be a better name than `RESPOND` but is already defined
in `gcode.py`.
Signed-off-by: Alec B. Plumb <alec@etherwalker.com>
Allow an arbitrary gcode_id to be supplied during heater setup. This allows future extras to register additional IDs beyond B, and T#.
Signed-off-by: John Jardine <john@gprime.net>
This makes M220 (change print speed) command effect the next move command (G0/G1).
Before it only made a differenc once a G0/G1 command with an F parameter was executed.
Signed-off-by: Pontus Borg <liquidpontus@yahoo.se>
There is concern that the bltouch.py module may not perform adequately
on some bltouch "clones". Document that.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
It appears some bltouch "clones" do not report the probe as triggered
when put in "touch mode" while the pin is raised. Add a config option
to allow users to disable the test.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Some of the bltouch implementations may only respond to a probe event
with a 5ms pulse. Make sure to check the signal pin at least every
millisecond to ensure no signal is lost.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Added options necessary for basic extruder calibration expected of a new install. Fixed bed size to correct 235x235. Removed 0.5 position_endstop setting as this crashes hot end into the bed on stock Ender 3's.
Signed-off-by: Troy nadeau <troyboy162@hotmail.com>
Update documentation about the fade options. Also inform the user that it is recommended to home toward the center of the print area when using a probe for z homing.
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
To deal potential z scaling when fade is enabled, a fade_target option has been introduced. This option may either be set to 0.0 or any z position within the range of the mesh. A value of 0.0 will result in previous behavior, where z adjustment phases out until no further adjustment is added. A non-zero value will phase out adjustment until the target has been reached, after which the rest of the print will be offset along the z axis by the fade_target. By default the fade_target will be calculated as an average of the mesh.
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
Due to various potential issues with fading out z-adjustment, it is better to disable by default and allow users to opt-in.
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
The example configuration information is more useful for general probe
as z_endstop than as a bltouch example.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add a self.all_framebuffers variable and change self.vram to only
contain the new display data. This allows the main code to access the
self.vram member variable without the need to index for current/old
data. (It also updates the code to match the latest st7920 and
hd44780 code.)
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Scale the bus speed within the peripheral instead of on the system bus
as scaling on the system bus slows down general register access to the
peripheral.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Simultaneously define the hardware pin and the timer registers. This
makes the table a little easier to understand.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Increase the amount of time to "busy wait" in the timer dispatch loop
to 2 micro-seconds. This, in practice, causes stepper step and unstep
events to occur within a single hardware interrupt. Doing that helps
stabilize the single active stepper performance benchmarks.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Cheap mechanical servos have small flickering. When this servo stay on one position, this flickering slowly destroy internal potentiometer and make servo unusable. Many mechanisms need servo only to change position. Therefore I create this minor path to enable/disable servo. It stop pulses for this servo, that's all.
Corresponding G-code is:
SET_SERVO SERVO=config_name [WIDTH=] [ENABLE=<0|1>]
SET_SERVO SERVO=config_name [ANGLE=] [ENABLE=<0|1>]
For example:
SET_SERVO SERVO=touch ANGLE=80 ENABLE=1 ; enable servo and set position
G4 P200 ; wait 200ms
SET_SERVO SERVO=touch ENABLE=0 ; disable servo
This patch add one option to servo configuration:
enable: <False/True> # default True
It not have impact to user code existing already because it is optional parameter and default value is same as original behavior.
Signed-off-by: Jiri Dobry <jdobry@centrum.cz>
This adds a generic duet config with quad-z and quad extruders which also tests TMC2660 and SX1509 extras
Signed-off-by: Florian Heilmann <Florian.Heilmann@gmx.net>
This allows SX1509 pins to be used as temperature fans and heater fans. Heaters are still disallowed.
Signed-off-by: Florian Heilmann <Florian.Heilmann@gmx.net>
The atmega328p is basically the same as the atmega328 - add explicit
support for it so that avrdude doesn't complain while flashing.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Update the process_batch() method so that it will not interleave
commands read from the input fd with the batched commands.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Commit 459e5219 added a special case to the boundary checks to permit
homing moves. In some cases, the second home retract could also be
outside the normal boundary checks - extend the special case to also
permit that move.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The gitdir previously could be absent and produce a version of "" in
spite of checks for it. Fixed.
Parent directories with shlex-interpreted characters in their names
could be misinterpreted. Removed shlex parsing.
Packagers may want to remove the git history to slim down the package
size, so add an option for using a file 'version' in the klippy
directory to set version without using git.
Signed-Off-By: Lucas Fink <software@lfcode.ca>
Some users increase max_extrude_cross_section to avoid issues with
some slicers. However, increasing that value also increases the
defaults for the max_extrude_only parameters which is not obvious.
Base the max_extrude_only defaults only on the configured nozzle
diameter.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Setting the square corner velocity to zero would cause stuttering
during the test if a bed mesh is in effect. It's possible to get the
desired effect by reducing the square corner velocity and setting the
pressure advance lookahead time instead.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Sometime bossac reports an error during chip restart. It appears this
error is spurious - just suppress it.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Scaling the timer on the system bus has a notable impact on
performance. So, scale the timer within the timer hardware itself.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The Trinamic stepper motor drivers are capable of reporting the
stepper phase - add support for using that capability to the
enddstop_phases module.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Configuration for ADIMLab printer. tested and working including LCD support.
This printer was previously known as the HCmaker7
Signed-off-by: Jason Rahaim <jason@jasonr.com>
The Python 2.x ConfigParser doesn't support stripping of trailing '#'
style comments. Do that manually before parsing the config.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Only clear the internal sync_print_time flag if the code performs a
regular "lazy" flush of the look-ahead queue. This helps build the
look-ahead queue even when running internal scripts.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Now that "Klipper state" messages are proactively sent, it is
redundant to send the "preparing to restart" message.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
It appears the sam3x8e has a primitive cache prefetch mechanism (it
prefetches 32 bytes at a time aligned to a 16 byte boundary).
Aligning the main loop in timer_dispatch_many() to a 16 byte boundary
significantly improves performance.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
If sched_try_shutdown() is not inlined into timer_dispatch_many() it
can have a significant impact on benchmarks. (Even though the
function isn't called in practice, the call causes gcc to organize the
function differently.)
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Some older versions of gcc need the __always_inline directive in order
to inline timer_read_time. Inlining that function is important for
performance on the stm32f1.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
As long as timer_read_time() is inlined, I get better performance with
gcc -O2 optimization. The binary is also dramatically smaller and O2
better matches the other platforms.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
It's possible for the code to stay in the timer irq for up to 100ms,
so serial irqs should have a higher irq priority to prevent them from
being starved. (The timer code disables irqs during event dispatch,
so serial irqs would only be permitted between events anyway.)
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
When a delta printer has different arm lengths or different endstop
positions then the homing position falls outside of the normal
printable area. Add a special check to the range checking code to
permit this move instead of homing to a position near the actual
homing position.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Move the logic for performing the second home from the kinematics
classes to the generic homing code.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Commit b0d859f2 introduced a second_homing_speed parameter, and it
also changed the retract speed. Revert the retract speed change (use
homing_speed when the head retracts).
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Commit b0d859f2 introduced a second_homing_speed parameter; that
parameter needs to also be constrained to the max_z_velocity.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Use the xor capability of the display to animate the glyphs, which
reduces the number of glyphs needed from 4 to 2. This should make it
easier to add future animations if desired.
Suggested by @marcio-ao.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The comment for the algorithm setting had a spelling error, it said:
[...]May be either "langrange"[...]
Removed the n.
Signed-off-by: Victor Lazaro <lazarofilm@gmail.com>
The usb_cdc code will arrange to call usb_read_ep0_setup() after a
shutdown, so no need to have an explicit shutdown handler.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Call usb_read_bulk_out() before calling command_find_and_dispatch() as
this optimizes the common case where each usb packet contains a single
new message block.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The max_accel_to_decel variable must not be greater than the max_accel
variable. Make sure to check this when M204 changes max_accel.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Don't require (or permit) the user to specify a stepper_z
position_endstop when using the probe:z_virtual_offset mechanism. In
that case the position_endstop should always equal the probe's
z_offset - so no need to have the user specify it.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Remove the code to calculate and track the z_offset via
position_endstop updates. It's simpler to always save and restore the
calculated z_adjust.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Don't require the config file to specify manual probing. Instead,
allow the user to select manual probing on each ProbePointsHelper
invocation.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Now that all the callers of ProbePointsHelper take a cartesian
coordinate for the probe locations, it's possible to perform averaging
of multi-sample probes within the class. This simplifies the callers.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Only call cmd_NEXT() for manual probing. This simplifies the code as
the automatic probing and manual probing have slightly different
probing mechanisms.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Now that all users of ProbePointsHelper use the same
get_probed_position() code, it is possible to implement that locally
within the ProbePointsHelper class.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
It's possible (and a little simpler) to use cartesian coordinates when
calculating a stable position.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Recent code additions have increased the stack usage and it is no
longer clear that everything will fit in 128 bytes. Increase all
targets to 256 bytes (the atmega2560 was already at 256 bytes).
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Fix travis-ci build failure by forcing the data field of the struct
usb_string_descriptor to be the same type as a 16bit unicode string.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Use new usb_read_ep0_setup() function when reading a setup packet -
this allows the low-level usb hardware code to better handle errors.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
A zero length packet should only be sent at the end of a transmission
if the host is expecting more data.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Maintain the state tracking code entirely within a usb_do_xfer()
method. This simplifies the callers.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Use "ep0" when referring to endpoint0 - don't use "setup" as that can
be confused with the low-level usb setup token.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Configure the tmc2208 during the 'connect' phase so that a problem
during configuration is properly raised as a config error. Catch
errors during DUMP_TMC and raise them as g-code errors.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Don't log a heater verification error if that error is due to the
printer being shutdown for some other reason. Those spurious error
reports can be confusing.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Move the quad_gantry_level description closer to z_tilt section. Move
the force_move section closer to the homing_override section.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
No need to report an error if the M73 is not between 0 and 100 - just
display the nearest valid value.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Support using SAVE_CONFIG to store the results of DELTA_CALIBRATE to
the printer config file. Store the low level probe measurements in
the config as well.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Move the "stable position" logic from the delta.py kinematics code to
the delta_calibrate.py calibration code.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add support for writing back the main printer config file with
additional calibration data stored in it.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add write_glyph() support to hd44780.py. Update uc1701.py and
st7920.py to support writing single character glyphs via
write_glyph().
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Move the st7920 icon rendering optimizations from display.py to
st7920.py. This simplifies the code for other displays.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
It isn't necessary to use the st7920's xor capabilities when drawing
the bed heating animations. This makes it easier to use the icons for
other displays.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add a command that will turn off all heaters in the printer. Run this
command in the default idle_timeout action.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
If an arm is nearly parallel to the bed then that tower's carriage may
have a velocity up to 3 times greater than the toolhead's maximum
velocity (relative to the print). Take that into account when
calculating the stepper's maximum halt velocity.
This fixes some rare "No next step" shutdowns on delta printers.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Commit 4573932f allowed move.end_pos to differ from the requested end
position - the toolhead class should use the updated position when
storing its commanded position.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
It's possible that a g-code transform class may make an extrude only
move appear as a kinematic move due to limitations of double precision
math. Handle this by checking for an inconsequential move distance
instead of checking for a move distance of exactly zero.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Update the document to recommend tuning with decreased acceleration
and with square_corner_velocity disabled. Using this approach makes it
possible to test with significantly higher pressure advance values.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Log the details of the MCU prior to attempting to configure the MCU.
This way, the log contains the MCU information even if a configuration
error occurs.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Change the name of the config registration method and pass an explicit
reference to the callback to the new method. This makes the
relationship between mcu registration and build_config() more clear in
the calling code.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The gcode.run_script() code can pause which can result in the menu
code being called reentrant - avoid that by queuing the gcode commands
within the menu code.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Call lift-z prior to the first move. This prevents the nozzle from hitting the build surface in situations that home the nozzle off and below the bed.
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
Rework the code to use set_register() with the string name of the
desired register to set. Add a get_register() method.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The atmega168 doesn't have enough flash space to fit all features -
disable the "bit banging" interfaces to make room.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Now that there is a local copy of bossac in the lib directory, there's
no reason to require a system version of it.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The bank_id was calculated erroneously. Also unify gpio_in_setup and gpio_out_setup a bit. Also disable make flash for the sam4e8e port as it currently references a version of bossac that is not present on all systems.
Signed-off-by: Florian Heilmann <Florian.Heilmann@gmx.net>
Resolves issue where M117 is not correctly executed when the message begins with numeric or special character.
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
Only check the probe's z_offset against the stepper_z endstop position if the probe is used as a virtual endstop.
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
This can be flashed to e.g. the duet wifi using bossac. It requires a
later version as is currently included in the klipper repo (1.8
vs. 1.2). Comms are currently via UART0 only, USB serial is still TBD
Signed-off-by: Florian Heilmann <Florian.Heilmann@gmx.net>
It's common for boards to have restrictions on the type of each
endpoint. So, make it possible for the board to select the endpoint
ids for each endpoint.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
No need to include separate cmsis files from the mbed project - the
standard CMSIS_5 files work fine.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Update the sam3x8e port use the most recent SAM3X CMSIS files from
Atmel. The Atmel files appear to have a more consistent license and
it is unclear if there were Arduino specific changes in the CMSIS
files obtained from the Arduino repo.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Dockerfile: Add a basic reference Dockerfile
This is a sample of how to get Klipper running in Docker, because of the
virtual serial port, the user will have to modify things to include
something to send the GCode. I have included a link to my repo which has
OctoPrint up and running as an example.
Signed-off-by: Trent Davis <tgh@sillyfrog.com>
Periodically check if other events need to run - this prevents the
virtual_sdcard processing from starving other events.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The Todo.md file has gotten stale, and it is no longer an effective
mechanism for tracking changes. Remove it.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add initial support for commands that will forcibly move a stepper
(without updating the kinematic classes with the new position).
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Don't pass pin_type to lookup_pin() - instead, if a pin can be
inverted or can have a pullup, then the caller must explicitly specify
that when calling lookup_pin(). This simplifies the code for the
cases where it is not valid to invert or pullup.
Explicitly pass the pin_type to setup_pin() and have ppins.setup_pin()
apply default pullup and invert flags.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Send the temperature before checking for an out of range error (that
makes it easier to debug).
The query_thermocouple clock parameter is unpredictable and a value of
zero can't be used to disable the query - use rest_ticks instead.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Make sure to use is_init=True when sending query_thermocouple -
otherwise, the config CRC is likely to mismatch on every connection.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Raising an error from the background message reception thread isn't
well defined. Instead, on a temperature fault, invoke a printer
shutdown.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Those chips that require an spi init sequence can generate the message
directly in the chip specific class.
Also, don't send an spi init message for chips that are read-only.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The MAX6675 chip has a different read sequence than the MAX31855 chip.
Signed-off-by: Ricardo Amézquita <ramezquitao@cihologramas.com>
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Move the "motor_off_timeout" tracking to a new module in the extras/
directory. This makes it easier to customize the idle timeout
behavior.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The junction_deviation configuration parameter has a number of quirks
that make it difficult to configure. Replace it with a
"square_corner_velocity" configuration parameter.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
It's rare to have all the Z stepper locations directly under the
printable surface, so using z_positions for points is not a good
default.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Allocate the stepper_kinematics directly in mcu.py - that way the
kinematic classes don't have to interact with the chelper code.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Move extruder.py, cartesian.py, corexy.py, and delta.py to a new
kinematics/ sub-directory. This is intended to make adding new
kinematics a little easier.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Don't issue a get_config command after building the config as the
built config may contain time sensitive initialization commands.
Instead, send the config and init commands immediately after invoking
the build_config() callbacks. This avoids some rare "timer too close"
errors during configuration.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Change the simulator to use the generic timer_irq.c and serial_irq.c
code for (dummy) timer and io handling. This is just to make the code
a better example for other developers (most micro-controllers will use
the timer_irq.c and serial_irq.c code).
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Added printer-tronxy-x8-2018.cfg for the Tronxy X8 with the CXY-V2-0508 board.
Signed-off-by: Seyed Seraj <s.seraj@hotmail.com>
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Switch the host code from the CLOCK_MONOTONIC clock to the Linux
specific CLOCK_MONOTONIC_RAW clock. It's common for ntp to slew the
CLOCK_MONOTONIC clock to account for drift, and that can break the
host's ability to make accurate predictions of the micro-controller
clock. This could lead to "move queue empty" errors. The
CLOCK_MONOTONIC_RAW clock is not slewed and thus should not have this
problem.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add M117 and M73 to the list of supported G-Codes.
Also, remove M117 from the list of commands reported by the HELP
command as that command is typically only used to list "extended
g-code" commands.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
No need to include all the test preparation in the verbose output - as
that can make the output more confusing.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The SPI interface needs to be enabled and configured to the correct
settings of a given oid before CS is asserted. The new function
spi_prepare() allows ports to do that.
This port only introduces the new function in all ports with no
implementation and adds the call to the Klipper generic firmware code.
That means everything still works as before. Ports need to be changed
to fix the underlying issue.
Discussion about the motivation here:
https://github.com/KevinOConnor/klipper/pull/453#issuecomment-403131149
Signed-off-by: Grigori Goronzy <greg@chown.ath.cx>
Add basic SPI support and associated documentation.
v2: remove baud rate check, fix baud rate calculations
v3: finish transaction with BSY check, disable SPI when not in use
Signed-off-by: Grigori Goronzy <greg@chown.ath.cx>
Add generic temperature smoothing to the Heater class. This is useful
to avoid min_extrude_temp and verify_heater errors due to measurement
noise.
Rename the pid_deriv_time config option to smooth_time so that the
smoothing amount need only be specified once.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Extend the ADC out of range check so that it is possible to sample
multiple times before going into a shutdown state. This reduces the
chance that measurement noise will cause an error. In an actual over
temperature (or under temperature event) it is expected that the
sensor will consistently report the problem, so extra checks for an
additional second or two should not substantially increase risk.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add mcu support for periodically polling for a button press. Add host
code support for registering buttons and invoking callbacks for them.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add the ability to register callbacks - both asynchronous (ie, from
another thread) and synchronous.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add an ability to run a series of g-code commands from a reactor
callback that isn't part of the normal g-code command processing.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Font from fntcol16.zip package:
ftp://ftp.simtel.net/pub/simtelnet/msdos/screen/fntcol16.zip
(c) Joseph Gil
Font is public domain
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
For some reason, the upper two pin definitions were missing. Found while
writing the port documentation.
Signed-off-by: Grigori Goronzy <greg@chown.ath.cx>
Update the target temperature during the pid calibration. This gives
additional feedback to the user and it makes it less likely that a
verify_heater error will be raised during calibration.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Move the display code into its own directory. This is in preparation
for splitting it up into its own modules.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
When M117 is followed by an empty string, the display will reset to
Klipper's default.
Internal modules may look up the display and directly call
set_message(), with a timeout if desired.
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
- Add M73 support for HD44780
- Include HD44780 USB and SD glyphs to differentiate progress type
- Fix bug that prevented M73 from updated when virtual_sd is enabled
- Add 5 second timeout to reset display when not Printing
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
Add a command that can immediately set the value of a digital output
pin created with config_digital_out.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The AVR requires that the SS pin be an output pin for correct SPI
operation. Some boards use the SS pin to control devices separate
from SPI, however. Don't change the output level if the pin is
already an output, and prefer setting it low if it is not already an
output pin.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The PRU code size has grown too close to the maximum - remove the ADC
code to reduce its overall size. (On the beaglebone, the Linux
process can, and typically does, do the ADC reading.)
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
It appears the st7920 requires a longer delay when switching from
command to data mode (and vice-versa). Slower MCUs don't show a
problem because the klipper command processing time results in a
sufficient delay. However, some of the faster MCUs can process
klipper commands fast enough that the next st7920 transfer is sent too
fast. Add an additional delay to account for this.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The different uses of get_position() can be confusing, so choose a
different name for the ProbePointsHelper callback.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Move the trilateration algorithm to mathutil.py. It may be useful
outside of delta kinematics, and it complicates the delta code.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add support for an itersolve_set_position() function that sets a
stepper position from a cartesian coordinate. This eliminates the
need for both the python and C code to be able to translate from a
cartesian coordinate to a stepper position.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Calculating the cartesian position from the stepper positions can be
complex and cpu intensive, so rename it to calc_position() to be more
descriptive.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
After a probe operation, homing_move() will already have recalculated
the toolhead position. The get_position() method can be slow, so use
the already calculated position.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Update the code to use the term "rail" when dealing with a motor
controlled "axis". A rail has a series of steppers and endstops that
control that motor controlled "axis".
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add additional wrapper functions so that no outside callers need to
peak into the member variables of PrinterStepper.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
All the kinematic code now uses the iterative solver to generate
steps. Remove the old stepcompress_push_const() mechanism.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Use the -fwhole-program option when compiling the host C code. This
makes it easier to support inlining across C files.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The purpose of this PR is to add an installation script to klipper for use on Centos. Several packages names are different from debian based installs, and the system service is handled via systemd rather than LSB.
Signed-off-by: Alan Weinstock <pyroballpcs@gmail.com>
Add virtualenv, build-essential, gcc-arm-none-eabi, and
binutils-arm-none-eabi packages - just in case they aren't already
installed. Reported by @AxMod3DPrint.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This change will make the "PROBE" command actually reply with the
z-position where the probe triggers. As this command is called
internally for the BED_TILT_CALIBRATE and Z_TILT_ADJUST those commands
will also give a response while probing, which I see as advantage over
the silent operation.
This change also lets one define some gcode for a repeatable probing
test to meassure the quality of the sensor and overall probing accuracy.
Signed-off-by: Hans Raaf <hr-klipper@oderwat.de>
Added a config parameter to define the homing override axes. This way
one can still home x and y axis without the z-probe cycle coming in the
way.
Signed-off-by: Hans Raaf <hr-klipper@oderwat.de>
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The python-dev package is usually already installed, but there's no
harm in stating it explicitly. Reported by @yschroeder.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Disable the verify_heater checks when debugging, as otherwise it can
cause failures when processing files in batch mode.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The printer uses the TriGorilla board which is an
AVR ATmega2560 Arduino + RAMPS compatible board.
The diplay is a RepRapDiscount Smart Controller 2004 compatible one.
Signed-off-by: Peter Ruevski <dpr@ruevs.com>
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add config/kit-voron2-2018.cfg - a sample configuration file for the
Voron2 printer. Based on config file from "Maglin".
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
When using multiple micro-controllers it may be necessary to use an id
from /dev/serial/by-path/ instead of /dev/serial/by-id/. Also,
emphasize that in config/example-multi-mcu.cfg.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
In some rare circumstances it was possible for the host software to
become so busy that it does not transmit a get_clock request for
several seconds. (In particular, this could occur with some complex
calls to coordinate_descent.) If that happened, it was possible for
the code to incorrectly report a "Timeout with MCU" error. Rework the
is_active() check to prevent that.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Apply the changes made by a SET_GCODE_OFFSET command to the next move,
even if the move is relative to the last movement. This allows the
command to implement "babystepping" requests.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Change the get_status command to get_clock. Don't report the shutdown
status in the new get_clock command.
The primary purpose of this change is to force the host code to report
a firmware version mismatch with older firmwares as recent changes
(namely the ordering of message block acks) have subtle
incompatibilities if different host/mcu code is used.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Normally, the MCU is restarted on a config change. However, that
should not be done automatically if the MCU is in a shutdown state.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
If the mcu is using a traditional serial port, then only send a new
message block if there is space available in the mcu receive buffer.
This should make it significantly less likely that high load on the
mcu will result in retransmits.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Send the ack after processing commands - this gives the host code more
information on serial buffer utilization.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Prefer using 'uint8_t' buffers as it is too easy to run into C sign
extension problems with 'char' buffers. Prefer using 'uint_fast8_t'
for buffer lengths as gcc does a better job compiling them on 32bit
mcus.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
If a section name had mixed case it would cause an incorrect error
during the section/option config checking.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add the ability to add a custom g-code command that in turn executes
one or more configured g-code commands.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
- Changed max positions
- Tuned PIDs for my stock Ender 3 heaters (using 200/50)
- Added the serial device as 'by-id'. Not sure if that is working as I
expect it :)
- I did set the position endstop to 0.5 .. Not sure if people like that.
Signed-off-by: Hans Raaf <hr-klipper@oderwat.de>
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The recommended TOFF time in "standalone mode" according to the
tmc2130 is 4, so use that as the default.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The extrude_factor and extruder position are specific to the current
extruder, so reset them to default values on a Tn command.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Use the new gcode.register_mux_command() so that SET_PRESSURE_ADVANCE
works correctly with multiple extruders.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
It's common to add commands that dispatch to a particular object
instance depending on the value of a command parameter. (For example,
the command "SET_SERVO SERVO=xyz" wants to be handled by the
particular "xyz" servo instance.) Add a register_mux_command() helper
to gcode.py make it easier to do this.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Move the common config reading and probe object lookup from the
bed_tilt.py and delta_calibrate.py code into the ProbePointsHelper
class.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Raise an error during config parsing if the position_endstop is not
between the position_min and position_max. This avoids a confusing
error message during homing.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The cr10 mini is the same as the cr10, but with different Y and Z
dimensions. Reported by @cassianoleal.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
For some reason, Linux creates the pseudo tty with group writable
permissions, but not group readable. Use chmod to allow the device to
also be group readable.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The gpio_out_toggle() function in the sam3x8e and stm32f1 code was
only valid if it was called with irqs disabled.
Commits 018c5daa and 9c52ad43 enabled the lcd code which called
gpio_out_toggle() with irqs enabled. This could cause corruption of
the gpio state.
Introduce a gpio_out_toggle_noirq() function that will only be invoked
with irqs disabled, and fix gpio_out_toggle() on sam3x8e and stm32f1
so that it safe to call even if irqs are enabled.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The step speed rounding and the cpu delay must be run after running
the endstop specific preparation code. Otherwise, a delay in the
home_prepare() code could undo those calculations. Specifically, this
could lead to errors on a multi-mcu setup when the Z is homed using a
virtual_z_offset and there is a delay in the activate_gcode section.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Don't return early on a command error - continue to process remaining
commands and pop commands from the queue.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Use the generic spi send/receive code on Linux. Update the replicape
code to use the updated command format.
Also, update the replicape code to turn off the stepper motors on a
shutdown event.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Improve the SPI message transmit system. Add support for bus speed
and bus mode. Add support for sending SPI messages on shutdown.
Signed-off-by: Petri Honkala <cruwaller@gmail.com>
Signed-off-by: Douglas Hammond <wizhippo@gmail.com>
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
In order to properly delay BACKGROUND_PRIORITY_CLOCK messages, they
must be 5ms beyond the minimum defined by MIN_REQTIME_DELTA. So, add
both MIN_REQTIME_DELTA and MIN_BACKGROUND_DELTA to the timing of these
messages.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
If the clock querying messages occur at a similar frequency to other
events on the micro-controller or host, then it's possible for the
load created by those other events to skew the clock synchronization.
In particular, the 500ms lcd screen update could resonate with the 1
second clock query. Use an unusual clock querying frequency to avoid
this issue.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Move the C code out of the main klippy/ directory and into its own
directory. This reduces the clutter in the main klippy directory.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The AVR chips (bizarrely) start an ADC conversion when entering Idle
mode. This behavior can cause the ADC to be busy when a sample is
required. Worse, if a series of events cause the cpu to enter and
leave Idle mode with a timing similar to the ADC checking rate then it
can cause the ADC to show as busy for extended periods. This could
cause high MCU load and possibly lead to a "Rescheduled timer in the
past" shutdown.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Don't logically or the ADSC bit on the start of a conversion -
explicitly set the full contents of the register. Also, clear the
ADIF flag on each write.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Define unique register aliases for all of the hardware serial port
definitions. This makes it easier to deal with the AVR chips that use
different register names.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add a set_shutdown_speed() method so that the heater_fan code does not
need to peek into the fan object's internal members.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The M206 command is confusing (it uses negative offsets) and isn't
very flexible. Add a new SET_GCODE_OFFSET command to make it easier
to add virtual offsets to gcode commands.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The M206 command is confusing as positive values in that command
result in negative offsets to future g-code commands. Perform the
parameter negation in the M206 command instead of storing it that way
internally.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
When using an automatic probe, limit the Z lift speed to be no greater
than the Z probing speed. This can reduce Z jerks during probing.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
If the fan's max power is limited by the config, then scale speed
requests between 0 and max_power. This makes more sense for typical
g-code fan speeds.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
If max_accel_to_decel is greater than max_accel in the config, then
just internally limit max_accel_to_decel to max_accel. This makes it
easier to completely disable the max_accel_to_decel feature (as it can
just be set to a high value in the config).
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Extract out common code from avr/serial.c, sam3x8e/serial.c, and
stm32f1/serial.c into a new generic/serial_irq.c file.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
With the optimized timer_read_time() it is no longer necessary to
implement custom timer dispatch code - use the generic mechanism in
timer_irq.c. This simplifies the code and provides a small
performance increase.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Implement 32bit timer conversion without disabling interrupts. This
uses the 16th bit of timer_high as a rollover detection flag.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Commit e3f9ff67 changed the probe code to require a z_offset parameter
- update the config/sample-bltouch.cfg file with the new parameters.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add a fully functional STM32F1 port, currently mostly targeting STM32F103
microcontrollers. This requires an 8 MHz XTAL. The maximum possible step rate
is around 282K steps per second.
This uses stm32flash to burn the firmware. The bootloader needs to be started
by setting BOOT0 to 1 and resetting the MCU. There is no automatic bootloader,
unlike on Arduino.
Signed-off-by: Grigori Goronzy <greg@kinoho.net>
Instead of supporting a single linear range for the temperature
lookup, allow multiple ranges to be defined. This makes the lookup
more accurate when a full lookup table is available.
Update the AD595 sensor to use the full table defined in its spec.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
If the c3 coefficient is negative it can cause the adc calculations to
fail. The c3 shouldn't be negative in practice, so fallback to a
simple beta calculation in that case.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Move the Thermistor code to a new thermistor.py module. Move the
Linear code to a new adc_temperature.py module. This simplifies the
heater.py code.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The Thermistor (and Linear) class should handle all the details of
reading the ADC values and converting them to temperatures. So, move
that logic out of the Heater() class.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add a PrinterHeaters class that can stores references to available
temperature sensors and stores references to instantiated heaters.
Add a extras/heater_bed.py file and delay instantiation of the
heater_bed object. This allows the heater.py module to be imported
earlier during the setup phase, and allows the PrinterHeaters class to
be available for registering sensors and heaters.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Most callers did a lookup of the pins module via
printer.lookup_object("pins"). Use that as the standard method and
remove these less frequently used methods.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The existing junction algorithm limits the speed between two moves by
determining the maximum speed an arc between those two moves would
have if the cetripetal acceleration of that arc did not exceed the
printer's maximum acceleration.
However, should the slicer send an actual arc to the printer, then the
existing junction algorithm would not impose any significant limit on
the travel speed of that arc. This would permit the head to travel in
a circle at high velocity and with a greater centripetal acceleration
than the printer's maximum acceleration. To avoid this, impose a
limit on the junction velocity of short moves so that an approximate
centripetal acceleration of that move does not exceed the move's
acceleration limit.
Suggested by Michael Barbour.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Apply the bed tilt settings immediately after finding them. This
makes it easier for users to perform automatic tilt calibration at the
start of every print.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Automatically clear the information printed at the start of each log
file rollover on a klippy internal restart.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Drop support for M303 and PID_TUNE, and replace it with a new
PID_CALIBRATE command. Move the logic for this command from heater.py
to a new pid_calibrate.py file in the extras/ directory.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Move the probe_z_offset parameter from delta_calibrate and
bed_tilt_calibrate to a z_offset parameter within the probe config
section. It's easier to understand the z offset setting when it is in
the probe config section.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
If a z_virtual_endstop is in use, then record the last XY position
that is used when the Z is homed. Use that XY position to report what
change is needed to the z position_endstop.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Rename the digital_output, pwm_output, and static_pwm_output config
sections to output_pin and move to a new module in the extras/
directory.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Move the code for the static_digital_output config section from
chipmisc.py to a new file in the extras/ directory.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
It looks like OctoPrint is expecting the result from M114 to be
relative to the last G92 command. Also, introduce GET_POSITION to
report the actual location that the printer is at.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Commit 9bc4239e now emphasizes the first line of a multi-line error
message, so rework startup_message to conform to that.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Report the first line of a multi-line error message twice - once as
part of the informational content, and once with the "!!" error
prefix.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
If a heater falls out of the target range, accumulate the temperature
differences to determine if an error should be raised. This should
make it less likely to report an error for heaters that drift slightly
out of range, and it should make error reporting faster for heaters
that rapidly fall out of range.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
A default of 4 degrees and 10 seconds may be too aggressive - change
the default to 10 degrees and 15 seconds.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add support for additional carriages on cartesian printers. This is
used by some printers to handle multiple extruders.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Separate out the hd44780 screen drawing from the st7920 code. Use a
layout that takes advantage of the 20 columns. Add custom hd44780
fonts.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Working printer configuration for a Wanhao Duplicator i3 v2.1 and its
clones, including Monoprice Maker Select and Cocoon Create. Includes a
working config for the st7920-based front panel LCD.
Signed-off-by: Andy Ellsworth <andy+github@dar.net>
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
I've added the LCD configuration for the Tronxy X5S printer and its
Melzi board and 128x64 LCD. This is tested and works.
I've also added the pins for the encoder, but that is untested.
Signed-off-by: christian mock <cm@tahina.priv.at>
Add support for displaying basic status information on ST7920 and
HD44780 based LCDs that are attached directly to a micro-controller.
Signed-off-by: Marcio Teixeira <marcio@alephobjects.com>
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Support low-priority message transmits. This may be useful for bulk
commands that should be delayed util the comms are otherwise idle.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add a lookup_command() method to the SerialReader class that provides
a wrapper that stores the serial and commandqueue references. This
makes it easier to run the send() method.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Move the description of stepper phase adjusted endstops to a new
section in config-extra.cfg. This keeps the main example config file
a little more concise.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add --always flag to "git describe" command to get a build identifier
even if one checks out the repo with a depth parameter that prunes out
the last tagged version.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Move the travis installation steps from the travis-build.sh script to
a new script (scripts/travis-install.sh). Move the travis-build.sh
script to the scripts/ directory as well.
The data dictionaries built in the compile tests are useful during
host software testing, so run all the compile tests sequentially in a
single VM and save the data dictionaries after each build. Also,
build all the config files found in the test/configs/ directory.
Create the python virtualenv environment during the install phase and
invoke the klippy.py host software in the build phase to perform a
basic host software sanity check.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Don't use tiny step distances on the Z as that could cause a surprise
to users that copy the config without updating all the settings. (A Z
step distance that is too small would cause a high motor velocity.) A
step distance of .0025 is very popular in practice, so change the
default example configs to use that.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The multi-mcu clock syncing code relies on the ability to periodically
update the mcu clock adjustments. If a series of very long moves are
submitted then it is possible the adjustments could become unstable.
For example, if an adjustment is made to reduce a clock error over the
next couple of seconds, but it is applied to a longer period because
the next move lasts many seconds, then this would result in a bigger
adjustment for the following move, which would result in an even
bigger error when that move lasts many seconds. This can repeat until
the system destabilizes.
Check for cases where the print_time is far in the future of the
current estimated print time and average over a longer period in that
case. That should reduce the possibility of the adjustment code
becoming unstable.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add an example to help users with a BLTouch probe. This is based on
information from @mediumo and @riddlez666.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add a prefix to the example printer config files so that a sorted
directory listing shows all the samples bundled together.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add support for directly printing from a local file on the host. This
may be useful if the host cpu is not fast enough to run OctoPrint
well.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The bed_tilt_calibrate command determines the tilt of the bed.
However, we need to report the tilt compensation which is the negative
of the bed tilt.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Instead of using the toolhead class to determine if stats should be
reported, allow every printer object with a stats() callback to
determine if stats are needed.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Average clock sync times over approximately 30 seconds instead of 120
seconds so that the clock prediction responds to changes faster.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The mcu stats (that contain a prefix) may occur before some other
stats - make sure to only apply the stats prefix to those stats that
need it.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Use both load_config() and load_config_prefix() functions when
dynamically loading a module from the extras directory - if the config
section name has parameters in it then use load_config_prefix().
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
OctoPrint (and other software) will sometimes send additional commands
even if the previous command has not yet responded with an "ok".
Change the g-code input reading code to keep reading input so that an
M112 can be detected (and processed out-of-order). To avoid the
extreme case where one writes an entire g-code file to the input
without any pacing, disable the input reading if more than 20 commands
are pending.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
If the script being run raises an error, then stop running that script
and return the error to the caller.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Specify hardware pwm cycle times using the same method as software pwm
(in seconds, not clock ticks). Allow the fan code to be configured
with an explicit cycle time even when using software pwm.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
If the mcu supports command restarts and it does not appear to use a
real serial port, then default the restart method to 'command'. This
is a better default on boards with native USB support.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Report the current temperature, current pwm setting, and target
temperature as statistics in the log.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add support for disabling homing checks via the homing_override
mechanism. This may be useful to move an axis prior to homing it.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Create a virtual pin that may be used as the z endstop pin on
cartesian printers that use the probe in place of a z endstop.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Allow a set of g-code scripts to be run on each probe invocation.
This may be useful for probes that need to be setup before they are
useful (eg, with servo actuated probes).
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Allow users to override the behavior of G28 using a new
"homing_override" config section. This may be used on printers that
require specific steps during the homing process.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The print cooling fan and printer heater_fan are independent modules
that can reside in the extras directory.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Check if a config section matches a python filename in the
klippy/extras/ directory. If it does, load that python code to handle
the config section.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Instead of hardcoding which objects are called on state transitions,
allow any "printer object" to be invoked if it has a printer_state()
method. Convert connect, ready, shutdown, and disconnect callbacks to
this mechanism.
Similarly, allow all printer objects to provide a stats() callback.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add get_reactor(), lookup_object(), lookup_module_objects(), and
set_rollover_info() to the main Printer class so that callers do not
need to peek into the class' members. Similarly, add get_printer()
and get_name() methods to the ConfigWrapper class.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
If register_command() is passed None as the function to call, then
treat it as an unregister command request.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The print_stall logic could cause large portions of the graph to show
up as 100% host utilized. Rework the logic to avoid that.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Emphasize that the log file needs to be attached to the issue.
Encourage M112 to be issued on every bug report.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Use the existing reset_last_position() code in cmd_G28() instead of
manually implementing the logic.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Use an alpha transparency on each of the stats, so that it is possible
to see how the values overlap.
Also, always enable the "awake time" stat - just use a lower alpha
transparency for it.
Also, explicitly set the graph size as some version of matplotlib have
a different default.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Update the mechanism to filter out cases where buffer_time is below
MAXBUFFER so that it works with the statistics currently generated.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The previous code increases print_stall if a move is proactively
flushed due to buffer_time_low and a follow up move is ready to send
before the existing moves are fully retired. However, this would not
track the case where a move is proactively flushed and it takes an
extended amount of time to get sufficient moves to refill the queue.
Change the code so that print_stall increases anytime a new move is
queued after a proactive flush and there are existing moves not yet
fully retired.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Commit 3833669c added checking that each pin is used once in the
config. This exposed an error in the avrsim.cfg testing config -
analog1 conflicts with ar25. Use analog7 to avoid this.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Determine the median period from the pin tuning tests and use that to
recommend a set of PID parameters. Report the results over the g-code
terminal.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Enable all the steppers via the shift registers when the first stepper
is enabled, and disable all the steppers once all steppers are
disabled. This avoids having to enable all the steppers all of the
time. Note that, this support is independent from the current control
for each stepper, which is still done individually.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The enable lines are not one per stepper - instead there are 5
distinct enable settings. Handle them properly.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Change the update_command() call to use a new PinResolver class. In
that new class, verify that the same pin isn't referenced in two
different parts of the config using different aliases for the pin.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
It's common for multiple steppers to use the same stepper enable
line. Detect this and only create a single digital_out oid on the
micro-controller.
Also, prohibit any other pin from being used multiple times in the
config file.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Always set the pin_params['type'] field on a pin lookup. Rename
parse_pin_desc() to lookup_pin() to make the change more clear.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The extruder check_move() code will permit moves with huge extrusion
ratios if the amount extruded is tiny. (Some slicers emit these silly
moves - they are allowed because they are harmless.) Unfortunately,
the pressure advance code did not handle the huge extrusion ratios -
it would result in a massive, near instantaneous, extruder move in an
attempt to build pressure in the extruder. Catch this case and limit
the impact to the pressure advance code.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Update the pressure advance tuning document to note that 0.20 is
likely the ceiling of a useful pressure advance setting.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This configuration file should work as a base for Anet A8 printers
using the stock Anet v1.0-1.5 boards from late 2016-2017, which are
based around the AVR atmega1284p. Minor tweaks may be required to such
things as /dev/serial/by-id/, thermistor sensor types, and offsets for
carriage and bed.
Signed-off-by: Matt Tilson <tilsonm09@gmail.com>
When initializing the ADC, explicitly clear the registers (instead of
logically or'ing them with their previous values).
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
It appears the most common type of avrdude protocol for devices other
than the atmega2560 is the "arduino" protocol. Update the build to
select a different protocol based on the avr processor type.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The Wanhao Duplicator i3 Plus (aka Maker Select Plus,
Microcenter Powerspec Plus, and others) uses an
atmega2560 AVR. The config is based on generic-ramps.cfg
with pin numbers updated from the official Wanhao Marlin
sources at https://github.com/garychen99/Duplicator-i3-plus
Signed-off-by: Josh Sutinen <josh@damagedgoodz.net>
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Added the pwm_cycle_time option for heater config sections. Defaults
to previous value of 0.100 seconds, but may be reduced to shorter times
at the expense of MCU workload and possible MOSFET heating, depending on
controller design. Some printers that need bed PID to be enabled,
notably the Felixprinters series, are known to benefit from shorter
cycle times, as the default 10hz rate results in excessive voltage
supply droop.
While this option can be used on extruder heaters as well, there
is not expected to be any particular benefit from doing so unless
the extruder heater presents a particularly large load.
Signed-off-by: Andy Silverman <andrewsi@outlook.com>
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add PID_SETTLE_DELTA and PID_SETTLE_SLOPE constants to the code to try
and make it a little more clear how the wait for temperature code
works.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Matplotlib will try to open a display by default - tell it not to do
that so that it can run in batch mode on headless machines.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Provide a document with basic steps that a user can run to verify that
the pins in the configuration file are set correctly.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add an initial document detailing best practices for contributing to
the document. Add the "developer certificate of origin" document.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Group commands by category instead of listing them in numerical
order. This is just code movement; no code changes.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Store the gcc and binutils versions used in the compilation of the
firmware in the firmware data dictionary. Forward that information to
the log so it is available during debugging.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Try to make the Installation document more friendly to users not
familiar with the Linux command-line. Offer some hints on how to
obtain ssh and how to edit the config file remotely.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
On the AVR platform (and possibly others) the longjmp() call will
restore the interrupt state saved during the setjmp() call. So, the
setjmp() call must be invoked with interrupts disabled to ensure that
shutdown handling is run with interrupts disabled. This fixes
potential corruption of the shutdown processing on AVR.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Commit 002dc0df added rounding to the homing speed, but it did not
work if the configured homing speed was less than the printer's
maximum velocity. Move the speed rounding from stepper.py to
homing.py and make sure the rounded speed is less than the maximum
speed.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add the ability to alias multiple output pins from a single pin alias.
This makes it possible to support some cases where a single logical
output is driven by multiple output pins.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add the ability to define output pins that may be set at runtime with
a new SET_PIN extended g-code command.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add additional notches and move them to the inside of the square where
they will not impact the outside perimeter test.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Properly handle the (unlikely) case that a schedule_soft_pwm_out
command is received before a previous command is fully processed,
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add initial support for extracting out shutdown information from a
klippy.log file. The shutdown dump will be reordered into the
sequence that they occurred, and timestamps/sequence numbers in the
mcu message dump will be expanded.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The atmega168 and atmega328 need to define PE0 and PE1 in order to
support the 2 extra analog pins.
Also, support the arduino mappings for the atmega328.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Change the config file so that the delta arm length is specified
per-tower. This makes it possible to support advanced calibration.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Use the formulas for trilateration (instead of the circumcenter
formulas) when calculating the position of the nozzle from the
position of the carriages. The trilateration formula is more general
and it allows each tower to have a different arm length.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
It's valid to consider the stepper at a position that is not on a step
interval - only the "mcu position" needs to be an integer.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add a new config option 'homing_endstop_align_zero' to enable the
alignment of the endstop to a stepper full step. It's possible one
may wish to specify a homing_endstop_phase while not aligning the
endstop.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Move the homing logic out of toolhead.py and into homing.py. This
simplifies the toolhead logic and centralizes the homing code.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Reset the last step clock during the init phase and after each home -
this simplifies the runtime code.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Make sure to always call MCU_endstop.home_wait() if
MCU_endstop.home_start() is invoked. Rename
MCU_stepper.note_homing_triggered() to note_homing_end() and make sure
it is always called if MCU_stepper.note_homing_start() is invoked.
With these changes, MCU_endstop.home_finalize() is no longer needed.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
The homing code wants the list of endstops to enable during a homing
operation - it's confusing to pass the steppers.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Now that commands can be registered dynamically, move the code for
SET_SERVO from gcode.py to the PrinterServo() class in chipmisc.py.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Translate caught exceptions into a gcode.error() exception. This way
there is one standard place to invoke respond_error(). Also, always
reset the last_position on a handled error.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Commit e05c6354 changed the internal step compress queue from 64bit
integers to 32bit integers. However, that commit broke the proactive
flushing of moves that could produce more than 64K steps. This could
lead to large memory allocations and cpu slow downs on printers that
had a very large Z axis - possibly leading to a "Timer too close" mcu
shutdown. Correct the code so that it properly generates a 64bit
flush clock.
Also, be sure to only expand / memmove the queue when there is no room
for a new element at the end.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Instead of adding 250ms to each homing operation add a time relative
to the number of estimated steps that are to be generated. This
scales the delay to really large axes without adding a delay for
normal users.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Allow multiple steppers to be defined for a single cartesian axis.
This adds support for dual-z setups.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add wrappers around mcu_endstop and mcu_stepper so that the kinematic
classes do not need to directly access these low-level classes.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Update the graphstats.py graphing script so that it works with recent
stats changes - the stats can now contain groups that end with a ':'
and the print_time is no longer reset to zero on a new print.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
2017-10-29 20:36:33 -04:00
1321 changed files with 938734 additions and 20815 deletions
1. [How can I donate to the project?](#how-can-i-donate-to-the-project)
2. [How do I calculate the step_distance parameter in the printer config file?](#how-do-i-calculate-the-step_distance-parameter-in-the-printer-config-file)
3. [Where's my serial port?](#wheres-my-serial-port)
4. [When the micro-controller restarts the device changes to /dev/ttyUSB1](#when-the-micro-controller-restarts-the-device-changes-to-devttyusb1)
6. [How do I change the serial baud rate?](#how-do-i-change-the-serial-baud-rate)
7. [Can I run Klipper on something other than a Raspberry Pi 3?](#can-i-run-klipper-on-something-other-than-a-raspberry-pi-3)
8. [Can I run multiple instances of Klipper on the same host machine?](#can-i-run-multiple-instances-of-klipper-on-the-same-host-machine)
9. [Do I have to use OctoPrint?](#do-i-have-to-use-octoprint)
10. [Why can't I move the stepper before homing the printer?](#why-cant-i-move-the-stepper-before-homing-the-printer)
11. [Why is the Z position_endstop set to 0.5 in the default configs?](#why-is-the-z-position_endstop-set-to-05-in-the-default-configs)
12. [I converted my config from Marlin and the X/Y axes work fine, but I just get a screeching noise when homing the Z axis](#i-converted-my-config-from-marlin-and-the-xy-axes-work-fine-but-i-just-get-a-screeching-noise-when-homing-the-z-axis)
13. [My TMC motor driver turns off in the middle of a print](#my-tmc-motor-driver-turns-off-in-the-middle-of-a-print)
14. [I keep getting random "Lost communication with MCU" errors](#i-keep-getting-random-lost-communication-with-mcu-errors)
15. [My Raspberry Pi keeps rebooting during prints](#my-raspberry-pi-keeps-rebooting-during-prints)
16. [When I set "restart_method=command" my AVR device just hangs on a restart](#when-i-set-restart_methodcommand-my-avr-device-just-hangs-on-a-restart)
17. [Will the heaters be left on if the Raspberry Pi crashes?](#will-the-heaters-be-left-on-if-the-raspberry-pi-crashes)
18. [How do I convert a Marlin pin number to a Klipper pin name?](#how-do-i-convert-a-marlin-pin-number-to-a-klipper-pin-name)
19. [How do I cancel an M109/M190 "wait for temperature" request?](#how-do-i-cancel-an-m109m190-wait-for-temperature-request)
20. [How do I upgrade to the latest software?](#how-do-i-upgrade-to-the-latest-software)
21. [Can I find out whether the printer has lost steps?](#can-i-find-out-whether-the-printer-has-lost-steps)
### How can I donate to the project?
Thanks. Kevin has a Patreon page at: https://www.patreon.com/koconnor
### How do I calculate the step_distance parameter in the printer config file?
If you know the steps per millimeter for the axis then use a
calculator to divide 1.0 by steps_per_mm. Then round this number to
six decimal places and place it in the config (six decimal places is
nano-meter precision).
The step_distance defines the distance that the axis will travel on
each motor driver pulse. It can also be calculated from the axis
pitch, motor step angle, and driver microstepping. If unsure, do a web
search for "calculate steps per mm" to find an online calculator.
Klipper uses step_distance instead of steps_per_mm in order to use
consistent units of measurement in the config file. (The config uses
millimeters for all distance measurements.) It is believed that
steps_per_mm originated as an optimization on old 8-bit
micro-controllers (the desire to use a multiply instead of a divide in
some low-level code). Continuing to configure this one distance in
units of "inverse millimeters" is felt to be quirky and unnecessary.
### Where's my serial port?
The general way to find a USB serial port is to run `ls -l
/dev/serial/by-id/` from an ssh terminal on the host machine. It will
Sensorless homing allows to home an axis without the need for a physical limit switch. Instead, the carriage on the axis is moved into the mechanical limit making the stepper motor lose steps. The stepper driver senses the lost steps and indicates this to the controlling MCU (Klipper) by toggling a pin. This information can be used by Klipper as end stop for the axis.
This guide covers the setup of sensorless homing for the X axis of your (cartesian) printer. However, it works the same with all other axes (that require an end stop). You should configure and tune it for one axis at a time.
## Prerequisites
A few prerequisites are needed to use sensorless homing:
1. StallGuard capable TMCxxxx stepper driver
2. SPI / UART interface of the TMCxxxx wired to MCU (stand-alone mode does not work)
3. DIAG1/DIAG pin of TMCxxxx connected to the MCU
## Limitations
Be sure that your mechanical components are able to handle the load of the carriage bumping into the limit of the axis repeatedly. Especially spindles (on the Z axis) might generate a lot of force. Homing a Z axis by bumping the nozzle into the printing surface might not be a good idea.
Further, sensorless homing might not be accurate enough for you printer. While homing X and Y axes on a cartesian machine can work well, homing the Z axis is generally not accurate enough and results in inconsistent first layer height. Homing a delta printer sensorless is not advisable due to missing accuracy.
Further, the stall detection of the stepper driver is dependant on the mechanical load on the motor, the motor current and the motor temperature (coil resistance).
Sensorless homing works best at medium motor speeds. For very slow speeds (less than 10 RPM) the motor does not generate significant back EMF and the TMC cannot reliably detect motor stalls. Further, at very high speeds, the back EMF of the motor approaches the supply voltage of the motor, so the TMC cannot detect stalls anymore. It is advised to have a look in the datasheet of your specific TMCs. There you can also find more details on limitations of this setup.
## Configuration
To enable sensorless homing add a section to configure the TMC stepper driver to your `printer.cfg`.
In this guide we'll be using a TMC2130. The configuration however is simailar to the other TMCs with StallGuard:
```
[tmc2130 stepper_x]
cs_pin: # chip select pin of the SPI interface
microsteps: # number of microsteps per full step of the motor
run_current: # value in amps
diag1_pin: ! # pin on the MCU where DIAG1 is connected (active low)
driver_SGT: # tuning value for sensorless homing
```
The above snippet configures a TMC2130 for the stepper on the X axis. Make sure to fill in the missing values based on your configuration.
The `driver_SGT` value describes the threshhold when the driver reports a stall. Values have to be in between -64 (most sensitive) and 64 (least sensitive). On some TMCs like the TMC2209 this value doesn't exist in this form as the hehavior is different to the TMC2130. In the case of the TMC2209 the threshold is defined by the `driver_SGTHRS` value in the config and go from 0 (least sensitive) to 255 (most sensitive). Have a look at the datasheet of your specific TMC to avoid mistakes.
If you have a CoreXY machine, you can configure one stepper driver for X and the other for Y homing as you would on a cartesian printer. Be aware that Klipper needs both `DIAG1` pins connected to the MCU. It is not sufficient to use only one signal from one of the stepper drivers (as it is possible on e.g. Marlin).
The `diag1_pin` of the TMC2130 is configured as open-collector pin. This means, the stepper driver pulls the pin low to indicate a stalled motor (active low) and the pin must be inverted by adding a `!` in front of the pin name. Further, you need a pull-up resistor on the connection. If your PCB has no external pull-up, you can enable the internal pull-up of your MCU by adding a `^` in front of the pin name. The resulting line might look like this:
```
diag1_pin: ^!PA1 # DIAG1 connected to PA1, internal pull-up is enabled, signal is active low
```
By configuring the `diag1_pin`, Klipper allows you to use a special virtual end stop for the axis. You can use this instead of a physical end stop pin by changing the `endstop_pin` of the corresponding axis:
```
[stepper_x]
...
endstop_pin: tmc2130_stepper_x:virtual_endstop # use the virtual end stop generated by the [tmc2130 stepper_x] section of this config file
...
homing_retract_dist: 0
...
```
The name of the virtual end stop pin is derived from the name of the TMC2130 section. The `homing_retract_dist` setting should be set to zero to disable the second homing move as a second pass is not needed, and attempts to do so are error prone.
ATTENTION: This guide only mentions the mandatory parameters and the ones needed to set up sensorless homing. There are many other options to configure on a TMC2130, make sure to take a look at `config/example-extras.cfg` for all the available options.
## Testing of SPI/UART communication
Now that the stepper driver is configured, let's make sure that Klipper can communicate with the TMC2130 by sending the following extended G-Code command to the printer:
```
DUMP_TMC stepper=stepper_x
```
This command tells Klipper to read a few registers via SPI from the TMC2130. If everything works correctly, the output should look similar to this (in OctoPrint terminal tab):
```
Send: DUMP_TMC stepper=stepper_x
Recv: // GCONF: 00000004
Recv: // GSTAT: 00000001
Recv: // IOIN: 11000078
Recv: // TSTEP: 000fffff
Recv: // XDIRECT: 00000000
Recv: // MSCNT: 00000010
Recv: // MSCURACT: 00f60018
Recv: // CHOPCONF: 15008384
Recv: // DRV_STATUS: 800d0000
Recv: // PWM_SCALE: 00000000
Recv: // LOST_STEPS: 00000000
```
The actual register values might differ based the configuration of your TMC2130. If the register values are all `ffffffff` or look otherwise bogus (for example, `LOST_STEPS` should be always `00000000` here) make sure that the SPI is wired and configured correctly.
## Homing and Tuning
Let's try the first sensorless homing now. It will likely not work as intended. There are three possible outcomes of this experiment:
1. The axis stops moving before hitting the mechanical limit or does not move at all
2. The axis homes correctly (which is unlikely at this point)
3. The axis bumps into the mechanical limit and keeps moving while making horrible noise
If the third outcome happens to you, disable the stepper (by cutting the power or issuing a `M112` emergency stop).
Ok, now that you know what can happen, let's try it out. Put the carriage somewhere in the middle of the X axis. Home the X axis by sending the following G-Code command to Klipper and observe the outcome:
```
G28 X
```
If the axis stopped early (first outcome), the stepper driver detected a motor stall even though there was none. To trigger stall detection at a higher load, increase the value of `driver_SGT` (for example from 0 to 5). The values can be any interger between `-64` and `63`. The higher the value, the later it triggers stall detection.
If your axis did not stop (third outcome), the stepper driver was not able to detect the stall, because the load on the motor still seemed reasonable to the driver. To trigger stall detection at a lighter load, decrease the value of `driver_SGT`.
Even if your axis homed correctly, it might be worth to try a few different values for `driver_SGT`. If you think that it bumps too hard into the mechanical limit, try to decrease the value by 1 or 2.
At this point, your axis should be able to home based on the stall detection of the TMC2130. Congratulations! You can now proceed with the next axis of your printer.
Specifically, these slicer settings can instruct the firmware to make
wild changes to the extrusion rate in the hope that the firmware will
approximate those requests and the printer will roughly obtain a
desirable extruder pressure. Klipper, however, utilizes precise
kinematic calculations and timing. When Klipper is commanded to make
significant changes to the extrusion rate it will plan out the
corresponding changes to velocity, acceleration, and extruder
movement - which is not the slicer's intent. The slicer may even
command excessive extrusion rates to the point that it triggers
Klipper's maximum extrusion cross-section check.
In contrast, it is okay (and often helpful) to use a slicer's
"retract" setting, "wipe" setting, and/or "wipe on retract" setting.
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.