|
下面讲自动攻丝机的原理。
之前在危机老师那里买了一个钻床头,本来计划是改成自动攻丝机的,但是材料不凑手,一直搁置了。前几天任务太紧,攻丝这个环节堵了好几万个,没办法,赶进度,要过年啊,不然年后我要忙晕了,于是在打公司的那几台离合器式攻丝机的主意。
危机老师当时给我的思路是,用台钻主轴带动一根1605的丝杆,然后用1:5的齿轮传动,这样刚好主轴转一圈,丝杆给进1mm,与这边工件的螺距对应。
我的思路是,干脆直接在主轴上接上螺杆,螺杆的螺距与工件螺距对应,反正下面丝锥的螺距也是1mm,直接用这个丝锥攻个对应螺距的孔,另外车一根螺杆就行了。
想好了就动手,于是就有了自动攻丝机的视频。上料系统是现成的,要做的就是电路部分,电路稍微复杂点,PLC控制电动机,Z轴与行程开关的位置给PLC正转和反转的信号。
先上程序。
#include<reg52.h>
sbit Y0=P1^0; // 送料气缸控制
sbit Y1=P1^1; // 电机正转
sbit Y2=P1^2; // 电机反转
sbit Y11=P3^7; // 计数器开关
sbit Y3=P1^3; // 暂时未定义
sbit X0=P0^0; // 启动开关
sbit X1=P0^1; // 锁止开关
sbit X2=P0^2; // 反转行程开关感知
sbit X3=P0^3; // 正转行程开关感知
void delay_ns(unsigned int);
void main()
{
EA=1; //开总中断
EX0=1; // 开外部中断0,
EX1=1; // 开外部中断1,
while (1)
{
while (1) //锁定程序,防止在没有按下开始开关的情况下误触发
{ //新增程序段
if (X1!=0) //新增程序段
break; //新增程序段
} //锁定程序,防止在没有按下开始开关的情况下误触发
if (X0==0)
{
Y11=0; //计数器触电闭合;
Y0=0; //送料气缸开始推料
delay_ns(400); //1、延时,等待加工工件完全送到位
Y11=1; //计数器触电断开
Y0=1; //断开电磁阀的电源,送料气缸缩回
// delay_ns(100); //延时,使得三位五通电磁阀恢复到正常状态
Y1=0; //电机正转,
while (1) //新增程序段
{ //新增程序段
if (X2==0) //如果X2=0,则说明攻丝已经到了预定深度,停止正转
{
Y1=1; //停机
break; //跳出循环
} //新增程序段
} //新增程序段
Y3=0; //下料
delay_ns(300); //延时,等待继电器完全恢复初始状态
Y3=1; // 下料气缸缩回
Y2=0; //电机反转
while (1) //新增程序段
{ //新增程序段
if (X3==0) //如果X3=0,则说明主轴已经上升到了预定高度,停止反转
{
Y2=1; //停机
break; //跳出循环
} //新增程序段
} //新增程序段
delay_ns(400); //延时,等待加工完毕。
}
}
}
void delay_ns(unsigned int xs)
{
unsigned int i,j;
for (i=xs;i>0;i--) //延时大约500毫秒,有待验证
for (j=110;j>0;j--); //11059326/12=921610.5个机器周期
}
void zhongduan () interrupt 0
{
Y0=1;
Y1=1;
Y2=1;
}
|
|