PROBE_CALIBRATE will try to adjust z_offset
Which will produce a confusing outcome and
will not do what it is supposed to do
Signed-off-by: Timofey Titovets <nefelim4ag@gmail.com>
There are some rare corner cases where reporting the peak time could
cause hard to debug issues (for example, the peak time could
theoretically be a significant time prior to the actual trigger time,
which could possibly cause unexpected clock rollover issues). Now
that the host code does not utilize the peak time for "tap" detection,
it can be removed from the mcu code.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
To cancel out any lag, filter data on the host
Then to avoid derivatives lag,
compute central difference.
Assume that peak velocity is always the moment
right before collision happens.
Signed-off-by: Timofey Titovets <nefelim4ag@gmail.com>
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
To implement host-side analysis of tap data,
we need a way to apply the same filtering as on the mcu.
As bonus, it cancels the induced signal delay.
Signed-off-by: Timofey Titovets <nefelim4ag@gmail.com>
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Use SOS filters + derivative filter to generate dF/dT on mcu.
Feed that to the MCU's trigger_analog peak detection.
Interpret peak time as a tap event
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Signed-off-by: Timofey Titovets <nefelim4ag@gmail.com>
Create the class at the start of PrinterEddyProbe and call it as
needed. This makes the class life-cycle similar to EddyDescend.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Rework the internal EddyGatherSamples() class with a goal of making it
easier to add tap analysis in the future.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Commit 2e0c2262e incorrectly changed the internal fpt variable from a
list to a tuple.
Reported by @nefelim4ag.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add a setting that will enable the mcu sos_filter code to
automatically set an offset using the first read measurement.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Add a new set_start_state() method to MCU_SosFilter that can arrange
for the filter to better handle a non-zero initial starting state.
Also, this removes the previous 1.0 gram initial start state for load
cells as it tares the initial value.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Remove the homing code from sensor_ldc1612.c and utilize the generic
homing support found in trigger_analog.c .
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Rework the trigger_analog code to support different "trigger"
conditions. This merges in features of ldc1612.c into
trigger_analog.c, such as error code reporting in the MCU. This is in
preparation for using trigger_analog with ldc1612.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Check if the trigger_analog struct has been allocated in
trigger_analog_update() itself. This makes the code easier to use in
the sensor code.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Don't require callers of MCU_trigger_analog to create the
mcu.TriggerDispatch() instance - instead, create it within the
MCU_trigger_analog() class.
Also, make it easier to use MCU_trigger_analog without an
MCU_SosFilter - the MCU_trigger_analog can automatically create an
empty filter if needed.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Rename sos_filter.py to trigger_analog.py and copy MCU_trigger_analog
class from load_cell_probe.py to this new file.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Support offsetting and scaling the initial raw value prior to
processing in the sos_filter.
Remove that support from trigger_analog.c .
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Rename the SosFilter class to MCU_SosFilter. Automatically reload the
filter coefficients on a reset_filter() call, so there is no need to
support loading of the filter at init time.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
It's reasonable to deactivate the filter by setting n_sections=0, and
this makes the code a little easier to use when the host doesn't
actually need any filtering.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Rename the mcu based load_cell_probe code to trigger_analog. This is
a rename of the C code files, struct names, and command names. There
is no change in behavior (other than naming) with this change.
This is in preparation for using the load_cell_probe functionality
with other sensors.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Make it possible for the probe's get_offsets() code to depend on the
parameters of the probe request. This is in preparation for eddy
"tap" support.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Deprecate the PROBE command's exported value
`{printer.probe.last_z_result}`. This value effectively returns the
toolhead Z position when the probe triggers and user's then need to
adjust the result using the probe's configured z_offset.
Introduce a new `{printer.probe.last_probe_position}` as a
replacement. This replacement has an easier to understand behavior -
it states that the probe hardware estimates that if the toolhead is
commanded to last_probe_position.x, last_probe_position.y and descends
then the tip of the toolhead should first make contact at a Z height
of last_probe_position.z . That is, the new exported value already
takes into account the probe's configured xyz offsets.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Change the low-level probe code to return ProbeResult tuples from
probe_session.pull_probed_results(). Also update callers to use the
calculated bed_xyz values found in the tuple instead of calculating
them from the probe's xyz offsets.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>