DIY
0
 
基于单片机控制的电火花打孔机
zhushiqing 2019-3-19 17:22:11

分享一下前段时间制作的单片机+步进电机控制的电火花打孔机,下面是源程序。电路设计当时不注意保存,现找不到了,但控制思路是利用高速比较器lm319(lm339速度达不到要求)检测火花输出端电压,以判断开路、短路及正常工作状态,将信号反馈给单片机的开路检测端和短路检测端,从而控制步进电机的精确进给。希望能给电火花打孔爱好者一点帮助。

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int

uchar code smg[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar c,n,t,m,tt=2,dd=2,fm=10;
uint a,b=24000,r,s,q;
sbit SN=P2^0; /*****电机受控信号**************************************/
sbit JGLSZ=P2^1; /*****加工量设置指示**************************************/
sbit MCSZ=P2^2; /*****脉冲设置指示**************************************/
sbit BJ=P2^3; /************报警蜂鸣*******************************/
sbit GW=P2^6; /*****数码管个位**************************************/
sbit SW=P2^7; /*****数码管十位**************************************/
sbit QR=P3^0; /*****设置确认键**************************************/
sbit YX=P3^4; /*****确认运行键**************************************/
sbit KLJC=P1^0;/*****开路检测位**************************************/
sbit DLJC=P1^1;/*****短路检测位**************************************/
sbit SXW=P1^2; /*****上限位,用于开机自动回原位设置**************************************/
sbit FX=P1^3; /*****方向给定输出端**************************************/
sbit JGL=P1^4; /*****进给脉冲输出端**************************************/
sbit SZ=P1^5; /*****工作进给量设定**************************************/
sbit HHMC=P1^6;/*****电火花脉冲输出端**************************************/
/********************************************************/
/*
/* 延时t毫秒
/* 11.0592MHz时钟,延时约0.13ms
/*
/********************************************************/
void delay(t)
{
uchar k;
while(t--)
{
for(k=0; k<15; k++)
{HHMC=0; }
}
}
/********************************************************/
/*
/* 报警蜂鸣
/*
/********************************************************/
void mfbj()
{
while(fm--)
{
BJ=1;
delay(1);
BJ=0;
delay(1);
}
}
/********************************************************/
/*
/* 延时t毫秒
/* 11.0592MHz时钟,延时约0.008ms
/*
/********************************************************/
void delay2(m)
{
uchar j;
while(m--)
{
for(j=0; j<1; j++)
{;}
}
}

/********************************************************/
/*
/*
/* 数码管显示
/*
/********************************************************/
void disp(n)
{
HHMC=0;
while(n--)
{
SW=1;
P0=smg[a/10];
delay(5);
SW=0;
GW=1;
P0=smg[a%10];
delay(5);
GW=0;

}
}
/********************************************************/
/*
/*
/* 加工量设置程序
/*
/********************************************************/
void shezh()
{
JGLSZ=1;/**********加工量设置指示灯开*******************/
HHMC=0; /***********设置时高压脉冲关闭******************************/
SN=0;
while(1)

{ if (YX==0)
break;
{ if(SZ==0)
delay(500);

if(SZ==0)a++;
if(SZ==0)mfbj();
if(a==61)
a=0;

if(QR==0)b=a*400;
if(QR==0)q=b;/**********工作短路回退的过程中防止回退过度*******************/
if(QR==0)mfbj();
disp(1);

}
}
mfbj();
JGLSZ=0; /**********加工量设置指示灯关*******************/
}
/********************************************************/
/*
/*
/* 脉冲百分比设置程序
/*
/********************************************************/
void shezh1()
{
a=0;
MCSZ=1; /*************脉冲设置指示灯开*********************/
HHMC=0;
SN=0;
while(1)

{ if (YX==0)
break;
{ if(SZ==0)
delay(500);

if(SZ==0)a++;
if(SZ==0)mfbj();
if(a==11)
a=0;
if(QR==0)mfbj();
{
if (a==1){tt=1;dd=5;} /*************频率4.93kh,占空比26%*********************/
else if(a==2){tt=1;dd=4;} /*************频率5.65kh,占空比30%*********************/
else if(a==3){tt=1;dd=3;} /*************频率6.63kh,占空比35%*********************/
else if(a==4){tt=1;dd=2;} /*************频率8kh,占空比43%*********************/
else if(a==5){tt=2;dd=3;} /*************频率5.65kh,占空比48%*********************/
else if(a==6){tt=2;dd=2;} /*************频率6.63kh,占空比53%*********************/
else if(a==7){tt=3;dd=2;} /*************频率4.93kh,占空比60%*********************/
else if(a==8){tt=2;dd=1;} /*************频率8kh,占空比63.5%*********************/
else if(a==9){tt=3;dd=1;} /*************频率6.63kh,占空比70%*********************/
else if(a==10){tt=4;dd=1;} /*************频率5.65kh,占空比75%*********************/

}

disp(1);

}
}
mfbj();
MCSZ=0;/*************脉冲设置指示灯关*********************/

}
/********************************************************/
/*
/*
/* 对刀置零
/*
/********************************************************/
void ddzl()
{
SN=1;

while(1)
{
if(DLJC==0||b==0)break; /******如果短路检测等于0或达到行程极限则停止*****/
if(b==0)
FX=0;
JGL=0;
delay2(1);
JGL=1;
delay2(1);
--b;
a=b/400;
HHMC=1; /*************高压测试脉冲开*********************/
}
HHMC=0; /*************高压测试脉冲关*********************/
a=0;
disp(1);
mfbj();
delay(1000) ; /*************对刀结束3声报警********************/
mfbj();
delay(1000) ;
mfbj();
delay(1000) ;
}
/********************************************************/
/*
/*
/* 复位回零
/*
/********************************************************/
void fwhl()
{
SN=1;
HHMC=0;
while(1) /*有条件不确定循环,使电机反转,上限位开关(SXW)接通则退出*/
{
if(SXW==0)break;
FX=1;
JGL=0;
delay2(1);
JGL=1;
delay2(1);
a=b/400;
}
delay(1000); /*************复位结束2声报警********************/
mfbj();
delay(1000) ;
mfbj();

}
/********************************************************/
/*
/*
/* 循环进给 ,每加工1mm,快速回退1次
/*
/********************************************************/
void yhjg()
{
SN=1;
HHMC=0;
while(1)
{
if(r==s+1200||SXW==0)break;/***快速回退量等于加工量另加3mm(400个脉冲1mm)************/
HHMC=0;
FX=1;
JGL=0;
delay2(1);
JGL=1;
delay2(1);
r++;
}
disp(1) ;
while(r--) /***快速进给量等于回退量************/
{
HHMC=0;
FX=0;
JGL=0;
delay2(1);
JGL=1;
delay2(1);
}
}
/********************************************************/
/*
/*
/* 正常工作
/* KLJC开路时为1,正常工作时为0;50v左右翻转,DLJC正常工作时为1,短路时为0,
/*翻转电压为30v左右。
/*要另加比较器探测。
/********************************************************/
void gongz()
{
while(1)
{
if(b==0||SXW==0||b==q)break;/******达到行程极限或上限位或短路回退到极限时则停止*****/
HHMC=1;
SN=1;
if(KLJC==1&&DLJC==1) /***开路检测开路和短路检测正常时单步进给*****/
{
HHMC=0;
FX=0;
JGL=0;
delay2(1);
JGL=1;
delay2(1);
--b;
++s; /******回退量,回退进给中使用*************/
if(s%400==0)
{HHMC=0;
yhjg();}
}
else if(KLJC==0&&DLJC==1) /***开路检测正常和短路检测正常时电机停止,给火花脉冲*****/
{
while(1)
{
if(KLJC==1||DLJC==0)break;
HHMC=1;
delay2(tt); /***变量tt和dd为脉冲宽度设置而设*****/
HHMC=0;
delay2(dd);
HHMC=~HHMC;
}
}
else if(DLJC==0) /***短路检测短路时单步回退*****/
{
FX=1;
JGL=0;
delay2(1);
JGL=1;
delay2(1);
++b;
--s; /***变量s为循环进给而设*****/
}
a=s/400;
disp(1);
}
}
/********************************************************/
/*
/*
/* 主程序入口
/*
/********************************************************/
void main()
{
P2=0; /**************输出口置0******************/
mfbj();mfbj();mfbj();mfbj();mfbj();
HHMC=0;
fwhl(); /**********上电自动回退到最上限**************************/
SN=0;
while(1)
{
if(SZ==0) break;
disp(1); /**********启用显示器*****************************/
}
ddzl(); /***********用设置键调用对刀程序***********************************/
SN=0;

shezh(); /**********设置加工深度***************************/
delay(1500);
shezh1(); /**********设置脉冲占空比**********************************/
while(b--)
{
gongz();
} /*********正常加工状态**********************************/

pic

 

pic

 

pic

 

pic


  
  

[修改于 2 天前 - 2019-03-30 00:24:05]

2019-3-19 19:16:27
1楼
0

看起来,如果火花熄灭了,就要减小间隙直到短路,然后缓慢拉开一点。这个减小间隙的过程如何防止电极对工件造成冲撞呢?

2楼
0
引用:虎哥 发表于1 楼的内容:
看起来,如果火花熄灭了,就要减小间隙直到短路,然后缓慢拉开一点。这个减小间隙的过程如何防止电极对工件.....

起弧是不是能借鉴一下氩弧焊机的起弧方式,话说原理我不是很懂

电极用钍钨合金针,间隙调整到引弧范围内再打开开关

[修改于 12 天前 - 2019-03-20 09:03:00]

zhushiqing(作者)
3楼
0

不需要减至短路状态就可正常放电了,实际上检测装置检测的是3个状态:开路状态(满电压80v左右,向工件进给);正常放电状态(30-80v之间,进给停止,正常放电);短路状态(30v以下,回退)。只是火花放电太复杂,无法避免短路出现。至于你说的对工件冲击那是不用当心的,因为进给电机还不到短路时就停止进给了。

4楼
0
引用:zhushiqing 发表于3 楼的内容:
不需要减至短路状态就可正常放电了,实际上检测装置检测的是3个状态:开路状态(满电压80v左右,向工件.....

谢谢指教。

zhushiqing(作者)
5楼
0


 

  

pic

 

pic

 

pic

 

pic

 

[修改于 2 天前 - 2019-03-30 00:22:58]

zhushiqing(作者)
6楼
0

发贴时忘了传火花打孔的相关效果图片了,现在传上

+1  美国28注册币    暮光之羽   2019-03-21   赞扬
2019-3-22 11:31:28
7楼
1

老板   拍一下电容   

2019-3-23 21:13:35
8楼
1

做完善点出套件。

zhushiqing(作者)
9楼
0

本机因是高频火花机,不用rc振荡,所以电容不是关键,图上用的电容是5uf的电磁炉电容。

zhushiqing(作者)
10楼
0

刚开始确有找工厂代工成品的想法,但我们这找加工厂商不好找,也就搁置了,就当自己的一兴趣制作算了

2019-3-29 09:11:02
11楼
0

相当牛叉 给刀具开V靠谱 俺也做一个耍耍

12楼
0

楼主的电火花打火效果比我的好很多,想看看功率输出部分是怎么做的。

13楼
0

楼主用的是普通的自来水吗?

之前我也试过火花打孔,但是如果用自来水的话,貌似是因为自来水电导率太高,只有电解的气泡,没有火花……后来换了瓶装的娃哈哈纯净水才能正常打火……然后水的成本太高以至于根本不敢考虑给大件打孔

楼主是咋解决这个问题的?

14楼
0
引用:三水合番 发表于13 楼的内容:
楼主用的是普通的自来水吗?之前我也试过火花打孔,但是如果用自来水的话,貌似是因为自来水电导率太高,只.....

那就氪金大法,氪个RO鸡搞水顺面饮用水的问题也一并解决了😁

想参与大家的讨论?现在就 登录 或者 注册。

Github  

美国28注册研究院 (c)2001-2019

蜀ICP备11004945号-2 川公网安备51010802000058号