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>
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>
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>
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>
2026-01-25 12:49:01 -05:00
Renamed from klippy/extras/sos_filter.py (Browse further)