X & Y Axis Resolution



  • Bit of a spoiler but I'm working on developing benchmark parts to test resolution. I've got a 100mm long section split into 5mm sub sections whose width is 5-6mm. I'm seeing strong evidence that the minimum resolution is dominated by the whole steps of the stepper motor. This was on a Duet v0.6. I'd be interested in repeating the exersize on second generation board.



  • I'm beginning to think the 0.9 degree steppers for the axis on my core x-y are a definate requirement.

    My system is:

    300mm cube core x-y dbot
    Duet v0.6
    Steppers from ormerod 2
    Z axis driven by two stepper wired in series.

    What are people favourite photo hosting websites for showing photos on forums?


  • administrators

    I use Dropbox. When pasting the link between image tags in a forum post, you need to replace ?dl=0 at the end by ?raw=1.

    On a Cartesian printer with 80 steps/mm @ x16 microstepping, if the head moves on each microstep then the XY resolution should be 12.5um. That's much less than the typical extrusion width of 500um, so it's unlikely to be the limiting factor. However, if there is a lot of friction in the motion system and/or loose belts, then it it may take several 1/16 microsteps to make the head move. Under those conditions, it's possible that changing to 0.9deg motors may help; but reducing the friction, tightening the belts and perhaps increasing the motor current may help more.



  • Cool, already got dropbox! Didn't realise I could use that. Think I'm running at 800mA at the moment.

    It's running 18 tooth pulleys on a 2mm pitch belt.



  • @DocTrucker:

    It's running 18 tooth pulleys on a 2mm pitch belt.

    Are you sure? If so it could be the reason for you problem. 18 tooth x 2mm pitch = 36mm/revolution. I revolution = 200 steps so 200/36 = 5.5555 full steps per mm = 88.888 recurring micro steps per mm (at 16 X). The usual pulley sizes are 20 teeth ( 80 micro steps per mm) or 16 teeth (100 micro steps per mm).



  • Good spot, I'll double check. Put that way 80steps per mm rings a bell. Not sure where I picked up the 18.



  • I was wrong, it's a 16 tooth pulley running with the default 16 microsteps and so 100 steps per mm on both axis. This is a core-xy so taking the measurements parallel to the x or y axis of the machine will be showing a combination of the errors from both steppers. Perhaps I should repeat at 45 degrees to try and isolate the drives.

    Measured the test piece with an external micrometer with a ball cap and closed the jaws until 2 clicks heard. I checked each location three times and took an average. It is looking a little less dramatic now, but interestingly seeing more of an effect on measurements taken parallel to the Y axis, than the x. I hoep to add some pictures soon, but if you compare the measured to the target plot the measured deviates from the target in a saw tooth like pattern with very roughly 6 humps.

    1/6 = 0.166666

    1 full rotation = 16 * 2 = 32mm of travel.
    One motor step = 32/200 = 0.16mm

    I looked at the individual three measurements for each location and compared them to the average of the three to get an idea of error. The average absolute deviation from the mean value was 0.018mm for the x and 0.014 for the y measurements. Happy with that for a manual measurement!

    Moving forward I've got:

    • Some work to do on my benchmark part!
    • Consider testing with no microstepping unless people say it's likely to shake my rig apart!
    • Repeat test at 45 degrees to try and isolate the stepper drives.
    • Consider what parameters may reduce the sawtooth.
    • Perhaps add mass to the axis to see if the humps get worse or better. Perhaos this is a balance issue where inertia of the axis and the motor need to be better matched?


  • Interesting. If I understand correctly, it seems that there is some degree of positional inaccuracy with the micro steps. I'm not sure what your options are with the 0.6 board. Are you able to increase the motor current? No doubt David will step in with some more definitive suggestions.



  • I think changing the benchmark for a higher resolution one (current is 0.05mm, and major motor steps are 0.16mm) and a rotation to isolate the drivers will help produce some better graphs. Statistically speaking I suspect I'm reading a bit further into the graphs than I should at the moment.

    Motor interia vs axis inertia is an interesing thought, servor motors usually specify a range of load inertias that the drive will work best with. I won't be popular if this work confuses motor selection further still!

    Your heavy hot end may well be doing you a favour here. I'd be interested to see how your system compares once my work is a bit more complete.

    Stepper motors do usually have a specified tolerance for the accuracy of each step, and that will have an effect on the positional accuracy of the microsteps. I'm having a look through spec sheets to see if this is quoted for my motor.



  • This site suggests a step accuracy of +/- 5% for the "NEMA 17 JK42HS34 1334A" steppers from the Ormerod 2.

    This would suggest a base level of noise in the system of +/-0.008mm, not much below the microstep size of 0.01mm.

    (([pulley teeth] * [belt pitch]) / [motor steps]) * 5/100
    ((16*2)/200) * 0.05 = 0.008



  • Yes, step accuracy of 5% per step is the norm. But it's non accumulative. My train of thought was that if motor current is on the low side, then the motor might not respond to every single micro-step. If it missed one, then caught up on te next one it might explain what you are seeing.? Dunno - David is the expert on these things.

    Ref mass. Yes according to perceived wisdom I'm doing everything wrong (but I don't care). My personal view is that reducing mass is only important if mass itself is a limiting factor.

    I can say that with having a heavy hot end rigidly mounted between two parallel rails, "ringing" just doesn't happen. I have shown that I can print at 300mm/sec using a high acceleration with a mass of 4kg in the Y direction. The limiting factor is always how fast the filament can be melted and extruded and never to do with too much mass. Everything I print uses a speed of 350mm/sec for non-print moves with acceleration of 1,000 mm/sec^2. So I ask myself, how is reducing mass going to help? I don't need to accelerate or move any faster than that. Just my twopence worth anyway….......



  • I am going to have to look very closely at this.

    Currently theorys for the motor-step sized humping on the measured vs target plot are:

    • Measurement fluke. - Increase resolution of test and axis alignment should help.

    • Motor steps being different sizes due to 5% tollerance bunching up one step worth of microsteps and stretching the next.

    • Motor / axis inertia mismatch.

    • Stepper naturally settles to major steps when static.

    • My rig not ideally set up

    • Stepper current limit (800mA) not ideal



  • Re-reading Davis post, it might just be friction causing issues with micro-steps? One thing I learned a while back is that it's very tempting to have the belts really tight. But, I discovered that it's easy to have them too tight. Hard to describe but when I first started to use the machine, the motors seemed to be labouring and they definitely missed steps at higher speeds/accelerations. This was before I had anything like the mass that I have now. The cure was to back off the belt tension a bit. I can only assume that it was too much side load on the motor bearings. Just a thought….



  • Sorry for the long delay! Here Are some pictures.

    Firstly the benchmark. As you can see there are two features runnign parallel to the x and y axis with a thickness that varies in 0.05mm steps from 5.05 to 6.00mm. The steps have been randomised to try and avoid issues that would be exaggerated by only moving a small distance each time - something that wouldn't relate too well to real world printing.

    Ignore the rest of the benchmark part. I realised I fell into the trap of trying to test too much in one part. I've since found many more basic things that I need to dial in better before trying something like this again!

    Here are the results I got on one of the axis. As you can see the deviation from the ideal appears to be in a pattern that very roughly corresponds to the major step size of the motor. This experiment is in the developing stages at the movement and I am aware of a number of changes that I would like to make in order to improve it.

    …on the up side I have just placed an order for an Ormerod 2 for use at home. I'll be able to have another stab at this in a few months when that is up and running if I haven't been able to fit it in at work.



  • I've been trying to add up the weight in theory of the h-bar, and the printer carriage that runs on it and I'm already up to 1.33kg without considering the printed components. I think the large inertia mismatch is a contender for the resolution issue and any extra drag from over-tight belts won't help this situation.

    Summary of the following is:

    • I've a 7.9:1 Load:rotor inertia which is in excess of the 3:1 target for performance systems while within the general suggestion to keep it below 10:1. This will only get worse as I've just loaded up the gantry with a further 400g ish of titan extruder and stepper motor.
    • The stepper motors for the axis drive were originally from a 12VDC Ormerod. Scaling up to 24VDC on the supply while solving problems in the heater side may not have had much benefit for the stepper drives as the increased maximum speed is near unachievable apart from on an extreme corner to corner move on a 300mm bed.
    • Significant scope to move to steppers with higher holding torques which are likely to have heavier rotors.
    • Alternative option to use a reduction timing belt drive onto the axis rather than direct drive. This would reduce inertia mismatch by the square of the gear ratio and reduce the distance travelled when the stepper increments a step.

    If anyone looks over this and spots some errors I'd be happy for them to be corrected. I'm ignoring frictional losses in the following, so the quoted maximum accelerations would have to be dialled back a bit in order to not loose steps or increase lag due to friction losses.

    My steppers are:

    NEMA 17 JK42HS34 1334A

    Step Angle: 1.8
    Motor Length: 34mm
    Current /phase: 1.33A
    Resistance /phase: 2.1Ohm
    Inductance: 2.5mH
    Holding Torque: 2.2kg.cm
    (Holding Torque: 0.216N.m)
    Wiring: 4 leads
    Detent Torque: 120g.cm
    Rotor Inertia: 34g.cm2
    (Rotor Inertia: 3.4 * 10-6kg.m2)
    Mass: 220g

    Using the formulas on this page of the duet wiki would appear to suggest my maximum speeds are very high on the 24VDC supply - 0.924m/sec.

    On this page of the forum DC42 suggests a formula to estimate available torque for acceleration as:

    Available Torque = Holding Torque * 0.85 * 0.71 *0.098

    ..where the 0.85 accounts for driving the stepper at 85% of rated current, the 0.71 accounts for the drop in torque from using micro stepping, and the 0.098 accounts for ensuring the position lag of the stepper never exceeds 1/16 step.

    Available Torque (from one stepper) = 0.0128N.m

    In the worst case motion parallel to the y axis two steppers are working on the load, so the total available torque becomes 0.0256N.m, but of course there are two rotors to consider in the system inertia. As the belt's weight is minimal compared to the weight of the gantry I have ignored it here.

    20t 2mm pitch pulleys so radius is 6.37mm. Therefore Inertia of load is:

    1.33 * 0.006372 = 54.0 * 10-6kg.m2

    Total system inertia:

    54.0 * 10-6 + 3.4 * 10-6 + 3.4 * 10-6 = 60.8 * 10-6kg.m2

    From general mechanics:

    T: Torque (N.m)
    α: Angular Acceleration (rads/sec2)
    I: Moment of inertia kg.m2

    T = I * aangular
    α = T / I
    α = 0.0256 / 60.8 * 10-6
    α = 421 rads/sec2

    Since pulley rad is 6.37mm linear acceleration of gantry is:

    a: Linear Acceleration (m/sec2)
    r: Radius (m)

    a = α * r

    421 * 0.00637 = 2.68m/sec2

    In standard config file units this is 2680mm/sec2

    Finally I reconsider the maximum speed of the stepper from the perspective of what can actually be achieved within a 300mm move.

    v: Velocity (m/sec)
    t: Time (sec)

    v = a * t

    when accelerating from zero average velocity:

    vavg: Average Velocity (m/sec)

    vavg = (a * t) / 2

    distance travelled (dx) from stand still with constant acceleration:

    dx = (a * t2) / 2

    But in the printers situation the distance is the limiting factor rather than the time. The move being considered is 300mm with simple constant acceleration and deceleration
    from 0 to max speed to 0 we know that the acceleration stage needs to be completed within 150mm if going from corner to corner of the build area, but don't know the time this will take.

    t2 = (2 * dx) / a

    So now we have the time it will take to reach the maximum speed, and we know this can be achieved in half the total moves distance using constant acceleration and equal deceleration. We can reuse the "velocity = acceleration * time" equation to find the maximum velocity.

    vmax: Average Velocity (m/sec)

    vmax = a * time
    vmax2 = a2 * t2
    vmax2 = a2 * (2 * dx) / a
    vmax2 = a * 2 * dx
    vmax = (a * 2 * dx)0.5

    This gives a maximum attainable speed very close to that which is attainable by the stepper motor within a 0 to max velocity to 0 within a 300mm square build area:

    (2.68 * 2 * 0.150)0.5 = 0.897m/sec

    Realistically though a 30mm acceleration stage would mean a minimum vector length of 60mm which is still large.

    (2.68 * 2 * 0.03)0.5 = 0.401m/sec

    A print speed of 60mm/sec is often touted as a maximum print speed and is currently beyond what is possible with my setup. Finding out how far the system has to travel before attaining this speed is more useful:

    vmax2 = a * 2 * dx
    dx = vmax2 / (a * 2)

    0.062 / (2.68 * 2) = 0.000672m (672 microns!)

    Distance travelled in one motor step:

    (0.020*2) / 200 = 0.0002m

    Similar look considering a 300mm/sec non print move:

    0.32 / (2.68 * 2) = 0.0168m (16.8mm)

    In other words a non print move would have to be greater than 33.6mm in length before the 300mm/sec jump speed was reached.

    Edit: I realised that my worst case move was parallel to the y axis and so shared load between the motors. My largest move however was diagonally across the bed which is on one motor only. I'm corrected that now. In addition my original inertia ratio of 15.9:1 was based on a single rotor rather than the combined inertia of both motors.


  • administrators

    Those motors were appropriately sized for the Ormerod, but I would expect to use longer motors for a 300mm square printer, especially if you are mounting the extruder drive on the print carriage. Something like 17HS19-2004 if using a generation 2 Duet, or 17HS19-1684 if using one of the older Duets.



  • That's fair enough yes. I'm looking at the spec sheets on the E3D motors at the moment but will look at those too. I'll be very interested in the before and after on the resolution to see if reducing the mismatch helps. I'm hoping the 0.9 degree steppers will be suitable.

    I'm running the v0.6 Duet at work and home. The Duetwifi that I've been fiddling with is on someone else's machine.


  • administrators

    The motors I mentioned are 1.8deg but there are also 0.9deg versions, just replace HS by HM in the part number. Think3DPrint3D sells a similar 0.9deg Wantai motor, see http://www.think3dprint3d.com/motors?product_id=122. The E3D "High torque axis motor" also looks suitable.


Locked
 

Looks like your connection to Duet3D was lost, please wait while we try to reconnect.