Homing procedure

Here is where you can request new features or special features.

Homing procedure

Postby El Ventu » Mon Sep 23, 2024 4:26 pm

Hello everyone!
I'm converting a small milling machine, I'm in search of the maximum precision possibile to make small plastic injection molds for my Precious Plastic workspace.

Since I'm running the workspace in my spare time, and the milling process can be very long, the machine have to be turned off in between the various procedures.

To achieve the maximum homing precision, I bought three Metrol microswitches (0.01mm repeatability), but they have the downside of having a very little travel, so it's needed to do the homing procedure at a very low speed.

My idea to speed up the procedure is this:
Installing three proximity sensors near the precision ones, to sense when the axis is near them, so the axis is moving fast until it opens the circuit of the proximity, and from that point it moves slowly to the precision one.

All the sensors are normally closed, so this procedure can be made using only two inputs on the AXBB-E I bought.

Is this procedure doable with UCCNC?
El Ventu
 
Posts: 5
Joined: Wed Mar 06, 2024 8:44 am

Re: Homing procedure

Postby Battwell » Sat Sep 28, 2024 8:02 pm

no need.
you can set the homing back off speed very low to catch the same position every time.
my machines repeat at <0.005mm which should be "unseeable" (using proximity switches)
just make sure your machine can overun the switches without breaking them.
Uc300eth on router and mill.
UK uccnc powered machine sales. https://cncrouter.uk/atc-cnc-routers.htm
Automateanything/duzzit cnc/mercury cnc
Battwell
 
Posts: 867
Joined: Sun Sep 25, 2016 7:39 pm
Location: South Wales. Uk

Re: Homing procedure

Postby El Ventu » Sun Nov 17, 2024 2:02 am

Battwell wrote:no need.
you can set the homing back off speed very low to catch the same position every time.
my machines repeat at <0.005mm which should be "unseeable" (using proximity switches)
just make sure your machine can overun the switches without breaking them.

I don't asked if there's need.
I asked if it's possible.
Proximity have drift related to temperature, mechanical ones don't.

However, I want to use the Metrol ones, the question is still valid.
El Ventu
 
Posts: 5
Joined: Wed Mar 06, 2024 8:44 am

Re: Homing procedure

Postby sebba » Sun Nov 17, 2024 6:07 am

even your molds will have temperature drift, if you can measure it

regarding "if possible", I think you can make a macro which will move your machine to the proximity sensors position and then do homing at slow speed
something like: disable soft limit // goto X0 // detect Xsensor // stop Xaxis // goto Y0 // detect Ysensor // stop Yaxis // start homing // enable softlimit
need testing, of course
- YQWQ
User avatar
sebba
 
Posts: 52
Joined: Mon Dec 21, 2020 9:56 am
Location: Bucharest, ROMANIA

Re: Homing procedure

Postby El Ventu » Mon Nov 18, 2024 10:24 pm

sebba wrote:even your molds will have temperature drift, if you can measure it

regarding "if possible", I think you can make a macro which will move your machine to the proximity sensors position and then do homing at slow speed
something like: disable soft limit // goto X0 // detect Xsensor // stop Xaxis // goto Y0 // detect Ysensor // stop Yaxis // start homing // enable softlimit
need testing, of course


That's sure.
But, you know...
I'm used to work with professional machinery, so I want to try to have the positioning as precise as I can.

I also already bought the Metrol sensors.

Where the macro has to be inserted?
Thank you!
El Ventu
 
Posts: 5
Joined: Wed Mar 06, 2024 8:44 am

Re: Homing procedure

Postby RsX » Tue Nov 19, 2024 5:44 pm

sebba is right and he is describing exactly a homing procedure. So I thought, why not make 2 homings for each axis?
And that's what I did.
This was an interesting exercise, I got to use structs, #events and learn more about macro programming. :mrgreen:

Enough said, here is the code. Right now it works only with X, Y and Z, but it can easily be expanded to include A,B and C axes.
You need at least 2 input pins, one for all the proximity sensors and one for all the precision switches. Fast and slow feedrates, up and down the sensors, are individually set for each axis.
Let me know what you think. :)
Code: Select all
Config_ Config = new Config_{
   //X Axis
   X = new AxisConfig{ AxisName = "X",
                  //Inputs
                  ProximityPin = new Setting{ Value = 1, ScreenField = 5},
                  ProximityPort = new Setting{ Value = 2, ScreenField = 245},
                  MicroPin = new Setting{ Value = 1, ScreenField = 5},
                  MicroPort = new Setting{ Value = 2, ScreenField = 245},
                  //Feedrates
                  FastHomingUp = new Setting{ Value = 1000, ScreenField = 6},
                  FastHomingDown = new Setting{ Value = 250, ScreenField = 15},
                  SlowHomingUp =  new Setting{ Value = 50, ScreenField = 6},
                  SlowHomingDown = new Setting{ Value = 10, ScreenField = 15},
                  //Buttons
                  HomingButton = 107
   },
   //Y Axis
   Y = new AxisConfig{ AxisName = "Y",
                  //Inputs
                  ProximityPin = new Setting{ Value = 2, ScreenField = 20},
                  ProximityPort = new Setting{ Value = 2, ScreenField = 250},
                  MicroPin = new Setting{ Value = 2, ScreenField = 20},
                  MicroPort = new Setting{ Value = 2, ScreenField = 250},
                  //Feedrates
                  FastHomingUp = new Setting{ Value = 1000, ScreenField = 21},
                  FastHomingDown = new Setting{ Value = 250, ScreenField = 30},
                  SlowHomingUp =  new Setting{ Value = 50, ScreenField = 21},
                  SlowHomingDown = new Setting{ Value = 10, ScreenField = 30},
                  //Buttons
                  HomingButton = 108
   },
   //Z Axis
   Z = new AxisConfig{ AxisName = "Z",
                  //Inputs
                  ProximityPin = new Setting{ Value = 3, ScreenField = 35},
                  ProximityPort = new Setting{ Value = 2, ScreenField = 255},
                  MicroPin = new Setting{ Value = 3, ScreenField = 35},
                  MicroPort = new Setting{ Value = 2, ScreenField = 255},
                  //Feedrates
                  FastHomingUp = new Setting{ Value = 500, ScreenField = 36},
                  FastHomingDown = new Setting{ Value = 250, ScreenField = 45},
                  SlowHomingUp =  new Setting{ Value = 50, ScreenField = 36},
                  SlowHomingDown = new Setting{ Value = 10, ScreenField = 45},
                  //Buttons
                  HomingButton = 109
   }
};


exec.AddStatusmessage( "!!!Double Homing Started!!!" );
DoubleHoming(Config.Z);
DoubleHoming(Config.X);
DoubleHoming(Config.Y);
exec.AddStatusmessage( "!!!Double Homing Finished!!!" );


#Events

int ApplysettingsButton = 168;

struct Setting {
   public double Value;
   public int ScreenField;
}

struct AxisConfig {
   public string AxisName;
   //Proximity Input
   public Setting ProximityPin;
   public Setting ProximityPort;
   //Micro Input
   public Setting MicroPin;
   public Setting MicroPort;
   //Feedrates
   public Setting FastHomingUp;
   public Setting FastHomingDown;
   public Setting SlowHomingUp;
   public Setting SlowHomingDown;
   //Buttons
   public int HomingButton;
}

struct Config_{
   public AxisConfig X;
   public AxisConfig Y;
   public AxisConfig Z;
}

void DoubleHoming(AxisConfig AC)
{
   //Fast homing
   exec.AddStatusmessage( "- Fast Homing " + AC.AxisName + " Axis -");
   //set proximity as home sensor
   setFieldValue(AC.ProximityPin);
   setFieldValue(AC.ProximityPort);
   //set fast feedrates
   setFieldValue(AC.FastHomingUp);
   setFieldValue(AC.FastHomingDown);
   //Applysettings
   exec.Callbutton(ApplysettingsButton);
   //home axis
   exec.Callbutton(AC.HomingButton);
   while(exec.IsMoving()){}
   
   //Slow homing
   exec.AddStatusmessage( "- Slow Homing " + AC.AxisName + " Axis -");
   //set precision switch as home sensor
   setFieldValue(AC.MicroPin);
   setFieldValue(AC.MicroPort);
   //set slow feedrates
   setFieldValue(AC.SlowHomingUp);
   setFieldValue(AC.SlowHomingDown);
   //Applysettings
   exec.Callbutton(ApplysettingsButton);
   //home axis
   exec.Callbutton(AC.HomingButton);
   while(exec.IsMoving()){}
}

void setFieldValue(Setting s){
   AS3.Setfield(s.Value, s.ScreenField);
   AS3.Validatefield(s.ScreenField);
}
User avatar
RsX
 
Posts: 30
Joined: Fri Oct 25, 2024 9:22 pm

Re: Homing procedure

Postby El Ventu » Wed Nov 20, 2024 11:41 pm

RsX wrote:sebba is right and he is describing exactly a homing procedure. So I thought, why not make 2 homings for each axis?
And that's what I did.
This was an interesting exercise, I got to use structs, #events and learn more about macro programming. :mrgreen:

Enough said, here is the code. Right now it works only with X, Y and Z, but it can easily be expanded to include A,B and C axes.
You need at least 2 input pins, one for all the proximity sensors and one for all the precision switches. Fast and slow feedrates, up and down the sensors, are individually set for each axis.
Let me know what you think. :)
Code: Select all
Config_ Config = new Config_{
   //X Axis
   X = new AxisConfig{ AxisName = "X",
                  //Inputs
                  ProximityPin = new Setting{ Value = 1, ScreenField = 5},
                  ProximityPort = new Setting{ Value = 2, ScreenField = 245},
                  MicroPin = new Setting{ Value = 1, ScreenField = 5},
                  MicroPort = new Setting{ Value = 2, ScreenField = 245},
                  //Feedrates
                  FastHomingUp = new Setting{ Value = 1000, ScreenField = 6},
                  FastHomingDown = new Setting{ Value = 250, ScreenField = 15},
                  SlowHomingUp =  new Setting{ Value = 50, ScreenField = 6},
                  SlowHomingDown = new Setting{ Value = 10, ScreenField = 15},
                  //Buttons
                  HomingButton = 107
   },
   //Y Axis
   Y = new AxisConfig{ AxisName = "Y",
                  //Inputs
                  ProximityPin = new Setting{ Value = 2, ScreenField = 20},
                  ProximityPort = new Setting{ Value = 2, ScreenField = 250},
                  MicroPin = new Setting{ Value = 2, ScreenField = 20},
                  MicroPort = new Setting{ Value = 2, ScreenField = 250},
                  //Feedrates
                  FastHomingUp = new Setting{ Value = 1000, ScreenField = 21},
                  FastHomingDown = new Setting{ Value = 250, ScreenField = 30},
                  SlowHomingUp =  new Setting{ Value = 50, ScreenField = 21},
                  SlowHomingDown = new Setting{ Value = 10, ScreenField = 30},
                  //Buttons
                  HomingButton = 108
   },
   //Z Axis
   Z = new AxisConfig{ AxisName = "Z",
                  //Inputs
                  ProximityPin = new Setting{ Value = 3, ScreenField = 35},
                  ProximityPort = new Setting{ Value = 2, ScreenField = 255},
                  MicroPin = new Setting{ Value = 3, ScreenField = 35},
                  MicroPort = new Setting{ Value = 2, ScreenField = 255},
                  //Feedrates
                  FastHomingUp = new Setting{ Value = 500, ScreenField = 36},
                  FastHomingDown = new Setting{ Value = 250, ScreenField = 45},
                  SlowHomingUp =  new Setting{ Value = 50, ScreenField = 36},
                  SlowHomingDown = new Setting{ Value = 10, ScreenField = 45},
                  //Buttons
                  HomingButton = 109
   }
};


exec.AddStatusmessage( "!!!Double Homing Started!!!" );
DoubleHoming(Config.Z);
DoubleHoming(Config.X);
DoubleHoming(Config.Y);
exec.AddStatusmessage( "!!!Double Homing Finished!!!" );


#Events

int ApplysettingsButton = 168;

struct Setting {
   public double Value;
   public int ScreenField;
}

struct AxisConfig {
   public string AxisName;
   //Proximity Input
   public Setting ProximityPin;
   public Setting ProximityPort;
   //Micro Input
   public Setting MicroPin;
   public Setting MicroPort;
   //Feedrates
   public Setting FastHomingUp;
   public Setting FastHomingDown;
   public Setting SlowHomingUp;
   public Setting SlowHomingDown;
   //Buttons
   public int HomingButton;
}

struct Config_{
   public AxisConfig X;
   public AxisConfig Y;
   public AxisConfig Z;
}

void DoubleHoming(AxisConfig AC)
{
   //Fast homing
   exec.AddStatusmessage( "- Fast Homing " + AC.AxisName + " Axis -");
   //set proximity as home sensor
   setFieldValue(AC.ProximityPin);
   setFieldValue(AC.ProximityPort);
   //set fast feedrates
   setFieldValue(AC.FastHomingUp);
   setFieldValue(AC.FastHomingDown);
   //Applysettings
   exec.Callbutton(ApplysettingsButton);
   //home axis
   exec.Callbutton(AC.HomingButton);
   while(exec.IsMoving()){}
   
   //Slow homing
   exec.AddStatusmessage( "- Slow Homing " + AC.AxisName + " Axis -");
   //set precision switch as home sensor
   setFieldValue(AC.MicroPin);
   setFieldValue(AC.MicroPort);
   //set slow feedrates
   setFieldValue(AC.SlowHomingUp);
   setFieldValue(AC.SlowHomingDown);
   //Applysettings
   exec.Callbutton(ApplysettingsButton);
   //home axis
   exec.Callbutton(AC.HomingButton);
   while(exec.IsMoving()){}
}

void setFieldValue(Setting s){
   AS3.Setfield(s.Value, s.ScreenField);
   AS3.Validatefield(s.ScreenField);
}


Wow, thank you!
At the moment the machine is in the developing stage, but be sure that your help is truly appreciated and I'm going to test it!

This is my first machine, so I have lots of questions and doubts.

In the meantime I made the sensors holder....
El Ventu
 
Posts: 5
Joined: Wed Mar 06, 2024 8:44 am


Return to Feature Request

Who is online

Users browsing this forum: No registered users and 6 guests