Duet3D Logo Duet3D
    • Tags
    • Documentation
    • Order
    • Register
    • Login
    1. Home
    2. vp
    3. Best
    • Profile
    • Following 0
    • Followers 1
    • Topics 17
    • Posts 73
    • Best 5
    • Controversial 0
    • Groups 0

    Best posts made by vp

    • Stepper driver dead (caused by multimeter ?)

      Hi,

      i have/had a brand new Duet Wifi and managed to kill the D4 stepper driver.

      I was connecting the steppers to the crimp connectors and to the Duet wifi and when testing, i forgot that one of the 4 cables to the stepper was still connected to a multimeter. The multimeter was operating in "beep" mode, that means if the probes of the multimeter touch each other (or there are connected) it makes "beep".
      One probe was connected to one of the 4 stepper cables and the other was connected to air - so no connection to what ever.

      Anyhow, this was the only cause i could find why D4 stopped working, M122 D4 shows now a temperature shut down due to overheating/short to ground.
      The D4 TMC stepper driver has now a very small surface hole/mark, about 0.5 mm in diameter (which the others don´t have, i think it wasn´t there before) - i guess this was created when D4 died.

      I have a Duex5, so i can live with one driver less, but the D4 is going ******* hot….. even with no stepper connected.

      So i have some questions:

      1. Can this driver failure really be caused by the multimeter - or do i have another problem? BTW Duet Wifi was working for about 2 weeks and i was finishing the cabling to its final state - so it worked before.

      2. Because D4 is ******* hot now, can i just desolder the TMC2660?

      3. Which TMC2660 do i have to order as a replacement - are there any special issues?

      Thanks in advance!

      posted in Duet Hardware and wiring
      vpundefined
      vp
    • RE: Backlash compensation

      @dc42:

      Why not use either anti-backlash nuts, or a finer pitch on the Z leadscrews so that the backlash is tiny, or a less fine pitch so that gravity does the work? Bed compensation already adds a lot of wear to the Z leadscrews, and doing backlash compensation will increase the wear further. Even better, use a flat bed.

      The whole story is about - why should somebody spend > +100-200 EUR in addition (cheap vs. expensive rails, ball screws and nuts) when the problem could be solved easily in firmware ? Why does the firmware support bed mesh leveling ? Why skewness correction, why xy scaling ? ….

      Wear appears also without backlash compensation. So the question is also, when do you have to replace the ballscrews and nuts ?
      Anti backlash nuts increase the wear always, not only during bed leveling.

      Could you please explain why backlash compensation by adding a delta distance to the move would increase wear ? Backlash occurs because there is no force transmitted - so how should it wear significantly when the ball screw is just rotation additionally in the region where "no force" is transferred ?

      In addition, I don´t care about wear as long as i am able to compensate it ! On a cartesian printer it is anyhow only needed for bed mesh leveling - i don´t see the point regarding additional wear because of backlash compensation - there is no significant wear in addition and not to forget all also expensive screws wear out and the question is when do i have to replace them. Without "wear compensation" much sooner.

      Printers are getting bigger and bigger, my bed is lightweight and > 400 x 400 mm and even with hiwin rails (which i use on my CNC mill) i would not be sure that the bed would "float" with gravity. On my 150 *150 printer i don´t need mesh bed leveling, but show me how you level a 400 x 400 mm bed to +-0.02 mm (which is already quite fuzzy for a 0.1 mm perfect 1st layer) which is heated up to 80 °C.

      I am sorry DC42 but i dont get the point why z backlash compensation should be worse than any other "firmware compensation". As always the standard user wont use 100 % of all features, but especially bigger printers need mesh bed leveling to utilize thier potential and again ballscrews and nuts wear out. If a firmware change could elongate the life cycle of the screws and nuts it would help everybody.

      posted in Tuning and tweaking
      vpundefined
      vp
    • RE: Acceleration as a function of speed

      I did choose WANTAI 42BYGHW811, in my setup, they should be able to achieve nearly 1g close to about 1500mm/s, without losing 1/16 micro step with a light direct driven extruder/hot end. I don´t have a "problem" at 160mm/s, this is just an example to show that if the torque drop starts with 12 V at "0" rps, this problem is existing in the normal operating range of 3D printer, just check the curves.

      1. In 3D printers we normally run the motors well below their maximum current, because at maximum current the motors get very hot. At reduced current, the back emf due to inductance is lower, so the (reduced) torque is maintained to higher speeds. For example, if you halve the current, then the torque at low speeds will be half what is shown on the torque/speed curves and will be almost flat until it intercepts the torque/speed curve shown for the same motor and same driver voltage at full current.

      This is not special for 3d printing, it is a good rule of thumb for every stepper application to use at max about 80 % of the specified amps. The steppers itself are normally rated to > 100°C surface temperature, I operate my steppers at about 80 % of the rated current and they get at max about 50 °C (also NEMA32s), which is at least for me no problem. Because P = IIR it is for sure sensitive to the chosen current - but it is also no trick to cool them and in the long term i will use mine at maybe > 100 % current.

      Who operates his steppers at half of the design current? This 50 % comparison is completely misleading and even at 50 % and 12 V there is also before 5rps a torque drop. If somebody operates at 50 % i would suggest him to go for different (smaller and faster) steppers. But do these people buy a premium product like the Duet Wifi ?

      2. Because we want precise motion during printing, we use 1/16 or greater microstepping, and to get position accuracy this means that the motors need to have far more holding torque than is needed to produce the acceleration demanded, so that we can maintain a position accuracy of around one 1/16 microstep. But high-speed travel moves don't need this accuracy during the high speed part of the motion, it's only the end of the move that needs to be accurate. So quite a large loss of torque is acceptable during the middle part of a travel move. If you know the mass of the print head or bed or whatever the motor is moving, you can work out the torque needed to produce the desired acceleration, and you just need to make sure the motor can provide this torque with a sufficient safety margin e.g. 2x.

      Yes, that is one reason for the firmware change request, now we get back on track.

      But i would say we don´t use 16 microsteps for finer resolution (with a 16 T GT2 pulley 16th means in theory 0.01 mm), because this fine steps never happen with this accuracy (e.g. stepper nonlinearities and all other mechanical errors of a 3D printer are much bigger) we just do it because it runs smoother and less noisy - and because it doesn´t cost anything. Maybe it can reduce some fancy patterns on deltas, but there only relative accuracy is needed. On xyz printers 16th stepping doesn´t improve accuracy at all.

      I have to show more clearly what this request is for because it still seems to be not clear:

      1. Many speed as well quality problems are extrusion related. Often people claim their E3D v6 cannot go above e.g. 50 mm/s because then under extrusion and so on is happening. They say the extrusion capacity is not enough - which is wrong. The problem is, that the hot end print speed varies and by that the extrusion rate. Unfortunately, molten plastics have a viscoelastic material law which brings the time factor in play. So any change in extrusion rate/speed is going to make problems - but this is not the root cause. The root cause is the varying printing speed. The root cause for the varying printing speed is a lack of useable acceleration which is limited by the mass/stiffness of the system and the stepper torque which is a function of speed .

      Especially at lower layer heights and small nozzles or with e.g. a volcano, the extrusion capacity is enough for speeds far above 100 mm/s. But as soon as the speed drops the extrusion problems will occur. On youtube are enough videos showing damn fast prints - with a miserable print quality. I want fast prints with good quality - this is not possible without the maximum acceleration.

      2. Many problems are retraction related. Why do we need retraction at all ? Because too much plastic would ooze out. The smartest way I know to overcome this problem is to give the oozing process no time. Half the time and you half the amount which could ooze out. If you print flexible material that is the only way to go. If you don´t need to retract (or less), problems of 1. are also reduced. Solve the problem by just increasing the speed of travel moves.

      3. Think the other way round. With a Duet Wifi capable of acceleration as a function of speed, one could use smaller (faster) and cheaper steppers. This could mean one uses NEMA14 for normal printers or NEMA 17 instead of NEMA23 for big size printers.

      4. printing time
      Many prints need excessive amounts of travel moves. Normally most travel moves are short distance moves. Using a histogram to show the distribution of travel move length, it would be very heavy on the left side (much more short than long moves). What does short distance mean ? With 2g it takes 25 mm to reach 1000 mm/s, with 5g 10 mm. The problem is, that long travel moves need more time and increasing max travel speed would reduce the time significant. To increase max travel speed, i would have to reduce the max torque - also in the low speed region were most of the moves happen. Increasing max travel speed ends up to give no benefit, if the max torque on the low side has to be decreased.

      A higher acceleration in the low-speed region (printing) means a higher average printing speed and again a reduction of printing time.

      5. Jerk. Jerk was introduces to get away from blobs on every corner (bleeding edges) and to decrease printing time. Unfortunately jerk is the most brutal way and is mostly based on backlash and low stiffness. In the old days both was existing at much higher levels than nowadays. Using too much jerk shows ringing/resonance artifacts in the print (as well as too high accelerations). Using 2 g it takes 0.0xyz mm to get to e.g. 20 mm/s. But it is much more gentle and gives by that less artifacts - or at same amount of artifacts much more printing speed. Jerk could be reduced to nearby 0 and substituted by "soft" acceleration. Doing so would be like a poor mans s-curve acceleration in the very low speed region.

      6. Future developments like s-curve acceleration/moves. Although some people thinks it is too CPU intensive, for me it is clear that in future we will use something like s-curve like moves. This gives much more possible printing speed at same artifact level. But using s-curve like moves reduces at the same max acceleration the average acceleration - so in total the benefit is much smaller as it cold be. To overcome this problem, acceleration has to be really maximized - according speed.

      Finally:
      I don´t care at all, what people are doing now, i question for what is possible, i want to push the limits - and premium products like the Duet are bought because the "normal" stuff is not as good as it could be. It is not true that printing speed is limited by extrusion rate to e.g. 100 mm/s. It is limited by too much varying printing speed, caused by too low acceleration settings.
      Why should we bottleneck our printers? Why should we waste resources?
      I don´t care if I am able to use 5g in the low-speed region (<= 1000 mm/s) already now if I can get 8g…. or travel with 2000 mm/s instead of 1000 mm/s.

      BTW: On travel moves, the deflection of the printer parts doesn´t matter (nearby). When printing they become very significant at higher accelerations (e.g. > 1g), and more stiffness (a stiffer system means more mass) doesn´t help more. So finally the firmware will also have to address this problem because there is a mechanical material limit where engineering cannot increase the stiffness vs weight ratio anymore (see 6.).

      [Edit: i added 5 and 6]

      posted in Firmware wishlist
      vpundefined
      vp
    • RE: Backlash compensation

      …CNC milling/router machines use a lot of ballscrews and backlash is well known there and much more a problem

      But what is the problem ? I would not "jerk", i just would correct the target end position of a move. If the direction changes, the target end position of the move has to be adjusted by a value - what is the problem to do that (at least for CNC mills etc.)?

      On 3D-printers the E-move has to stay the same (or to shift a little bit), even when the "move plan distance" gets longer or shorter. And to be honest even hiwin or TBI screws don´t have 0.00 mm backlash under load.

      All the mechanical "solutions" doesn´t work perfectly and have their own issues (e.g. more wear, less netto torque...).

      On my 3D-printer i stopped using the auto mesh bed leveling, because even < 0.05 mm backlash is too much to make it better with auto bed mesh leveling than without. Loading the nuts so heavily, that there is no backlash, just wears them off unnecessarily (i don´t do that just for the 1st layer) ....

      If hysteresis at least in z could be compensated, i would use auto bed leveling again.
      People also could use cheaper hardware, because the software would compensate it, one reason more to buy a Duet - or not to buy it.

      At least for auto bed leveling we need it also in 3D printing.

      posted in Tuning and tweaking
      vpundefined
      vp
    • New hybrid (old and new) moveplan ?

      There is a long ongoing discussion about new moveplans here: https://forum.duet3d.com/topic/4802/6th-order-jerk-controlled-motion-planning/72
      The above thread is already very long and focuses on the "nth zero order jerk" possibilities - which is in my opinion suboptimal for fdm. Therefore i started a new thread.

      What has to be considered concerning a fdm moveplan

      • 3D printing doesn´t profit from nth order zero jerk stuff, we just need to ensure a 1st order continuous derivative of the acceleration. Fdm is extrusion driven and the task is not to dynamically balance the water level of a moving glass. Because the hot end acts like a low pass filter, everytime the extrusion rate (speed) changes, the real extrusion rate will deviate from the target extrusion rate. Therefore the task is to provide an as constant as possible extrusion rate which means constant speed (the average speed should be constant, no long acceleration phases). Speed profiles where the acceleration is always <> 0, are extrusions wise suboptimal, they add unnecessary extrusion errors.

      • The steppers can only provide a certain power, which in the end decreases with speed. Because of power = force * velocity = mass * acceleration * velocity --> if the power is constant, the max possible acceleration has to drop with 1/v. This gets more and more important when moving at higher speeds (e.g. > 150 mm/s), because there the stepper power falls off significantly - but we would need more. The same is valid for setting the jerk value.

      • Jerk is in principle an adjustable feature and not a bug - it has to remain. If somebody doesn´t like it, he should be able to set it to (at least nearby) zero. But using zero jerk in fdm will add additional problems/limitations.

      • Ringing only occurs when braking (at the end of a move) and not when the speed increases! In order to keep the average speed constant we need short acceleration phases, that means high accelerations, therefore it is suboptimal not to accelerate as fast as possible at the start of the move.

      • Ringing is not only influenced by the move profile, it is also influenced by the torque stiffness of the stepper, especially for stiff and light printers

      • Users need the possibility to tune the profile to their special needs (e.g. FDM is different to CNC carving, a Cartesian is different to a delta....) - so we need tuning factors.

      I would like to discuss an alternative (a hybrid of old and new) moveplan:
      It is a 2 step approach.

      1. compute the moveplan as usual to determine v_start, v_end and the total time it takes per ramp
      2. spread the ramping steps over time by adjusting the time for each step using a correcting factor to "bend" the straight speed profile to the desired shape

      ad 2.
      The old speed profile for a single speed ramp is given by:
      a_old = constant

      This leads to:
      v_old = v0 +a_oldt
      s_old = (a_old
      t^2)/2 + v0t
      dt_step_old = s_step/(v0 + a_old
      t)

      v0... velocity at start of the ramp
      v_end... velocity at end of the ramp
      a_old... acceleration (constant)

      s_step... distance one step (or e.g. 1/16 step) takes
      dt_step_old... time one step (or e.g. 1/16 step) takes
      t... time, counted from start of the ramp

      NEW speed profile for a single ramp (others are also possible)
      a_new = K0 + K1t + K2t^pf
      v_new = v0 + K0t + (K1t^2)/2 + (2K2tt^pf)/(pf^2 + 3pf + 2) + (K2pft^(pf - 1)t^2)/(pf^2 + 3pf + 2)
      s_new = tv0 + (K0t^2)/2 + (K1t^3)/6 + (K2t^pft^2)/(pf^2 + 3pf + 2)

      K0, K1, K2, and pf are constants (tuning factors) which are defined by the following conditions

      We e.g. assume the new moveplan will need exactly the same time to finish the ramp as when moving according to the old moveplan. So the average speed is the same. This will also lead to nice comparable figures.

      Option A: Acceleration at start a_start and end of the ramp a_end shall be 0 and pf = 2 (2 is a special case, a_max will always be a_old * 1.5 and the profile is symmetrical):
      This leads to

      K1 = 0
      K2 = -6a_old^2/(v0 - v_end)
      K3 = -6
      a_old^3/(v0 - v_end)^2

      bzw.
      a_new = - 6a_old^2t /(v0 - v_end) - 6a_old^3t^2/(v0 - v_end)^2
      v_new = v0 +K1t^2/2 +K2t^3/3 = v0 - 3a_old^2t^2/(v0 - v_end) - 2a_old^3t^3/(v0 - v_end)^2
      s_new = v0t +K1t^3/6 +K2t^4/12 = tv0 - a_old^2t^3/(v0 - v_end) - a_old^3t^4/(2*(v0 - v_end)^2)

      The question is now, how we have to spread the steps over time, to get the desired shape. So finally we compare dt_step vs dt_step_old to get a correction factor for the "step timer".

      dt_step = s_step/(a_old^2t^2/(v0 - v_end) + 2a_old*t + v0)

      That means all we have to do is to multiply the time for one ramping step calculated with the old move plan dt_step_old with this correcting factor:

      cf_dt_step = dt_step/dt_step_old =
      (v0 + a_oldt)/((K2t^3)/3 + (K1t^2)/2 + K0t + v0) = (v0 + a_oldt)/(a_old^2t^2/(v0 - v_end) + 2a_oldt + v0)

      Or we could just compute the dt_step directly like above - that means 1st compute the moveplan, as usual, to define v_start, v_end and the total duration for each ramp and 2nd, once this is known, just time the steps according to dt_step. The correcting factor has only to be computed once for the limiting axis - not for every axis ! But for sure it has to be applied to all axes. Instead of using a correcting factor, it would be optimal to adjust the "timer base clock" according to the correcting factor - that might be complicated.

      In the end what comes out looks like shown below.
      v is the velocity, a is the acceleration and cf the correcting factor. Because the new moveplan doesn´t change anything before or after the ramp, we don´t need to care about it and it is not shown.

      0_1530381101303_1_v_a_cf_1.png

      Option B: Because we know, that we cannot accelerate as fast at high speed as at low speed, we set pf to 0.5. Now it looks like shown below. The longer the move takes, the higher is the speed and the lower the acting acceleration. Because we know the maximum speed of the move from the 1st step (old move profile), we can set the pf factor accordingly. When the speed increases pf has to be < 2 and when the speed decreases pf has to be > 2.

      0_1530381189801_2_v_a_cf.png

      Option C : Because ringing only occur when braking, there is no need to accelerate as gentle when braking. We also know from state of the art, that a stepwise change of the acceleration works in principle. Therefore we should set a_start and a_end > 0 and a_start >> a_end. This leads to lower maximum acceleration and lower acceleration at higher speeds - that is what we want. But we also see in the figure below, that the profiles change only a little bit - so the potential of using a_start and a_end <> 0 is not too big.

      For this general case the constants are
      K0 = a_start
      K1 = 2a_old(a_end - a_old - a_oldpf + a_startpf)/((v0 - v_end)(pf - 1))
      K2 = (pf + 1)
      (a_end - 2a_old + a_start)/((-(v0 - v_end)/a_old)^pf(pf - 1))

      0_1530381260019_3_v_a_cf.png

      The figure below compares A, B & C regarding the used acceleration vs speed. Because of the open loop stepper limitations, the acceleration has to be significantly smaller with increasing speed. Otherwise, we don´t utilize our equipment at lower speeds or we run into problems at higher speeds. As shown pf = 0.5 vs. 2.0 does a much better job. Using a_start and a_end > 0 does also help a bit.

      0_1530381288196_4_a_v.png

      posted in Firmware wishlist moveplan jerk acceleration extrusion
      vpundefined
      vp