mirror of
https://github.com/grblHAL/core.git
synced 2026-09-22 03:08:33 +08:00
Delta kinematics improvements. Added setting for base > floor distance, $DELTA command for work envelope info. Still WIP.
Changed signature of grbl.on_homing_completed event.
This commit is contained in:
+15
-1
@@ -1,6 +1,20 @@
|
||||
## grblHAL changelog
|
||||
|
||||
<a name="20230818"/>20230818
|
||||
<a name="20230820"/>Build 20230820
|
||||
|
||||
Core:
|
||||
|
||||
* Delta kinematics improvements. Added setting for base > floor distance, `$DELTA` command for work envelope info. Still WIP.
|
||||
|
||||
* Changed signature of `grbl.on_homing_completed` event.
|
||||
|
||||
Drivers:
|
||||
|
||||
* RP2040: Fix for [issue #72](https://github.com/grblHAL/RP2040/discussions/72) \(typo\), improved SPI chip select handling.
|
||||
|
||||
---
|
||||
|
||||
<a name="20230818"/>Build 20230818
|
||||
|
||||
Core:
|
||||
|
||||
|
||||
@@ -137,6 +137,9 @@ Experimental - testing required and homing needs to be worked out.
|
||||
*/
|
||||
#if !defined DELTA_ROBOT || defined __DOXYGEN__
|
||||
#define DELTA_ROBOT Off
|
||||
#if !defined MINIMUM_FEED_RATE
|
||||
#define MINIMUM_FEED_RATE 0.1f // (radians/min)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*! \def POLAR_ROBOT
|
||||
|
||||
+1
-1
@@ -97,7 +97,7 @@ typedef void (*on_unknown_feedback_message_ptr)(stream_write_ptr stream_write);
|
||||
typedef void (*on_stream_changed_ptr)(stream_type_t type);
|
||||
typedef bool (*on_laser_ppi_enable_ptr)(uint_fast16_t ppi, uint_fast16_t pulse_length);
|
||||
typedef void (*on_homing_rate_set_ptr)(axes_signals_t axes, float rate, homing_mode_t mode);
|
||||
typedef void (*on_homing_completed_ptr)(void);
|
||||
typedef void (*on_homing_completed_ptr)(bool succes);
|
||||
typedef bool (*on_probe_fixture_ptr)(tool_data_t *tool, bool at_g59_3, bool on);
|
||||
typedef bool (*on_probe_start_ptr)(axes_signals_t axes, float *target, plan_line_data_t *pl_data);
|
||||
typedef void (*on_probe_completed_ptr)(void);
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
#else
|
||||
#define GRBL_VERSION "1.1f"
|
||||
#endif
|
||||
#define GRBL_BUILD 20230818
|
||||
#define GRBL_BUILD 20230820
|
||||
|
||||
#define GRBL_URL "https://github.com/grblHAL"
|
||||
|
||||
|
||||
+243
-125
File diff suppressed because it is too large
Load Diff
+14
-7
@@ -80,6 +80,7 @@ bool mc_line (float *target, plan_line_data_t *pl_data)
|
||||
|
||||
#ifdef KINEMATICS_API
|
||||
float feed_rate = pl_data->feed_rate;
|
||||
pl_data->rate_multiplier = 1.0;
|
||||
target = kinematics.segment_line(target, plan_get_position(), pl_data, true);
|
||||
#endif
|
||||
|
||||
@@ -894,14 +895,22 @@ status_code_t mc_homing_cycle (axes_signals_t cycle)
|
||||
|
||||
if(cycle.mask) {
|
||||
|
||||
if(!protocol_execute_realtime()) // Check for reset and set system abort.
|
||||
return Status_Unhandled; // Did not complete. Alarm state set by mc_alarm.
|
||||
if(!protocol_execute_realtime()) { // Check for reset and set system abort.
|
||||
|
||||
if(grbl.on_homing_completed)
|
||||
grbl.on_homing_completed(false);
|
||||
|
||||
return Status_Unhandled; // Did not complete. Alarm state set by mc_alarm.
|
||||
}
|
||||
|
||||
if(homed_status != Status_OK) {
|
||||
|
||||
if(state_get() == STATE_HOMING)
|
||||
state_set(STATE_IDLE);
|
||||
|
||||
if(grbl.on_homing_completed)
|
||||
grbl.on_homing_completed(false);
|
||||
|
||||
return homed_status;
|
||||
}
|
||||
|
||||
@@ -929,13 +938,11 @@ status_code_t mc_homing_cycle (axes_signals_t cycle)
|
||||
? Status_LimitsEngaged
|
||||
: Status_OK;
|
||||
|
||||
if(homed_status == Status_OK) {
|
||||
|
||||
if(homed_status == Status_OK)
|
||||
limits_set_work_envelope();
|
||||
|
||||
if(grbl.on_homing_completed)
|
||||
grbl.on_homing_completed();
|
||||
}
|
||||
if(grbl.on_homing_completed)
|
||||
grbl.on_homing_completed(homed_status == Status_OK);
|
||||
|
||||
return homed_status;
|
||||
}
|
||||
|
||||
+9
-3
@@ -42,9 +42,15 @@
|
||||
|
||||
#define TOLERANCE_EQUAL 0.0001f
|
||||
|
||||
#define TAN_30 0.57735f // Used for threading calculations (60 degree inserts)
|
||||
#define RADDEG 0.0174532925f // Radians per degree
|
||||
#define DEGRAD 57.29577951f // Degrees per radians
|
||||
#define RADDEG 0.01745329251994329577f // Radians per degree
|
||||
#define DEGRAD 57.29577951308232087680f // Degrees per radians
|
||||
#define SQRT3 1.73205080756887729353f
|
||||
#define SIN120 0.86602540378443864676f
|
||||
#define COS120 -0.5f
|
||||
#define TAN60 1.73205080756887729353f
|
||||
#define SIN30 0.5f
|
||||
#define TAN30 0.57735026918962576451f
|
||||
#define TAN30_2 0.28867513459481288225f
|
||||
|
||||
#define ABORTED (sys.abort || sys.cancel)
|
||||
|
||||
|
||||
@@ -524,6 +524,9 @@ bool plan_buffer_line (float *target, plan_line_data_t *pl_data)
|
||||
block->programmed_rate = block->rapid_rate;
|
||||
else {
|
||||
block->programmed_rate = pl_data->feed_rate;
|
||||
#ifdef KINEMATICS_API
|
||||
block->rate_multiplier = pl_data->rate_multiplier;
|
||||
#endif
|
||||
if (block->condition.inverse_time)
|
||||
block->programmed_rate *= block->millimeters;
|
||||
}
|
||||
|
||||
@@ -67,7 +67,9 @@ typedef struct plan_block {
|
||||
float max_junction_speed_sqr; // Junction entry speed limit based on direction vectors in (mm/min)^2
|
||||
float rapid_rate; // Axis-limit adjusted maximum rate for this block direction in (mm/min)
|
||||
float programmed_rate; // Programmed rate of this block (mm/min).
|
||||
|
||||
#ifdef KINEMATICS_API
|
||||
float rate_multiplier; // Rate multiplier of this block.
|
||||
#endif
|
||||
// Stored spindle speed data used by spindle overrides and resuming methods.
|
||||
spindle_t spindle; // Block spindle parameters. Copied from pl_line_data.
|
||||
|
||||
@@ -80,6 +82,9 @@ typedef struct plan_block {
|
||||
// Planner data prototype. Must be used when passing new motions to the planner.
|
||||
typedef struct {
|
||||
float feed_rate; // Desired feed rate for line motion. Value is ignored, if rapid motion.
|
||||
#ifdef KINEMATICS_API
|
||||
float rate_multiplier; // Feed rate multiplier.
|
||||
#endif
|
||||
// float blending_tolerance; // Motion blending tolerance
|
||||
spindle_t spindle; // Desired spindle parameters, such as RPM, through line motion.
|
||||
planner_cond_t condition; // Bitfield variable to indicate planner conditions. See defines above.
|
||||
|
||||
+8
-1
@@ -424,8 +424,11 @@ static char spindle_types[100] = "";
|
||||
static char axis_dist[4] = "mm";
|
||||
static char axis_rate[8] = "mm/min";
|
||||
static char axis_accel[10] = "mm/sec^2";
|
||||
#if DELTA_ROBOT
|
||||
static char axis_steps[9] = "step/rev";
|
||||
#else
|
||||
static char axis_steps[9] = "step/mm";
|
||||
|
||||
#endif
|
||||
#define AXIS_OPTS { .subgroups = On, .increment = 1 }
|
||||
|
||||
PROGMEM static const setting_detail_t setting_detail[] = {
|
||||
@@ -721,7 +724,11 @@ PROGMEM static const setting_descr_t setting_descr[] = {
|
||||
{ Setting_PositionIGain, "" },
|
||||
{ Setting_PositionDGain, "" },
|
||||
{ Setting_PositionIMaxError, "Spindle sync PID max integrator error." },
|
||||
#if DELTA_ROBOT
|
||||
{ Setting_AxisStepsPerMM, "Travel resolution in steps per revolution." },
|
||||
#else
|
||||
{ Setting_AxisStepsPerMM, "Travel resolution in steps per millimeter." },
|
||||
#endif
|
||||
{ (setting_id_t)(Setting_AxisStepsPerMM + 1), "Travel resolution in steps per degree." }, // "Hack" to get correct description for rotary axes
|
||||
{ Setting_AxisMaxRate, "Maximum rate. Used as G0 rapid rate." },
|
||||
{ Setting_AxisAcceleration, "Acceleration. Used for motion planning to not exceed motor torque and lose steps." },
|
||||
|
||||
@@ -125,6 +125,9 @@ typedef struct {
|
||||
float current_speed; // Current speed at the end of the segment buffer (mm/min)
|
||||
float maximum_speed; // Maximum speed of executing block. Not always nominal speed. (mm/min)
|
||||
float exit_speed; // Exit speed of executing block (mm/min)
|
||||
#ifdef KINEMATICS_API
|
||||
float rate_multiplier; // Rate multiplier of executing block.
|
||||
#endif
|
||||
float accelerate_until; // Acceleration ramp end measured from end of block (mm)
|
||||
float decelerate_after; // Deceleration ramp start measured from end of block (mm)
|
||||
float target_position; //
|
||||
@@ -726,6 +729,7 @@ void st_prep_buffer (void)
|
||||
|
||||
st_prep_block->direction_bits = pl_block->direction_bits;
|
||||
st_prep_block->programmed_rate = pl_block->programmed_rate;
|
||||
// st_prep_block->r = pl_block->programmed_rate;
|
||||
st_prep_block->millimeters = pl_block->millimeters;
|
||||
st_prep_block->steps_per_mm = (float)pl_block->step_event_count / pl_block->millimeters;
|
||||
st_prep_block->output_commands = pl_block->output_commands;
|
||||
@@ -739,7 +743,9 @@ void st_prep_buffer (void)
|
||||
prep.steps_remaining = pl_block->step_event_count;
|
||||
prep.req_mm_increment = REQ_MM_INCREMENT_SCALAR / prep.steps_per_mm;
|
||||
prep.dt_remainder = prep.target_position = 0.0f; // Reset for new segment block
|
||||
|
||||
#ifdef KINEMATICS_API
|
||||
prep.rate_multiplier = pl_block->rate_multiplier;
|
||||
#endif
|
||||
if (sys.step_control.execute_hold || prep.recalculate.decel_override) {
|
||||
// New block loaded mid-hold. Override planner block entry speed to enforce deceleration.
|
||||
prep.current_speed = prep.exit_speed;
|
||||
@@ -1116,5 +1122,11 @@ void st_prep_buffer (void)
|
||||
// divided by the ACCELERATION TICKS PER SECOND in seconds.
|
||||
float st_get_realtime_rate (void)
|
||||
{
|
||||
return state_get() & (STATE_CYCLE|STATE_HOMING|STATE_HOLD|STATE_JOG|STATE_SAFETY_DOOR) ? prep.current_speed : 0.0f;
|
||||
return state_get() & (STATE_CYCLE|STATE_HOMING|STATE_HOLD|STATE_JOG|STATE_SAFETY_DOOR)
|
||||
#ifdef KINEMATICS_API
|
||||
? prep.current_speed * prep.rate_multiplier
|
||||
#else
|
||||
? prep.current_speed
|
||||
#endif
|
||||
: 0.0f;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user