User Tools

Site Tools



This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
mycnc:move-a-to-0 [2017/09/04 12:11]
mycnc:move-a-to-0 [2019/11/18 11:37] (current)
Line 1: Line 1:
 ==== Rotate A axis to 0 position ==== ==== Rotate A axis to 0 position ====
-For some applications A-axis is programmed as endless rotation. +For certain ​applications, the A axis is programmed as being endlessly rotatingTherefore, the **A** position ​(in both machine and program coordinates) ​may be specified as several thousand degrees ​after the G-code ​has completed runningAn example of such behaviour can be seen in the screenshot below:
-Program ​**A** position may come to many thousands degree ​after G-code ​finishedSee screenshot ​example ​below -+
-To start new job A position ​should ​be roll back to about "​0"​ position. Jogging to "​0"​ may take a long time (can be hundreds of complete turn to run). In some cases it's possible ​just reset A position, ​but A axis orientation ​will be lost. +At the start of a new job which uses the A axis, the A position ​will have to be rewound ​back to zero before starting a new run. Jogging ​(physical rotation) ​to "​0" ​from a large A position left over from the previous job may take a considerable ​time (can be hundreds of complete turn to run). In some cases it's possible ​to simply ​reset the axis position ​to zero at the end of the job runindicating that whatever point the A axis has stopped at will be the next zero, thus saving time on the rewind processThis, however, runs into the problem of losing the proper A-axis orientation which may then require homing. Therefore, the best way to keep the A-axis orientation,​ but still save time by foregoing the physical rewind back to zero, is to reset all complete ​rotation ​turns of the A axis (each 360 degrees), and then physically jog to the A-axis ​"​0"​, retaining ​the previous ​A-axis orientation.
-The best way to subtract a number of complete turns (360 degree), then move to "​0" ​for the rest of A.+
-This can be done through macro-programming.+This can be done through macro programming, using the M309 macro by default. All recent myCNC profiles should have the M309 macro in their Macro List. If your profile does not have the M309 macro, it is possible to add it using the code provided below
-We will add macro M335 to bring A axis to "​0"​, then add button to run the macro.+In the macro we will: 
 +  * Check if our A-position is positive (A-axis program position value is mapped ​to global variable #5044) 
 +  * Check the current coordinate and subtract 360 degree if current coordinate is more than 360 degree (more than 1 full turn)  
 +  * Enter a code loop which will continuously check if the current remaining coordinate is more than 360 degrees, and repeat the previous step if it is. 
 +  * After the coordinate is less than 360 degrees, this value will be stored as the current ​A-axis position  
 +  * Move A-axis to "​0"​ 
 +  * Add similar branch for a situation in which we have a negative A-coordinate value.
-A-axis program position value is mapped to global variable #5044. In the macro we -  +<code php M309> 
-  * Check if A-position is positive +G90G0Z[#​7020] ​(Lift to a safe height
-  * Add a code loop,  +#10=#5044 (Store A coordinate ​in register #10)
-  * Test in the loop A-coordinate and subtract 360 degree if current coordinate is more than 360 degree ​(more than 1 turn) +
-  ​* ​Store result value as current ​A-axis position and then  +
-  * Move A-axis to "​0"​. +
-  * Add similar branch for negative A-coordinate ​value.+
-<code php M335>(Move to position A=0+N10 
-#10=#5044 (Get position A)+IF [#10 LT 180]  20 (Go to line 20 if the loop is complete
 +JUMP 10
-if [ #10 LT 0 300 (Test If A-position ​is negative+N20 
-(if positive) +IF [#10 GT -180 ​50 ​(Go to line 50 if the loop is complete
-N100 +#10=#10+360 
-if [ #10 LT 180 ] 200 (Test if A-position higher than 180 degrees)+JUMP 20
-#10 = #10 - 360 (Subtract a whole turn - 360 degree+N50 
-JUMP 100 (Jump to begin of the Loop)+G91 G0 A [-1*#10
 +G90 G10 L70 P0 A0 (resets machine coordinates
 +G90 G10 L70 P#5220 A0 (resets program coordinates)</​code>​
-N200 +Below is a video which illustrates the way the M309 macro functions:
-JUMP 400+
-N300 +{{youtube>​-gK4bl4JZ3Q?​large}}
-if [ #10 GT -180 ] 400 (Test if A-position lower than -180 degrees) +
-#10 = #10 + 360 (Add a whole turn - 360 degree) +
-JUMP 300 (Jump to begin of the Loop)+
-N400 +The main screen of the myCNC software already has a "​Move ​to 0" button which uses the M309 macro by default, ​as shown in the screenshot at the top of this page. The process to add such a button to the screen is described here: [[mycnc-screen:​1280_series_screen_configuration_examples#​add_move_a_to_0_button_to_run_macro_with_confirmation|Add a "​Move ​A to 0" button example]], and more information on adding buttons and on-screen elements can be found in the [[mycnc:​mycnc_screen_configuration|MyCNC Screen Configuration]] manual.
-G90 G10 L70 P#​5220 ​A#10 (store #10 value as A-axis program position) +
-G90 G0 A0 (rotate ​axis to 0+
-[[mycnc:mycnc_screen_configuration#add_move_a_to_0_button_to_run_macro_with_confirmation|Add "​move ​to 0" button]]+In cases where it is necessary to lift the tool to the top instead of safe height (global variable #7020), we can edit the first line to use Global Variable #5433, which is our maximum Z-axis limit, or use #5433 - 1, which will be 1 mm lower than the maximum allowable limit to prevent the machine from reaching the very top of the allowable Z-axis travel. The code in this case will look the following way: 
 +<code php M309> 
 +G90G0Z[#5433 - 1] 
 +#10=#5044 (Store ​coordinate in register #10) 
 +IF [#10 LT 180 20 
 +JUMP 10 
 +IF [#10 GT -180 50 
 +JUMP 20 
 +G91 G0 A [-1*#10] 
 +G90 G10 L70 P0 A0 
 +G90 G10 L70 P#5220 A0 
mycnc/move-a-to-0.1504541464.txt.gz · Last modified: 2017/09/04 12:11 by skirillov