Commit Graph

468 Commits (142e8441be8bb1c66dc2223fde8b7f04bd2fb3fb)

Author SHA1 Message Date
Yuri D'Elia 5af7d9a10f motion: correctly reset residuals of a stopping axes
Fixes the motion stutters generally happening as more than a single
axis are active and one completes in the middle of the motion.

Do not generate a spourious interval as one axis exits the queue. This
short interval didn't account for the minimal stepping quantum,
potentially causing a timer overflow.
2022-01-31 14:38:37 +01:00
Yuri D'Elia cabf284882 motion: Remove motion.ResetAxesData
Use motion.SetPosition directly to minimize redundant code which is used
for unit tests only.
2022-01-31 14:38:37 +01:00
Yuri D'Elia 2e32204d17 motion: Improve legibility of motion::SetPosition 2022-01-31 14:38:37 +01:00
D.R.racer 5ba8ba9646 Longer unload distance for FSensor OFF check
It's been too tight before causing unload errors unnecessarily.
We can play with this parameter more in the future.
2022-01-19 17:08:35 +01:00
D.R.racer ea8dd7e365 Unload now rechecks the position of filament after recovery
This solves a number of issues - if FINDA or FSensor failed,
the unload was never "complete" - filament was stuck in the selector
blocking it from normal operation.

Now, after all errors have been resolved, filament is explicitly FED
into FINDA and then RETRACTED to Pulley.
2022-01-19 17:08:35 +01:00
D.R.racer 8a6d962bd4 Separate load/unload speeds + faster
Slower loading speed is necessary for precise detection
of filament sensor trigger and starting rotation of the E-motor.
Experimentally it turned out speeds above 80mm/s tend to cause timing issues
(sometimes one can hear a crack as MMU' or the printer's drive gears
slip while pushing the filament).

Such a timing issue then causes blobs in purge towers.

On the other hand - 80mm/s for the fast part of filament load
seems not only absolutely reliable, but also very quiet.
120mm/s for unload is much louder (we may slow it down later)
2022-01-19 17:08:35 +01:00
D.R.racer 7cdb63f07a Make Idler::Engage not obey the position of filament
fixes UnloadFilament startup - it wasn't waiting for the Idler to engage
before moving the Pulley
2022-01-19 17:08:35 +01:00
D.R.racer 97b362f2b7 Join feedrates of Load-to-FINDA and Load-to-Nozzle
MMU-105
2022-01-19 17:08:35 +01:00
D.R.racer 21390cefe1 Add Homing/Stalled error codes for Pulley, Idler, Selector 2022-01-18 09:43:18 +01:00
Alex Voinea fd6c0bcc23 Symmetrical latch signal 2021-12-01 09:07:08 +01:00
Alex Voinea f509dc8346 Adjust latch pulse length 2021-12-01 09:07:08 +01:00
Alex Voinea d399a024bb SHR16 correct signal timing 2021-12-01 09:07:08 +01:00
D.R.racer 662e05b813 Turn off other LEDs when appropriate
Solves an interesting tiny issue introduced in the previous commits.
When we start with the filament in selector, the corresponding LED
is set to ON. However, all of the logic state machines only operated
on the LED pair of the active slot -> the starting LED may have been
left ON in some edge cases.

Now, this is resolved by clearing all other LEDs except for the active
slot where appropriate.
2021-11-25 13:04:22 +01:00
D.R.racer f2f82c620a Set green LED at start when filament loaded + set Idler as idle at start 2021-11-25 13:04:22 +01:00
D.R.racer e064a6c2f5 Introduce H0 command to invoke Idler+Selector homing seq. if safe 2021-11-25 13:04:22 +01:00
D.R.racer 9bf2b401e4 Avoid homing the idler at start when printing 2021-11-25 13:04:22 +01:00
D.R.racer 6973dbff13 Introduce intelligent homing if Idler and Selector
Both movable components now perform homing sequences transparently
whenever the logic layer invalidates the homingValid flag.
That reflects the fact, that the user may have moved the Idler or Selector
while trying to resolve a HW issue with un/loading filament.

Basic rules:
- Idler gets rehomed immediately and then moves into the target slot position
- Selector rehomes once it is possible - i.e. when filament load state
  is AtPulley - then it immediately and spontanneously executes the homing
  sequence and then returns to the desired state

Motivation:
- resolve startup issues (EEPROM says we have filament, but FINDA is not triggered)
- resolve accidental moves of Idler and/or Selector while
  digging out stuck filament from the unit
2021-11-25 13:04:22 +01:00
D.R.racer 7d423df583 Swap buttons left<->right 2021-11-23 12:55:39 +01:00
D.R.racer 151adf810a Add ToolChange Error resolve Button2 unit tests 2021-11-17 08:48:59 +01:00
D.R.racer 515119edc8 Test ToolChange error recovery by button 0 and 1 2021-11-17 08:48:59 +01:00
D.R.racer 7fe9d7f329 Finish UnloadFilament unit test - error state resolved by user + checks 2021-11-17 08:48:59 +01:00
D.R.racer afab309d27 Extract common Dis/Engaging of idler in Error states into base class 2021-11-17 08:48:59 +01:00
D.R.racer c2325b687a Unittests: set buttons more consistently 2021-11-17 08:48:59 +01:00
D.R.racer 872b2206ed Cleanup error recovery of LoadFilament
+ cover all paths with unit tests
2021-11-17 08:48:59 +01:00
D.R.racer 96397ec16b Improve error handling of ToolChange state machines
... and fix an edge case in LoadFilament
2021-11-17 08:48:59 +01:00
D.R.racer bfa710525b Discard all remaining planned blocks with AbortPlannedMoves
Previously it looked like only the active block has been discarded
which worked most of the time, since we only planned single moves.
But with introduction of PlanLongMove in one of the last commits
this is not true anymore.
2021-11-17 08:48:59 +01:00
D.R.racer 62e12102fd Check for FSensor OFF after unloaded to FINDA
we may discuss when to check for the FSensor state and why,
but this approach seemed to me like the least invasive method
of just checking the fsensor state and reporting an error in case
it didn't switch off.
2021-11-17 08:48:59 +01:00
D.R.racer 2a1539b65b Fix Right button handling for Load/Unload 2021-11-17 08:48:59 +01:00
Yuri D'Elia b6a676e093 AVR: Do not use __builtin_abs() for long types
In AVR __builtin_abs() breaks for non-base types.

Provide a generic function and use an overload when it is safe to use
instead.

This fixes the underlying step count calculation in PlanMove, thus
removing the need for the PlanLongMove work-around.
2021-11-11 07:41:48 +01:00
D.R.racer 2d81332626 Fix typo - selector homing condition 2021-11-03 10:37:51 +01:00
D.R.racer ffd8924d8c Fix start MMU with filament blocking the selector 2021-11-03 10:37:51 +01:00
D.R.racer 2640e9d899 Fix inverted condition (kudos to @leptun) 2021-11-03 10:13:03 +01:00
D.R.racer fa4e687fdc Fix chopping negative move values in PlanLongMove
+ use PlanLongMove in UnloadToFinda
+ fix comment in unit test
2021-11-03 10:13:03 +01:00
D.R.racer 5f1e3e018e Workaround planning moves longer than 32K steps 2021-11-03 10:13:03 +01:00
D.R.racer 7f9fc78cf6 Improve motion's unit tests 2021-11-03 10:13:03 +01:00
D.R.racer 6294e39746 Avoid repeated writes into the shift register
May reduce flickering of LEDs on some boards
2021-11-03 10:13:03 +01:00
D.R.racer 22522c253f Update code after rebase onto main 2021-10-21 15:16:29 +02:00
D.R.racer 9438253106 Avoid trying to unload filament when not loaded
however, it looks like the EEPROM is not updated correctly, needs more testing
2021-10-21 15:16:29 +02:00
D.R.racer 04348b2d86 Make all SHR16 public functions "thread-safe" 2021-10-21 10:17:10 +02:00
D.R.racer 19dcfcef79 Revert selector's config back after testing on real HW 2021-10-21 07:55:41 +02:00
D.R.racer 63509af294 Fix cut filament unit tests
still, this may need some more work in relation to PR #128
2021-10-21 07:55:41 +02:00
D.R.racer ee247246ee Fix unit tests
- fix homing procedure for Idler and Selector
  (homing now ends with a move to the Parking position)
- fix unit tests' startup conditions with regard to necessary
  homing of Idler and Selector

TODO: still test_cut_filament fails for minor reasons
2021-10-21 07:55:41 +02:00
Alex Voinea 7380cb740a Pulley SG increased 2021-10-21 07:55:41 +02:00
Alex Voinea 99c05b79d0 Adjust SG filtering threshold 2021-10-21 07:55:41 +02:00
Alex Voinea a87b981a3d Homing initial 2021-10-21 07:55:41 +02:00
D.R.racer 0fbcb9dac2 Tag all source files with @file for doxygen 2021-10-18 17:59:46 +02:00
D.R.racer 5b9c6ec36e Fix (workaround) LED blink when millis overflow + unit test 2021-10-18 16:30:08 +02:00
D.R.racer 8eb6240541 Add HAL AVR EEPROM implementation 2021-10-18 16:29:54 +02:00
D.R.racer abe2567c84 Fixes for loading filament into nozzle
Slower speed once we reach the fsensor + avoid grind while disengaging the Idler
while the printer is already pulling the filament.
2021-10-18 07:29:13 +02:00
Alex Voinea 9dc2ccc337 Revert accidental include 2021-10-14 14:27:56 +02:00
Alex Voinea 438ced6b96 Revert accidental commit 2021-10-14 14:27:56 +02:00
D.R.racer 9994d05d7f Reformat usb_cdc.cpp 2021-10-14 14:27:56 +02:00
D.R.racer d35bcd258a Refactor after rebase onto main 2021-10-14 14:27:56 +02:00
Alex Voinea 78af22e6c3 Dual bank test. Seemed to work for me. Don't care if it's placebo 2021-10-14 14:27:56 +02:00
Alex Voinea 538d4c8ef6 Remove useless debug info 2021-10-14 14:27:56 +02:00
Alex Voinea 3391b04ec7 update usb debug 2021-10-14 14:27:56 +02:00
Alex Voinea ea7d44a611 debug USB stream 2021-10-14 14:27:56 +02:00
Alex Voinea 362d012eff USB cdc stdout stream 2021-10-14 14:27:56 +02:00
3d-gussner 63aead0ab8 Update eject to use FilamentLoadState NotLoaded 2021-10-12 18:11:05 +02:00
3d-gussner fb97e519aa Feed slowly if FilamentLoadState is unknown 2021-10-12 18:11:05 +02:00
D.R.racer 206923598b Fix error codes formatting 2021-10-12 18:11:05 +02:00
D.R.racer e1af08b3d5 Fix unit tests
That includes:
- introduce pulley slow feedrate and fsensor-to-nozzle distance
  in config necessary for slowly feeding the filament from fsensor into the nozzle.
  (the constant is subject to extraction into some other config as it has to be used in the printer as well).
- update FeedToBondtech accordingly to perform a gentle push into the nozzle
  after fsensor detects the filament + update its unit tests.
- slight cleanup of LoadFilament + fix its unit tests
- add FeedingToNozzle progress code, as it might be interesting
  to inform the printer about this task in the future
- revert non-clean changes from RetractFromFinda - it should not disengage the idler
- revert incorrect + fix ToolChange
- clean-up UnloadFilament
2021-10-12 18:11:05 +02:00
Alex Voinea 94e6d1403e (Hopefully) Fir shr16 timing issues
Should also hopefully fix the random behavior of the DIR pins. When I was testing a really slow timing, the steppers seemed to want to not go in the right direction. That was fixed with the critical section. The 1us delay might be overkill, but I'm not the one that added a 100nF capacitor on the LATCH line (basically chip select). This might be part of the randomness that happened and why some board behaved better than others (stronger GPIO outputs)
2021-10-12 18:11:05 +02:00
Alex Voinea 34442469a3 More extreme speeds. They reveal errors in the motion planner 2021-10-12 18:11:05 +02:00
Alex Voinea 6e50d902d2 Steppers should be disabled on startup 2021-10-12 18:11:05 +02:00
Alex Voinea ef997a6352 Update cuttingEdgeRetract 2021-10-12 18:11:05 +02:00
Alex Voinea 0a1290102c Actually fix retract filament from finda 2021-10-12 18:11:05 +02:00
Alex Voinea 6071257973 Fix unloading state machine 2021-10-12 18:11:05 +02:00
3d-gussner 221f40c7a1 Fix issue that all tool changes after first one fail to change to planned slot
Update Filament Load state
2021-10-12 18:11:05 +02:00
3d-gussner 33b467f1bc Add debug to retract from finda 2021-10-12 18:11:05 +02:00
3d-gussner 62116b1283 Update debug 2021-10-12 18:11:05 +02:00
3d-gussner d9134b16fc Update Filament Load state order 2021-10-12 18:11:05 +02:00
3d-gussner 82f2e8ec54 fix some debug output 2021-10-12 18:11:05 +02:00
3d-gussner f9561e6cf7 Remove double operations
- feed to finda engages the idler so no need to do that before
- retract from finda disengages the idler, again avoid double operation
LEDs set mostly by feed to finda and retract from finda
2021-10-12 18:11:05 +02:00
3d-gussner 5cfb0887d0 Disengage Idler after retracted from FINDA
Add some dbg_logic output
2021-10-12 18:11:05 +02:00
3d-gussner b752c5c4e7 Set FilamentLoaded state to InSelector if FINDA triggers 2021-10-12 18:11:05 +02:00
3d-gussner fa50462929 Add InFSensor state 2021-10-12 18:11:05 +02:00
3d-gussner 67657329d1 Correct debug messages for state 2021-10-12 18:11:05 +02:00
3d-gussner f99adae31e Use config.h 2021-10-12 18:11:05 +02:00
3d-gussner abf875bda0 After Load Filament is compeleted the slot LED should be off 2021-10-12 18:11:05 +02:00
3d-gussner 28c8e09bcf Use config.h to define DEBUGS 2021-10-12 18:11:05 +02:00
3d-gussner dbf26d13ac Make search for error codes easier 2021-10-12 18:11:05 +02:00
D.R.racer c26cc30185 Add finer filament loaded states and improve unit tests
We need to know better where the filament is, a simple "filament loaded true/false"
does not correspond to the reality.
2021-10-12 18:11:05 +02:00
D.R.racer 5af0125672 LoadFilament should not set filament loaded (surprisingly)
because of the change of semantics of LoadFilament operation.
LoadFilament pushes the filament into FINDA and then retracts it back just to keep the
filament ready to be grabbed by the idler and pulley and loaded into the printer's nozzle.

So the selector is not blocked by the filament -> filament NOT loaded
2021-10-12 18:11:05 +02:00
D.R.racer b13214b7f5 Fix debug sprintf variant 2021-10-12 18:11:05 +02:00
D.R.racer 5cf4a496e3 Introduce checking for enabled/disabled Pulley axis in unit tests 2021-10-12 18:11:05 +02:00
D.R.racer f18ff63cf7 Fix PROGMEM addressing in debug.h
I hate when the compiler doesn't check something what it normally does:
`pgm_read_byte` is more than happy with a parameter (*str), which reads
an address at a location where *str points to - which is obviously not the intent.
2021-10-12 18:11:05 +02:00
D.R.racer 236a40c6ef Use dbg_logic logging
and improve the variadic version used to print formatted
text at some spots in previous commits
2021-10-12 18:11:05 +02:00
D.R.racer bbd14ed217 Fix ToolChange operation + unit tests 2021-10-12 18:11:05 +02:00
D.R.racer 505930c576 Explain better final Idler state in FeedToFinda and FeedToBondtech 2021-10-12 18:11:05 +02:00
D.R.racer e0d1fe3b73 Extract common ErrDisengagingIdler state's implementation 2021-10-12 18:11:05 +02:00
D.R.racer 6426295e32 Change the semantics of load filament
Load filament performs feed to FINDA and retract:
- engage idler
- feed normal to FINDA with config::feedToFinda distance until FINDA triggers
- retract normal and as soon FINDA un-triggers move back to PTFE config::cuttingEdgeToFindaMidpoint
- disengage the idler

That implied introducing another substate machine - RetractFromFinda, which does the opposite
of FeedToFinda while also checking for the FINDA switching off while retracting filament.

Still, ToolChange and CutFilament need fixing with this change
2021-10-12 18:11:05 +02:00
D.R.racer 5eedeb0968 Remove redundant ::Color and ::Mode for LED colors and modes
makes the code shorter and more readable, no identifier clashes revealed
2021-10-12 18:11:05 +02:00
D.R.racer 53b329941f Keep constants start with lowercase letter
and remove a few warnings from the build
2021-10-12 18:11:05 +02:00
D.R.racer ac1f13672a Fix format config.h 2021-10-12 18:11:05 +02:00
3d-gussner 0bead533df clang-format 2021-10-12 18:11:05 +02:00
3d-gussner 15adeaa180 Add DEBUG_LOGIC 2021-10-12 18:11:05 +02:00
3d-gussner b8259ac555 Fix some LED status 2021-10-12 18:11:05 +02:00
3d-gussner b1f50d8789 Use constants 2021-10-12 18:11:05 +02:00
3d-gussner 645d0b55ed Use constants 2021-10-12 18:11:05 +02:00