Any thoughts about what could cause mid-work significant x-drift?

Any thoughts about what could cause mid-work significant x-drift? I am trying to mill a simple pocket to create a level base. I start with an outline to ensure squareness. That works fine and the edges are at proper right angles. Then run some gcode to mill progressively deeper (0.75mm per pass at 500mm/min and a final pass of 0.1mm at 100mm/min. The first half of the run works fine. Then suddenly the x axis skews progressively positive. Photo attached.

In the first photo you can see the right edge gradually moving away from true. And in the second you can see the pad being left behind on the left side as the x=0 gradually moves off to the right.

Note that the outline on the left side shows a true square (third photo)

Any thoughts? I’m using grbl 1.1e and a gshield attached to an uno. Chrome on Mac os with sjps 1.94.

Try slow down the feeding speed?

nice thought @Tommy_Gu_PuppyDogPaw but the same is happening at 200.

I’ve tried multiple diagonal movements from 0,0 to 150,100 at various feed rates from 300 to 1200 and the positioning is true. but when i’m going side to side in a snake (milling the pocket) the behaviour is exhibited. whether as an air job or not.

Possibly missed steps? Is the current to your stepper motor high enough (which i sometimes really dial in by how much heat is coming out of motor when i touch it)? Try doing no micro-stepping either so you get max torque at each step.

If we were missing steps then i think that the distance between the start and end point would not be the same. Unless the missing steps only occurred in one direction. As the rate of drift is linear it would also mean that the steps were missing on every travel (in one direction). I suppose this is possible if there was a problem with the lead screw in a particular place.

I know I am a rookie so I won’t pretend to know what I am talking about. But I too am in this process. I made my tool path to cut the outline first then go in a back and forth motion to clear the rest of the bed down. Would this be a fix?

More info. In the first attempts i was iteratively sweeping the x axis to level the bed. So long X moves and tiny y moves.
I rewrote the g code to sweep the y axis and make tiny x axis moves and it seems that this has worked without an issue.
Does this increase the likelihood of this being skipping on the x-axis?

@Clayton_Allen ​ sweeping is the normal way to mill a pocket. There is no need to mill the outline first. I did so because i wanted to check the perpendicularity. Thanks for taking the time to help and chip in.

I would search for a machine x/y axis perpendicularity problem. I faced identical results when I got the 3040 and mechanical axis realignment was the only solution.
Make a test by milling a square and measure its diagonals. I used v-bit and low Z-depth in my test job. If your diagonals are not the same length, X and Y axis are not perpendicular in relation to each other.

To correct I removed the bed plates aluminum profiles and placed A3 sheet of millimeter block (used for technical drawings) aligned to the Y axis as reference. Next I mounted a laser pointer to the machine and moved machine Y axis back and forth few times to make sure I finally fix the reference in correct position. Then I moved X axis and Y axis to all 4 corners (zero and Xmax and Ymax respectively) to see how much skew I initially get. This is where you start mechanical re-alignment -> later on I found that the endoscope camera mounted on the machine together with Chilipeppr WebCAM widget helps a lot to get the thing done. Loosing screws on the X axis mounting blocks allows slight movements allowing to fix the problem with the continuous check on the laser pointer. The alignment margin is very limited and you have to continuously check that linear guides keep parallelism, otherwise you may see other mechanical related issues.

In general this is not easiest way to get 100% mechanically aligned on small machines. The bigger the machine is, it is easier to align.

Thanks @sszafran ​. This is a modified 2020 (mods bring it down to about 15 x 15) using ballscrews on the x and y axis and trapezoidal 8mm on z axis. Bk10s as support bearings on x and y and a simple pillow bearing on z.

I have noticed a little asymmetry on the x axis at the flexible coupling. But I’m not sure where it is coming from. I guess if the asymmetry is too much then it could lead to skips every n turns.

Here are my old posts related to the ‘axis skew’ issues:

Compensation in software is not really a solution to that problem, but that would allow to workaround the issue and get correct results when milling - just imagine 2-sided PCBs.