Firmware wishlist and priorities for Duet WiFi and Duet Ethernet
-
Andrew, reading the Gecko drive post it looks like he is talking about compensating for this in the stepper driver chip using an FPGA to alter the Electrical waveform to compensate for the mechanical error in microstepping position. That means the compensation will be in fractions of microsteps. Within firmware we only have the ability to work in microsteps, and this sort of error is not cumulative so I think this is a stepper driver chip level functionality request.
-
Hi Tony,
While Mariss is indeed talking about performing the compensation as part of the driver, I believe the method could be applied at the level above.
The controller would need to keep track of the electrical phase angle that the driver chip is currently positioned at. This assumes that there's a way of the driver chip telling the controller that it has reached a full step position. (This is only needed at the start, as the controller can keep track of it afterwards - This could possibly be queried directly or possibly assumed when the driver chip is first enabled - I haven't checked the datasheet though) Essentially the electrical phase angle is the modulus of the current position (In steps) and the current microstepping level multiplied by 4. (As there's 4 quadrants)
We can then talk about two different step counts, let's call them virtual steps (Where we want the motor to go, representing physical positions on the model) and physical steps. (Corrected steps that we've commanded the driver chip to use, representing the electrical position of the motor)
If the step position that we currently output to the driver is the virtual steps, then all we should need to do is add the compensation value (Which is looked up from a pre-configured table based on the current electrical phase angle) to get to the physical steps, which can then be output.
I hope that makes sense, I can try to explain in a different way if needed - I'm also making an assumption that the controller can find out where the full step position of the driver is.
-
Hi Andrew it does make sense, but my understanding was the error was less than 1 microstep. That means that there is never anything that can be compensated for by a system that the smallest correction it can input is steps.
-
A fair point, I hadn't considered the resolution required - I've just graphed the compensation assuming 16x microstepping here:
In this graph, you see that each microstep represents a change of about 6% and the correction is about half of that at around 3% - Therefore 32x or 64x microstepping should be enough to make it work.
-
You'll not get 32x let alone 64x micro-stepping holding torque accuracy except for random rare cases of pure luck. You might get 16x if your lucky. Micro stepping works sure, but it doesn't replace good old mechanical resolution. I would say 1/8th stepping calculations might be a bit more realistic.
-
In terms of positional accuracy and for low speed movements, the amount of torque required in a 3D printer (Especially for the X and Y axes) is very low - I don't believe there should be any issue in holding a position to those sorts of accuracies. (Except maybe for deltas and Z axes ?) I don't have any evidence for this though, just based on speculation and theory.
With 16x or 8x, as Tony identified the correction distance is smaller than the resolution so it doesn't make sense at these microstepping levels.
-
What might work for a delta might not work so much for a cartesian. Before I upgraded the stepper on my Z axis I think I was getting about 1/4 step holding accuracy. So for me compensation wasn't working all that great. So much better now with higher torque motor.
-
Is this for a regular cartesian machine ? What stepper motors / current are you using and what pitch of leadscrew ? I don't have any numbers for this so it would be great to put some numbers behind it.
-
Voting for number 5
-
8, 7, 20, 16
-
Hi DC42,
Just wondering where you got to with G2/G3 arc support? Not sure if you spotted my rants on other threads about my testing results from 1.18beta1 and beta3? In a nutshell, according to my interpretation of the I and J parameters the motion you create for the arc is incorrect. I've played with all kinds of values for I and J and it always ends up with a vertical linear motion before the arc actually starts regardless of the value being entered (unless I and J are both zero in which case it is a straight line to the end coordinate). Also, if the arc motion takes the head outside the min/max bed size limitations it does not clip the arc, causing the motors to skip as the head slams into the mechanical limitations.
Really just after some confirmation that you still have plans to get it working correctly as I've committed quite a bit of time on my end writing code to convert regular 3D print G-code to use arcs instead of hundreds of short lines for curved surfaces. Not much point in taking that further if G2/G3 support is going to come to a dead end on the Duet.
Many thanks for putting the time you already have into supporting arcs.
-
7, 14, 18, 16, 11
-
7
11
12
18 -
i suggested this before, but when i "heater fault" occurs why not pause the print and allow the user to "resume" the print after the fault is rectified/cleared.
-
1
5
6
14
19 -
i suggested this before, but when i "heater fault" occurs why not pause the print and allow the user to "resume" the print after the fault is rectified/cleared.
Good idea, I'll add it to the wish list.
-
XYZ Compensation
Like josef prusa does it here: https://www.youtube.com/watch?v=rYrLT5G-a9I
i know that this might sound crazy but there must be a reason why mk42 heat beds have 9 points in some very precise locations
and yes skew can be corrected but you have to measure manual. automatic would be better. maybe giving the user a chance to correct if there is skew in the hardware.
i will be given one of these for free from a german source, and then i will get one from here: https://www.indiegogo.com/projects/mk42-heated-bed-ultimate-3d-printer-build-plate/x/16302496#/
code for the feature can maybe be taken from here: https://github.com/prusa3d/Prusa-Firmware/blob/MK2/Firmware/mesh_bed_calibration.cpp#L53
but that might not be the whole picture
-
In no particular order my votes are:
4/5) does this mean that say 2 corners of the bed can be fixed and 2 Z's steppers are then driven to get the same Z at both corners? ie like on the mendel90 where you only adjust 2 of 4 screws at the bed corners
16
19
20
15 -
pause on heater fault
15
14
17 + filament monitor and pause on filament issue -
6
13
8
19
3
Consider: Use Stallguard to perform bed levelling/compensation. GCode that sets lower current, slower moves, low Stallguard Threshold (SGT) and uses this to find the bed with the hotend by treating stall notification as trigger. Once complete, returns to normal current/speed/accel settings. Complications that may arise and require a lot of custom tuning per individual printer are outlined very well in section 4.1 of the datasheet: https://www.trinamic.com/fileadmin/assets/Products/ICs_Documents/TMC2660_datasheet.pdf.
Perhaps flag that allows SGT triggers for each driver to be displayed as they are triggered to assist in tuning the individual printer's motors?