Improvements and bug fixes in sensor delay buffer for filament sensor code
Improvement to avoid reinitializing delay buffer with every print. Fixed issues in buffer indexing and memory out of bounds due to floating point imprecision. Simplified the code by avoiding conversion to standard diameter and 1cu mm extrusion, which caused complications in determining mm extruded.
This commit is contained in:
@ -743,15 +743,25 @@ block->steps_y = labs((target[X_AXIS]-position[X_AXIS]) - (target[Y_AXIS]-positi
|
||||
|
||||
#ifdef FILAMENT_SENSOR
|
||||
//FMM update ring buffer used for delay with filament measurements
|
||||
|
||||
if(filament_sensor && (extruder==0)) //only for extruder 0
|
||||
|
||||
|
||||
if((extruder==FILAMENT_SENSOR_EXTRUDER_NUM) && (delay_index2 > -1)) //only for extruder with filament sensor and if ring buffer is initialized
|
||||
{
|
||||
delay_dist = delay_dist + delta_mm[E_AXIS]; //increment counter with next move in e axis
|
||||
if (delay_dist> (10*(MAX_MEASUREMENT_DELAY+1))) //check if counter is over max buffer size in mm
|
||||
|
||||
while (delay_dist >= (10*(MAX_MEASUREMENT_DELAY+1))) //check if counter is over max buffer size in mm
|
||||
delay_dist = delay_dist - 10*(MAX_MEASUREMENT_DELAY+1); //loop around the buffer
|
||||
if(delay_dist<0)
|
||||
while (delay_dist<0)
|
||||
delay_dist = delay_dist + 10*(MAX_MEASUREMENT_DELAY+1); //loop around the buffer
|
||||
delay_index1=delay_dist/10; //calculate index
|
||||
|
||||
delay_index1=delay_dist/10.0; //calculate index
|
||||
|
||||
//ensure the number is within range of the array after converting from floating point
|
||||
if(delay_index1<0)
|
||||
delay_index1=0;
|
||||
else if (delay_index1>MAX_MEASUREMENT_DELAY)
|
||||
delay_index1=MAX_MEASUREMENT_DELAY;
|
||||
|
||||
if(delay_index1 != delay_index2) //moved index
|
||||
{
|
||||
meas_sample=widthFil_to_size_ratio()-100; //subtract off 100 to reduce magnitude - to store in a signed char
|
||||
@ -761,10 +771,16 @@ block->steps_y = labs((target[X_AXIS]-position[X_AXIS]) - (target[Y_AXIS]-positi
|
||||
delay_index2 = delay_index2 + 1;
|
||||
if(delay_index2>MAX_MEASUREMENT_DELAY)
|
||||
delay_index2=delay_index2-(MAX_MEASUREMENT_DELAY+1); //loop around buffer when incrementing
|
||||
if(delay_index2<0)
|
||||
delay_index2=0;
|
||||
else if (delay_index2>MAX_MEASUREMENT_DELAY)
|
||||
delay_index2=MAX_MEASUREMENT_DELAY;
|
||||
|
||||
measurement_delay[delay_index2]=meas_sample;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user