Duet SZP nozzle probing like beacon contact?
-
I second this! The simplest way to determine when the nozzle is touching the bed, is to measure when the nozzle touches the bed.
I recon this feature could be used for Delta calibration since it requires a nozzle contact probe. -
@MaxGyver Duet3D has the Smart Effector for deltas since ever so contact probe for that is kinda solved.
I'd still welcome SZP supporting contact mode; its lack is the main reason I havent looked into installing one yet (and to a lesser degree incomplete thermal compensation).
-
I thought I'd written about this before, but I can't find the post now. I did a lot of testing of the SZP over the summer, and have thought a lot about how contact probing would work.
Using the SZP as a contact Z probe is technically possible. From what I understand, the way Beacon does it is that every probe is calibrated at the factory, I believe at a range of temperatures, with the calibration stored on the MCU of the Beacon. This allows it to work out-of-the-box, and to be accurate over a range of temperatures. The Duet3D SZP isn't calibrated at the factory, but once calibrated after the initial setup, should be quite capable of doing contact Z probing.
I think (not tested, but I may get to it this week) the setup would be something like this:
- Install SZP, 2mm above the nozzle.
- Do the initial M558.2 calibration for drive level and reading offset, save to config.g (see https://docs.duet3d.com/en/User_manual/Tuning/scanning_z_probe_calibration#calibration)
- This should be sufficient to be able to probe the bed to set Z0. To do this we need a macro that:
- Runs G30 to bring the hot end and bed close to each other. This sets an initial Z0. This doesn't have to be accurate, just an easy way to get close to Z0.
- Move down in increments (perhaps 0.05mm), checking the current SZP reading against the previous one
- When it gets to the point where the reading doesn't change (perhaps within a certain range), mark that as Z0
- Then it should be possible to run the M558.1 reading vs height calibration. This would allow the calibration to be done at the current temperature, whatever it is.
- Once that calibration is done, the bed can be scanned.
- A final setting of Z0, and perhaps reporting the difference from the first, to check there's been no drift.
When I was doing testing over the summer, I plotted Z height against the SZP reading. The value changes by large amounts the closer the SZP is to the bed, so I think identifying the point the nozzle touches the bed would be quite easy, so long as the SZP doesn't just go to max reading.
I think I went from Z20 down to Z0.1 on the above, with the blue line being the SZP reading, and the red line is the M558.1 calibration between 3.7mm and 0.3 (M558.1 K1 S1.7 with a trigger height of 2mm), which is good fit. I need to rerun the test and go down to -0.2mm to see if/when the reading either stops increasing.
I don't know if this is how the Beacon works; I'm guessing they fully characterise the SZP coil at a range of temperatures, and have a lookup table in the MCU to provide a calibrated reading at a specific temperature.
I'll let you know if I get any more testing done this week!
Ian
-
@droftarts
I talked with some firmware Devs a few months ago, and you have pretty much got the bed probing method spot on. They measure the rate of change from the sensor, and when the rate falls below a set amount they class it as the nozzle hitting something.I believe the biggest challenge with getting this working on Duet hardware via a macro is having a way to probe the rate of change fast enough not to cause the nozzle to embed itself into the bed using a smooth movement.
I'm not the most savvy on conditional G-code, so I'm not sure what interrupts are available.
-
@Notepad I was planning to stop every 0.05mm and take a reading, and compare it with the previous reading. It's not a continuous movement, and it's not done 'on the sensor', but I think it should still be fast enough not to burn a hole in the bed if you do it with the hot end at temperature. Hopefully it's quick enough to see no change in reading between the first and second movement after touching the bed, then a quick lift.
Ian
-
Sounds like the same method I used for filament loading; Push 10mm, then check the sensor and loop until complete.
The only downside I found with that setup was if you don't add a wait into the loop it fills the G-Code buffer so even if the sensor reads true, then it'll still complete the rest of the queued moves past where you want it to stop.
And if you add the wait, you then get a stuttering effect as the movement has to decelerate to a stop for the check to happen. So you don't get a very nice smooth movement and can sometimes sound weird / excite vibrations is the system. -
I have created https://github.com/Duet3D/RepRapFirmware/issues/1061.
-
@droftarts probing speed recommendation for beacon contact is 2-4mm/s with a maximum of 5mm/s
I wonder if the old analog probe feature of automatically slowing down Z when the probe starts reading could be revived .... this would be good for people with tall printers as they could move at, say, 10mm/sec until the probe reads, and decelerate as soon as the values start changing. But I guess with inertia and deceleration there are other difficulties with this approach I am conveniently glossing over (-:
-
@oliof said in Duet SZP nozzle probing like beacon contact?:
@droftarts probing speed recommendation for beacon contact is 2-4mm/s with a maximum of 5mm/s
I wonder if the old analog probe feature of automatically slowing down Z when the probe starts reading could be revived .... this would be good for people with tall printers as they could move at, say, 10mm/sec until the probe reads, and decelerate as soon as the values start changing. But I guess with inertia and deceleration there are other difficulties with this approach I am conveniently glossing over (-:
To home Z you could use the probe in standard mode first with the trigger height set to e.g. 4mm and fast home to that height. Then switch the probe to the new yet-to-be-implemented mode and probe slowly for the last 4mm.
-
@dc42 thats nice and simple and easy. I like it!