You are not logged in.
The issue is I have not handled premature recreate button presses. This button is only works after slicing get completed.
Ah i see, this was the same bug i mentioned earlier. Maybe just a gui popup or something can solve it.
True, didnt think of that, i obviously have an M106 in there before. Thanks !
Yes, thats what i tried to use, it does show up correctly even in the layer calculation but the printer starts firing the light instantly as soon as the plate is all the way down.
Dynamic speed is only used for direct control mode. So you would not get it is value correctly through zSpeed variable.
? this is the whole point of the script and besides the error when it falls below 1 it works fine ( Atleast as far as i can tell )
Maybe this is a misunderstanding
Could you find out what happens to the "wait before print for the base layers or should i add it to the dynamic cure box ?
It goes into the dynamic lift speed box, i never touched cure times
Heres the full profile: https://drive.google.com/file/d/0B8hfq7 … sp=sharing
Just double checked, if i put it into the cure box it works correctly here aswell, just not in the speed box.
And checked again, the only way to get this error showing is when i use this:
{([[IsBurninLayer]])*35 + ([[IsBurninLayer]]==0)*(100/(1+(2.718**-(2-(0.008*[[TotalSolidArea]])+2))))}
So now i guess it has nothing to do with the size of the total area but it happens when a feedrate calculation goes below 1
This works fine f.e.
{([[IsBurninLayer]])*35 + ([[IsBurninLayer]]==0)*(50 + 60/(1+(2.718**-(2-(0.008*[[TotalSolidArea]])+2))))}
The added offset of F50 masks the problem in that case.
For some reason Wait before print is ignored for the base layers aswell, it shows correctly in the slice preview but isnt applied while printing.
On the early layers [[TotalSolidArea]] is around 1100. After layer 81 it becomes around 160. Which explains this speed difference.
The speed difference should be exactly the other way around as calculated by my script, for the large layers is should only add feedrates of about F1 to F2 to the basic F35
Check this; at 1000 Total solid area it should give out a value close to 0
Heres the plate:
https://drive.google.com/file/d/0B8hfq7 … sp=sharing
And here the Debug info ( sliced the plate right before, exibited the same error )
https://drive.google.com/file/d/0B8hfq7 … sp=sharing
Thank you Shahin !
Shahin, big problem !
I dont know if this is exactly the problem but i think once [[TotalSolidArea]] reaches 1000 the speed calculation completely tilts, i used this:
{([[IsBurninLayer]])*35 + ([[IsBurninLayer]]==0)*(110/(1+(2.718**-(2-(0.008*[[TotalSolidArea]])+2))))}
For dynamic speed which worked fine for a small part but now ive ran a bigger part and everything over 1000mm2 gets calculated at F500 ( should be around 1,9 ) which in turn means F2000 for retracts so my printer luckily just tilted on the retract movements and nothing happend
This definitely didnt happen before so i think there must be an error in the recent additions.
Yeah, shahin answered that pretty much, its as expected, nanodlp already solves rounding "errors" when pulsing directly internally.
Interesting question nonetheless !
5mm pitch seems pretty steep for someone asking questions about rounding errors though, get a 0.9° stepper and change your leadscrew to something like this https://tech.thk.com/de/products/thkdlinks.php?id=359 the 10x2 seems like a fine solution for prints taking north of 24hrs to finish.
I consistently drive gcode with 250000+ movements without ever noticing stepping / rounding errors, even though im sure atleast some occur. ( and thats with "gambling" at 16x microstepping with a completely underpowered nema 23 driven 80kg+ gantry )
If i print a 160mm part with 20 micron layerheight i get 8000 layers resulting in totaly 16000 up and down movements. Worst case error accumulating according to your example by 0.001mm is then 16mm - 10%.
I might be totally wrong here too :-)
actually your more right than i was ( I forgot the up and down movement ) but its only 8mm because a rounding error is 50% worst case.
But it still stands; it would only work with direct driving the stepper with a stepper driver on full step settings which causes all kinds of problems ( https://www.youtube.com/watch?v=dmk6zIkj7WM ) reducing the overall accuracy to just 0,015 for my example.
Im not even sure how the stepper driver themselves handle these inaccuracies, i would guess they "remember" unsolvable pulses with microstepping and add / substract them on the next possible movement.
If driven by a ramps i would guess that the ramps takes over this function and only sends out possible movements, queuing unsolvable movements and executing them the next time possible.
No matter how you look at it trying to get pulses and movement distances in sync via nanoDLP seems like a complete waste of time, switching over to a 0,9° stepper and a 2mm pitch screw alone would drive worst case error accumulation down to 0,62mm for 8k slices in comparison to 8mm shrink with a low shrink ( 2% ) resin.
Is it possible to tie the dynamic lift result to the next multiple of the Z-Axis step resolution to avoid chaining stepping errors?
Honestly thats the last thing i would worry about, step errors gonna happen no matter what final value ur driving the stepper to. If you want servo like movement either use a servo or one of these nifty piggyback magnet winding sensors.
I dont think it would work anyway as the ramps does the step p mm calculation so you would need to customise the firmware to be even able to get a reliable mm per step translation back to nanodlp at all.
With direct driving it might be possible but the internal microstepping translation makes it again impossible, so you would need to drive in full stepping mode.
At 16x microstepping and a 3mm pitch leadscrew the ramps can accurately translate values down to 0.001mm errors acumulating in that range are easily offset by a variyng power grid in the neighbourhood i think
For a full 160mm print this means if you miss every single time the whole print would be 0.08mm off, less than a single missed step, the very moment you take that of the plate resin shrinkage would have outpaced that by a huge amount.
I might be totally wrong here though, maybe shahin can clear this up.
Sorry for the question but am I correct put these values in
are the fields of those settings correct? Dynamic Speed & Dynamic Lift
https://www.dropbox.com/s/1gnjotc6k3xg5 … 8.png?dl=0
Your link is broken.
It is working. Open inspector tool's console area and see if it displays any issue.
Shame on me, was a browser cache problem in chrome fixed.
lenne0815 wrote:Dynamic lift height ( which i get with [[ZLiftDistance]] ) only calculates full values not the decimals.
Fixed, try again.
Confirmed working ! This actually explains a lot of problems i had in the past, i never checked it thoroughly so i didnt realise it wasnt working and i was just unable to get it dialed in,now that it works i already shaved of another 5 minutes of one of my 45min testprints with it Thank you very much for the quick fix Shahin !
( i think especially the new details section helps a lot with figuring out dynamic lifts / speeds, again thank you very much for your work ! )
Shell I Change anything in this for Wanhao D7?
{ ([[IsBurninLayer]])*3.5 + ([[IsBurninLayer]]==0) * (1 / ( 0.7 + ( 2.718**-(0.02*[[LargestArea]] - 3))) +1.7 ) }
Upgrade to 1556 and give it a try, it should atleast do something. I dont have a D7 so you need to dial it in by yourself, it works very similar to the dynamic lift speed for which i already made a lengthy explanation.
One more thing, maybe its specific to my setup but auto populating the name of a new plate by filename stopped working.
would we use some ceil or float before * in equation, could releaf "brain stress" for pi deal with movements?
i think the float numbers would not affect so much when dealing with velocity, in case you working with direct control with dynamic speeds , velocities could influence in rounding errors depending of the driver capabilities. as direct control may have been coded with pulse train, do you think it could improve anyway?
I think for feedrates shahin does that already, feedrates get reported as full values aswell. But for flat curing times its not in there ( 4.5s curing time gets reported as 4,498678976 something seconds ) and dynamic lift heights are cut to early at the first value.
I suspect cure times would be fine as *.**s and lift heights would work as either *.**mm or full microns which would equate to *.***mm
"is it possible to handle [[Slowsection]] in dynamic speed?"
I dont think theres a call which reports Slowsection as there is for base layers now, but you could do it manually like i did in the picture for the base layers.
I reinstalled nanoDLP twice and the layer calculation is still a bit erratic but while doing so another problem reared its head;
Dynamic lift height ( which i get with [[ZLiftDistance]] ) only calculates full values not the decimals, if i change ([[IsBurninLayer]])*3.5 to 4 5 6 etc it works, decimals ( like my calculation ) dont get calculated.
An example of a dynamic lift script:
{ ([[IsBurninLayer]])*3.5 + ([[IsBurninLayer]]==0) * (1 / ( 0.7 + ( 2.718**-(0.02*[[LargestArea]] - 3))) +1.7 ) }
It does start working correctly when i put it directly in the Gcode after each layer box though:
M107
G1 Z{[[LayerPosition]]+([[IsBurninLayer]])*3 + ([[IsBurninLayer]]==0) * (1 / ( 0.7 + ( 2.718**-(0.02*[[LargestArea]] - 3))) +1.7 ) } F[[ZSpeed]] P1
[[WaitForDoneMessage]]
[[PositionSet [[LayerPosition]]]]
returns the proper z height values.
I tried == initially but couldnt get it to work because i couldnt preview it, will do it that way, much more elegant !
The resubmit bug has been plaguing me for quite some time now so im unsure if its memory related, it happens no matter what is slicing at the time ( small or big models ) as soon as i resubmit a second plate or even resubmit the same plate while still slicing the pi stops calculating until i reboot it.
Holy eff, what a mission I got it figured out though:
{ ([[IsBurninLayer]])*35 + (abs([[IsBurninLayer]]-1)) * ( 45 + 70 / ( 1 + ( 2.718** -( 2 - ( 0.008*[[TotalSolidArea]]) + 2)))) }
I needed to invert the isburnin layer values and the calculation preview is still not working for IsBurninlayer but for testing i just exchanged it to a different call so i could figure out how to make it work.
While testing another "bug" became apparent, if you resubmit a plate before it has been finished nanoDLP becomes unresponsive and the pi needs to be rebooted.
I just googled an hour how to do that but failed, im a total newb when it comes to linux unfortunately
Now setup recons it cant update because im already on the latest version, can i force it somehow ?
Yes i see the keyword in the help section but the descriptions are missing a line aswell, im on 1553, upgraded via (wget http://www.nanodlp.com/nanodlp.beta.tar.gz? -O - | tar -C /home/pi -xz);cd /home/pi/printer;sudo ./setup.sh
Tried that aswell, doesnt work either Pulses would be enough if we could still use the Ramps for the rest ?
So i tried the [[IsBurnInLayer]] Variable but it doesnt seem to retunr anything and in the calculator preview i cant put in values to test it ? ( 1553 )
Julien Delnatte is still working on his UV Led daugtherboard for the Pi, as soon as he makes it available il change over to direct control ! How do you drive the stepper directly ?
No, that would be just fine ! i think fiddling with burn in layers would be complicated and not really nessecary On a side note, i just realised you added dynamic acceleration aswell, how would i go about testing it ? And we have values for individual cure areas, i didnt realise that, man you are on fire !