- Rudimentary CoreXY kinematics support. Didn’t test, but homing and
feed holds should work. See config.h. Please report successes and
issues as we find bugs.
- G40 (disable cutter comp) is now “supported”. Meaning that Grbl will
no longer issue an error when typically sent in g-code program header.
- Refactored coolant and spindle state setting into separate functions
for future features.
- Configuration option for fixing homing behavior when there are two
limit switches on the same axis sharing an input pin.
- Created a new “grbl.h” that will eventually be used as the main
include file for Grbl. Also will help simply uploading through the
Arduino IDE
- Separated out the alarms execution flags from the realtime (used be
called runtime) execution flag variable. Now reports exactly what
caused the alarm. Expandable for new alarms later on.
- Refactored the homing cycle to support CoreXY.
- Applied @EliteEng updates to Mega2560 support. Some pins were
reconfigured.
- Created a central step to position and vice versa function. Needed
for non-traditional cartesian machines. Should make it easier later.
- Removed the new CPU map for the Uno. No longer going to used. There
will be only one configuration to keep things uniform.
- Minor bug fix for variable spindle PWM output. Values smaller than
the minimum RPM for the spindle would overflow the PWM value. Thanks
Rob!
- Created an optional minimum spindle PWM low-mark value as a
compile-time option. This is for special circumstances when the PWM has
to be at a certain level to be read by the spindle controller.
- Refactored the new probing commands (G38.3, G38.4, G38.5) code to
work better with the rest of Grbl’s systems.
- Refactored mc_probe() and mc_arc() to accept the mode of the command,
i.e. clockwise vs counter, toward vs away, etc. This is to make these
functions independent of gcode state variables.
- Removed the pull off motion in the probing cycle. This is not an
official operation and was added for user simplicity, but wrongly did
so. So bye bye.
- Created a configure probe invert mask function to handle the
different probe pin setting and probing cycle modes with a single mask.
- Minor bug fix with reporting motion modes via $G. G38.2 wasn’t
showing up. It now does, along with the other new probing commands.
- Refactored some of the new pin configurations for the future of Grbl.
-
- Sometime I HATE github. This push is just here to be able to describe
the last two pushes today that had a merging conflict and lost all of
the commit comments before.
- Setting $10 would cause $11 to be the same value. Missed a break
statement in the switch-case. Oops! Now fixed.
- CPU pin map for the future versions of Grbl introduced, but not yet
finalized. Still working on it and it’s subject to change.
- Added a new high-speed machining test g-code routine written by Todd
Fleming. Mills a pocket at 15,000mm/min. Do not use when connected to
your machine! You’ve been warned!
- G38.2 straight probe now supported. Rough draft. May be tweaked more
as testing ramps up.
- G38.2 requires at least one axis word. Multiple axis words work too.
When commanded, the probe cycle will move at the last ‘F’ feed rate
specified in a straight line.
- During a probe cycle: If the probe pin goes low (normal high), Grbl
will record that immediate position and engage a feed hold. Meaning
that the CNC machine will move a little past the probe switch point, so
keep federates low to stop sooner. Once stopped, Grbl will issue a move
to go back to the recorded probe trigger point.
- During a probe cycle: If the probe switch does not engage by the time
the machine has traveled to its target coordinates, Grbl will issue an
ALARM and the user will be forced to reset Grbl. (Currently G38.3 probe
without error isn’t supported, but would be easy to implement later.)
- After a successful probe, Grbl will send a feedback message
containing the recorded probe coordinates in the machine coordinate
system. This is as the g-code standard on probe parameters specifies.
- The recorded probe parameters are retained in Grbl memory and can be
viewed with the ‘$#’ print parameters command. Upon a power-cycle, not
a soft-reset, Grbl will re-zero these values.
- Moved ‘$#’ command to require IDLE or ALARM mode, because it accesses
EEPROM to fetch the coordinate system offsets.
- Updated the Grbl version to v0.9d.
- The probe cycle is subject to change upon testing or user-feedback.
WARNING: There are still some bugs to be worked out. Please use caution
if you test this firmware.
- Feed holds work much better, but there are still some failure
conditions that need to be worked out. This is the being worked on
currently and a fix is planned to be pushed next.
- Homing cycle refactoring: Slight adjustment of the homing cycle to
allow for limit pins to be shared by different axes, as long as the
shared limit pins are not homed on the same cycle. Also, removed the
LOCATE_CYCLE portion of the homing cycle configuration. It was
redundant.
- Limit pin sharing: (See above). To clear up one or two limit pins for
other IO, limit pins can now be shared. For example, the Z-limit can be
shared with either X or Y limit pins, because it’s on a separate homing
cycle. Hard limit will still work exactly as before.
- Spindle pin output fixed. The pins weren’t getting initialized
correctly.
- Fixed a cycle issue where streaming was working almost like a single
block mode. This was caused by a problem with the spindle_run() and
coolant_run() commands and issuing an unintended planner buffer sync.
- Refactored the cycle_start, feed_hold, and other runtime routines
into the runtime command module, where they should be handled here
only. These were redundant.
- Moved some function calls around into more appropriate source code
modules.
- Fixed the reporting of spindle state.
- Added a new source and header file called system. These files contain
the system commands and variables, as well as all of the system headers
and standard libraries Grbl uses. Centralizing some of the code.
- Re-organized the include headers throughout the source code.
- ENABLE_M7 define was missing from config.h. Now there.
- SPINDLE_MAX_RPM and SPINDLE_MIN_RPM now defined in config.h. No
uncommenting to prevent user issues. Minimum spindle RPM now provides
the lower, near 0V, scale adjustment, i.e. some spindles can go really
slow so why use up our 256 voltage bins for them?
- Remove some persistent variables from coolant and spindle control.
They were redundant.
- Removed a VARIABLE_SPINDLE define in cpu_map.h that shouldn’t have
been there.
- Changed the DEFAULT_ARC_TOLERANCE to 0.002mm to improve arc tracing.
Before we had issues with performance, no longer.
- Fixed a bug with the hard limits and the software debounce feature
enabled. The invert limit pin setting wasn’t honored.
- Fixed a bug with the homing direction mask. Now is like it used to
be. At least for now.
- Re-organized main.c to serve as only as the reset/initialization
routine. Makes things a little bit clearer in terms of execution
procedures.
- Re-organized protocol.c as the overall master control unit for
execution procedures. Not quite there yet, but starting to make a
little more sense in how things are run.
- Removed updating of old settings records. So many new settings have
been added that it’s not worth adding the code to migrate old user
settings.
- Tweaked spindle_control.c a bit and made it more clear and consistent
with other parts of Grbl.
- Tweaked the stepper disable bit code in stepper.c. Requires less
flash memory.
- Variable spindle speed output as a configuration option. Thanks
@EliteEng! When enabled, the Z-limit (D11) and spindle enable(D12) pins
switch to allow access to the hardware PWM output on pin D11.
Otherwise, everything should work as it does.
- Removed option for inverting the spindle and coolant enable pins.
This is a safety hazard, especially for the spindle. When Grbl
initializes, all pins are momentarily low until it finishes booting. If
an invert is enabled, this means the spindles can be energized briefly
during this time. If users need signal inversion, it’s recommended to
just wire in an inversion circuit instead.
- Cleared out references to spindle variable output in terms of step
signal. This isn’t complete and requires more deliberation before
installing.
- Cleared up and cleaned up some code and config comments.
- Homing travel calculations fixed. It was computing the min travel
rather than max.
- Auto-start disable and pausing after spindle or dwell commands.
Related to plan_synchronize() function call. Now fixed, but still need
to work on the system state.
- Pushed a fix to make this branch more Arduino IDE compatible. Removed
extern call in nuts_bolts.c
- Updated the stepper configuration option of enabling or disabling the
new Adaptive Multi-Axis Step Smoothing Algorithm. Now works either way.
- Updated some copyright info.
- NEW! An active multi-axis step smoothing algorithm that automatically
adjusts dependent on step frequency. This solves the long standing
issue to aliasing when moving with multiple axes. Similar in scheme to
Smoothieware, but more advanced in ensuring a more consistent CPU
overhead throughout all frequencies while maintaining step exactness.
- Switched from Timer2 to Timer0 for the Step Port Reset Interrupt.
Mainly to free up hardware PWM pins.
- Seperated the direction and step pin assignments, so we can now move
them to seperate ports. This means that we can more easily support 4+
axes in the future.
- Added a setting for inverting the limit pins, as so many users have
request. Better late than never.
- Bug fix related to EEPROM calls when in cycle. The EEPROM would kill
the stepper motion. Now protocol mandates that the system be either in
IDLE or ALARM to access or change any settings.
- Bug fix related to resuming the cycle after a spindle or dwell
command if auto start has been disabled. This fix is somewhat temporary
or more of a patch. Doesn’t work with a straight call-response
streaming protocol, but works fine with serial buffer pre-filling
streaming that most clients use.
- Renamed the pin_map.h to cpu_map.h to more accurately describe what
the file is.
- Pushed an auto start bug fix upon re-initialization.
- Much more polishing to do!