-
-
Notifications
You must be signed in to change notification settings - Fork 19.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Use common methods for ISR / babystep pulse delays #16813
Use common methods for ISR / babystep pulse delays #16813
Conversation
8a900c4
to
b0914f0
Compare
b0914f0
to
08425be
Compare
Unfortunately this doesn't make it any harder to shut the motors down. I haven't tested it much to verify other behavior is ok, but I can still shut down my 2208 driver just as easily as before. |
We'll have to see how the oscilloscope data compares to the previous runs and see if adjustment is going in the right direction or not. |
Is anyone else seeing reboots when trying to babystep after this commit? |
A reboot implies an infinite loop. What happens if you disable the watchdog? |
For fun and maybe profit, also try replacing in
To go back to the old ways also try…
|
I ran out of time yesterday, but I rebased my config on 4a73379 and no longer experience reboots while babystepping. I assume 189c101 is what fixed it. If something else crops up, I'll be sure to create an issue with configs & more info. |
I've got another alternative at #16829 ( The current code doesn't attempt to add an extra margin before the step is interjected, but it's in the right place to start pulling in timing information for that. If timing alone does the trick, that will be good. But I also have it in mind to add logic so the Stepper ISR will intentionally drop steps at regular intervals to accomplish reverse motion when an axis is moving. And, if that works, perhaps the same approach can work to add extra steps when it's moving. We'll see. First thing is just to make sure it doesn't blow anything up. |
I've added on to #16829 a small tweak to keep babystep pulses from being too close to normal step pulses, but it considers every axis, not just the one being babystepped, so the position of the pulse will only stagger slightly when pulse rates are high. As far as I can tell by staring at my code, it should work, but I'll give it a more thorough test later today. I'm still trying to brainstorm some tricks that could be used to integrate more tightly into the pulse phase or even into the basic bresenham line algorithm itself to either add or leave out steps at regular time intervals, and also to scale the frequency of the babysteps according to the resolution of the axis. The simplest idea I can think of is to add a "babysteps" field to planner blocks with the amount of steps to add or remove from the given move, but which will not be applied to the stepper counts. The planner would automatically add the right number based on the duration of the move and the resolution of a babystep. If you wanted to babystep but there was nothing in the planner, you could just send a "zero" move and the planner would send the babysteps to the stepper ISR. The only caveat with this is that if you already started a long move, there's currently no way to modify it. While it should not be impossible to have the stepper ISR modify the running block in-place to produce more or fewer steps, it would definitely be challenging. If only we could mount the axes on other axes just for babystepping…. |
* Add sanity-check for new Advanced Pause option Followup to MarlinFirmware#16372 * Include macros for delta ABC * Update Russian language (MarlinFirmware#16745) * Fix BTT SKR 1.4 extra endstop pins (MarlinFirmware#16738) * Option for Trigorilla 1.4 with add-on endstops board (MarlinFirmware#16737) * Consistent M112 with Emergency Parser (MarlinFirmware#16747) * Improve mfadd helper script - Use the original branch name if none is supplied - Set the remote tracking to the source - Accept User/Branch or User:Branch syntax * Clean up i2c encoder, sanitize serial * Misc cleanup, whitespace * Encapsulate probe as singleton class (MarlinFirmware#16751) * G34 automatic point assignment (MarlinFirmware#16473) * Fix Temperature::over_autostart_threshold (MarlinFirmware#16749) * Update Russian language (MarlinFirmware#16750) * Fix CURRENT_STEP_DOWN compile error * Drop obsolete SD special char handling See MarlinFirmware#14035 * Probe singleton patch Followup to MarlinFirmware#16751 * Fix RGB / Neopixel white color bug See MarlinFirmware#16752 * Suppress a compile warning * More 8-extruder fixups * Add EXP labels to SKR pins * Fix LPC build with USE_WATCHDOG off * Minor string storage optimization * Apply REPEAT, RREPEAT, and loop macros (MarlinFirmware#16757) * Revert breaking change to _FAN_PWM macro * Add Z_AFTER_HOMING to raise Z more in G28 (MarlinFirmware#16755) * Corner Leveling: Add inset for each side (MarlinFirmware#16759) * (c) 2020 * Tweak mfqp script * Use a different Configurations branch for CI * Fix LCD Z Move character LCD display line (MarlinFirmware#16772) * Fix warning for ESP32 (MarlinFirmware#16771) * [cron] Bump distribution date * Force T0 in UBL G29 on all multi-hotend setups (MarlinFirmware#16774) * Keep secure credentials in a separate config file (MarlinFirmware#16773) * STM32duino - Use SDIO for onboard SD (MarlinFirmware#16756) * Fix E stepper stays on bug Fixes MarlinFirmware#16753 * Fix Arduino IDE compile for DUE Fixes MarlinFirmware#16767 * Fix CALIBRATION_GCODE pin handling * Upgrade an ifdef * More updates for 8 extruders, REPEAT * [cron] Bump distribution date (2020-02-05) * Add MKS Base 1.6 board (MarlinFirmware#16783) * Direct download link for configs * [cron] Bump distribution date (2020-02-06) * Split up MKS_RUMBA32 into two variants (MarlinFirmware#16781) * G26: Allow to set retraction for UBL mesh test (MarlinFirmware#16511) * Remove extraneous Serial init (MarlinFirmware#16794) * Fix probe with multi-endstops (MarlinFirmware#16793) * [cron] Bump distribution date (2020-02-07) * [cron] Bump distribution date (2020-02-08) * Clean up Makefle indentation * Add .editorconfig file * Tweak ABL logging, document probing * [cron] Bump distribution date (2020-02-09) * Coolstep for TMC2130, 2209, 5130, 5160 (MarlinFirmware#16790) * Better probe fail handling (MarlinFirmware#16811) * Adafruit Grand Central M4 fixes (MarlinFirmware#16812) * Minor HAL cleanup * Move MSG_MARLIN * Show print time with PRINTER_EVENT_LEDS * Tweak parser warning * Bump config version to 020004 (MarlinFirmware#16816) * Add PID, probe offsets to ExtUI (MarlinFirmware#16792) * [cron] Bump distribution date (2020-02-10) * Tweak LPC1768 upload py script * Add mftest -b (auto-build) and -u (upload) - Implement the equivalent of auto-build for the shell environment by using the MOTHERBOARD setting to look up the env: entries. * Revert change to AXIS_DRIVER_TYPE_X2 - Revisit this to figure out why it breaks * Revert "Coolstep for TMC2130, 2209, 5130, 5160" Reverting MarlinFirmware#16790 as not ready for primetime. * Add a caution to drivers.h * Update MKS BASE and v1.6 pins (MarlinFirmware#16806) * Add g-code quoted strings, improve stream code (MarlinFirmware#16818) * Fix out-of-order M0 after SD printing Fixes MarlinFirmware#14774 Co-Authored-By: tol2cj <[email protected]> * Fix out-of-order M0 after SD printing Fixes MarlinFirmware#14774 Co-Authored-By: tol2cj <[email protected]> * Enable hotend / bed PID separately in ExtUI (MarlinFirmware#16827) * Fix MKS Robin Nano platformio.ini entry (MarlinFirmware#16826) * Unify step pulse timing of ISR / babystep (MarlinFirmware#16813) * [cron] Bump distribution date (2020-02-11) * Update SAMD51 EEPROM repo link (MarlinFirmware#16832) * Undo driver type auto-assignment for now Good general concept but needs more time to develop and group with a stepper suite. * No Z sensorless req'd if homing with probe Fixes MarlinFirmware#16674 * Recommend Z Safe Homing Co-Authored-By: Vertabreaker <[email protected]> * Use prior babystep delay method (MarlinFirmware#16833) * Function-style critical section macros * Fix up tests * Simplify old safe homing sanity check * Prevent pin glitches on out commutation (MarlinFirmware#16835) Better for switching from pulled input to output and also set real output (with no input enabled). * [cron] Bump distribution date (2020-02-12) * Define MarlinSerial instances for DGUS (MarlinFirmware#16841) * No limit needed on this raise Remove an extraneous limit from MarlinFirmware#16811. * [cron] Bump distribution date (2020-02-13) * [cron] Bump distribution date (2020-02-14) * Fix G-code line parsing (MarlinFirmware#16840) * Ping the job timer in M140 (MarlinFirmware#16849) * Remove unused queue.stopped_N (MarlinFirmware#16850) * Don't assert safe homing for delta/scara * Fix ESP32 warning, specify supported version * Add ESPAsyncTCP to lib_ignore (MarlinFirmware#16844) * Add RAMPS 1.4.4 to AGCM4 (MarlinFirmware#16606) * Clean up host actions code (MarlinFirmware#16856) * Optimize "Dismiss" string * Clean up stepper and babystep (MarlinFirmware#16857) * Fysetc S6 pins / LCD updates (MarlinFirmware#16830) * [cron] Bump distribution date (2020-02-15) * Fix mftest -b and -u. Add --help. * Fix a BORG compile warning * Fix byte-to-percent display Fixes MarlinFirmware#16866 * Conceal float rounding errors on display Fix MarlinFirmware#16866 * [cron] Bump distribution date (2020-02-16) * Double ADC read frequency (MarlinFirmware#16864) * EXPERIMENTAL integrated BABYSTEPPING (MarlinFirmware#16829) * Show '*' for zero 'stst' flag * Require TMCStepper 0.6.2 * Defer updated ADC * Move SAMD51 Temperature timer to RTC (MarlinFirmware#16868) * Fix unknown command on empty lines (MarlinFirmware#16867) * Fix mftest -b -u line match * Update French language (MarlinFirmware#16877) * Put ESP32 I2S stepper task and Marlin on the same core (MarlinFirmware#16874) * Fix babystep include, typos in stepper.cpp Fix MarlinFirmware#16881 * [cron] Bump distribution date (2020-02-17) * [cron] Bump distribution date (2020-02-18) * [cron] Bump distribution date (2020-02-19) * [cron] Bump distribution date (2020-02-20) * Serial redirect for Move Command when stopping (MarlinFirmware#16906) * [cron] Bump distribution date (2020-02-21) * Single envs for specific boards * Inline manage_inactivity, tweak autoreport_paused * Function for CONFIG_ECHO_HEADING * Show end prompt with Print Event LEDs * Add a note on EEPROM todo * Tweak process_line_done for speed * More EEPROM cleanup * Followup to autoreport patch (MarlinFirmware#16914) See a1f026f * Disable spreadcycle in tmc_enable_stallguard<2209> (MarlinFirmware#16890) * Fix EEPROM errors with EXTRUDERS == 0 (MarlinFirmware#16898) * Add PICA shields support (MarlinFirmware#16891) * Tweak pins spacing, comments * Version 2.0.4 Release * [cron] Bump distribution date (2020-02-22) * Use moves_free in ok_to_send * Hotfix for Babystepping * CoreXY Babystepping hotfix * Use moves_free in ok_to_send * [cron] Bump distribution date (2020-02-22) * Hotfix for Babystepping * [ESP32] Allow user to define pins for hardware Serial1 and Serial2 (MarlinFirmware#16918) * CoreXY Babystepping hotfix * Version 2.0.4.1 Release * [cron] Bump distribution date (2020-02-23) * Finish Custom User Menu sanity-check (MarlinFirmware#16917) * Followup to babystep hotfix * Fix M0/M1 broken wait loop (MarlinFirmware#16921) * Define ANET_FULL_GRAPHICS_LCD pins for SKR 1.4 (MarlinFirmware#16928) * Version 2.0.4.2 Release * Suppress "packed member" warning * Suppress "packed member" warning * Commit last SD line before fileHasFinished * Allow LCD_PIXEL_WIDTH/HEIGHT override * Allow USE_GCODE_SUBCODES for debugging * Sync Italian language (MarlinFirmware#16935) * Reduce default TMC baudrate to 57600 with Software Serial (MarlinFirmware#16930) * [cron] Bump distribution date (2020-02-24) * Fix AXIS_HAS_SW_SERIAL * Simplified E_AXIS_HAS macro * "Init. Media" => "Attach Media" * Fix Babystepping loop (again) * BS_TOTAL_AXIS => BS_TOTAL_IND * Allow Z_SAFE_HOMING_POINT outside bed (MarlinFirmware#16945) * Restore tabs in Makefile (MarlinFirmware#16944) * Fix card_eof error * Version 2.0.4.3 Release * Allow Z_SAFE_HOMING_POINT outside bed (MarlinFirmware#16945) * Restore tabs in Makefile (MarlinFirmware#16944) * Fix card_eof error * [cron] Bump distribution date (2020-02-25) * Update POWER_LOSS_PIN comment (MarlinFirmware#16957) * Update Italian language (MarlinFirmware#16947) * Fix LCD cutter/bed icons overlapping (MarlinFirmware#16956) * Fix SKR 1.4 Turbo SD_DETECT_PIN (MarlinFirmware#16955) * Fix the wait loop in M0 / M1 * [cron] Bump distribution date (2020-02-26) * Ensure proper SD print completion (MarlinFirmware#16967) * HAS_SDCARD_CONNECTION is more obsolete * Fix GTR10 overlapping defines (MarlinFirmware#16976) * Toolchange improvements (MarlinFirmware#16979) * Language: "failsafe" => "Defaults" * Use a STR_ prefix for non-translated strings * Set LCD status for EEPROM errors (MarlinFirmware#16977) * More serial strings * Add LPC1768 Serial ports for pinsDebug (MarlinFirmware#16980) * Correct SKR expansion port pins (MarlinFirmware#16974) * String optimize followup * Fix Trinamic pulse rate auto-assignment (MarlinFirmware#16966) * Allow weird probe values in G33 * Serial strings in macros * Sanity check for LPC serial pin conflict (MarlinFirmware#16981) * Allow servo features in combination (MarlinFirmware#16960) * Add TRAVEL_EXTRA_XYJERK option See MarlinFirmware#16949 Co-Authored-By: josedpedroso <[email protected]> * Quick-homing sensorless back-off (MarlinFirmware#16872) * Prevent park_point compile error * More extra travel jerk changes Co-Authored-By: josedpedroso <[email protected]> * Fix unified status bed temp display * Allow print recovery after parking * Case-insensitive g-code option (MarlinFirmware#16932) * Define DIAG pins for MKS SGen-L * Handle print completed LED event in M0 * [cron] Bump distribution date (2020-02-27) * Fix planner.cpp compile (MarlinFirmware#16996) * Update Slovak language (MarlinFirmware#17002) * Version 2.0.4.4 Release Co-authored-by: Scott Lahteine <[email protected]> Co-authored-by: Acenotass <[email protected]> Co-authored-by: rebel1 <[email protected]> Co-authored-by: Jason Smith <[email protected]> Co-authored-by: Scott Lahteine <[email protected]> Co-authored-by: InsanityAutomation <[email protected]> Co-authored-by: ellensp <[email protected]> Co-authored-by: felixstorm <[email protected]> Co-authored-by: Bob Kuhn <[email protected]> Co-authored-by: thisiskeithb <[email protected]> Co-authored-by: Tanguy Pruvot <[email protected]> Co-authored-by: Robby Candra <[email protected]> Co-authored-by: Robert Stein <[email protected]> Co-authored-by: Fabio Santos <[email protected]> Co-authored-by: Giuliano Zaro <[email protected]> Co-authored-by: Daniel Mazurkiewicz <[email protected]> Co-authored-by: tol2cj <[email protected]> Co-authored-by: proferabg <[email protected]> Co-authored-by: darksiah <[email protected]> Co-authored-by: Vertabreaker <[email protected]> Co-authored-by: Gaston Dombiak <[email protected]> Co-authored-by: vivian-ng <[email protected]> Co-authored-by: George Fu <[email protected]> Co-authored-by: Karl Andersson <[email protected]> Co-authored-by: Jamie <[email protected]> Co-authored-by: ZMiguel Alves <[email protected]> Co-authored-by: Marcio T <[email protected]> Co-authored-by: josedpedroso <[email protected]> Co-authored-by: Makoto Schoppert <[email protected]> Co-authored-by: Roman Moravčík <[email protected]>
To address #16617 this PR adjust the timing delays around babystepping.
The main fix is the delay after a babystep and before re-enabling the ISRs.
For consistency, use the same timing macros that are used for pulses in the ISR.