Ah, ok, that makes sense. Add it to the config-override.g manually. I just wanted to make sure that was an appropriate way to achieve the behavior I'm looking for.
Is this intentional behavior? I ask because it seems to leave out anyone who might manually configure multiple tools. I see why mine is working (because i tested touch-off G10 settings for our eventual implementation of the E3D toolchanger on RailCore 2), and it's worked ever since (because it was already there, I suppose).
So in order to make this work manually, you have to manually enter it into config-override.g once, reboot, and then changes will be written?
Tool offsets are critical to the eventual application of the tool changer to the RailCore chassis. G31 is for PROBE offset - which is fine if you have only one tool, but if you have multiple tools, it's insufficient for configuration.
That's what got me testing it. While testing it, it became clear that the tool offset is MUCH more user friendly. You'll note that bmveee had the same issue prior to switching to the G10 tool offset process, and the issue in the other post that you mention occurred with G31 and G10 tool offset as well.
If G10 doesn't function properly, it's still broken, even if you can work around it with G31. I don't think that's related to this issue, though, but there's certainly something strange going on. The M500 wasn't saving the tool offset like it's supposed to. Specifically, in my gcode console I can issue:
G10 L1 P0
G10 L1 P0
Tool 0 offsets: X0.00 Y0.00 Z1.70, active/standby temperature(s): 0.0/0.0
This is mirrored in my config-override.g:
; config-override.g file generated in response to M500 at 2019-06-27 16:10
; This is a system-generated file - do not edit
; Heater model parameters
M307 H0 A90.0 C700.0 D10.0 S1.00 V0.0 B0
M307 H1 A618.9 C194.1 D4.1 S1.00 V24.3 B0
M307 H2 A340.0 C140.0 D5.5 S1.00 V0.0 B0
M307 H5 A340.0 C140.0 D5.5 S1.00 V0.0 B0
M307 H6 A340.0 C140.0 D5.5 S1.00 V0.0 B0
M307 H7 A340.0 C140.0 D5.5 S1.00 V0.0 B0
; Probed tool offsets
G10 P0 Z1.70
G10 L2 P1 X0.00 Y0.00 Z0.00
G10 L2 P2 X0.00 Y0.00 Z0.00
G10 L2 P3 X0.00 Y0.00 Z0.00
G10 L2 P4 X0.00 Y0.00 Z0.00
G10 L2 P5 X0.00 Y0.00 Z0.00
G10 L2 P6 X0.00 Y0.00 Z0.00
G10 L2 P7 X0.00 Y0.00 Z0.00
G10 L2 P8 X0.00 Y0.00 Z0.00
G10 L2 P9 X0.00 Y0.00 Z0.00
while troubleshooting with bmveee or duetal (I think that's mspal from our discord ) I noted that M500 never wrote their tool offset to the config-override.g. This is unexpected behavior, and is sufficient in and of itself to result in unpredictable behavior. That's when I recommended they post in the duet forums.
Specifically, I had one of them put M501 at the end of their config.g (This should load config override). Then issue:
G10 L1 P0 Znnn.n (insert number here)
and the entry does not appear in config-override.g as it should. This is clearly a problem, but I can't seem to figure out why. Mine works as expected.
We'll have to get @natewalck to provide that data. Somehow, mine suddenly stopped doing this. I repeated it fifteen or twenty times when Nate told me about it, and then for the last repetition you asked for. But somehow running M122 seems to have fixed it permanently. LOL. Not sure how that's even possible.
Changes: I took out the M401/M402 and the dwell. Nothing else except M122.
Now I power cycle, G28, G32, G32, G29 and get the proper map.
In the first height map, all locations are less than 0.0. What setting would move the center up to Z = 0.0?
That's the $64,000 question, eh? No setting changes between the first picture and the second.
Ok, reproduction is easy. Every time I follow that procedure I get this map:
It turned out to take more than a few G32/G28 Z/G29 cycles to return to the normal map, which is:
But now, no matter how many times I run G28 Z, G32, or G29, I get the same ( good ) result.
Note that our leveling probe and our mesh probe use the same bed points. Our general assumption is that the 1/4" MIC6 tooling plate is flat (which is born out by actually printing).
Also, I have not tried a print with this map as I'm afraid of a nozzle crash.
The G4 P500 is in the wrong place there. I needed it for the servo I was using and it got inadvertently moved. I'll pull the M401 and M402, thanks. I should probably audit my configuration monthly because of all the experimentation I do
natewalk can reproduce it repeatedly. I only did it twice (the whole cycle, power on to bed 0.1mm low ) but it did do it both times. When the print that's currently running is done, I'll try it again and update.
Note that with TR8*8 screws, your "magic number" (Full step height) will be 0.02. All this means is that for best print quality, your layer height should be a multiple of 0.02. So rather than printing at 0.15, you'll want to do 0.16 or 0.14 instead.
I ran the original non-ZL RailCore 2 with this configuration for quite some time (until December of last year) and was quite happy with the prints.
Just remember you'll need to change the configuration for Z steps per mm from the default.
@dc42 - I just want you to remember, as you look through my crufty, constantly-noodled, experimental config.g, that you asked for this pain >:) hehehe
; Configuration file for My Printer
; Communication and general
M111 S0 ; Debug off
M550 PRailCore2 ; Machine name and Netbios name (can be anything you like)
;M551 Pmyrap ; Machine password (used for FTP)
;*** If you have more than one Duet on your network, they must all have different MAC addresses, so change the last digits
M540 P0xBE:0xEF:0xDE:0xAD:0xFE:0xEE ; MAC Address
;*** Wifi Networking
M552 S1 ; Enable WiFi
M555 P2 ; Set output to look like Marlin
M575 P1 B57600 S1 ; Comms parameters for PanelDue
G21 ; Work in millimetres
G90 ; Send absolute coordinates...
;M83 ; ...but relative extruder moves
; Axis and motor configuration
M584 X0 Y1 Z5:6:7 E3:4:8:9 ; Map Z to drivers 5, 6, 7 ; Define unused drivers 3,4,8 and 9 as extruders
;M584 X11 Y10 Z5:6:7 E3:4:8:9 ; Map Z to drivers 5, 6, 7 ; Define unused drivers 3,4,8 and 9 as extruders (servos)
; M584 X11 Y10 ; (smartsteppers)
M569 P0 S0 ; Drive 0 goes forwards (change to S0 to reverse it)
M569 P1 S1 ; Drive 1 goes forwards
M569 P2 S0 ; Drive 2 goes forwards
M569 P3 S1 ; Drive 3 goes forwards
M569 P4 S1 ; Drive 4 goes forwards
M569 P5 S1 ; Drive 5 goes backwards
M569 P6 S1 ; Drive 6 goes backwards
M569 P7 S0 ; Drive 7 goes backwards
;M569 P10 S1
;M569 P11 S0
M671 X-10:-10:273 Y24:228:122 S7.5 ; Calibrated Front left, Rear Left, Right S7.5 is the max correction
M92 X160 Y160 Z1600 ; set steps/mm for 1/16; later changes in M350 will be adjust0d
M92 E800:800 ; set steps/mm for 1/16; later changes in M350 will be adjusted.
;M350 X32 Y32 Z32 E16 I1 ; set 16x microstepping with interpolation
;M350 X64 Y64 Z128 E16 I1 ; set 128 microstepping for axes, 64 for extruder "with interpolation
M350 X16 Y16 Z16 E16:16 I1 ; set everything to 1/16, with interpolation.
M574 X1 Z0 S0 ; set homing switch configuration (x,y at min, z at max)
M574 Y1 S1
M906 X1500 Y1500 Z800 E1000:800 ; Set motor currents (mA)
;M906 X1200 Y1200 Z1000 E1200:1200 ; old NEMA23
;M906 X580 Y580 Z1000 E1200 ; new 0.9 NEMA23
M201 X2500 Y2500 Z60 E1000:1000 ; Accelerations (mm/s^2)
M203 X24000 Y24000 Z1200 E3600:3600 ; Maximum speeds (mm/min)
M566 X500 Y500 Z120 E600:600 ; Maximum jerk speeds mm/minute
M208 X242 Y240 Z245 ; set axis maxima and high homing switch positions (adjust to suit your machine)
M208 X0 Y0 Z-0.5 S1 ; set axis minima and low homing switch positions (adjust to make X=0 and Y=0 the edges of the bed)
G21 ; Work in millimetres
G90 ; Send absolute coordinates...
M83 ; ...but relative extruder moves
M305 P0 T100000 B3950 R4700 H0 L0 ; Put your own H and/or L values here to set the bed thermistor ADC correction
;M305 P1 T100000 B3950 R4700 H0 L0 ; Put your own H and/or L values here to set the first nozzle thermistor ADC correction
;M305 P2 T100000 B4240 R4700 H0 L0
M305 P1 T500000 B4723 C1.196220e-7 R4700; Set thermistor + ADC parameters for heater 1 (Slice Engineering)
;M305 P2 T100000 B4240 R4700 H0 L0
M305 P103 X6 S"Chamber" ; virtual heater to show chamber temp
;M301 H1 P26.5370 I1.4191 D124.0605 T0.50 S1.0
;M307 H1 A587 C47.9 D3.1 B0 S1.0 ; auto-tune values from M303 H1 P0.4 S265 with fan on S200 for deltaprintr.mini
;M307 H1 A516 C180 D12.4 B0 S1.0 ; auto-tune values from M303 for fake B3
;M307 H1 A468 C150.1 D6.5 B0 S1.0 ; fake B3 also
;M307 H1 A479.0 C108.6 D5.6 B0 S1.0 ; stubby
;M307 H1 A270.7 C90.4 D6.7 B0 S1.0 ;Heater 1 model: gain 270.7, time constant 68.4, dead time 6.7, max PWM 1.00, in use: yes, mode: PID
M307 H1 A569.0 C285 D4.5 B0 S1.0 ;Heater 1 model: gain 559.4, time constant 283.4, dead time 4.5, max PWM 1.00, calibration voltage 24.4, mode PID, inverted no, frequency default
M307 H0 A90 C700 D10 B0 S1.0
M307 H2 A270.7 C90.4 D6.7 B0 S1.0
;M307 H1 A388.8 C168.7 D12.0 S1.00 B0 ;
M307 H3 A-1 C-1 D-1 ; set duex4 "heater 3" to control the BLTouch
M570 S360 ; Hot end may be a little slow to heat up so allow it 180 seconds
M106 P0 H-1 ; disable thermostatic mode for fan 0
M106 P1 T45 H1 ; Turns on fan 45C
M106 P0 S0 ; turn off fans
;M106 P1 S0
M106 P2 S0
; Tool definitions
M563 P0 D0 H1 ; Define tool 0
G10 P0 S0 R0 ; Set tool 0 operating and standby temperatures
;M563 P1 D1 H2
;G10 P0 S0 R0
;*** If you have a single-nozzle build, comment the next 2 lines
;M563 P1 D1 H2 ; Define tool 1
;G10 P1 S0 R0 X0 Y17 ; Set tool 1 operating and standby temperatures
;M92 E837 ;titan steps/mm
;M92 E663:663 ; Set extruder steps per mm
; Z probe and compensation definition
;*** If you have a switch instead of an IR probe, change P1 to P4 in the following M558 command
;M558 P1 X0 Y0 Z1 F900 ; Z probe is an IR probe and is used for homing Z
;M558 P4 X0 Y0 Z1 I1 F900 ; inductive Z probe, inverted
;M558 P9 X0 Y0 Z1 H5 F400 T6000 ; bl-touch
M558 P4 C8 I1 ; OptiCon
M307 H4 A-1 C-1 D-1 ; reserve heater 4 for BLTOUCH
M307 H5 A-1 C-1 D-1
M557 X30:210 Y30:210 S180 ; set mesh size
;*** If you are using axis compensation, put the figures in the following command
;M556 S78 X0 Y0 Z0 ; Axis compensation here
M208 S1 Z-5 ; set minimum Z
T0 ; select first hot end
;G31 X0 Y30 Z0.0 P1 ; Set the zprobe height and threshold (put your own values here)
G31 X-4 Y30 Z0 P1 ; set Z offset for use with tool offset
M501 ; load config-override
G91 ; Relative coordinates
G1 Z8 F200 ; Lower bed.
G4 P500 ; Dwell for 500ms - to ensure bed is down
G90 ; Absolute positioning
G1 X125 Y125 F3000 ; Go to center of bed and probe Z height
M401 ; Lower Z probe (BLTouch)
G30 ; Calibrate Z-axis
M402 ; Retract Probe
;G1 Z1 F200 ; Raise bed to 1mm.
homeall by executing individual axes homing macros
For 0.01mm full step layer height ( "Magic Number" ) you need either 0.9º steppers with 4mm lead (2-start T8) leadscrew or 1.8º steppers with 2mm lead (1 start T8). That said, 0.9º steppers work fine with 2-start T8; you get lower vertical speed but a full step height of 0.005mm. You can find this information here:
As far as motors go, the Z axis is heavily reduced (in the sense of mechanical advantage), so torque is almost irrelevant. If you need high jerk or accel on Z - like if you want high speed moves on Z in the case of a ZLT - you'll want beefier motors. But be careful; a failed probe can break stuff!
I have since gotten the system working (mostly) properly. Here's my macro (note I changed switches, so trigger height changed to 2.92):
;; NB Your G31 must be set to 0 G31 X0 Y30 Z0 P1
;; M585 needs 15 (because that's where we start ) - trigger height of switch
;; so mine is 15-2.92 -12.08
;;G1 X0 Y82.1 moves my nozzle over the switch. YMMV.
M574 Z0 S0 ; set up the Z min endstop
G10 L1 P0 Z0 ; remove any existing offset
G28 Z ; home Z
T0 ; select tool
G1 Z15 F300 ; go to 15mm
G1 X0 Y82.1 F3200 ; move to switch
M585 Z-12.08 E2 L0 F60 S1 ; probe
G1 Z15 F600; move back off the switch
I've tested this ... many ... times and it produces the behavior I expected; that is, it sets the tool offset such that when I G0 Z0, the nozzle is at the bed. I can swap hot ends or nozzles, run the tool offset macro, M500, and start printing. I'm starting at 15 and moving towards 0. It's not intuitive which sign should be the right one, in either sense, though I think the way it's implemented makes sense to folks who've grown up using CNC mills.
One last update:
So I set my bed probe Z offset to 0 (BLtouch). I then homed Z, and ran the "tool offset" macro, and it assigned a very similar number to the tool offset ( I had 2.05 in my Z probe offset, and the tool offset macro set it to 2.04 ). Then I commanded G0 Z0 and it behaved correctly.
So I believe if I add M501 to my config, run the tool offset, issue M500, I should be good to go. Then when I change nozzles or hot ends, I can run the tool offset macro and M500; no more paper tests for offset config >:)
Ok. A little more information - this appears to do what I want it to do now:
M574 Z0 S1
G1 Z15 F300
G1 X8 Y84 F1200
M585 Z-11.05 E2 L0 F60 S1
So the trick is to take the trigger heigh (4.95, in this case), subtract it from the travel distance (15mm; that's where we start the M585 from). Then we put it in the Z parameter, negative: Z-11.05. This produces a tool offset of ~0.0 (sometimes 0.01, sometimes -0.01), which is what I would expect as Z was set with an offset for this tool in the Z probe for Z homing. Adjusting the nozzle so the height changes alters the tool offset predictably.
Next test will be to take out the Z value in the probe setting - or set it to 0 - and see if it gives me the same value for the offset I have now (1.92mm).
3d Printer (Railcore 2 250 ZL, duet and duex5). Firmware 2.02 (release)
Prior to M585, G10 L1 P0 reports offsets all zeroes.
M574 Z0 S1
G1 Z15 F300
G1 X8 Y84 F1200
M585 Z11.15 E2 L0 F60 S1
Switch is connected to ZMin; triggers appropriately as reported by M119. The macro aligns the nozzle with the switch and probes to it. It stops on switch trigger. The switch triggers at 3.85mm above 0 on the bed, and we want to set the tool offset for this nozzle such that the nozzle tip will be at ~0 if we command a G0 Z0 for Tool 0 (in this case).
Running this macro results in:
G10 L1 P0
Tool 0 offsets: X0.00 Y0.00 Z22.29, active/standby temperature(s): 0.0/0.0
So I think, maybe it wants the actual trigger height, and try it with:
M585 Z3.85 E2 L0 F60 S1
Which results in:
G10 L1 P0
Tool 0 offsets: X0.00 Y0.00 Z14.99, active/standby temperature(s): 0.0/0.0
So I really want the M585 to set this tool's Z offset such that it will be at 0 when we command T0; G0 Z0.
What is it that I'm failing to understand here? I'm fairly certain I can make it work with a single tool by homing Z to this switch and setting the offset to 3.85, but that won't help with multiple tools (which is the problem we want to solve - i.e., offsets for T0 and T1 and T2 )
Are the main benefits of a CoreXY against something like a Prusa i3 mainly a speed increase due to increased stability?
The bed on a corexy only has to move in Z, not in X or Y. This makes it easier to keep your bed level (in theory, the practice varies by implementation) and you only have to move your carriage in x/y. That leads to more consistent movement in X/Y, and by making your carriage lighter, you can print faster than a typical cartesian.
There are other advantages and better explanations, I'm sure. But that's the quick overview as I understand them.
Also, the structure is more rigid than you can make a column design like the i3. Ultimately, it increases quality@speed, yes. kraegar's demo prints are usually at 75mm/s, considerably higher than the higher quality prints I've seen from Prusas. IIRC, Tom's comment "Prints like an Ultimaker at half the price" was in reference to a 30 or 40mm/s print from the Prusa. I'm fairly certain the RailCore2 can produce 'decent' quality prints in excess of 150mm/s (limited by extrusion rate from the standard heat break, of course, which is like, 10-12mm^3/s).
Looks great! Any reason why the idlers aren't aligned to remove the belt crossover (similar to http://i.imgur.com/IAgrbDp.png)?
To arrange the idlers in that way would have required a much larger frame and weird motor mounts, and smaller idlers. The RailCore's motors are outside the build volume. The illustration you've provided is only one end of the belt path, but is topologically identical to the RailCore's belt path. RailCore is a duo-planar corexy design, not a crossing belt design. The "crossover" you see doesn't cross belt planes, so there's no compelling reason to eliminate it.
That said, I've got both sitting here; the original RailCore (the one kraegar is showing is RailCore2) which is a crossing-belt design, and RailCore2, which is a duo-planar belt design. There's no observable difference in performance. It's not difficult to make a 'crossing belt design' where the belts don't rub (the main reason folks worry about belt crossover), but neither RailCore has that issue.
Beautiful! I am curios to know what the best achievable speed while maintaining quality is.
Kraegar printed the benchy at 75mm/s; I've gone as high as 90mm/s with .4 nozzle at lower layer heights with only slight ringing. Kraegar's build seems to be performing a bit better than my prototype "alpha" model, so we'll have to wait for his high-speed tests.
What slicer are you using? Is it configured for absolute or relative E steps? If absolute, you have to add the M82 in the startup g-code to switch RRF to absolute extrusion. Just a problem I ran into with Cura (which doesn't seem to support relative extrusion).