- M5 now disables PWM completely in both standard and servo modes
- Inverted servo mapping: S0=pen up (16 ticks), S1000=pen down (31 ticks)
- Updated SERVO_MODE.md documentation to reflect new behavior
- Changed config defaults: MIN_PULSE=16, MAX_PULSE=31
- Implemented USE_SPINDLE_SERVO_MODE configuration option
- Changed Timer2 prescaler from 1/8 to 1/1024 for ~50Hz servo frequency
- Added configurable servo pulse width range (SPINDLE_SERVO_MIN_PULSE/MAX_PULSE)
- M3 S0-S1000 now controls servo position (0-180 degrees)
- M5 positions servo to maximum position (pen up) instead of disabling PWM
- Default configuration supports pen plotter with reversed pulse values (MIN=31, MAX=16)
- Only supports ATmega328p (Arduino Uno) processors
Based on: https://www.buildlog.net/blog/2017/08/using-grbls-spindle-pwm-to-control-a-servo/
GitHub's Markdown interpreter was recently changed to strictly enforce the GFM spec, which requires a delimiting space in header Markdown. This has caused some Markdown to no longer display as originally intended.
- The homing routine for CoreXY/H-Bot CNC machines has been fixed.
- Version date bumped, but this update does NOT effect any normal
users. Only CoreXY users.
- When VARIABLE_SPINDLE output is disabled in config.h, the last commit
would keep the spindle enable pin disabled when spindle speed is not
defined (S0). This is now ignored and will enable with S0, as spindle
speed is ignored in this mode.
- Soft limit errors were stuck in a feed hold without notifying the
user why it was in a hold. When resumed, the soft limit error would
kick in. Issue should be fixed to behave as intended to automatically
hold and issue a soft limit alarm once the machine has come to a stop.
- Strange sizeof() bug in the most recent releases. Manifested as an
alarm upon a power up even when homing was disabled. Fixed by declaring
sizeof() with struct types, rather than variable names, even though
they were validated to give the same value.
- Spindle speed zero should disable the spindle. Now fixed.
- New configuration option for inverting certain limit pins. Handy for
mixed NO and NC switch machines. See config.h for details.
- Incremented version and pre-build firmware link.
- Planner was under-estimating maximum speeds through straight
junctions in certain cases. The calculations have been updated to be
more accurate.
- Type declaration fix in probe.c.
- Commit log for v0.9j generated separately from v0.9i’s.
- Incremented version and updated pre-built firmware link.
- G38.x was not printing correctly in the $G g-code state reports. Now
fixed.
- Potential bug regarding volatile variables inside a struct. It has
never been a problem in v0.9, but ran into this during v1.0
development. Just to be safe, the fixes are applied here.
- Updated pre-built firmwares with these two bug fixes.
- Version bump requested by OEMs to easily determine whether the
firmware supports the new EEPROM reset feature. Other than that, no
significant changes.
- Tweaked the previous EEPROM restore implementation and added new
functionality.
- `$RST=$` restores the `$$` grbl settings back to firmware defaults,
which are set when compiled.
- `$RST=#` restores the `$#` parameters in EEPROM. At times it’s useful
to clear these and start over, rather than manually writing each entry.
-`$RST=*` wipe all of the data in EEPROM that Grbl uses and restores
them to defaults. This includes `$$` settings, `$#` parameters, `$N`
startup lines, and `$i` build info string.
NOTE: This doesn’t write zeros throughout the EEPROM. It only writes
where Grbl looks for data. For a complete wipe, please use the Arduino
IDE’s EEPROM clear example.
- Refactored the restore and wipe functions in settings.c to
accommodate the new commands.
- New restore setting defaults command. Only wipes ‘$$’ setting in
EEPROM and reloads them based on the defaults used when Grbl was
compiled. Used with a `$RST` command
NOTE: `$RST` is intentionally not listed in the Grbl ‘$’ help message.
- Added X-Carve 500mm and 1000mm default files.
- Tweaked all default files. Removed obsolete AUTO_START and updated
some JUNCTION_DEVIATION defaults after testing showed these needed to
be reduced slightly.
- Updated new homing cycle to error out when a pull-off motion detects
the limit is still active.
- Created a limits_get_state() function to centralize it. It reports
state as a bit-wise booleans according to axis numbering.
- Updated the print uint8 functions. Generalized it to allow both base2
and base10 printouts, while allowing base2 prints with N_AXIS digits
for limit state status reports. Doing this saved about 100bytes of
flash as well.
- Applied CoreXY status reporting bug fix by @phd0. Thanks!
- Critical fix for M0 program pause. Due to its recent change, it would
cause Grbl to suspend but wouldn’t notify the user of why Grbl was not
doing anything. The state would show IDLE and a cycle start would
resume it. Grbl now enters a HOLD state to better indicate the state
change.
- Critical fix for M2 and M30 program end. As with M0, the state
previously would show IDLE while suspended. Grbl now does not suspend
upon program end and leaves job control to the GUI. Grbl simply reports
a `[Pgm End]` as a feedback message and resets certain g-code modes.
- M2/30 g-code reseting fix. Previously Grbl would soft-reset after an
M2/30, but this was not complaint to the (linuxcnc) g-code standard. It
simply resets [G1,G17,G90,G94,G40,G54,M5,M9,M48] and keeps all other
modes the same.
- M0/M2/M30 check-mode fix. It now does not suspend the machine during
check-mode.
- Minor bug fix related to commands similar to G90.1, but not G90.1,
not reporting an unsupported command.
- Homing cycle refactoring. To help reduce the chance of users
misunderstanding their limit switch wiring, Grbl only moves a short
distance for the locate cycles only. In addition, the homing cycle
pulls-off the limit switch by the pull-off distance to re-engage and
locate home. This should improve its accuracy.
- HOMING_FORCE_ORIGIN now sets the origin to the pull-off location,
rather than where the limit switch was triggered.
- Updated default junction deviation to 0.01mm. Recent tests showed
that this improves Grbl’s cornering behavior a bit.
- Added the ShapeOko3 defaults.
- Added new feedback message `[Pgm End]` for M2/30 notification.
- Limit pin reporting is now a $10 status report option. Requested by
OEMs to help simplify support troubleshooting.
- Commit history added to repo, as an easier way for people to see view
the changes over time.
- Grbl logo copyright license added. All rights reserved with regards
to the Grbl logo.
- G2/3 full circles would sometime not execute. The problem was due to
numerical round-off of a trig calculation. Added a machine epsilon
define to help detect and correct for this problem. Tested and should
not effect general operation of arcs.
- Apparently inverse time motion were not working for quite some time.
Goes to show how many people actually use it. The calculation was bad
and is now fixed in this update. It should now work correctly.
- `;` comment type is now supported. This is standard on LinuxCNC and
common on 3d printers. It was previously not supported due to not
existing in the NIST standard, which is out-dated.
- New compile-option to ECHO the line received. This should help users
experiencing very weird problems and help diagnose if there is
something amiss in the communication to Grbl.
- New compile-option to use the spindle direction pin D13 as a spindle
enable pin with PWM spindle speed on D11. This feature has been
requested often from the laser cutter community. Since spindle
direction isn’t really of much use, it seemed like good good trade.
Note that M4 spindle enable counter-clock-wise support is removed for
obvious reasons, while M3 and M5 still work.