ETA: See the post on page 2 which is the final draft of the exercise.
I've spent a good bit of time perfecting my 4th axis and I thought I'd share what I learned with others here. The problem/question is at the end.
Under normal circumstances, the 4th or 'A' axis is angular and the moves are called out in degrees. If you have a CAD/CAM software that supports a 4th axis, you are in good shape. If all you have is a 2.5D CAD/CAM, then things can be a bit more challenging.
First, lets address the 4th axis mechanics. My and most other 4th axis 'conversions' involve adding a stepper motor to a rotary table. Simple enough. In my case my rotary table was a 1:72 ratio. 72 turns of the worm results in one 360 degree rotation of the table.
My stepper motor is a 200 step per revolution (1.8 deg) per step (360 deg/200 steps=1.8deg/step) My controller runs 1/8 microstep mode so it takes 1600 step pulses (8*200) to make a complete 360 degree motor rotation.
72 motor rotations makes one rotation of the rotary table so 1600*72 means 115,200 steps for one rotation of the rotary table.
If we divide 360 degrees by 115200, we get .003125 degrees per step.
Alternately, we can calculate the number of degrees required to move a linear distance around the circumference of a part.
For example: We have a part that is 1.5” in diameter. 1.5* Pi (3.1415) gives us a circumference of 4.7123” If we divide 4.7123 by 360 we get .01309 inches of linear movement per degree.
If we want to move a linear distance of 1.125” on our 1.5” diameter (4.7123" cir) part, we divide 1.125” by .01309 in/deg and get 85.94 degrees of movement required to move 1.125” linear on the 1.5” diameter part.
Thus, we can create a correction factor or scaling factor for our 4th axis by dividing the circumference of the part by 360, and manually coding the linear distance for the ‘A’ axis move.
Alternately, if your CAD/CAM software has a scaling feature, you can create a scaling correction factor. You would create your part in standard 2.5D with X & Y moves with Y typically being the axis to be converted to ‘A’. You take the circumference and divide it by 360 then take the inverse of that value (1/x) and that becomes your scaling correction factor.
Using the previous example: 1.5”* 3.1415= 4.7123”
4.7123”/360=.01309
1 divided by 0.01309=76.397 scaling correction factor
Therefore, you would scale your ‘Y’ axis by a factor of 76.397 to get the equivalent linear move on the ‘A’ axis. Once you post the scaled code, you would do a simple search & replace substituting ‘A’ for ‘Y’ in your text editor. The end result X, Y, backplot & drawing will look strange because the Y axis will be substantially elongated. But it will be correct as far as the computer is concerend.
While it does work, this later method has an inherent problem. The feed rate will be significantly slower than the desired or specified feed rate.
As a result, I had to search for a better method. Thus part 2.
Using the same math:
72:1 ratio, 1600 steps per rev of the motor, 115200 steps for 360 rotary table movement .
In Mach2 (my version), we can take the total number of steps for 360 deg. Table rotation and divide it by the circumference to determine the number of steps per inch of movement. Again using the previous example:
1.5” diameter*3.1415=4.7123”
115200/4.7123=24447 steps per inch of linear movement.
In Mach, we change our A axis from angular to linear. Then calculating for the diameter of the part, we take the solution and use it in the ‘Steps per Unit’ setting for the ‘A’ axis in the motor tuning menu. We do this for each different diameter of part that we have machine. For a 1.5” diameter, we enter 24447 for our steps per unit.
Thus, by doing so we do NOT have to scale our ‘Y’ axis by a calculated scaling correction factor. Our backplot & drawing appears normally. We still have to do a search & replace substituting the A for the Y axis in our posted code. And the beauty of it is the specified feed functions correctly.
While the technique works perfectly for X,Y moves, IJ interpolation causes things to go bonkers. If anyone has any mathematical reasons why that may be, I’d sure like to hear them along with any suggested solutions.
Hope this little math exercise is of some help to others.