I have a JM with a Z20, BB controller and stiffy. My shop does not get heated overnight, so in the AM I run a more gentle spindle warmup (1.5KW air cooled) and start at the recommended RPM and work up to 24000RPM at 3k intervals, dwelling for 60 seconds at each ramp up. Afterwards, I run the x/y/z around with the joystick. I’ve been playing around a little with trying to run the axis’s while the spindle is rotating to save some wait time. I leave the end of the day with a clean work surface and an empty collet and spindle parked in homed position so I can start fresh in the morning. Just curious if anyone has done something similar and might share g-code. As dwell time for the spindle rotation inhibits axis movement, I’m managing to confuse myself a bit to get the code to work and have it all happen simultaneously. I’m thinking to avoid using the P60 (dwell for a minute) which inhibits axis movement until completed, that I have to have some code in place of that for axis movement at a particular rate to equate to a minute. It’s not a huge deal to do the spindle warm up and then another macro for x/y/z , but it would be nice to just hit okay and let it do its thing in a more controlled linear fashion, especially for the cold axis bearings. The last coding I did was fortran and CP/M and as I age I find it easier to ask the sharper folks for some help, which is appreciated.
Hey Joe,
Assuming you are working in inches and starting from the home position:
I think it would work to just replace the P60 with G1 X48 Y32 F57
Then for the next P60 replace with X-48 Y-32
and so on back and forth.
This will run both axis on the diagonal from front left to back right and vice versa.
The diagonal of a 48" x 32" rectangle is 57.69" so F57 will be just over a minute to complete.
You would probably only need to do the axis movement for the last 5 minutes though.
Hey Chris,
Thanks for the response! I got it working with a slight modification. I had to change the return trip for the X/Y to 0,0 else the X/Y would keep trying to drive beyond the hard stop home position. Maybe because first X/Y movement wasn’t the X/Y max soft limit parameter? Anyway, did a short warmup and added some Z movement. Works great. Thanks. If there is a cleaner way than the following, I’m all ears:
G20
M3 S7200
G1 X48 Y32 Z-5 F57
M3 S12000
G1 X0 Y0 Z0
M3 S18000
G1 X48 Y32 Z-5 F57
M3 S24000
G1 X0 Y0 Z0
S0
M5
M2
…For example, once G1 is set for the second line, does it need to be repeated in each move or does it set for subsequent lines as well:
G20
M3 S7200 G1 X48 Y32 Z-5 F57
M3 S12000 G1 X0 Y0 Z0
M3 S18000 G1 X48 Y32 Z-5 F57
M3 S24000 G1 X0 Y0 Z0
S0
M5
M2
I didn’t think warming up the X, Y, and Z axis is necessary?
Warming the spindle is common, as there are bearings in there that expand just a tiny (microscopic) amount and tighten up.
As for your G-codes,
Looks like the programs above runs in G54. his means your X0 Y0 position will need to be set to the corner of the machine.
A slicker program would make movements in G53. That way, your X0 Y0 coordinates used for a part on the table can be set anywhere, and the warmup will run just fine, ignoring the current XY position.
Instead of
G1 X48 Y32 Z-5 F57
try
G53 G1 Z-0.5 F57
G53 G1 X48 Y32 F57
G54
These revised steps will retract the Z before making XY movements (which is generally a safer move)
Move to a position, then
Set the work coordinate system (WCS) back to G54 when the movement is finished.
I haven’t tested the suggestion - so take it with a grain of salt.
Thanks Mike I will check it out. I warm up the drives because the stall homing flakes a bit when super cold.
Yes, that is correct. I didn’t give it a thorough think through..
MikeXYZ brings up a good point about where the origin is set.
Before version 1.6 all the origins were set to 0 when you booted the machine.
So I was thinking as soon as you start the machine and want to do a warm up you will not need to think about origins because they will all be 0 and your spindle is parked at the home position.
But that is not the case any more with ver 1.6 and newer. now G92 retains it’s values on boot up. So yes, G1 X48 Y32 Z-5 F57 would not work if there was an origin set.
Since you have not homed the machine yet the spindle must be at the home position to start the cycle. The machine does not know where the travel limits are until you run the home cycle.
In order to avoid crashing into the travel limits I would shorten the moves slightly.
G53 is the way to go. But to use it you must have it on every move line as well as the G1. Such as:
G20
M3 S7200
G53 G1 X47.5 Y31.5 Z-4.5 F57
M3 S12000
G53 G1 X.5 Y.5 Z-.5
M3 S18000
G53 G1 X47.5 Y31.5 Z-4.5
M3 S24000
G53 G1 X.5 Y.5 Z-.5
M5
M2
Probably the F does not have to be on every line.
Also you don’t have to bother with the G54 at the end. I also thought for years that the controller would use G54 by default since many others do. But the BuildBotics controller does not use G54. It uses G92 which is always on after a boot up.
In fact your programs don’t need to specify G54 or any other origin. It would have no effect anyway unless you use a G10 L2 command.
Again, thanks for the responses. As at end of day I have the habit of parking the machine with home, it all works out pretty well ! I’ll play around with the suggestions and see what works best. Appreciate all the help guys.
Just a little more- I noticed when playing around with the macro gcode that if I made a mistake in the X or Y or Z go commands, commanding a move beyond the soft limits, I would get a “NO-FIT” displayed in the Toolpath. This happens even while running a carve. Kind of a nice check of the code.
Yes that is a good check. But be aware that it will only happen after you home your machine.
If you use your warm up cycle before you home the machine there will be no checks.
Good to know. When I work out and test what works well, I will pass it along.