I very often get this kind of question and some variation. So I will try to help you solve this issue.
First, this is not an issue of the firmware. It is related to the fact that the BLTouch sensor is not as the same position than the nozzle. Any asymmetry of the printer tends to be amplified.
The first thing to do is to ensure that your top Z-frame is square:
Then ensure that the top Z-frame is perpendicular to the bottom XY-frame:
Use the four screws (see the circle) to adjust the position of the top Z-frame. It is important for the top Z-frame to be perpendicular to the bottom XY- frame , not the table or desk. It helps a lot if you are using Z braces (such as https://www.thingiverse.com/thing:921948or a remix of it).
Then with a ruler, measure from the top left corner of the Z-frame, to the front left corner of the bed XY-frame with a ruler. Then repeat this measurement on the right side, the two measurements should be the same:
If the two measurement are not the same, it means there is a small twist in the Z-frame, that will result in a very small rotation of the X-carriage about the X-rails. This will result in the BL-Touch moving at a different rate from or towards the bed compared to that of the nozzle which is closer (thank you Ray Edgley for pointing this out).
Then, and this step is very often overlooked, you have to ensure the X-axis is parallel to the bottom frame:
There are several possibilities to ensure that:
- Wanhao Duplicator i3 Z-Axis Alignment Posts(this is what I am using)
- Dual Z-axis alignment bars(I have not yet tested them, perhaps even better)
It is important to align with the frame (or rodes), not with the bed nor the table or desk.
In this example, the x axis is not properly aligned:
The left post touch the X-axis rode, but the right post does not. Move (gently) the z-axis rode on the right (see the arrow).